X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fgendh.c;h=e81109eaac2780de64478f6892a0e6dd3969d0f2;hp=5ad55dae5998142655db91476cf54f552c3981af;hb=6e2dad1cc761cf222dbfb4bdbb262205a57777e9;hpb=20d242b0dee75830b104109c6fd5955a4ce35840 diff --git a/apps/gendh.c b/apps/gendh.c index 5ad55dae59..e81109eaac 100644 --- a/apps/gendh.c +++ b/apps/gendh.c @@ -70,6 +70,7 @@ #include #include #include +#include #define DEFBITS 512 #undef PROG @@ -81,11 +82,13 @@ int MAIN(int, char **); int MAIN(int argc, char **argv) { + ENGINE *e = NULL; DH *dh=NULL; int ret=1,num=DEFBITS; int g=2; char *outfile=NULL; - char *inrand=NULL,*inegd=NULL; + char *inrand=NULL; + char *engine=NULL; BIO *out=NULL; apps_startup(); @@ -110,15 +113,15 @@ int MAIN(int argc, char **argv) g=3; */ else if (strcmp(*argv,"-5") == 0) g=5; - else if (strcmp(*argv,"-rand") == 0) + else if (strcmp(*argv,"-engine") == 0) { if (--argc < 1) goto bad; - inrand= *(++argv); + engine= *(++argv); } - else if (strcmp(*argv,"-egd") == 0) + else if (strcmp(*argv,"-rand") == 0) { if (--argc < 1) goto bad; - inegd= *(++argv); + inrand= *(++argv); } else break; @@ -133,13 +136,31 @@ bad: BIO_printf(bio_err," -2 - use 2 as the generator value\n"); /* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */ BIO_printf(bio_err," -5 - use 5 as the generator value\n"); + BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n"); BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); BIO_printf(bio_err," the random number generator\n"); - BIO_printf(bio_err," -egd file - load random seed from EGD socket\n"); goto end; } + if (engine != NULL) + { + if((e = ENGINE_by_id(engine)) == NULL) + { + BIO_printf(bio_err,"invalid engine \"%s\"\n", + engine); + goto end; + } + if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) + { + BIO_printf(bio_err,"can't use that engine\n"); + goto end; + } + BIO_printf(bio_err,"engine \"%s\" set.\n", engine); + /* Free our "structural" reference. */ + ENGINE_free(e); + } + out=BIO_new(BIO_s_file()); if (out == NULL) { @@ -148,7 +169,15 @@ bad: } if (outfile == NULL) + { BIO_set_fp(out,stdout,BIO_NOCLOSE); +#ifdef VMS + { + BIO *tmpbio = BIO_new(BIO_f_linebuffer()); + out = BIO_push(tmpbio, out); + } +#endif + } else { if (BIO_write_filename(out,outfile) <= 0) @@ -158,16 +187,13 @@ bad: } } - if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL && inegd == NULL) + if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) { BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); } if (inrand != NULL) BIO_printf(bio_err,"%ld semi-random bytes loaded\n", app_RAND_load_files(inrand)); - if (inegd != NULL) - BIO_printf(bio_err,"%ld egd bytes loaded\n", - RAND_egd(inegd)); BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g); BIO_printf(bio_err,"This is going to take a long time\n"); @@ -183,7 +209,7 @@ bad: end: if (ret != 0) ERR_print_errors(bio_err); - if (out != NULL) BIO_free(out); + if (out != NULL) BIO_free_all(out); if (dh != NULL) DH_free(dh); EXIT(ret); }