bn/bn_lib.c: remove bn_check_top from bn_expand2.
authorAndy Polyakov <appro@openssl.org>
Fri, 6 Jul 2018 11:16:40 +0000 (13:16 +0200)
committerAndy Polyakov <appro@openssl.org>
Wed, 1 Aug 2018 14:14:16 +0000 (16:14 +0200)
Trouble is that addition is postponing expansion till carry is
calculated, and if addition carries, top word can be zero, which
triggers assertion in bn_check_top.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6810)

(cherry picked from commit e42395e637c3507b80b25c7ed63236898822d2f1)

Resolved conflicts:
crypto/bn/bn_lib.c

crypto/bn/bn_lib.c

index f49c61cb5d2d0a7580f483e28cce717bda7ebfc0..7ee80f4449e1bdc9594ad2bfce5a9fefc9e3a83c 100644 (file)
@@ -263,8 +263,6 @@ static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words)
     const BN_ULONG *B;
     int i;
 
-    bn_check_top(b);
-
     if (words > (INT_MAX / (4 * BN_BITS2))) {
         BNerr(BN_F_BN_EXPAND_INTERNAL, BN_R_BIGNUM_TOO_LONG);
         return NULL;
@@ -398,8 +396,6 @@ BIGNUM *bn_dup_expand(const BIGNUM *b, int words)
 
 BIGNUM *bn_expand2(BIGNUM *b, int words)
 {
-    bn_check_top(b);
-
     if (words > b->dmax) {
         BN_ULONG *a = bn_expand_internal(b, words);
         if (!a)
@@ -433,7 +429,6 @@ BIGNUM *bn_expand2(BIGNUM *b, int words)
         assert(A == &(b->d[b->dmax]));
     }
 #endif
-    bn_check_top(b);
     return b;
 }