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

diff --git a/CHANGES b/CHANGES
index 21b90ed..719145e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
      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 1fd0206..9addaf1 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 9787a65..5fb8090 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);
                }