Fix a bug which caused BN_div to produce the
wrong result if rm==num and num < 0.
This commit is contained in:
parent
bf401a2aef
commit
3d2e469cfa
6
CHANGES
6
CHANGES
@ -3,6 +3,12 @@
|
|||||||
|
|
||||||
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
|
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
|
||||||
|
|
||||||
|
*) In BN_div() keep a copy of the sign of 'num' before writing the
|
||||||
|
result to 'rm' because if rm==num the value will be overwritten
|
||||||
|
and produce the wrong result if 'num' is negative: this caused
|
||||||
|
problems with BN_mod() and BN_nnmod().
|
||||||
|
[Steve Henson]
|
||||||
|
|
||||||
*) Function OCSP_request_verify(). This checks the signature on an
|
*) Function OCSP_request_verify(). This checks the signature on an
|
||||||
OCSP request and verifies the signer certificate. The signer
|
OCSP request and verifies the signer certificate. The signer
|
||||||
certificate is just checked for a generic purpose and OCSP request
|
certificate is just checked for a generic purpose and OCSP request
|
||||||
|
@ -342,9 +342,13 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
|
|||||||
}
|
}
|
||||||
if (rm != NULL)
|
if (rm != NULL)
|
||||||
{
|
{
|
||||||
|
/* Keep a copy of the neg flag in num because if rm==num
|
||||||
|
* BN_rshift() will overwrite it.
|
||||||
|
*/
|
||||||
|
int neg = num->neg;
|
||||||
BN_rshift(rm,snum,norm_shift);
|
BN_rshift(rm,snum,norm_shift);
|
||||||
if (!BN_is_zero(rm))
|
if (!BN_is_zero(rm))
|
||||||
rm->neg = num->neg;
|
rm->neg = neg;
|
||||||
}
|
}
|
||||||
BN_CTX_end(ctx);
|
BN_CTX_end(ctx);
|
||||||
return(1);
|
return(1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user