bn_mul_recursive doesn't handle all cases correctly, which results in

BN_mul failures at certain key-length mixes [from HEAD].
PR: 1427
This commit is contained in:
Andy Polyakov 2007-07-08 18:55:51 +00:00
parent 0225c7a41e
commit 6c3fca2b10

View file

@ -655,16 +655,16 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n,
for (;;)
{
i/=2;
if (i < tna && i < tnb)
if (i <= tna && tna == tnb)
{
bn_mul_part_recursive(&(r[n2]),
bn_mul_recursive(&(r[n2]),
&(a[n]),&(b[n]),
i,tna-i,tnb-i,p);
break;
}
else if (i <= tna && i <= tnb)
else if (i < tna || i < tnb)
{
bn_mul_recursive(&(r[n2]),
bn_mul_part_recursive(&(r[n2]),
&(a[n]),&(b[n]),
i,tna-i,tnb-i,p);
break;