Loading crypto/bn/bn_add.c +46 −45 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { const BIGNUM *tmp; int a_neg = a->neg; int a_neg = a->neg, ret; bn_check_top(a); bn_check_top(b); Loading Loading @@ -95,21 +95,17 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) return(1); } if (!BN_uadd(r,a,b)) return(0); if (a_neg) /* both are neg */ r->neg=1; else r->neg=0; ret = BN_uadd(r,a,b); r->neg = a_neg; bn_check_top(r); return(1); return ret; } /* unsigned add of b to a, r must be large enough */ /* unsigned add of b to a */ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { register int i; int max,min; BN_ULONG *ap,*bp,*rp,carry,t1; int max,min,dif; BN_ULONG *ap,*bp,*rp,carry,t1,t2; const BIGNUM *tmp; bn_check_top(a); Loading @@ -119,9 +115,10 @@ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { tmp=a; a=b; b=tmp; } max = a->top; min = b->top; dif = max - min; if (bn_wexpand(r,max+1) == NULL) return(0); return 0; r->top=max; Loading @@ -129,47 +126,46 @@ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) ap=a->d; bp=b->d; rp=r->d; carry=0; carry=bn_add_words(rp,ap,bp,min); rp+=min; ap+=min; bp+=min; i=min; if (carry) { while (i < max) while (dif) { i++; dif--; t1 = *(ap++); if ((*(rp++)=(t1+1)&BN_MASK2) >= t1) t2 = (t1+1) & BN_MASK2; *(rp++) = t2; if (t2) { carry=0; break; } } if ((i >= max) && carry) if (carry) { *(rp++)=1; /* carry != 0 => dif == 0 */ *rp = 1; r->top++; } } if (rp != ap) { for (; i<max; i++) if (dif && rp != ap) while (dif--) /* copy remaining words if ap != rp */ *(rp++) = *(ap++); } /* memcpy(rp,ap,sizeof(*ap)*(max-i));*/ r->neg = 0; bn_check_top(r); return(1); return 1; } /* unsigned subtraction of b from a, a must be larger than b. */ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { int max,min; int max,min,dif; register BN_ULONG t1,t2,*ap,*bp,*rp; int i,carry; #if defined(IRIX_CC_BUG) && !defined(LINT) Loading @@ -179,14 +175,16 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) bn_check_top(a); bn_check_top(b); if (a->top < b->top) /* hmm... should not be happening */ max = a->top; min = b->top; dif = max - min; if (dif < 0) /* hmm... should not be happening */ { BNerr(BN_F_BN_USUB,BN_R_ARG2_LT_ARG3); return(0); } max=a->top; min=b->top; if (bn_wexpand(r,max) == NULL) return(0); ap=a->d; Loading @@ -195,7 +193,7 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) #if 1 carry=0; for (i=0; i<min; i++) for (i = min; i != 0; i--) { t1= *(ap++); t2= *(bp++); Loading @@ -219,17 +217,20 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) ap+=min; bp+=min; rp+=min; i=min; #endif if (carry) /* subtracted */ { while (i < max) if (!dif) /* error: a < b */ return 0; while (dif) { i++; dif--; t1 = *(ap++); t2 = (t1-1)&BN_MASK2; *(rp++) = t2; if (t1 > t2) break; if (t1) break; } } #if 0 Loading @@ -239,13 +240,13 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { for (;;) { if (i++ >= max) break; if (!dif--) break; rp[0]=ap[0]; if (i++ >= max) break; if (!dif--) break; rp[1]=ap[1]; if (i++ >= max) break; if (!dif--) break; rp[2]=ap[2]; if (i++ >= max) break; if (!dif--) break; rp[3]=ap[3]; rp+=4; ap+=4; Loading Loading
crypto/bn/bn_add.c +46 −45 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { const BIGNUM *tmp; int a_neg = a->neg; int a_neg = a->neg, ret; bn_check_top(a); bn_check_top(b); Loading Loading @@ -95,21 +95,17 @@ int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) return(1); } if (!BN_uadd(r,a,b)) return(0); if (a_neg) /* both are neg */ r->neg=1; else r->neg=0; ret = BN_uadd(r,a,b); r->neg = a_neg; bn_check_top(r); return(1); return ret; } /* unsigned add of b to a, r must be large enough */ /* unsigned add of b to a */ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { register int i; int max,min; BN_ULONG *ap,*bp,*rp,carry,t1; int max,min,dif; BN_ULONG *ap,*bp,*rp,carry,t1,t2; const BIGNUM *tmp; bn_check_top(a); Loading @@ -119,9 +115,10 @@ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { tmp=a; a=b; b=tmp; } max = a->top; min = b->top; dif = max - min; if (bn_wexpand(r,max+1) == NULL) return(0); return 0; r->top=max; Loading @@ -129,47 +126,46 @@ int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) ap=a->d; bp=b->d; rp=r->d; carry=0; carry=bn_add_words(rp,ap,bp,min); rp+=min; ap+=min; bp+=min; i=min; if (carry) { while (i < max) while (dif) { i++; dif--; t1 = *(ap++); if ((*(rp++)=(t1+1)&BN_MASK2) >= t1) t2 = (t1+1) & BN_MASK2; *(rp++) = t2; if (t2) { carry=0; break; } } if ((i >= max) && carry) if (carry) { *(rp++)=1; /* carry != 0 => dif == 0 */ *rp = 1; r->top++; } } if (rp != ap) { for (; i<max; i++) if (dif && rp != ap) while (dif--) /* copy remaining words if ap != rp */ *(rp++) = *(ap++); } /* memcpy(rp,ap,sizeof(*ap)*(max-i));*/ r->neg = 0; bn_check_top(r); return(1); return 1; } /* unsigned subtraction of b from a, a must be larger than b. */ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { int max,min; int max,min,dif; register BN_ULONG t1,t2,*ap,*bp,*rp; int i,carry; #if defined(IRIX_CC_BUG) && !defined(LINT) Loading @@ -179,14 +175,16 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) bn_check_top(a); bn_check_top(b); if (a->top < b->top) /* hmm... should not be happening */ max = a->top; min = b->top; dif = max - min; if (dif < 0) /* hmm... should not be happening */ { BNerr(BN_F_BN_USUB,BN_R_ARG2_LT_ARG3); return(0); } max=a->top; min=b->top; if (bn_wexpand(r,max) == NULL) return(0); ap=a->d; Loading @@ -195,7 +193,7 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) #if 1 carry=0; for (i=0; i<min; i++) for (i = min; i != 0; i--) { t1= *(ap++); t2= *(bp++); Loading @@ -219,17 +217,20 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) ap+=min; bp+=min; rp+=min; i=min; #endif if (carry) /* subtracted */ { while (i < max) if (!dif) /* error: a < b */ return 0; while (dif) { i++; dif--; t1 = *(ap++); t2 = (t1-1)&BN_MASK2; *(rp++) = t2; if (t1 > t2) break; if (t1) break; } } #if 0 Loading @@ -239,13 +240,13 @@ int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b) { for (;;) { if (i++ >= max) break; if (!dif--) break; rp[0]=ap[0]; if (i++ >= max) break; if (!dif--) break; rp[1]=ap[1]; if (i++ >= max) break; if (!dif--) break; rp[2]=ap[2]; if (i++ >= max) break; if (!dif--) break; rp[3]=ap[3]; rp+=4; ap+=4; Loading