summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/apps/rand.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/apps/rand.c')
-rw-r--r--src/lib/libssl/src/apps/rand.c45
1 files changed, 41 insertions, 4 deletions
diff --git a/src/lib/libssl/src/apps/rand.c b/src/lib/libssl/src/apps/rand.c
index cfbba30755..6add7bbd6c 100644
--- a/src/lib/libssl/src/apps/rand.c
+++ b/src/lib/libssl/src/apps/rand.c
@@ -9,6 +9,7 @@
9#include <openssl/bio.h> 9#include <openssl/bio.h>
10#include <openssl/err.h> 10#include <openssl/err.h>
11#include <openssl/rand.h> 11#include <openssl/rand.h>
12#include <openssl/engine.h>
12 13
13#undef PROG 14#undef PROG
14#define PROG rand_main 15#define PROG rand_main
@@ -23,6 +24,7 @@ int MAIN(int, char **);
23 24
24int MAIN(int argc, char **argv) 25int MAIN(int argc, char **argv)
25 { 26 {
27 ENGINE *e = NULL;
26 int i, r, ret = 1; 28 int i, r, ret = 1;
27 int badopt; 29 int badopt;
28 char *outfile = NULL; 30 char *outfile = NULL;
@@ -30,6 +32,7 @@ int MAIN(int argc, char **argv)
30 int base64 = 0; 32 int base64 = 0;
31 BIO *out = NULL; 33 BIO *out = NULL;
32 int num = -1; 34 int num = -1;
35 char *engine=NULL;
33 36
34 apps_startup(); 37 apps_startup();
35 38
@@ -48,6 +51,13 @@ int MAIN(int argc, char **argv)
48 else 51 else
49 badopt = 1; 52 badopt = 1;
50 } 53 }
54 if (strcmp(argv[i], "-engine") == 0)
55 {
56 if ((argv[i+1] != NULL) && (engine == NULL))
57 engine = argv[++i];
58 else
59 badopt = 1;
60 }
51 else if (strcmp(argv[i], "-rand") == 0) 61 else if (strcmp(argv[i], "-rand") == 0)
52 { 62 {
53 if ((argv[i+1] != NULL) && (inrand == NULL)) 63 if ((argv[i+1] != NULL) && (inrand == NULL))
@@ -62,7 +72,7 @@ int MAIN(int argc, char **argv)
62 else 72 else
63 badopt = 1; 73 badopt = 1;
64 } 74 }
65 else if (isdigit(argv[i][0])) 75 else if (isdigit((unsigned char)argv[i][0]))
66 { 76 {
67 if (num < 0) 77 if (num < 0)
68 { 78 {
@@ -84,12 +94,31 @@ int MAIN(int argc, char **argv)
84 { 94 {
85 BIO_printf(bio_err, "Usage: rand [options] num\n"); 95 BIO_printf(bio_err, "Usage: rand [options] num\n");
86 BIO_printf(bio_err, "where options are\n"); 96 BIO_printf(bio_err, "where options are\n");
87 BIO_printf(bio_err, "-out file - write to file\n"); 97 BIO_printf(bio_err, "-out file - write to file\n");
88 BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); 98 BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
89 BIO_printf(bio_err, "-base64 - encode output\n"); 99 BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
100 BIO_printf(bio_err, "-base64 - encode output\n");
90 goto err; 101 goto err;
91 } 102 }
92 103
104 if (engine != NULL)
105 {
106 if((e = ENGINE_by_id(engine)) == NULL)
107 {
108 BIO_printf(bio_err,"invalid engine \"%s\"\n",
109 engine);
110 goto err;
111 }
112 if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
113 {
114 BIO_printf(bio_err,"can't use that engine\n");
115 goto err;
116 }
117 BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
118 /* Free our "structural" reference. */
119 ENGINE_free(e);
120 }
121
93 app_RAND_load_file(NULL, bio_err, (inrand != NULL)); 122 app_RAND_load_file(NULL, bio_err, (inrand != NULL));
94 if (inrand != NULL) 123 if (inrand != NULL)
95 BIO_printf(bio_err,"%ld semi-random bytes loaded\n", 124 BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
@@ -101,7 +130,15 @@ int MAIN(int argc, char **argv)
101 if (outfile != NULL) 130 if (outfile != NULL)
102 r = BIO_write_filename(out, outfile); 131 r = BIO_write_filename(out, outfile);
103 else 132 else
133 {
104 r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT); 134 r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
135#ifdef VMS
136 {
137 BIO *tmpbio = BIO_new(BIO_f_linebuffer());
138 out = BIO_push(tmpbio, out);
139 }
140#endif
141 }
105 if (r <= 0) 142 if (r <= 0)
106 goto err; 143 goto err;
107 144