From eb1f1b0a341cbe2c75d8f24b2dc62f4cad05dcec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodo=20M=C3=B6ller?= Date: Wed, 29 Nov 2000 19:26:33 +0000 Subject: Fix BN_kronecker so that it works correctly if 'a' is negative (we need the two's complement of BN_lsw then). --- crypto/bn/bn_kron.c | 4 ++-- crypto/bn/bntest.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crypto/bn/bn_kron.c b/crypto/bn/bn_kron.c index 20b593e679..0dd8a194cb 100644 --- a/crypto/bn/bn_kron.c +++ b/crypto/bn/bn_kron.c @@ -65,7 +65,7 @@ int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { int i; - int ret; + int ret = -2; /* avoid 'uninitialized' warning */ int err = 0; BIGNUM *A, *B, *tmp; /* In 'tab', only odd-indexed entries are relevant: @@ -165,7 +165,7 @@ int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) /* Cohen's step 4: */ /* multiply 'ret' by $(-1)^{(A-1)(B-1)/4}$ */ - if (BN_lsw(A) & BN_lsw(B) & 2) + if ((A->neg ? ~BN_lsw(A) : BN_lsw(A)) & BN_lsw(B) & 2) ret = -ret; /* (A, B) := (B mod |A|, |A|) */ diff --git a/crypto/bn/bntest.c b/crypto/bn/bntest.c index 9e478dfe24..a664f3b91a 100644 --- a/crypto/bn/bntest.c +++ b/crypto/bn/bntest.c @@ -949,8 +949,8 @@ int test_kron(BIO *bp, BN_CTX *ctx) for (i = 0; i < num0; i++) { if (!BN_rand(a, 512, 0, 0)) goto err; - if (!BN_nnmod(a, a, b, ctx)) goto err; - + a->neg = rand_neg(); + /* r := (b-1)/2 (note that b is odd) */ if (!BN_copy(r, b)) goto err; if (!BN_sub_word(r, 1)) goto err; -- cgit v1.2.3