projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Import of old SSLeay release: SSLeay 0.9.1b (unreleased)
[openssl.git]
/
crypto
/
bn
/
bn_prime.c
diff --git
a/crypto/bn/bn_prime.c
b/crypto/bn/bn_prime.c
index 0c85f70b59ccedb53cc3d174303a14f1f19b903c..c4fb58ef9ae62ddf4ba3208dcaf31355dde1055d 100644
(file)
--- a/
crypto/bn/bn_prime.c
+++ b/
crypto/bn/bn_prime.c
@@
-83,7
+83,8
@@
static int probable_prime_dh();
static int probable_prime_dh_strong();
#endif
static int probable_prime_dh_strong();
#endif
-BIGNUM *BN_generate_prime(bits,strong,add,rem,callback,cb_arg)
+BIGNUM *BN_generate_prime(ret,bits,strong,add,rem,callback,cb_arg)
+BIGNUM *ret;
int bits;
int strong;
BIGNUM *add;
int bits;
int strong;
BIGNUM *add;
@@
-92,16
+93,19
@@
void (*callback)(P_I_I_P);
char *cb_arg;
{
BIGNUM *rnd=NULL;
char *cb_arg;
{
BIGNUM *rnd=NULL;
- BIGNUM *ret=NULL;
- BIGNUM *t=NULL;
+ BIGNUM t;
int i,j,c1=0;
BN_CTX *ctx;
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
int i,j,c1=0;
BN_CTX *ctx;
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
- if ((rnd=BN_new()) == NULL) goto err;
- if (strong)
- if ((t=BN_new()) == NULL) goto err;
+ if (ret == NULL)
+ {
+ if ((rnd=BN_new()) == NULL) goto err;
+ }
+ else
+ rnd=ret;
+ BN_init(&t);
loop:
/* make a random number and set the top and bottom bits */
if (add == NULL)
loop:
/* make a random number and set the top and bottom bits */
if (add == NULL)
@@
-136,7
+140,7
@@
loop:
* check that (p-1)/2 is prime.
* Since a prime is odd, We just
* need to divide by 2 */
* check that (p-1)/2 is prime.
* Since a prime is odd, We just
* need to divide by 2 */
- if (!BN_rshift1(t,rnd)) goto err;
+ if (!BN_rshift1(
&
t,rnd)) goto err;
for (i=0; i<BN_prime_checks; i++)
{
for (i=0; i<BN_prime_checks; i++)
{
@@
-144,7
+148,7
@@
loop:
if (j == -1) goto err;
if (j == 0) goto loop;
if (j == -1) goto err;
if (j == 0) goto loop;
- j=BN_is_prime(t,1,callback,ctx,cb_arg);
+ j=BN_is_prime(
&
t,1,callback,ctx,cb_arg);
if (j == -1) goto err;
if (j == 0) goto loop;
if (j == -1) goto err;
if (j == 0) goto loop;
@@
-156,7
+160,7
@@
loop:
ret=rnd;
err:
if ((ret == NULL) && (rnd != NULL)) BN_free(rnd);
ret=rnd;
err:
if ((ret == NULL) && (rnd != NULL)) BN_free(rnd);
-
if (t != NULL) BN_free(
t);
+
BN_free(&
t);
if (ctx != NULL) BN_CTX_free(ctx);
return(ret);
}
if (ctx != NULL) BN_CTX_free(ctx);
return(ret);
}
@@
-183,7
+187,7
@@
char *cb_arg;
if ((ctx2=BN_CTX_new()) == NULL) goto err;
if ((mont=BN_MONT_CTX_new()) == NULL) goto err;
if ((ctx2=BN_CTX_new()) == NULL) goto err;
if ((mont=BN_MONT_CTX_new()) == NULL) goto err;
- check=
ctx->bn[ctx->tos++]
;
+ check=
&(ctx->bn[ctx->tos++])
;
/* Setup the montgomery structure */
if (!BN_MONT_CTX_set(mont,a,ctx2)) goto err;
/* Setup the montgomery structure */
if (!BN_MONT_CTX_set(mont,a,ctx2)) goto err;
@@
-224,14
+228,14
@@
BN_MONT_CTX *mont;
BIGNUM *d,*dd,*tmp,*d1,*d2,*n1;
BIGNUM *mont_one,*mont_n1,*mont_a;
BIGNUM *d,*dd,*tmp,*d1,*d2,*n1;
BIGNUM *mont_one,*mont_n1,*mont_a;
- d1=
ctx->bn[ctx->tos]
;
- d2=
ctx->bn[ctx->tos+1]
;
- n1=
ctx->bn[ctx->tos+2]
;
+ d1=
&(ctx->bn[ctx->tos])
;
+ d2=
&(ctx->bn[ctx->tos+1])
;
+ n1=
&(ctx->bn[ctx->tos+2])
;
ctx->tos+=3;
ctx->tos+=3;
- mont_one=
ctx2->bn[ctx2->tos]
;
- mont_n1=
ctx2->bn[ctx2->tos+1]
;
- mont_a=
ctx2->bn[ctx2->tos+2]
;
+ mont_one=
&(ctx2->bn[ctx2->tos])
;
+ mont_n1=
&(ctx2->bn[ctx2->tos+1])
;
+ mont_a=
&(ctx2->bn[ctx2->tos+2])
;
ctx2->tos+=3;
d=d1;
ctx2->tos+=3;
d=d1;
@@
-287,8
+291,9
@@
int bits;
{
int i;
MS_STATIC BN_ULONG mods[NUMPRIMES];
{
int i;
MS_STATIC BN_ULONG mods[NUMPRIMES];
- BN_ULONG delta;
+ BN_ULONG delta
,d
;
+again:
if (!BN_rand(rnd,bits,1,1)) return(0);
/* we now have a random number 'rand' to test. */
for (i=1; i<NUMPRIMES; i++)
if (!BN_rand(rnd,bits,1,1)) return(0);
/* we now have a random number 'rand' to test. */
for (i=1; i<NUMPRIMES; i++)
@@
-300,9
+305,12
@@
int bits;
* that gcd(rnd-1,primes) == 1 (except for 2) */
if (((mods[i]+delta)%primes[i]) <= 1)
{
* that gcd(rnd-1,primes) == 1 (except for 2) */
if (((mods[i]+delta)%primes[i]) <= 1)
{
+ d=delta;
delta+=2;
/* perhaps need to check for overflow of
delta+=2;
/* perhaps need to check for overflow of
- * delta (but delta can be upto 2^32) */
+ * delta (but delta can be upto 2^32)
+ * 21-May-98 eay - added overflow check */
+ if (delta < d) goto again;
goto loop;
}
}
goto loop;
}
}
@@
-320,7
+328,7
@@
BN_CTX *ctx;
int i,ret=0;
BIGNUM *t1;
int i,ret=0;
BIGNUM *t1;
- t1=
ctx->bn[ctx->tos++]
;
+ t1=
&(ctx->bn[ctx->tos++])
;
if (!BN_rand(rnd,bits,0,1)) goto err;
if (!BN_rand(rnd,bits,0,1)) goto err;
@@
-361,9
+369,9
@@
BN_CTX *ctx;
BIGNUM *t1,*qadd=NULL,*q=NULL;
bits--;
BIGNUM *t1,*qadd=NULL,*q=NULL;
bits--;
- t1=
ctx->bn[ctx->tos++]
;
- q=
ctx->bn[ctx->tos++]
;
- qadd=
ctx->bn[ctx->tos++]
;
+ t1=
&(ctx->bn[ctx->tos++])
;
+ q=
&(ctx->bn[ctx->tos++])
;
+ qadd=
&(ctx->bn[ctx->tos++])
;
if (!BN_rshift1(qadd,padd)) goto err;
if (!BN_rshift1(qadd,padd)) goto err;
@@
-413,11
+421,11
@@
BN_CTX *ctx;
BIGNUM *d,*dd,*tmp;
BIGNUM *d1,*d2,*x,*n1,*inv;
BIGNUM *d,*dd,*tmp;
BIGNUM *d1,*d2,*x,*n1,*inv;
- d1=
ctx->bn[ctx->tos]
;
- d2=
ctx->bn[ctx->tos+1]
;
- x=
ctx->bn[ctx->tos+2]
;
- n1=
ctx->bn[ctx->tos+3]
;
- inv=
ctx->bn[ctx->tos+4]
;
+ d1=
&(ctx->bn[ctx->tos])
;
+ d2=
&(ctx->bn[ctx->tos+1])
;
+ x=
&(ctx->bn[ctx->tos+2])
;
+ n1=
&(ctx->bn[ctx->tos+3])
;
+ inv=
&(ctx->bn[ctx->tos+4])
;
ctx->tos+=5;
d=d1;
ctx->tos+=5;
d=d1;