don't violate the bn_check_top assertion in BN_mod_inverse_no_branch()
[openssl.git] / crypto / bn / bn_div.c
index 1fd0206e1da79f7edf4da477616264ab35292267..257fe0ce01b2f19fdfb10062be775fa852fd9dc1 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);
                }
@@ -618,6 +618,7 @@ X) -> 0x%08X\n",
                        rm->neg = neg;
                bn_check_top(rm);
                }
+       bn_correct_top(res);
        BN_CTX_end(ctx);
        return(1);
 err: