Document a change I'd already made, and at the same time, correct the
authorGeoff Thorpe <geoff@openssl.org>
Sat, 13 Mar 2004 22:10:15 +0000 (22:10 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Sat, 13 Mar 2004 22:10:15 +0000 (22:10 +0000)
change to work properly; BN_zero() should set 'neg' to zero as well as
'top' to match the behaviour of BN_new().

CHANGES
crypto/bn/bn_ctx.c
crypto/bn/bn_div.c

diff --git a/CHANGES b/CHANGES
index 22449a3ac919e710dfb6ecff5e5ceb160489bc82..e675c90309ce6281d5cc66b841ef5cd6c14588cd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.7c and 0.9.8  [xx XXX xxxx]
 
+  *) BN_CTX_get() should return zero-valued bignums, providing the same
+     initialised value as BN_new().
+     [Geoff Thorpe, suggested by Ulf Möller]
+
   *) Support for inhibitAnyPolicy certificate extension.
      [Steve Henson]
 
@@ -21,7 +25,7 @@
      some point, these tighter rules will become openssl's default to improve
      maintainability, though the assert()s and other overheads will remain only
      in debugging configurations. See bn.h for more details.
-     [Geoff Thorpe]
+     [Geoff Thorpe, Nils Larsch, Ulf Möller]
 
   *) BN_CTX_init() has been deprecated, as BN_CTX is an opaque structure
      that can only be obtained through BN_CTX_new() (which implicitly
index 9366ce6d7f2a8165bbbeabfd975bfbce6dda7398..f48055b268b9761ced40a9e8e274df64ef5adcc6 100644 (file)
@@ -140,6 +140,7 @@ void BN_CTX_start(BN_CTX *ctx)
 
 BIGNUM *BN_CTX_get(BN_CTX *ctx)
        {
+       BIGNUM *ret;
        /* Note: If BN_CTX_get is ever changed to allocate BIGNUMs dynamically,
         * make sure that if BN_CTX_get fails once it will return NULL again
         * until BN_CTX_end is called.  (This is so that callers have to check
@@ -155,9 +156,10 @@ BIGNUM *BN_CTX_get(BN_CTX *ctx)
                        }
                return NULL;
                }
+       ret = ctx->bn + (ctx->tos++);
        /* always return a 'zeroed' bignum */
-       ctx->bn[ctx->tos].top = 0;
-       return (&(ctx->bn[ctx->tos++]));
+       BN_zero(ret);
+       return ret;
        }
 
 void BN_CTX_end(BN_CTX *ctx)
index 556fcda1e3686d88745550a8099b501ed81be154..3b4392955e070e9d97e48b581d8079c34cfc9439 100644 (file)
@@ -214,7 +214,6 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
                res=BN_CTX_get(ctx);
        else    res=dv;
        if (sdiv == NULL || res == NULL) goto err;
-       tmp->neg=0;
 
        /* First we normalise the numbers */
        norm_shift=BN_BITS2-((BN_num_bits(divisor))%BN_BITS2);