summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/apps/genrsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/apps/genrsa.c')
-rw-r--r--src/lib/libssl/src/apps/genrsa.c44
1 files changed, 40 insertions, 4 deletions
diff --git a/src/lib/libssl/src/apps/genrsa.c b/src/lib/libssl/src/apps/genrsa.c
index 6fe578d69f..e7445e6a49 100644
--- a/src/lib/libssl/src/apps/genrsa.c
+++ b/src/lib/libssl/src/apps/genrsa.c
@@ -69,6 +69,7 @@
69#include <openssl/evp.h> 69#include <openssl/evp.h>
70#include <openssl/x509.h> 70#include <openssl/x509.h>
71#include <openssl/pem.h> 71#include <openssl/pem.h>
72#include <openssl/engine.h>
72 73
73#define DEFBITS 512 74#define DEFBITS 512
74#undef PROG 75#undef PROG
@@ -80,6 +81,7 @@ int MAIN(int, char **);
80 81
81int MAIN(int argc, char **argv) 82int MAIN(int argc, char **argv)
82 { 83 {
84 ENGINE *e = NULL;
83 int ret=1; 85 int ret=1;
84 RSA *rsa=NULL; 86 RSA *rsa=NULL;
85 int i,num=DEFBITS; 87 int i,num=DEFBITS;
@@ -88,6 +90,7 @@ int MAIN(int argc, char **argv)
88 unsigned long f4=RSA_F4; 90 unsigned long f4=RSA_F4;
89 char *outfile=NULL; 91 char *outfile=NULL;
90 char *passargout = NULL, *passout = NULL; 92 char *passargout = NULL, *passout = NULL;
93 char *engine=NULL;
91 char *inrand=NULL; 94 char *inrand=NULL;
92 BIO *out=NULL; 95 BIO *out=NULL;
93 96
@@ -114,8 +117,13 @@ int MAIN(int argc, char **argv)
114 } 117 }
115 else if (strcmp(*argv,"-3") == 0) 118 else if (strcmp(*argv,"-3") == 0)
116 f4=3; 119 f4=3;
117 else if (strcmp(*argv,"-F4") == 0) 120 else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
118 f4=RSA_F4; 121 f4=RSA_F4;
122 else if (strcmp(*argv,"-engine") == 0)
123 {
124 if (--argc < 1) goto bad;
125 engine= *(++argv);
126 }
119 else if (strcmp(*argv,"-rand") == 0) 127 else if (strcmp(*argv,"-rand") == 0)
120 { 128 {
121 if (--argc < 1) goto bad; 129 if (--argc < 1) goto bad;
@@ -154,6 +162,7 @@ bad:
154 BIO_printf(bio_err," -passout arg output file pass phrase source\n"); 162 BIO_printf(bio_err," -passout arg output file pass phrase source\n");
155 BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n"); 163 BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
156 BIO_printf(bio_err," -3 use 3 for the E value\n"); 164 BIO_printf(bio_err," -3 use 3 for the E value\n");
165 BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
157 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); 166 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
158 BIO_printf(bio_err," load the file (or the files in the directory) into\n"); 167 BIO_printf(bio_err," load the file (or the files in the directory) into\n");
159 BIO_printf(bio_err," the random number generator\n"); 168 BIO_printf(bio_err," the random number generator\n");
@@ -167,8 +176,34 @@ bad:
167 goto err; 176 goto err;
168 } 177 }
169 178
179 if (engine != NULL)
180 {
181 if((e = ENGINE_by_id(engine)) == NULL)
182 {
183 BIO_printf(bio_err,"invalid engine \"%s\"\n",
184 engine);
185 goto err;
186 }
187 if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
188 {
189 BIO_printf(bio_err,"can't use that engine\n");
190 goto err;
191 }
192 BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
193 /* Free our "structural" reference. */
194 ENGINE_free(e);
195 }
196
170 if (outfile == NULL) 197 if (outfile == NULL)
198 {
171 BIO_set_fp(out,stdout,BIO_NOCLOSE); 199 BIO_set_fp(out,stdout,BIO_NOCLOSE);
200#ifdef VMS
201 {
202 BIO *tmpbio = BIO_new(BIO_f_linebuffer());
203 out = BIO_push(tmpbio, out);
204 }
205#endif
206 }
172 else 207 else
173 { 208 {
174 if (BIO_write_filename(out,outfile) <= 0) 209 if (BIO_write_filename(out,outfile) <= 0)
@@ -178,7 +213,8 @@ bad:
178 } 213 }
179 } 214 }
180 215
181 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) 216 if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
217 && !RAND_status())
182 { 218 {
183 BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n"); 219 BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
184 } 220 }
@@ -212,8 +248,8 @@ bad:
212 ret=0; 248 ret=0;
213err: 249err:
214 if (rsa != NULL) RSA_free(rsa); 250 if (rsa != NULL) RSA_free(rsa);
215 if (out != NULL) BIO_free(out); 251 if (out != NULL) BIO_free_all(out);
216 if(passout) Free(passout); 252 if(passout) OPENSSL_free(passout);
217 if (ret != 0) 253 if (ret != 0)
218 ERR_print_errors(bio_err); 254 ERR_print_errors(bio_err);
219 EXIT(ret); 255 EXIT(ret);