diff options
Diffstat (limited to 'src/lib/libssl/src/apps/dsa.c')
-rw-r--r-- | src/lib/libssl/src/apps/dsa.c | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/src/lib/libssl/src/apps/dsa.c b/src/lib/libssl/src/apps/dsa.c index 4977671b8a..49ca9003ac 100644 --- a/src/lib/libssl/src/apps/dsa.c +++ b/src/lib/libssl/src/apps/dsa.c | |||
@@ -68,6 +68,7 @@ | |||
68 | #include <openssl/evp.h> | 68 | #include <openssl/evp.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 | #undef PROG | 73 | #undef PROG |
73 | #define PROG dsa_main | 74 | #define PROG dsa_main |
@@ -87,6 +88,7 @@ int MAIN(int, char **); | |||
87 | 88 | ||
88 | int MAIN(int argc, char **argv) | 89 | int MAIN(int argc, char **argv) |
89 | { | 90 | { |
91 | ENGINE *e = NULL; | ||
90 | int ret=1; | 92 | int ret=1; |
91 | DSA *dsa=NULL; | 93 | DSA *dsa=NULL; |
92 | int i,badops=0; | 94 | int i,badops=0; |
@@ -94,7 +96,7 @@ int MAIN(int argc, char **argv) | |||
94 | BIO *in=NULL,*out=NULL; | 96 | BIO *in=NULL,*out=NULL; |
95 | int informat,outformat,text=0,noout=0; | 97 | int informat,outformat,text=0,noout=0; |
96 | int pubin = 0, pubout = 0; | 98 | int pubin = 0, pubout = 0; |
97 | char *infile,*outfile,*prog; | 99 | char *infile,*outfile,*prog,*engine; |
98 | char *passargin = NULL, *passargout = NULL; | 100 | char *passargin = NULL, *passargout = NULL; |
99 | char *passin = NULL, *passout = NULL; | 101 | char *passin = NULL, *passout = NULL; |
100 | int modulus=0; | 102 | int modulus=0; |
@@ -105,6 +107,7 @@ int MAIN(int argc, char **argv) | |||
105 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) | 107 | if ((bio_err=BIO_new(BIO_s_file())) != NULL) |
106 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); | 108 | BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); |
107 | 109 | ||
110 | engine=NULL; | ||
108 | infile=NULL; | 111 | infile=NULL; |
109 | outfile=NULL; | 112 | outfile=NULL; |
110 | informat=FORMAT_PEM; | 113 | informat=FORMAT_PEM; |
@@ -145,6 +148,11 @@ int MAIN(int argc, char **argv) | |||
145 | if (--argc < 1) goto bad; | 148 | if (--argc < 1) goto bad; |
146 | passargout= *(++argv); | 149 | passargout= *(++argv); |
147 | } | 150 | } |
151 | else if (strcmp(*argv,"-engine") == 0) | ||
152 | { | ||
153 | if (--argc < 1) goto bad; | ||
154 | engine= *(++argv); | ||
155 | } | ||
148 | else if (strcmp(*argv,"-noout") == 0) | 156 | else if (strcmp(*argv,"-noout") == 0) |
149 | noout=1; | 157 | noout=1; |
150 | else if (strcmp(*argv,"-text") == 0) | 158 | else if (strcmp(*argv,"-text") == 0) |
@@ -176,6 +184,7 @@ bad: | |||
176 | BIO_printf(bio_err," -passin arg input file pass phrase source\n"); | 184 | BIO_printf(bio_err," -passin arg input file pass phrase source\n"); |
177 | BIO_printf(bio_err," -out arg output file\n"); | 185 | BIO_printf(bio_err," -out arg output file\n"); |
178 | BIO_printf(bio_err," -passout arg output file pass phrase source\n"); | 186 | BIO_printf(bio_err," -passout arg output file pass phrase source\n"); |
187 | BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n"); | ||
179 | BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); | 188 | BIO_printf(bio_err," -des encrypt PEM output with cbc des\n"); |
180 | BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); | 189 | BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n"); |
181 | #ifndef NO_IDEA | 190 | #ifndef NO_IDEA |
@@ -189,6 +198,24 @@ bad: | |||
189 | 198 | ||
190 | ERR_load_crypto_strings(); | 199 | ERR_load_crypto_strings(); |
191 | 200 | ||
201 | if (engine != NULL) | ||
202 | { | ||
203 | if((e = ENGINE_by_id(engine)) == NULL) | ||
204 | { | ||
205 | BIO_printf(bio_err,"invalid engine \"%s\"\n", | ||
206 | engine); | ||
207 | goto end; | ||
208 | } | ||
209 | if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) | ||
210 | { | ||
211 | BIO_printf(bio_err,"can't use that engine\n"); | ||
212 | goto end; | ||
213 | } | ||
214 | BIO_printf(bio_err,"engine \"%s\" set.\n", engine); | ||
215 | /* Free our "structural" reference. */ | ||
216 | ENGINE_free(e); | ||
217 | } | ||
218 | |||
192 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { | 219 | if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) { |
193 | BIO_printf(bio_err, "Error getting passwords\n"); | 220 | BIO_printf(bio_err, "Error getting passwords\n"); |
194 | goto end; | 221 | goto end; |
@@ -233,7 +260,15 @@ bad: | |||
233 | } | 260 | } |
234 | 261 | ||
235 | if (outfile == NULL) | 262 | if (outfile == NULL) |
263 | { | ||
236 | BIO_set_fp(out,stdout,BIO_NOCLOSE); | 264 | BIO_set_fp(out,stdout,BIO_NOCLOSE); |
265 | #ifdef VMS | ||
266 | { | ||
267 | BIO *tmpbio = BIO_new(BIO_f_linebuffer()); | ||
268 | out = BIO_push(tmpbio, out); | ||
269 | } | ||
270 | #endif | ||
271 | } | ||
237 | else | 272 | else |
238 | { | 273 | { |
239 | if (BIO_write_filename(out,outfile) <= 0) | 274 | if (BIO_write_filename(out,outfile) <= 0) |
@@ -281,10 +316,10 @@ bad: | |||
281 | ret=0; | 316 | ret=0; |
282 | end: | 317 | end: |
283 | if(in != NULL) BIO_free(in); | 318 | if(in != NULL) BIO_free(in); |
284 | if(out != NULL) BIO_free(out); | 319 | if(out != NULL) BIO_free_all(out); |
285 | if(dsa != NULL) DSA_free(dsa); | 320 | if(dsa != NULL) DSA_free(dsa); |
286 | if(passin) Free(passin); | 321 | if(passin) OPENSSL_free(passin); |
287 | if(passout) Free(passout); | 322 | if(passout) OPENSSL_free(passout); |
288 | EXIT(ret); | 323 | EXIT(ret); |
289 | } | 324 | } |
290 | #endif | 325 | #endif |