/* unsigned add of b to a */int BN_uadd(BIGNUM *r, const BIGNUM *a, const
BIGNUM *b) { int max,min,dif; BN_ULONG *ap,*bp,*rp,carry,t1,t2;
const BIGNUM *tmp;
bn_check_top(a); bn_check_top(b);
if (a->top < b->top) { tmp=a; a=b; b=tmp; } max = a->top;
min = b->top; dif = max - min;
if (bn_wexpand(r,max+1) == NULL) return 0;
r->top=max;
ap=a->d; bp=b->d; rp=r->d;
carry=bn_add_words(rp,ap,bp,min); rp+=min;
ap+=min;//////////HERE,REMOVE THE NEXT LINE. bp is not referenced again.
bp+=min;
if (carry) { while (dif)
{ dif--; t1 = *(ap++);
t2 = (t1+1) & BN_MASK2; *(rp++) = t2; if (t2)
{ carry=0;
break; } }
if (carry) { /* carry != 0
=> dif == 0 */ *rp = 1; r->top++;
} } if (dif && rp != ap) while
(dif--) /* copy remaining words if ap != rp */
*(rp++) = *(ap++); r->neg = 0; bn_check_top(r); return 1;
}
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [email protected]
Automated List Manager [email protected]