avoid potential infinite loop in final reduction round of BN_GF2m_mod_arr()
authorBodo Möller <bodo@openssl.org>
Mon, 23 Jun 2008 20:46:24 +0000 (20:46 +0000)
committerBodo Möller <bodo@openssl.org>
Mon, 23 Jun 2008 20:46:24 +0000 (20:46 +0000)
Submitted by: Huang Ying
Reviewed by: Douglas Stebila

CHANGES
crypto/bn/bn_gf2m.c

diff --git a/CHANGES b/CHANGES
index b0359e5b4369bb58af2151668426f513f6198277..f2e448752950b31ebbb5109b66daff9b5ff79104 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
  Changes between 0.9.8h and 0.9.8i  [xx XXX xxxx]
 
+  *) Fix BN_GF2m_mod_arr() top-bit cleanup code.
+     [Huang Ying]
+
   *) Expand ENGINE to support engine supplied SSL client certificate functions.
 
      This work was sponsored by Logica.
      [Steve Henson]
 
-  *) Add CryptoAPI ENGINE to support use of RSA and DSA keys held in Windows         keystores. Support for SSL/TLS client authentication too.
+  *) Add CryptoAPI ENGINE to support use of RSA and DSA keys held in Windows
+     keystores. Support for SSL/TLS client authentication too.
      Not compiled unless enable-capieng specified to Configure.
 
      This work was sponsored by Logica.
index be409e1187946efe7264e7ac9702e36383642b49..f7551dacd91d08372b2f85f5bea5d4e4dbba37c9 100644 (file)
@@ -322,7 +322,11 @@ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[])
                if (zz == 0) break;
                d1 = BN_BITS2 - d0;
                
-               if (d0) z[dN] = (z[dN] << d1) >> d1; /* clear up the top d1 bits */
+               /* clear up the top d1 bits */
+               if (d0)
+                       z[dN] = (z[dN] << d1) >> d1;
+               else
+                       z[dN] = 0;
                z[0] ^= zz; /* reduction t^0 component */
 
                for (k = 1; p[k] != 0; k++)