X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=apps%2Frand.c;h=faba057b772d9107f4396e4634990346fcfa6d3a;hb=3f37e73baea893cd938983b3234658d8141df0e3;hp=9ca84073a5281f92a9d5c0364cf398af1802a75d;hpb=27b782732fe4d09dbcb279640fde1b6b300ea4a0;p=oweals%2Fopenssl.git diff --git a/apps/rand.c b/apps/rand.c index 9ca84073a5..faba057b77 100644 --- a/apps/rand.c +++ b/apps/rand.c @@ -4,10 +4,12 @@ #include #include +#include #include #include #include +#include #undef PROG #define PROG rand_main @@ -22,6 +24,7 @@ int MAIN(int, char **); int MAIN(int argc, char **argv) { + ENGINE *e = NULL; int i, r, ret = 1; int badopt; char *outfile = NULL; @@ -29,6 +32,7 @@ int MAIN(int argc, char **argv) int base64 = 0; BIO *out = NULL; int num = -1; + char *engine=NULL; apps_startup(); @@ -47,6 +51,13 @@ int MAIN(int argc, char **argv) else badopt = 1; } + else if (strcmp(argv[i], "-engine") == 0) + { + if ((argv[i+1] != NULL) && (engine == NULL)) + engine = argv[++i]; + else + badopt = 1; + } else if (strcmp(argv[i], "-rand") == 0) { if ((argv[i+1] != NULL) && (inrand == NULL)) @@ -61,7 +72,7 @@ int MAIN(int argc, char **argv) else badopt = 1; } - else if (isdigit(argv[i][0])) + else if (isdigit((unsigned char)argv[i][0])) { if (num < 0) { @@ -83,12 +94,15 @@ 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:file:... - seed PRNG from files\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; } + e = setup_engine(bio_err, engine, 0); + app_RAND_load_file(NULL, bio_err, (inrand != NULL)); if (inrand != NULL) BIO_printf(bio_err,"%ld semi-random bytes loaded\n", @@ -100,7 +114,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; @@ -135,5 +157,6 @@ err: ERR_print_errors(bio_err); if (out) BIO_free_all(out); + apps_shutdown(); EXIT(ret); }