Correctly detect b < a in BN_usub().
authorjsing <jsing@openbsd.org>
Tue, 31 Jan 2023 05:16:52 +0000 (05:16 +0000)
committerjsing <jsing@openbsd.org>
Tue, 31 Jan 2023 05:16:52 +0000 (05:16 +0000)
commit1c0ab957bfc712d3c5dc9e69f5ded44d02ccbd3c
treefbbcac82974db4459522a6bf17c04fec8bfaff41
parentb8a44de62f741165dc0bfd7a0e77a0378b68a6a1
Correctly detect b < a in BN_usub().

BN_usub() requires that a >= b and should return an error in the case that
b < a. This is currently only detected by checking the number of words in
a versus b - if they have the same number of words, the top word is not
checked and b < a, which then succeeds and produces an incorrect result.

Fix this by checking for the case where a and b have an equal number of
words, yet there is a borrow returned from bn_sub_words().

ok miod@ tb@
lib/libcrypto/bn/bn_add.c
lib/libcrypto/man/BN_add.3