X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fbn%2Fbn_gf2m.c;h=b2222a06c93f868ce8b1da6f90e170c59cf997af;hb=7b3e11c54466f1da8b707c932e308d345fd61101;hp=2cd93ddc76cf3bdadccd5640606fa5ceb6f82ba0;hpb=0a06ad76a11d0952230a2a1f60c4112ff25255ce;p=oweals%2Fopenssl.git diff --git a/crypto/bn/bn_gf2m.c b/crypto/bn/bn_gf2m.c index 2cd93ddc76..b2222a06c9 100644 --- a/crypto/bn/bn_gf2m.c +++ b/crypto/bn/bn_gf2m.c @@ -525,7 +525,7 @@ err: */ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) { - BIGNUM *b, *c, *u, *v, *tmp; + BIGNUM *b, *c = NULL, *u = NULL, *v = NULL, *tmp; int ret = 0; bn_check_top(a); @@ -631,8 +631,11 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) } if (ubits==vbits) { - bn_correct_top(u); - ubits = BN_num_bits(u); + BN_ULONG ul; + int utop = (ubits-1)/BN_BITS2; + + while ((ul=udp[utop])==0 && utop) utop--; + ubits = utop*BN_BITS2 + BN_num_bits_word(ul); } } bn_correct_top(b); @@ -646,6 +649,8 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) err: #ifdef BN_DEBUG /* BN_CTX_end would complain about the expanded form */ bn_correct_top(c); + bn_correct_top(u); + bn_correct_top(v); #endif BN_CTX_end(ctx); return ret;