Commit 7f7b8d68 authored by Bodo Möller's avatar Bodo Möller
Browse files

BN_CTX-related fixes.

parent bb7e632a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4,6 +4,10 @@

 Changes between 0.9.6 and 0.9.7  [xx XXX 2000]

  *) Increase BN_CTX_NUM (the number of BIGNUMs in a BN_CTX) to 16.
     The previous value, 12, was not always sufficient for BN_mod_exp().
     [Bodo Moeller]

  *) Make DSO load along a path given through an environment variable
     (SHLIB_PATH) with shl_load().
     [Richard Levitte]
+1 −1
Original line number Diff line number Diff line
@@ -239,7 +239,7 @@ typedef struct bignum_st
	} BIGNUM;

/* Used for temp variables */
#define BN_CTX_NUM	12
#define BN_CTX_NUM	16
#define BN_CTX_NUM_POS	12
typedef struct bignum_ctx
	{
+6 −0
Original line number Diff line number Diff line
@@ -112,8 +112,14 @@ void BN_CTX_start(BN_CTX *ctx)
	ctx->depth++;
	}


BIGNUM *BN_CTX_get(BN_CTX *ctx)
	{
	/* 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
	 * only the last return value.)
	 */
	if (ctx->depth > BN_CTX_NUM_POS || ctx->tos >= BN_CTX_NUM)
		{
		if (!ctx->too_many)
+2 −2
Original line number Diff line number Diff line
@@ -180,13 +180,13 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,

	BN_CTX_start(ctx);
	tmp=BN_CTX_get(ctx);
	tmp->neg=0;
	snum=BN_CTX_get(ctx);
	sdiv=BN_CTX_get(ctx);
	if (dv == NULL)
		res=BN_CTX_get(ctx);
	else	res=dv;
	if (res == NULL) goto err;
	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);