summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/apps/gendsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/apps/gendsa.c')
-rw-r--r--src/lib/libssl/src/apps/gendsa.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/src/lib/libssl/src/apps/gendsa.c b/src/lib/libssl/src/apps/gendsa.c
index b1a1c4fcfa..1c0ec371d2 100644
--- a/src/lib/libssl/src/apps/gendsa.c
+++ b/src/lib/libssl/src/apps/gendsa.c
@@ -68,6 +68,7 @@
68#include <openssl/dsa.h> 68#include <openssl/dsa.h>
69#include <openssl/x509.h> 69#include <openssl/x509.h>
70#include <openssl/pem.h> 70#include <openssl/pem.h>
71#include <openssl/engine.h>
71 72
72#define DEFBITS 512 73#define DEFBITS 512
73#undef PROG 74#undef PROG
@@ -77,6 +78,7 @@ int MAIN(int, char **);
77 78
78int MAIN(int argc, char **argv) 79int MAIN(int argc, char **argv)
79 { 80 {
81 ENGINE *e = NULL;
80 DSA *dsa=NULL; 82 DSA *dsa=NULL;
81 int ret=1; 83 int ret=1;
82 char *outfile=NULL; 84 char *outfile=NULL;
@@ -84,6 +86,7 @@ int MAIN(int argc, char **argv)
84 char *passargout = NULL, *passout = NULL; 86 char *passargout = NULL, *passout = NULL;
85 BIO *out=NULL,*in=NULL; 87 BIO *out=NULL,*in=NULL;
86 EVP_CIPHER *enc=NULL; 88 EVP_CIPHER *enc=NULL;
89 char *engine=NULL;
87 90
88 apps_startup(); 91 apps_startup();
89 92
@@ -106,6 +109,11 @@ int MAIN(int argc, char **argv)
106 if (--argc < 1) goto bad; 109 if (--argc < 1) goto bad;
107 passargout= *(++argv); 110 passargout= *(++argv);
108 } 111 }
112 else if (strcmp(*argv,"-engine") == 0)
113 {
114 if (--argc < 1) goto bad;
115 engine= *(++argv);
116 }
109 else if (strcmp(*argv,"-rand") == 0) 117 else if (strcmp(*argv,"-rand") == 0)
110 { 118 {
111 if (--argc < 1) goto bad; 119 if (--argc < 1) goto bad;
@@ -145,6 +153,7 @@ bad:
145#ifndef NO_IDEA 153#ifndef NO_IDEA
146 BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n"); 154 BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
147#endif 155#endif
156 BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
148 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR); 157 BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
149 BIO_printf(bio_err," - load the file (or the files in the directory) into\n"); 158 BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
150 BIO_printf(bio_err," the random number generator\n"); 159 BIO_printf(bio_err," the random number generator\n");
@@ -153,6 +162,24 @@ bad:
153 goto end; 162 goto end;
154 } 163 }
155 164
165 if (engine != NULL)
166 {
167 if((e = ENGINE_by_id(engine)) == NULL)
168 {
169 BIO_printf(bio_err,"invalid engine \"%s\"\n",
170 engine);
171 goto end;
172 }
173 if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
174 {
175 BIO_printf(bio_err,"can't use that engine\n");
176 goto end;
177 }
178 BIO_printf(bio_err,"engine \"%s\" set.\n", engine);
179 /* Free our "structural" reference. */
180 ENGINE_free(e);
181 }
182
156 if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) { 183 if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
157 BIO_printf(bio_err, "Error getting password\n"); 184 BIO_printf(bio_err, "Error getting password\n");
158 goto end; 185 goto end;
@@ -178,7 +205,15 @@ bad:
178 if (out == NULL) goto end; 205 if (out == NULL) goto end;
179 206
180 if (outfile == NULL) 207 if (outfile == NULL)
208 {
181 BIO_set_fp(out,stdout,BIO_NOCLOSE); 209 BIO_set_fp(out,stdout,BIO_NOCLOSE);
210#ifdef VMS
211 {
212 BIO *tmpbio = BIO_new(BIO_f_linebuffer());
213 out = BIO_push(tmpbio, out);
214 }
215#endif
216 }
182 else 217 else
183 { 218 {
184 if (BIO_write_filename(out,outfile) <= 0) 219 if (BIO_write_filename(out,outfile) <= 0)
@@ -209,9 +244,9 @@ end:
209 if (ret != 0) 244 if (ret != 0)
210 ERR_print_errors(bio_err); 245 ERR_print_errors(bio_err);
211 if (in != NULL) BIO_free(in); 246 if (in != NULL) BIO_free(in);
212 if (out != NULL) BIO_free(out); 247 if (out != NULL) BIO_free_all(out);
213 if (dsa != NULL) DSA_free(dsa); 248 if (dsa != NULL) DSA_free(dsa);
214 if(passout) Free(passout); 249 if(passout) OPENSSL_free(passout);
215 EXIT(ret); 250 EXIT(ret);
216 } 251 }
217#endif 252#endif