BN_CTX-related fixes.
This commit is contained in:
parent
bb7e632aef
commit
7f7b8d6871
4
CHANGES
4
CHANGES
@ -4,6 +4,10 @@
|
|||||||
|
|
||||||
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
|
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
|
*) Make DSO load along a path given through an environment variable
|
||||||
(SHLIB_PATH) with shl_load().
|
(SHLIB_PATH) with shl_load().
|
||||||
[Richard Levitte]
|
[Richard Levitte]
|
||||||
|
@ -239,7 +239,7 @@ typedef struct bignum_st
|
|||||||
} BIGNUM;
|
} BIGNUM;
|
||||||
|
|
||||||
/* Used for temp variables */
|
/* Used for temp variables */
|
||||||
#define BN_CTX_NUM 12
|
#define BN_CTX_NUM 16
|
||||||
#define BN_CTX_NUM_POS 12
|
#define BN_CTX_NUM_POS 12
|
||||||
typedef struct bignum_ctx
|
typedef struct bignum_ctx
|
||||||
{
|
{
|
||||||
|
@ -112,8 +112,14 @@ void BN_CTX_start(BN_CTX *ctx)
|
|||||||
ctx->depth++;
|
ctx->depth++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BIGNUM *BN_CTX_get(BN_CTX *ctx)
|
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->depth > BN_CTX_NUM_POS || ctx->tos >= BN_CTX_NUM)
|
||||||
{
|
{
|
||||||
if (!ctx->too_many)
|
if (!ctx->too_many)
|
||||||
|
@ -180,13 +180,13 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
|
|||||||
|
|
||||||
BN_CTX_start(ctx);
|
BN_CTX_start(ctx);
|
||||||
tmp=BN_CTX_get(ctx);
|
tmp=BN_CTX_get(ctx);
|
||||||
tmp->neg=0;
|
|
||||||
snum=BN_CTX_get(ctx);
|
snum=BN_CTX_get(ctx);
|
||||||
sdiv=BN_CTX_get(ctx);
|
sdiv=BN_CTX_get(ctx);
|
||||||
if (dv == NULL)
|
if (dv == NULL)
|
||||||
res=BN_CTX_get(ctx);
|
res=BN_CTX_get(ctx);
|
||||||
else res=dv;
|
else res=dv;
|
||||||
if (res == NULL) goto err;
|
if (sdiv == NULL || res == NULL) goto err;
|
||||||
|
tmp->neg=0;
|
||||||
|
|
||||||
/* First we normalise the numbers */
|
/* First we normalise the numbers */
|
||||||
norm_shift=BN_BITS2-((BN_num_bits(divisor))%BN_BITS2);
|
norm_shift=BN_BITS2-((BN_num_bits(divisor))%BN_BITS2);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user