This rewrites two "for" loops in BN_rshift() - equality with zero is
generally a more efficient comparison than comparing two integers, and the first of these two loops was off-by-one (copying one too many values). This change also removes a superfluous assignment that would set an unused word to zero (and potentially allow an overrun in some cases). Submitted by: Nils Larsch Reviewed by: Geoff Thorpe
This commit is contained in:
parent
37af03d311
commit
9dde17e8b4
@ -200,13 +200,13 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
|
|||||||
|
|
||||||
if (rb == 0)
|
if (rb == 0)
|
||||||
{
|
{
|
||||||
for (i=j+1; i > 0; i--)
|
for (i=j; i != 0; i--)
|
||||||
*(t++)= *(f++);
|
*(t++)= *(f++);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
l= *(f++);
|
l= *(f++);
|
||||||
for (i=1; i<j; i++)
|
for (i=j-1; i != 0; i--)
|
||||||
{
|
{
|
||||||
tmp =(l>>rb)&BN_MASK2;
|
tmp =(l>>rb)&BN_MASK2;
|
||||||
l= *(f++);
|
l= *(f++);
|
||||||
@ -214,7 +214,6 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
|
|||||||
}
|
}
|
||||||
*(t++) =(l>>rb)&BN_MASK2;
|
*(t++) =(l>>rb)&BN_MASK2;
|
||||||
}
|
}
|
||||||
*t=0;
|
|
||||||
bn_correct_top(r);
|
bn_correct_top(r);
|
||||||
bn_check_top(r);
|
bn_check_top(r);
|
||||||
return(1);
|
return(1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user