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:
Geoff Thorpe 2003-11-13 15:03:14 +00:00
parent 37af03d311
commit 9dde17e8b4

View File

@ -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);