X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=apps%2Frand.c;h=8a216fbc75b2002fdf0b9195bf9003ff9ae88fa7;hb=7f19d42e9d8d796293bb56aa488d5f09e59471b9;hp=b0c50920a5fd5d908642b38f33bc18206b37618b;hpb=20d242b0dee75830b104109c6fd5955a4ce35840;p=openssl.git diff --git a/apps/rand.c b/apps/rand.c index b0c50920a5..8a216fbc75 100644 --- a/apps/rand.c +++ b/apps/rand.c @@ -9,13 +9,13 @@ #include #include #include +#include #undef PROG #define PROG rand_main /* -out file - write to file * -rand file:file - PRNG seed files - * -egd file - PRNG seed from EGD named socket * -base64 - encode output * num - write 'num' bytes */ @@ -24,13 +24,15 @@ int MAIN(int, char **); int MAIN(int argc, char **argv) { + ENGINE *e = NULL; int i, r, ret = 1; int badopt; char *outfile = NULL; - char *inrand = NULL,*inegd=NULL; + char *inrand = NULL; int base64 = 0; BIO *out = NULL; int num = -1; + char *engine=NULL; apps_startup(); @@ -49,17 +51,17 @@ int MAIN(int argc, char **argv) else badopt = 1; } - else if (strcmp(argv[i], "-rand") == 0) + else if (strcmp(argv[i], "-engine") == 0) { - if ((argv[i+1] != NULL) && (inrand == NULL)) - inrand = argv[++i]; + if ((argv[i+1] != NULL) && (engine == NULL)) + engine = argv[++i]; else badopt = 1; } - else if (strcmp(argv[i], "-egd") == 0) + else if (strcmp(argv[i], "-rand") == 0) { - if ((argv[i+1] != NULL) && (inegd == NULL)) - inegd = argv[++i]; + if ((argv[i+1] != NULL) && (inrand == NULL)) + inrand = argv[++i]; else badopt = 1; } @@ -92,20 +94,35 @@ int MAIN(int argc, char **argv) { BIO_printf(bio_err, "Usage: rand [options] num\n"); BIO_printf(bio_err, "where options are\n"); - BIO_printf(bio_err, "-out file - write to file\n"); - BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); - BIO_printf(bio_err, "-egd file - seed PRNG from EGD named socket\n"); - BIO_printf(bio_err, "-base64 - encode output\n"); + BIO_printf(bio_err, "-out file - write to file\n"); + BIO_printf(bio_err, "-engine e - use engine e, possibly a hardware device.\n"); + BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); + BIO_printf(bio_err, "-base64 - encode output\n"); goto err; } - app_RAND_load_file(NULL, bio_err, (inrand != NULL || inegd != NULL)); + if (engine != NULL) + { + if((e = ENGINE_by_id(engine)) == NULL) + { + BIO_printf(bio_err,"invalid engine \"%s\"\n", + engine); + goto err; + } + if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) + { + BIO_printf(bio_err,"can't use that engine\n"); + goto err; + } + BIO_printf(bio_err,"engine \"%s\" set.\n", engine); + /* Free our "structural" reference. */ + ENGINE_free(e); + } + + app_RAND_load_file(NULL, bio_err, (inrand != NULL)); 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)); out = BIO_new(BIO_s_file()); if (out == NULL) @@ -113,7 +130,15 @@ int MAIN(int argc, char **argv) if (outfile != NULL) r = BIO_write_filename(out, outfile); else + { r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); +#ifdef OPENSSL_SYS_VMS + { + BIO *tmpbio = BIO_new(BIO_f_linebuffer()); + out = BIO_push(tmpbio, out); + } +#endif + } if (r <= 0) goto err;