diff options
Diffstat (limited to 'src/usr.bin/openssl/pkcs12.c')
| -rw-r--r-- | src/usr.bin/openssl/pkcs12.c | 204 |
1 files changed, 102 insertions, 102 deletions
diff --git a/src/usr.bin/openssl/pkcs12.c b/src/usr.bin/openssl/pkcs12.c index 6e671e9275..aedae640e3 100644 --- a/src/usr.bin/openssl/pkcs12.c +++ b/src/usr.bin/openssl/pkcs12.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: pkcs12.c,v 1.24 2022/11/11 17:07:39 joshua Exp $ */ | 1 | /* $OpenBSD: pkcs12.c,v 1.25 2023/03/06 14:32:06 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project. | 3 | * project. |
| 4 | */ | 4 | */ |
| @@ -118,16 +118,16 @@ static struct { | |||
| 118 | char *passargin; | 118 | char *passargin; |
| 119 | char *passargout; | 119 | char *passargout; |
| 120 | int twopass; | 120 | int twopass; |
| 121 | } pkcs12_config; | 121 | } cfg; |
| 122 | 122 | ||
| 123 | static int | 123 | static int |
| 124 | pkcs12_opt_canames(char *arg) | 124 | pkcs12_opt_canames(char *arg) |
| 125 | { | 125 | { |
| 126 | if (pkcs12_config.canames == NULL && | 126 | if (cfg.canames == NULL && |
| 127 | (pkcs12_config.canames = sk_OPENSSL_STRING_new_null()) == NULL) | 127 | (cfg.canames = sk_OPENSSL_STRING_new_null()) == NULL) |
| 128 | return (1); | 128 | return (1); |
| 129 | 129 | ||
| 130 | if (!sk_OPENSSL_STRING_push(pkcs12_config.canames, arg)) | 130 | if (!sk_OPENSSL_STRING_push(cfg.canames, arg)) |
| 131 | return (1); | 131 | return (1); |
| 132 | 132 | ||
| 133 | return (0); | 133 | return (0); |
| @@ -136,20 +136,20 @@ pkcs12_opt_canames(char *arg) | |||
| 136 | static int | 136 | static int |
| 137 | pkcs12_opt_cert_pbe(char *arg) | 137 | pkcs12_opt_cert_pbe(char *arg) |
| 138 | { | 138 | { |
| 139 | return (!set_pbe(bio_err, &pkcs12_config.cert_pbe, arg)); | 139 | return (!set_pbe(bio_err, &cfg.cert_pbe, arg)); |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | static int | 142 | static int |
| 143 | pkcs12_opt_key_pbe(char *arg) | 143 | pkcs12_opt_key_pbe(char *arg) |
| 144 | { | 144 | { |
| 145 | return (!set_pbe(bio_err, &pkcs12_config.key_pbe, arg)); | 145 | return (!set_pbe(bio_err, &cfg.key_pbe, arg)); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | static int | 148 | static int |
| 149 | pkcs12_opt_passarg(char *arg) | 149 | pkcs12_opt_passarg(char *arg) |
| 150 | { | 150 | { |
| 151 | pkcs12_config.passarg = arg; | 151 | cfg.passarg = arg; |
| 152 | pkcs12_config.noprompt = 1; | 152 | cfg.noprompt = 1; |
| 153 | return (0); | 153 | return (0); |
| 154 | } | 154 | } |
| 155 | 155 | ||
| @@ -196,8 +196,8 @@ pkcs12_opt_enc(int argc, char **argv, int *argsused) | |||
| 196 | return (1); | 196 | return (1); |
| 197 | 197 | ||
| 198 | if (strcmp(name, "nodes") == 0) | 198 | if (strcmp(name, "nodes") == 0) |
| 199 | pkcs12_config.enc = NULL; | 199 | cfg.enc = NULL; |
| 200 | else if ((pkcs12_config.enc = get_cipher_by_name(name)) == NULL) | 200 | else if ((cfg.enc = get_cipher_by_name(name)) == NULL) |
| 201 | return (1); | 201 | return (1); |
| 202 | 202 | ||
| 203 | *argsused = 1; | 203 | *argsused = 1; |
| @@ -269,7 +269,7 @@ static const struct option pkcs12_options[] = { | |||
| 269 | .name = "cacerts", | 269 | .name = "cacerts", |
| 270 | .desc = "Only output CA certificates", | 270 | .desc = "Only output CA certificates", |
| 271 | .type = OPTION_VALUE_OR, | 271 | .type = OPTION_VALUE_OR, |
| 272 | .opt.value = &pkcs12_config.options, | 272 | .opt.value = &cfg.options, |
| 273 | .value = CACERTS, | 273 | .value = CACERTS, |
| 274 | }, | 274 | }, |
| 275 | { | 275 | { |
| @@ -277,7 +277,7 @@ static const struct option pkcs12_options[] = { | |||
| 277 | .argname = "file", | 277 | .argname = "file", |
| 278 | .desc = "PEM format file of CA certificates", | 278 | .desc = "PEM format file of CA certificates", |
| 279 | .type = OPTION_ARG, | 279 | .type = OPTION_ARG, |
| 280 | .opt.arg = &pkcs12_config.CAfile, | 280 | .opt.arg = &cfg.CAfile, |
| 281 | }, | 281 | }, |
| 282 | { | 282 | { |
| 283 | .name = "caname", | 283 | .name = "caname", |
| @@ -291,14 +291,14 @@ static const struct option pkcs12_options[] = { | |||
| 291 | .argname = "directory", | 291 | .argname = "directory", |
| 292 | .desc = "PEM format directory of CA certificates", | 292 | .desc = "PEM format directory of CA certificates", |
| 293 | .type = OPTION_ARG, | 293 | .type = OPTION_ARG, |
| 294 | .opt.arg = &pkcs12_config.CApath, | 294 | .opt.arg = &cfg.CApath, |
| 295 | }, | 295 | }, |
| 296 | { | 296 | { |
| 297 | .name = "certfile", | 297 | .name = "certfile", |
| 298 | .argname = "file", | 298 | .argname = "file", |
| 299 | .desc = "Add all certs in file", | 299 | .desc = "Add all certs in file", |
| 300 | .type = OPTION_ARG, | 300 | .type = OPTION_ARG, |
| 301 | .opt.arg = &pkcs12_config.certfile, | 301 | .opt.arg = &cfg.certfile, |
| 302 | }, | 302 | }, |
| 303 | { | 303 | { |
| 304 | .name = "certpbe", | 304 | .name = "certpbe", |
| @@ -311,13 +311,13 @@ static const struct option pkcs12_options[] = { | |||
| 311 | .name = "chain", | 311 | .name = "chain", |
| 312 | .desc = "Add certificate chain", | 312 | .desc = "Add certificate chain", |
| 313 | .type = OPTION_FLAG, | 313 | .type = OPTION_FLAG, |
| 314 | .opt.flag = &pkcs12_config.chain, | 314 | .opt.flag = &cfg.chain, |
| 315 | }, | 315 | }, |
| 316 | { | 316 | { |
| 317 | .name = "clcerts", | 317 | .name = "clcerts", |
| 318 | .desc = "Only output client certificates", | 318 | .desc = "Only output client certificates", |
| 319 | .type = OPTION_VALUE_OR, | 319 | .type = OPTION_VALUE_OR, |
| 320 | .opt.value = &pkcs12_config.options, | 320 | .opt.value = &cfg.options, |
| 321 | .value = CLCERTS, | 321 | .value = CLCERTS, |
| 322 | }, | 322 | }, |
| 323 | { | 323 | { |
| @@ -325,33 +325,33 @@ static const struct option pkcs12_options[] = { | |||
| 325 | .argname = "name", | 325 | .argname = "name", |
| 326 | .desc = "Microsoft CSP name", | 326 | .desc = "Microsoft CSP name", |
| 327 | .type = OPTION_ARG, | 327 | .type = OPTION_ARG, |
| 328 | .opt.arg = &pkcs12_config.csp_name, | 328 | .opt.arg = &cfg.csp_name, |
| 329 | }, | 329 | }, |
| 330 | { | 330 | { |
| 331 | .name = "descert", | 331 | .name = "descert", |
| 332 | .desc = "Encrypt PKCS#12 certificates with triple DES (default RC2-40)", | 332 | .desc = "Encrypt PKCS#12 certificates with triple DES (default RC2-40)", |
| 333 | .type = OPTION_VALUE, | 333 | .type = OPTION_VALUE, |
| 334 | .opt.value = &pkcs12_config.cert_pbe, | 334 | .opt.value = &cfg.cert_pbe, |
| 335 | .value = NID_pbe_WithSHA1And3_Key_TripleDES_CBC, | 335 | .value = NID_pbe_WithSHA1And3_Key_TripleDES_CBC, |
| 336 | }, | 336 | }, |
| 337 | { | 337 | { |
| 338 | .name = "export", | 338 | .name = "export", |
| 339 | .desc = "Output PKCS#12 file", | 339 | .desc = "Output PKCS#12 file", |
| 340 | .type = OPTION_FLAG, | 340 | .type = OPTION_FLAG, |
| 341 | .opt.flag = &pkcs12_config.export_cert, | 341 | .opt.flag = &cfg.export_cert, |
| 342 | }, | 342 | }, |
| 343 | { | 343 | { |
| 344 | .name = "in", | 344 | .name = "in", |
| 345 | .argname = "file", | 345 | .argname = "file", |
| 346 | .desc = "Input filename", | 346 | .desc = "Input filename", |
| 347 | .type = OPTION_ARG, | 347 | .type = OPTION_ARG, |
| 348 | .opt.arg = &pkcs12_config.infile, | 348 | .opt.arg = &cfg.infile, |
| 349 | }, | 349 | }, |
| 350 | { | 350 | { |
| 351 | .name = "info", | 351 | .name = "info", |
| 352 | .desc = "Give info about PKCS#12 structure", | 352 | .desc = "Give info about PKCS#12 structure", |
| 353 | .type = OPTION_VALUE_OR, | 353 | .type = OPTION_VALUE_OR, |
| 354 | .opt.value = &pkcs12_config.options, | 354 | .opt.value = &cfg.options, |
| 355 | .value = INFO, | 355 | .value = INFO, |
| 356 | }, | 356 | }, |
| 357 | { | 357 | { |
| @@ -359,13 +359,13 @@ static const struct option pkcs12_options[] = { | |||
| 359 | .argname = "file", | 359 | .argname = "file", |
| 360 | .desc = "Private key if not infile", | 360 | .desc = "Private key if not infile", |
| 361 | .type = OPTION_ARG, | 361 | .type = OPTION_ARG, |
| 362 | .opt.arg = &pkcs12_config.keyname, | 362 | .opt.arg = &cfg.keyname, |
| 363 | }, | 363 | }, |
| 364 | { | 364 | { |
| 365 | .name = "keyex", | 365 | .name = "keyex", |
| 366 | .desc = "Set MS key exchange type", | 366 | .desc = "Set MS key exchange type", |
| 367 | .type = OPTION_VALUE, | 367 | .type = OPTION_VALUE, |
| 368 | .opt.value = &pkcs12_config.keytype, | 368 | .opt.value = &cfg.keytype, |
| 369 | .value = KEY_EX, | 369 | .value = KEY_EX, |
| 370 | }, | 370 | }, |
| 371 | { | 371 | { |
| @@ -379,27 +379,27 @@ static const struct option pkcs12_options[] = { | |||
| 379 | .name = "keysig", | 379 | .name = "keysig", |
| 380 | .desc = "Set MS key signature type", | 380 | .desc = "Set MS key signature type", |
| 381 | .type = OPTION_VALUE, | 381 | .type = OPTION_VALUE, |
| 382 | .opt.value = &pkcs12_config.keytype, | 382 | .opt.value = &cfg.keytype, |
| 383 | .value = KEY_SIG, | 383 | .value = KEY_SIG, |
| 384 | }, | 384 | }, |
| 385 | { | 385 | { |
| 386 | .name = "LMK", | 386 | .name = "LMK", |
| 387 | .desc = "Add local machine keyset attribute to private key", | 387 | .desc = "Add local machine keyset attribute to private key", |
| 388 | .type = OPTION_FLAG, | 388 | .type = OPTION_FLAG, |
| 389 | .opt.flag = &pkcs12_config.add_lmk, | 389 | .opt.flag = &cfg.add_lmk, |
| 390 | }, | 390 | }, |
| 391 | { | 391 | { |
| 392 | .name = "macalg", | 392 | .name = "macalg", |
| 393 | .argname = "alg", | 393 | .argname = "alg", |
| 394 | .desc = "Digest algorithm used in MAC (default SHA1)", | 394 | .desc = "Digest algorithm used in MAC (default SHA1)", |
| 395 | .type = OPTION_ARG, | 395 | .type = OPTION_ARG, |
| 396 | .opt.arg = &pkcs12_config.macalg, | 396 | .opt.arg = &cfg.macalg, |
| 397 | }, | 397 | }, |
| 398 | { | 398 | { |
| 399 | .name = "maciter", | 399 | .name = "maciter", |
| 400 | .desc = "Use MAC iteration", | 400 | .desc = "Use MAC iteration", |
| 401 | .type = OPTION_VALUE, | 401 | .type = OPTION_VALUE, |
| 402 | .opt.value = &pkcs12_config.maciter, | 402 | .opt.value = &cfg.maciter, |
| 403 | .value = PKCS12_DEFAULT_ITER, | 403 | .value = PKCS12_DEFAULT_ITER, |
| 404 | }, | 404 | }, |
| 405 | { | 405 | { |
| @@ -407,13 +407,13 @@ static const struct option pkcs12_options[] = { | |||
| 407 | .argname = "name", | 407 | .argname = "name", |
| 408 | .desc = "Use name as friendly name", | 408 | .desc = "Use name as friendly name", |
| 409 | .type = OPTION_ARG, | 409 | .type = OPTION_ARG, |
| 410 | .opt.arg = &pkcs12_config.name, | 410 | .opt.arg = &cfg.name, |
| 411 | }, | 411 | }, |
| 412 | { | 412 | { |
| 413 | .name = "nocerts", | 413 | .name = "nocerts", |
| 414 | .desc = "Don't output certificates", | 414 | .desc = "Don't output certificates", |
| 415 | .type = OPTION_VALUE_OR, | 415 | .type = OPTION_VALUE_OR, |
| 416 | .opt.value = &pkcs12_config.options, | 416 | .opt.value = &cfg.options, |
| 417 | .value = NOCERTS, | 417 | .value = NOCERTS, |
| 418 | }, | 418 | }, |
| 419 | { | 419 | { |
| @@ -426,42 +426,42 @@ static const struct option pkcs12_options[] = { | |||
| 426 | .name = "noiter", | 426 | .name = "noiter", |
| 427 | .desc = "Don't use encryption iteration", | 427 | .desc = "Don't use encryption iteration", |
| 428 | .type = OPTION_VALUE, | 428 | .type = OPTION_VALUE, |
| 429 | .opt.value = &pkcs12_config.iter, | 429 | .opt.value = &cfg.iter, |
| 430 | .value = 1, | 430 | .value = 1, |
| 431 | }, | 431 | }, |
| 432 | { | 432 | { |
| 433 | .name = "nokeys", | 433 | .name = "nokeys", |
| 434 | .desc = "Don't output private keys", | 434 | .desc = "Don't output private keys", |
| 435 | .type = OPTION_VALUE_OR, | 435 | .type = OPTION_VALUE_OR, |
| 436 | .opt.value = &pkcs12_config.options, | 436 | .opt.value = &cfg.options, |
| 437 | .value = NOKEYS, | 437 | .value = NOKEYS, |
| 438 | }, | 438 | }, |
| 439 | { | 439 | { |
| 440 | .name = "nomac", | 440 | .name = "nomac", |
| 441 | .desc = "Don't generate MAC", | 441 | .desc = "Don't generate MAC", |
| 442 | .type = OPTION_VALUE, | 442 | .type = OPTION_VALUE, |
| 443 | .opt.value = &pkcs12_config.maciter, | 443 | .opt.value = &cfg.maciter, |
| 444 | .value = -1, | 444 | .value = -1, |
| 445 | }, | 445 | }, |
| 446 | { | 446 | { |
| 447 | .name = "nomaciter", | 447 | .name = "nomaciter", |
| 448 | .desc = "Don't use MAC iteration", | 448 | .desc = "Don't use MAC iteration", |
| 449 | .type = OPTION_VALUE, | 449 | .type = OPTION_VALUE, |
| 450 | .opt.value = &pkcs12_config.maciter, | 450 | .opt.value = &cfg.maciter, |
| 451 | .value = 1, | 451 | .value = 1, |
| 452 | }, | 452 | }, |
| 453 | { | 453 | { |
| 454 | .name = "nomacver", | 454 | .name = "nomacver", |
| 455 | .desc = "Don't verify MAC", | 455 | .desc = "Don't verify MAC", |
| 456 | .type = OPTION_VALUE, | 456 | .type = OPTION_VALUE, |
| 457 | .opt.value = &pkcs12_config.macver, | 457 | .opt.value = &cfg.macver, |
| 458 | .value = 0, | 458 | .value = 0, |
| 459 | }, | 459 | }, |
| 460 | { | 460 | { |
| 461 | .name = "noout", | 461 | .name = "noout", |
| 462 | .desc = "Don't output anything, just verify", | 462 | .desc = "Don't output anything, just verify", |
| 463 | .type = OPTION_VALUE_OR, | 463 | .type = OPTION_VALUE_OR, |
| 464 | .opt.value = &pkcs12_config.options, | 464 | .opt.value = &cfg.options, |
| 465 | .value = (NOKEYS | NOCERTS), | 465 | .value = (NOKEYS | NOCERTS), |
| 466 | }, | 466 | }, |
| 467 | { | 467 | { |
| @@ -469,21 +469,21 @@ static const struct option pkcs12_options[] = { | |||
| 469 | .argname = "file", | 469 | .argname = "file", |
| 470 | .desc = "Output filename", | 470 | .desc = "Output filename", |
| 471 | .type = OPTION_ARG, | 471 | .type = OPTION_ARG, |
| 472 | .opt.arg = &pkcs12_config.outfile, | 472 | .opt.arg = &cfg.outfile, |
| 473 | }, | 473 | }, |
| 474 | { | 474 | { |
| 475 | .name = "passin", | 475 | .name = "passin", |
| 476 | .argname = "arg", | 476 | .argname = "arg", |
| 477 | .desc = "Input file passphrase source", | 477 | .desc = "Input file passphrase source", |
| 478 | .type = OPTION_ARG, | 478 | .type = OPTION_ARG, |
| 479 | .opt.arg = &pkcs12_config.passargin, | 479 | .opt.arg = &cfg.passargin, |
| 480 | }, | 480 | }, |
| 481 | { | 481 | { |
| 482 | .name = "passout", | 482 | .name = "passout", |
| 483 | .argname = "arg", | 483 | .argname = "arg", |
| 484 | .desc = "Output file passphrase source", | 484 | .desc = "Output file passphrase source", |
| 485 | .type = OPTION_ARG, | 485 | .type = OPTION_ARG, |
| 486 | .opt.arg = &pkcs12_config.passargout, | 486 | .opt.arg = &cfg.passargout, |
| 487 | }, | 487 | }, |
| 488 | { | 488 | { |
| 489 | .name = "password", | 489 | .name = "password", |
| @@ -496,7 +496,7 @@ static const struct option pkcs12_options[] = { | |||
| 496 | .name = "twopass", | 496 | .name = "twopass", |
| 497 | .desc = "Separate MAC, encryption passwords", | 497 | .desc = "Separate MAC, encryption passwords", |
| 498 | .type = OPTION_FLAG, | 498 | .type = OPTION_FLAG, |
| 499 | .opt.flag = &pkcs12_config.twopass, | 499 | .opt.flag = &cfg.twopass, |
| 500 | }, | 500 | }, |
| 501 | { NULL }, | 501 | { NULL }, |
| 502 | }; | 502 | }; |
| @@ -541,73 +541,73 @@ pkcs12_main(int argc, char **argv) | |||
| 541 | exit(1); | 541 | exit(1); |
| 542 | } | 542 | } |
| 543 | 543 | ||
| 544 | memset(&pkcs12_config, 0, sizeof(pkcs12_config)); | 544 | memset(&cfg, 0, sizeof(cfg)); |
| 545 | pkcs12_config.cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; | 545 | cfg.cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; |
| 546 | pkcs12_config.enc = EVP_des_ede3_cbc(); | 546 | cfg.enc = EVP_des_ede3_cbc(); |
| 547 | pkcs12_config.iter = PKCS12_DEFAULT_ITER; | 547 | cfg.iter = PKCS12_DEFAULT_ITER; |
| 548 | pkcs12_config.key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; | 548 | cfg.key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; |
| 549 | pkcs12_config.maciter = PKCS12_DEFAULT_ITER; | 549 | cfg.maciter = PKCS12_DEFAULT_ITER; |
| 550 | pkcs12_config.macver = 1; | 550 | cfg.macver = 1; |
| 551 | 551 | ||
| 552 | if (options_parse(argc, argv, pkcs12_options, NULL, NULL) != 0) { | 552 | if (options_parse(argc, argv, pkcs12_options, NULL, NULL) != 0) { |
| 553 | pkcs12_usage(); | 553 | pkcs12_usage(); |
| 554 | goto end; | 554 | goto end; |
| 555 | } | 555 | } |
| 556 | 556 | ||
| 557 | if (pkcs12_config.passarg != NULL) { | 557 | if (cfg.passarg != NULL) { |
| 558 | if (pkcs12_config.export_cert) | 558 | if (cfg.export_cert) |
| 559 | pkcs12_config.passargout = pkcs12_config.passarg; | 559 | cfg.passargout = cfg.passarg; |
| 560 | else | 560 | else |
| 561 | pkcs12_config.passargin = pkcs12_config.passarg; | 561 | cfg.passargin = cfg.passarg; |
| 562 | } | 562 | } |
| 563 | if (!app_passwd(bio_err, pkcs12_config.passargin, | 563 | if (!app_passwd(bio_err, cfg.passargin, |
| 564 | pkcs12_config.passargout, &passin, &passout)) { | 564 | cfg.passargout, &passin, &passout)) { |
| 565 | BIO_printf(bio_err, "Error getting passwords\n"); | 565 | BIO_printf(bio_err, "Error getting passwords\n"); |
| 566 | goto end; | 566 | goto end; |
| 567 | } | 567 | } |
| 568 | if (cpass == NULL) { | 568 | if (cpass == NULL) { |
| 569 | if (pkcs12_config.export_cert) | 569 | if (cfg.export_cert) |
| 570 | cpass = passout; | 570 | cpass = passout; |
| 571 | else | 571 | else |
| 572 | cpass = passin; | 572 | cpass = passin; |
| 573 | } | 573 | } |
| 574 | if (cpass != NULL) { | 574 | if (cpass != NULL) { |
| 575 | mpass = cpass; | 575 | mpass = cpass; |
| 576 | pkcs12_config.noprompt = 1; | 576 | cfg.noprompt = 1; |
| 577 | } else { | 577 | } else { |
| 578 | cpass = pass; | 578 | cpass = pass; |
| 579 | mpass = macpass; | 579 | mpass = macpass; |
| 580 | } | 580 | } |
| 581 | 581 | ||
| 582 | if (pkcs12_config.infile == NULL) | 582 | if (cfg.infile == NULL) |
| 583 | in = BIO_new_fp(stdin, BIO_NOCLOSE); | 583 | in = BIO_new_fp(stdin, BIO_NOCLOSE); |
| 584 | else | 584 | else |
| 585 | in = BIO_new_file(pkcs12_config.infile, "rb"); | 585 | in = BIO_new_file(cfg.infile, "rb"); |
| 586 | if (in == NULL) { | 586 | if (in == NULL) { |
| 587 | BIO_printf(bio_err, "Error opening input file %s\n", | 587 | BIO_printf(bio_err, "Error opening input file %s\n", |
| 588 | pkcs12_config.infile ? pkcs12_config.infile : "<stdin>"); | 588 | cfg.infile ? cfg.infile : "<stdin>"); |
| 589 | perror(pkcs12_config.infile); | 589 | perror(cfg.infile); |
| 590 | goto end; | 590 | goto end; |
| 591 | } | 591 | } |
| 592 | 592 | ||
| 593 | if (pkcs12_config.outfile == NULL) { | 593 | if (cfg.outfile == NULL) { |
| 594 | out = BIO_new_fp(stdout, BIO_NOCLOSE); | 594 | out = BIO_new_fp(stdout, BIO_NOCLOSE); |
| 595 | } else | 595 | } else |
| 596 | out = BIO_new_file(pkcs12_config.outfile, "wb"); | 596 | out = BIO_new_file(cfg.outfile, "wb"); |
| 597 | if (out == NULL) { | 597 | if (out == NULL) { |
| 598 | BIO_printf(bio_err, "Error opening output file %s\n", | 598 | BIO_printf(bio_err, "Error opening output file %s\n", |
| 599 | pkcs12_config.outfile ? pkcs12_config.outfile : "<stdout>"); | 599 | cfg.outfile ? cfg.outfile : "<stdout>"); |
| 600 | perror(pkcs12_config.outfile); | 600 | perror(cfg.outfile); |
| 601 | goto end; | 601 | goto end; |
| 602 | } | 602 | } |
| 603 | if (pkcs12_config.twopass) { | 603 | if (cfg.twopass) { |
| 604 | if (EVP_read_pw_string(macpass, sizeof macpass, | 604 | if (EVP_read_pw_string(macpass, sizeof macpass, |
| 605 | "Enter MAC Password:", pkcs12_config.export_cert)) { | 605 | "Enter MAC Password:", cfg.export_cert)) { |
| 606 | BIO_printf(bio_err, "Can't read Password\n"); | 606 | BIO_printf(bio_err, "Can't read Password\n"); |
| 607 | goto end; | 607 | goto end; |
| 608 | } | 608 | } |
| 609 | } | 609 | } |
| 610 | if (pkcs12_config.export_cert) { | 610 | if (cfg.export_cert) { |
| 611 | EVP_PKEY *key = NULL; | 611 | EVP_PKEY *key = NULL; |
| 612 | X509 *ucert = NULL, *x = NULL; | 612 | X509 *ucert = NULL, *x = NULL; |
| 613 | STACK_OF(X509) *certs = NULL; | 613 | STACK_OF(X509) *certs = NULL; |
| @@ -615,25 +615,25 @@ pkcs12_main(int argc, char **argv) | |||
| 615 | unsigned char *catmp = NULL; | 615 | unsigned char *catmp = NULL; |
| 616 | int i; | 616 | int i; |
| 617 | 617 | ||
| 618 | if ((pkcs12_config.options & (NOCERTS | NOKEYS)) == | 618 | if ((cfg.options & (NOCERTS | NOKEYS)) == |
| 619 | (NOCERTS | NOKEYS)) { | 619 | (NOCERTS | NOKEYS)) { |
| 620 | BIO_printf(bio_err, "Nothing to do!\n"); | 620 | BIO_printf(bio_err, "Nothing to do!\n"); |
| 621 | goto export_end; | 621 | goto export_end; |
| 622 | } | 622 | } |
| 623 | if (pkcs12_config.options & NOCERTS) | 623 | if (cfg.options & NOCERTS) |
| 624 | pkcs12_config.chain = 0; | 624 | cfg.chain = 0; |
| 625 | 625 | ||
| 626 | if (!(pkcs12_config.options & NOKEYS)) { | 626 | if (!(cfg.options & NOKEYS)) { |
| 627 | key = load_key(bio_err, pkcs12_config.keyname ? | 627 | key = load_key(bio_err, cfg.keyname ? |
| 628 | pkcs12_config.keyname : pkcs12_config.infile, | 628 | cfg.keyname : cfg.infile, |
| 629 | FORMAT_PEM, 1, passin, "private key"); | 629 | FORMAT_PEM, 1, passin, "private key"); |
| 630 | if (!key) | 630 | if (!key) |
| 631 | goto export_end; | 631 | goto export_end; |
| 632 | } | 632 | } |
| 633 | 633 | ||
| 634 | /* Load in all certs in input file */ | 634 | /* Load in all certs in input file */ |
| 635 | if (!(pkcs12_config.options & NOCERTS)) { | 635 | if (!(cfg.options & NOCERTS)) { |
| 636 | certs = load_certs(bio_err, pkcs12_config.infile, | 636 | certs = load_certs(bio_err, cfg.infile, |
| 637 | FORMAT_PEM, NULL, "certificates"); | 637 | FORMAT_PEM, NULL, "certificates"); |
| 638 | if (certs == NULL) | 638 | if (certs == NULL) |
| 639 | goto export_end; | 639 | goto export_end; |
| @@ -661,10 +661,10 @@ pkcs12_main(int argc, char **argv) | |||
| 661 | } | 661 | } |
| 662 | 662 | ||
| 663 | /* Add any more certificates asked for */ | 663 | /* Add any more certificates asked for */ |
| 664 | if (pkcs12_config.certfile != NULL) { | 664 | if (cfg.certfile != NULL) { |
| 665 | STACK_OF(X509) *morecerts = NULL; | 665 | STACK_OF(X509) *morecerts = NULL; |
| 666 | if ((morecerts = load_certs(bio_err, | 666 | if ((morecerts = load_certs(bio_err, |
| 667 | pkcs12_config.certfile, FORMAT_PEM, NULL, | 667 | cfg.certfile, FORMAT_PEM, NULL, |
| 668 | "certificates from certfile")) == NULL) | 668 | "certificates from certfile")) == NULL) |
| 669 | goto export_end; | 669 | goto export_end; |
| 670 | while (sk_X509_num(morecerts) > 0) | 670 | while (sk_X509_num(morecerts) > 0) |
| @@ -674,7 +674,7 @@ pkcs12_main(int argc, char **argv) | |||
| 674 | 674 | ||
| 675 | 675 | ||
| 676 | /* If chaining get chain from user cert */ | 676 | /* If chaining get chain from user cert */ |
| 677 | if (pkcs12_config.chain) { | 677 | if (cfg.chain) { |
| 678 | int vret; | 678 | int vret; |
| 679 | STACK_OF(X509) *chain2; | 679 | STACK_OF(X509) *chain2; |
| 680 | X509_STORE *store = X509_STORE_new(); | 680 | X509_STORE *store = X509_STORE_new(); |
| @@ -684,7 +684,7 @@ pkcs12_main(int argc, char **argv) | |||
| 684 | goto export_end; | 684 | goto export_end; |
| 685 | } | 685 | } |
| 686 | if (!X509_STORE_load_locations(store, | 686 | if (!X509_STORE_load_locations(store, |
| 687 | pkcs12_config.CAfile, pkcs12_config.CApath)) | 687 | cfg.CAfile, cfg.CApath)) |
| 688 | X509_STORE_set_default_paths(store); | 688 | X509_STORE_set_default_paths(store); |
| 689 | 689 | ||
| 690 | vret = get_cert_chain(ucert, store, &chain2); | 690 | vret = get_cert_chain(ucert, store, &chain2); |
| @@ -711,51 +711,51 @@ pkcs12_main(int argc, char **argv) | |||
| 711 | } | 711 | } |
| 712 | /* Add any CA names */ | 712 | /* Add any CA names */ |
| 713 | 713 | ||
| 714 | for (i = 0; i < sk_OPENSSL_STRING_num(pkcs12_config.canames); | 714 | for (i = 0; i < sk_OPENSSL_STRING_num(cfg.canames); |
| 715 | i++) { | 715 | i++) { |
| 716 | catmp = (unsigned char *) sk_OPENSSL_STRING_value( | 716 | catmp = (unsigned char *) sk_OPENSSL_STRING_value( |
| 717 | pkcs12_config.canames, i); | 717 | cfg.canames, i); |
| 718 | X509_alias_set1(sk_X509_value(certs, i), catmp, -1); | 718 | X509_alias_set1(sk_X509_value(certs, i), catmp, -1); |
| 719 | } | 719 | } |
| 720 | 720 | ||
| 721 | if (pkcs12_config.csp_name != NULL && key != NULL) | 721 | if (cfg.csp_name != NULL && key != NULL) |
| 722 | EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, | 722 | EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, |
| 723 | MBSTRING_ASC, | 723 | MBSTRING_ASC, |
| 724 | (unsigned char *) pkcs12_config.csp_name, -1); | 724 | (unsigned char *) cfg.csp_name, -1); |
| 725 | 725 | ||
| 726 | if (pkcs12_config.add_lmk && key != NULL) | 726 | if (cfg.add_lmk && key != NULL) |
| 727 | EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, | 727 | EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, |
| 728 | -1); | 728 | -1); |
| 729 | 729 | ||
| 730 | if (!pkcs12_config.noprompt && | 730 | if (!cfg.noprompt && |
| 731 | EVP_read_pw_string(pass, sizeof pass, | 731 | EVP_read_pw_string(pass, sizeof pass, |
| 732 | "Enter Export Password:", 1)) { | 732 | "Enter Export Password:", 1)) { |
| 733 | BIO_printf(bio_err, "Can't read Password\n"); | 733 | BIO_printf(bio_err, "Can't read Password\n"); |
| 734 | goto export_end; | 734 | goto export_end; |
| 735 | } | 735 | } |
| 736 | if (!pkcs12_config.twopass) | 736 | if (!cfg.twopass) |
| 737 | strlcpy(macpass, pass, sizeof macpass); | 737 | strlcpy(macpass, pass, sizeof macpass); |
| 738 | 738 | ||
| 739 | 739 | ||
| 740 | p12 = PKCS12_create(cpass, pkcs12_config.name, key, ucert, | 740 | p12 = PKCS12_create(cpass, cfg.name, key, ucert, |
| 741 | certs, pkcs12_config.key_pbe, pkcs12_config.cert_pbe, | 741 | certs, cfg.key_pbe, cfg.cert_pbe, |
| 742 | pkcs12_config.iter, -1, pkcs12_config.keytype); | 742 | cfg.iter, -1, cfg.keytype); |
| 743 | 743 | ||
| 744 | if (p12 == NULL) { | 744 | if (p12 == NULL) { |
| 745 | ERR_print_errors(bio_err); | 745 | ERR_print_errors(bio_err); |
| 746 | goto export_end; | 746 | goto export_end; |
| 747 | } | 747 | } |
| 748 | if (pkcs12_config.macalg != NULL) { | 748 | if (cfg.macalg != NULL) { |
| 749 | macmd = EVP_get_digestbyname(pkcs12_config.macalg); | 749 | macmd = EVP_get_digestbyname(cfg.macalg); |
| 750 | if (macmd == NULL) { | 750 | if (macmd == NULL) { |
| 751 | BIO_printf(bio_err, | 751 | BIO_printf(bio_err, |
| 752 | "Unknown digest algorithm %s\n", | 752 | "Unknown digest algorithm %s\n", |
| 753 | pkcs12_config.macalg); | 753 | cfg.macalg); |
| 754 | } | 754 | } |
| 755 | } | 755 | } |
| 756 | if (pkcs12_config.maciter != -1) | 756 | if (cfg.maciter != -1) |
| 757 | PKCS12_set_mac(p12, mpass, -1, NULL, 0, | 757 | PKCS12_set_mac(p12, mpass, -1, NULL, 0, |
| 758 | pkcs12_config.maciter, macmd); | 758 | cfg.maciter, macmd); |
| 759 | 759 | ||
| 760 | i2d_PKCS12_bio(out, p12); | 760 | i2d_PKCS12_bio(out, p12); |
| 761 | 761 | ||
| @@ -773,27 +773,27 @@ pkcs12_main(int argc, char **argv) | |||
| 773 | ERR_print_errors(bio_err); | 773 | ERR_print_errors(bio_err); |
| 774 | goto end; | 774 | goto end; |
| 775 | } | 775 | } |
| 776 | if (!pkcs12_config.noprompt && EVP_read_pw_string(pass, sizeof pass, | 776 | if (!cfg.noprompt && EVP_read_pw_string(pass, sizeof pass, |
| 777 | "Enter Import Password:", 0)) { | 777 | "Enter Import Password:", 0)) { |
| 778 | BIO_printf(bio_err, "Can't read Password\n"); | 778 | BIO_printf(bio_err, "Can't read Password\n"); |
| 779 | goto end; | 779 | goto end; |
| 780 | } | 780 | } |
| 781 | 781 | ||
| 782 | if (!pkcs12_config.twopass) | 782 | if (!cfg.twopass) |
| 783 | strlcpy(macpass, pass, sizeof macpass); | 783 | strlcpy(macpass, pass, sizeof macpass); |
| 784 | 784 | ||
| 785 | if ((pkcs12_config.options & INFO) != 0 && PKCS12_mac_present(p12)) { | 785 | if ((cfg.options & INFO) != 0 && PKCS12_mac_present(p12)) { |
| 786 | const ASN1_INTEGER *iter; | 786 | const ASN1_INTEGER *iter; |
| 787 | 787 | ||
| 788 | PKCS12_get0_mac(NULL, NULL, NULL, &iter, p12); | 788 | PKCS12_get0_mac(NULL, NULL, NULL, &iter, p12); |
| 789 | BIO_printf(bio_err, "MAC Iteration %ld\n", | 789 | BIO_printf(bio_err, "MAC Iteration %ld\n", |
| 790 | iter != NULL ? ASN1_INTEGER_get(iter) : 1); | 790 | iter != NULL ? ASN1_INTEGER_get(iter) : 1); |
| 791 | } | 791 | } |
| 792 | if (pkcs12_config.macver) { | 792 | if (cfg.macver) { |
| 793 | /* If we enter empty password try no password first */ | 793 | /* If we enter empty password try no password first */ |
| 794 | if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { | 794 | if (!mpass[0] && PKCS12_verify_mac(p12, NULL, 0)) { |
| 795 | /* If mac and crypto pass the same set it to NULL too */ | 795 | /* If mac and crypto pass the same set it to NULL too */ |
| 796 | if (!pkcs12_config.twopass) | 796 | if (!cfg.twopass) |
| 797 | cpass = NULL; | 797 | cpass = NULL; |
| 798 | } else if (!PKCS12_verify_mac(p12, mpass, -1)) { | 798 | } else if (!PKCS12_verify_mac(p12, mpass, -1)) { |
| 799 | BIO_printf(bio_err, | 799 | BIO_printf(bio_err, |
| @@ -803,7 +803,7 @@ pkcs12_main(int argc, char **argv) | |||
| 803 | } | 803 | } |
| 804 | BIO_printf(bio_err, "MAC verified OK\n"); | 804 | BIO_printf(bio_err, "MAC verified OK\n"); |
| 805 | } | 805 | } |
| 806 | if (!dump_certs_keys_p12(out, p12, cpass, -1, pkcs12_config.options, | 806 | if (!dump_certs_keys_p12(out, p12, cpass, -1, cfg.options, |
| 807 | passout)) { | 807 | passout)) { |
| 808 | BIO_printf(bio_err, "Error outputting keys and certificates\n"); | 808 | BIO_printf(bio_err, "Error outputting keys and certificates\n"); |
| 809 | ERR_print_errors(bio_err); | 809 | ERR_print_errors(bio_err); |
| @@ -814,7 +814,7 @@ pkcs12_main(int argc, char **argv) | |||
| 814 | PKCS12_free(p12); | 814 | PKCS12_free(p12); |
| 815 | BIO_free(in); | 815 | BIO_free(in); |
| 816 | BIO_free_all(out); | 816 | BIO_free_all(out); |
| 817 | sk_OPENSSL_STRING_free(pkcs12_config.canames); | 817 | sk_OPENSSL_STRING_free(cfg.canames); |
| 818 | free(passin); | 818 | free(passin); |
| 819 | free(passout); | 819 | free(passout); |
| 820 | 820 | ||
| @@ -907,7 +907,7 @@ dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass, int passlen, | |||
| 907 | if ((pkey = EVP_PKCS82PKEY(p8)) == NULL) | 907 | if ((pkey = EVP_PKCS82PKEY(p8)) == NULL) |
| 908 | return 0; | 908 | return 0; |
| 909 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); | 909 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); |
| 910 | PEM_write_bio_PrivateKey(out, pkey, pkcs12_config.enc, NULL, 0, | 910 | PEM_write_bio_PrivateKey(out, pkey, cfg.enc, NULL, 0, |
| 911 | NULL, pempass); | 911 | NULL, pempass); |
| 912 | EVP_PKEY_free(pkey); | 912 | EVP_PKEY_free(pkey); |
| 913 | break; | 913 | break; |
| @@ -938,7 +938,7 @@ dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bag, char *pass, int passlen, | |||
| 938 | } | 938 | } |
| 939 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); | 939 | print_attribs(out, PKCS8_pkey_get0_attrs(p8), "Key Attributes"); |
| 940 | PKCS8_PRIV_KEY_INFO_free(p8); | 940 | PKCS8_PRIV_KEY_INFO_free(p8); |
| 941 | PEM_write_bio_PrivateKey(out, pkey, pkcs12_config.enc, NULL, 0, | 941 | PEM_write_bio_PrivateKey(out, pkey, cfg.enc, NULL, 0, |
| 942 | NULL, pempass); | 942 | NULL, pempass); |
| 943 | EVP_PKEY_free(pkey); | 943 | EVP_PKEY_free(pkey); |
| 944 | break; | 944 | break; |
