Refactor BN_uadd() and BN_usub().
authorjsing <jsing@openbsd.org>
Thu, 2 Feb 2023 18:39:26 +0000 (18:39 +0000)
committerjsing <jsing@openbsd.org>
Thu, 2 Feb 2023 18:39:26 +0000 (18:39 +0000)
commit37c495458b48d3b5213976a88978cadadf00bcd7
tree451fb36f13795710676dcaeb073d4867f50f7e0e
parent82ca15aededdca58c08eeeeeda7c8725861be87a
Refactor BN_uadd() and BN_usub().

Unlike bn_add_words()/bn_sub_words(), the s2n-bignum bignum_add() and
bignum_sub() functions correctly handle inputs with differing word
lengths. This means that they can be called directly, without needing to
fix up any remaining words manually.

Split BN_uadd() in two - the default bn_add() implementation calls
bn_add_words(), before handling the carry for any remaining words.
Likewise split BN_usub() in two - the default bn_sub() implementation
calls bn_sub_words(), before handling the borrow for any remaining words.

On amd64, provide an implementation of bn_add() that calls s2n-bignum's
bignum_add() directly, similarly with an implementation of bn_sub() that
calls s2n-bignum's bignum_sub() directly.

ok tb@
lib/libcrypto/bn/arch/amd64/bn_arch.c
lib/libcrypto/bn/arch/amd64/bn_arch.h
lib/libcrypto/bn/bn_add.c