Index: openssl/apps/prime.c |
=================================================================== |
--- openssl/apps/prime.c (revision 105093) |
+++ openssl/apps/prime.c (working copy) |
@@ -62,6 +62,9 @@ |
{ |
int hex=0; |
int checks=20; |
+ int generate=0; |
+ int bits=0; |
+ int safe=0; |
BIGNUM *bn=NULL; |
BIO *bio_out; |
@@ -77,6 +80,15 @@ |
{ |
if(!strcmp(*argv,"-hex")) |
hex=1; |
+ else if(!strcmp(*argv,"-generate")) |
+ generate=1; |
+ else if(!strcmp(*argv,"-bits")) |
+ if(--argc < 1) |
+ goto bad; |
+ else |
+ bits=atoi(*++argv); |
+ else if(!strcmp(*argv,"-safe")) |
+ safe=1; |
else if(!strcmp(*argv,"-checks")) |
if(--argc < 1) |
goto bad; |
@@ -91,13 +103,13 @@ |
++argv; |
} |
- if (argv[0] == NULL) |
+ if (argv[0] == NULL && !generate) |
{ |
BIO_printf(bio_err,"No prime specified\n"); |
goto bad; |
} |
- if ((bio_out=BIO_new(BIO_s_file())) != NULL) |
+ if ((bio_out=BIO_new(BIO_s_file())) != NULL) |
{ |
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE); |
#ifdef OPENSSL_SYS_VMS |
@@ -108,14 +120,32 @@ |
#endif |
} |
- if(hex) |
- BN_hex2bn(&bn,argv[0]); |
+ if(generate) |
+ { |
+ char *s; |
+ |
+ if(!bits) |
+ { |
+ BIO_printf(bio_err,"Specifiy the number of bits.\n"); |
+ return 1; |
+ } |
+ bn=BN_new(); |
+ BN_generate_prime_ex(bn,bits,safe,NULL,NULL,NULL); |
+ s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn); |
+ BIO_printf(bio_out,"%s\n",s); |
+ OPENSSL_free(s); |
+ } |
else |
- BN_dec2bn(&bn,argv[0]); |
+ { |
+ if(hex) |
+ BN_hex2bn(&bn,argv[0]); |
+ else |
+ BN_dec2bn(&bn,argv[0]); |
- BN_print(bio_out,bn); |
- BIO_printf(bio_out," is %sprime\n", |
- BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not "); |
+ BN_print(bio_out,bn); |
+ BIO_printf(bio_out," is %sprime\n", |
+ BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not "); |
+ } |
BN_free(bn); |
BIO_free_all(bio_out); |