From bc5f2740d2a427d5e16bfb12aa8b70d5a5adcfc8 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Bodo=20M=C3=B6ller?= <bodo@openssl.org>
Date: Thu, 7 Dec 2000 07:55:26 +0000
Subject: [PATCH] Move 'q->neg = 0' to those places where it is needed (just in
 cases someone uses a negative modulus)

---
 crypto/bn/bn_sqrt.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/crypto/bn/bn_sqrt.c b/crypto/bn/bn_sqrt.c
index 6d50b5d895..6959cc5f6f 100644
--- a/crypto/bn/bn_sqrt.c
+++ b/crypto/bn/bn_sqrt.c
@@ -134,9 +134,11 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 	while (!BN_is_bit_set(p, e))
 		e++;
 	if (e > 2)
+		{
 		/* we don't need this  q  if  e = 1 or 2 */
 		if (!BN_rshift(q, p, e)) goto end;
-	q->neg = 0;
+		q->neg = 0;
+		}
 
 	if (e == 1)
 		{
@@ -148,6 +150,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 		 * so we can use exponent  (p+1)/4,  i.e.  (p-3)/4 + 1.
 		 */
 		if (!BN_rshift(q, p, 2)) goto end;
+		q->neg = 0;
 		if (!BN_add_word(q, 1)) goto end;
 		if (!BN_mod_exp(ret, a, q, p, ctx)) goto end;
 		err = 0;
@@ -194,6 +197,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 
 		/* b := (2*a)^((p-5)/8) */
 		if (!BN_rshift(q, p, 3)) goto end;
+		q->neg = 0;
 		if (!BN_mod_exp(b, t, q, p, ctx)) goto end;
 
 		/* y := b^2 */
-- 
2.25.1