diff options
Diffstat (limited to 'src/lib/libssl/src/apps/dsa.c')
| -rw-r--r-- | src/lib/libssl/src/apps/dsa.c | 57 |
1 files changed, 50 insertions, 7 deletions
diff --git a/src/lib/libssl/src/apps/dsa.c b/src/lib/libssl/src/apps/dsa.c index cbc1fe3f81..5222487ab9 100644 --- a/src/lib/libssl/src/apps/dsa.c +++ b/src/lib/libssl/src/apps/dsa.c | |||
| @@ -112,6 +112,8 @@ int MAIN(int argc, char **argv) | |||
| 112 | char *passin = NULL, *passout = NULL; | 112 | char *passin = NULL, *passout = NULL; |
| 113 | int modulus=0; | 113 | int modulus=0; |
| 114 | 114 | ||
| 115 | int pvk_encr = 2; | ||
| 116 | |||
| 115 | apps_startup(); | 117 | apps_startup(); |
| 116 | 118 | ||
| 117 | if (bio_err == NULL) | 119 | if (bio_err == NULL) |
| @@ -171,6 +173,12 @@ int MAIN(int argc, char **argv) | |||
| 171 | engine= *(++argv); | 173 | engine= *(++argv); |
| 172 | } | 174 | } |
| 173 | #endif | 175 | #endif |
| 176 | else if (strcmp(*argv,"-pvk-strong") == 0) | ||
| 177 | pvk_encr=2; | ||
| 178 | else if (strcmp(*argv,"-pvk-weak") == 0) | ||
| 179 | pvk_encr=1; | ||
| 180 | else if (strcmp(*argv,"-pvk-none") == 0) | ||
| 181 | pvk_encr=0; | ||
| 174 | else if (strcmp(*argv,"-noout") == 0) | 182 | else if (strcmp(*argv,"-noout") == 0) |
| 175 | noout=1; | 183 | noout=1; |
| 176 | else if (strcmp(*argv,"-text") == 0) | 184 | else if (strcmp(*argv,"-text") == 0) |
| @@ -238,16 +246,30 @@ bad: | |||
| 238 | goto end; | 246 | goto end; |
| 239 | } | 247 | } |
| 240 | 248 | ||
| 249 | in=BIO_new(BIO_s_file()); | ||
| 241 | out=BIO_new(BIO_s_file()); | 250 | out=BIO_new(BIO_s_file()); |
| 242 | if (out == NULL) | 251 | if ((in == NULL) || (out == NULL)) |
| 243 | { | 252 | { |
| 244 | ERR_print_errors(bio_err); | 253 | ERR_print_errors(bio_err); |
| 245 | goto end; | 254 | goto end; |
| 246 | } | 255 | } |
| 247 | 256 | ||
| 257 | if (infile == NULL) | ||
| 258 | BIO_set_fp(in,stdin,BIO_NOCLOSE); | ||
| 259 | else | ||
| 260 | { | ||
| 261 | if (BIO_read_filename(in,infile) <= 0) | ||
| 262 | { | ||
| 263 | perror(infile); | ||
| 264 | goto end; | ||
| 265 | } | ||
| 266 | } | ||
| 267 | |||
| 248 | BIO_printf(bio_err,"read DSA key\n"); | 268 | BIO_printf(bio_err,"read DSA key\n"); |
| 249 | { | 269 | |
| 270 | { | ||
| 250 | EVP_PKEY *pkey; | 271 | EVP_PKEY *pkey; |
| 272 | |||
| 251 | if (pubin) | 273 | if (pubin) |
| 252 | pkey = load_pubkey(bio_err, infile, informat, 1, | 274 | pkey = load_pubkey(bio_err, infile, informat, 1, |
| 253 | passin, e, "Public Key"); | 275 | passin, e, "Public Key"); |
| @@ -255,10 +277,12 @@ bad: | |||
| 255 | pkey = load_key(bio_err, infile, informat, 1, | 277 | pkey = load_key(bio_err, infile, informat, 1, |
| 256 | passin, e, "Private Key"); | 278 | passin, e, "Private Key"); |
| 257 | 279 | ||
| 258 | if (pkey != NULL) | 280 | if (pkey) |
| 259 | dsa = pkey == NULL ? NULL : EVP_PKEY_get1_DSA(pkey); | 281 | { |
| 260 | EVP_PKEY_free(pkey); | 282 | dsa = EVP_PKEY_get1_DSA(pkey); |
| 261 | } | 283 | EVP_PKEY_free(pkey); |
| 284 | } | ||
| 285 | } | ||
| 262 | if (dsa == NULL) | 286 | if (dsa == NULL) |
| 263 | { | 287 | { |
| 264 | BIO_printf(bio_err,"unable to load Key\n"); | 288 | BIO_printf(bio_err,"unable to load Key\n"); |
| @@ -310,11 +334,24 @@ bad: | |||
| 310 | i=PEM_write_bio_DSA_PUBKEY(out,dsa); | 334 | i=PEM_write_bio_DSA_PUBKEY(out,dsa); |
| 311 | else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc, | 335 | else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc, |
| 312 | NULL,0,NULL, passout); | 336 | NULL,0,NULL, passout); |
| 337 | #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4) | ||
| 338 | } else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) { | ||
| 339 | EVP_PKEY *pk; | ||
| 340 | pk = EVP_PKEY_new(); | ||
| 341 | EVP_PKEY_set1_DSA(pk, dsa); | ||
| 342 | if (outformat == FORMAT_PVK) | ||
| 343 | i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout); | ||
| 344 | else if (pubin || pubout) | ||
| 345 | i = i2b_PublicKey_bio(out, pk); | ||
| 346 | else | ||
| 347 | i = i2b_PrivateKey_bio(out, pk); | ||
| 348 | EVP_PKEY_free(pk); | ||
| 349 | #endif | ||
| 313 | } else { | 350 | } else { |
| 314 | BIO_printf(bio_err,"bad output format specified for outfile\n"); | 351 | BIO_printf(bio_err,"bad output format specified for outfile\n"); |
| 315 | goto end; | 352 | goto end; |
| 316 | } | 353 | } |
| 317 | if (!i) | 354 | if (i <= 0) |
| 318 | { | 355 | { |
| 319 | BIO_printf(bio_err,"unable to write private key\n"); | 356 | BIO_printf(bio_err,"unable to write private key\n"); |
| 320 | ERR_print_errors(bio_err); | 357 | ERR_print_errors(bio_err); |
| @@ -330,4 +367,10 @@ end: | |||
| 330 | apps_shutdown(); | 367 | apps_shutdown(); |
| 331 | OPENSSL_EXIT(ret); | 368 | OPENSSL_EXIT(ret); |
| 332 | } | 369 | } |
| 370 | #else /* !OPENSSL_NO_DSA */ | ||
| 371 | |||
| 372 | # if PEDANTIC | ||
| 373 | static void *dummy=&dummy; | ||
| 374 | # endif | ||
| 375 | |||
| 333 | #endif | 376 | #endif |
