From 3d2e469cfab1ea3a0515bfe006319210da3ff4fb Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Wed, 28 Feb 2001 00:51:48 +0000 Subject: Fix a bug which caused BN_div to produce the wrong result if rm==num and num < 0. --- crypto/bn/bn_div.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'crypto/bn/bn_div.c') diff --git a/crypto/bn/bn_div.c b/crypto/bn/bn_div.c index 7bee1dcc72..bbd0994008 100644 --- a/crypto/bn/bn_div.c +++ b/crypto/bn/bn_div.c @@ -342,9 +342,13 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor, } 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); if (!BN_is_zero(rm)) - rm->neg = num->neg; + rm->neg = neg; } BN_CTX_end(ctx); return(1); -- cgit v1.2.3