make BN_FLG_CONSTTIME semantics more fool-proof
authorBodo Möller <bodo@openssl.org>
Wed, 28 Mar 2007 18:44:01 +0000 (18:44 +0000)
committerBodo Möller <bodo@openssl.org>
Wed, 28 Mar 2007 18:44:01 +0000 (18:44 +0000)
CHANGES
crypto/bn/bn_div.c
crypto/bn/bn_gcd.c

diff --git a/CHANGES b/CHANGES
index f7fbb904f3aa1b3505897c1201b1136c90fa6d05..433937e50e9a2abab0064c5013debb0249d8c389 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -14,9 +14,9 @@
      BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
      respectively, which are slower, but avoid the security-relevant
      conditional branches.  These are automatically called by BN_div()
-     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for the
-     modulus.  Also, BN_is_bit_set() has been changed to remove a
-     conditional branch.
+     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one
+     of the input BIGNUMs.  Also, BN_is_bit_set() has been changed to
+     remove a conditional branch.
 
      BN_FLG_CONSTTIME is the new name for the previous
      BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
index 1fd0206e1da79f7edf4da477616264ab35292267..9addaf158f53f724102292f58f19788f7a7655e7 100644 (file)
@@ -185,7 +185,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
        BN_ULONG d0,d1;
        int num_n,div_n;
 
-       if (BN_get_flags(num, BN_FLG_CONSTTIME) != 0)
+       if ((BN_get_flags(num, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(divisor, BN_FLG_CONSTTIME) != 0))
                {
                return BN_div_no_branch(dv, rm, num, divisor, ctx);
                }
index 9787a65f949f1a48f8bffd9812b50935d29635bc..5fb8090c5278986a6d528fa702bab8367c2e3e48 100644 (file)
@@ -210,7 +210,7 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
        BIGNUM *ret=NULL;
        int sign;
 
-       if (BN_get_flags(n, BN_FLG_CONSTTIME) != 0)
+       if ((BN_get_flags(a, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(n, BN_FLG_CONSTTIME) != 0))
                {
                return BN_mod_inverse_no_branch(in, a, n, ctx);
                }