diff options
Diffstat (limited to '')
-rw-r--r-- | src/usr.bin/openssl/req.c | 66 |
1 files changed, 10 insertions, 56 deletions
diff --git a/src/usr.bin/openssl/req.c b/src/usr.bin/openssl/req.c index 4e1a4757dd..5ed658bfb1 100644 --- a/src/usr.bin/openssl/req.c +++ b/src/usr.bin/openssl/req.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: req.c,v 1.6 2015/08/22 16:36:05 jsing Exp $ */ | 1 | /* $OpenBSD: req.c,v 1.7 2015/09/11 14:30:23 bcook Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -140,15 +140,13 @@ static int genpkey_cb(EVP_PKEY_CTX * ctx); | |||
140 | static int req_check_len(int len, int n_min, int n_max); | 140 | static int req_check_len(int len, int n_min, int n_max); |
141 | static int check_end(const char *str, const char *end); | 141 | static int check_end(const char *str, const char *end); |
142 | static EVP_PKEY_CTX *set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, | 142 | static EVP_PKEY_CTX *set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, |
143 | long *pkeylen, char **palgnam, | 143 | long *pkeylen, char **palgnam); |
144 | ENGINE * keygen_engine); | ||
145 | static CONF *req_conf = NULL; | 144 | static CONF *req_conf = NULL; |
146 | static int batch = 0; | 145 | static int batch = 0; |
147 | 146 | ||
148 | int | 147 | int |
149 | req_main(int argc, char **argv) | 148 | req_main(int argc, char **argv) |
150 | { | 149 | { |
151 | ENGINE *e = NULL, *gen_eng = NULL; | ||
152 | unsigned long nmflag = 0, reqflag = 0; | 150 | unsigned long nmflag = 0, reqflag = 0; |
153 | int ex = 1, x509 = 0, days = 30; | 151 | int ex = 1, x509 = 0, days = 30; |
154 | X509 *x509ss = NULL; | 152 | X509 *x509ss = NULL; |
@@ -165,9 +163,6 @@ req_main(int argc, char **argv) | |||
165 | int nodes = 0, kludge = 0, newhdr = 0, subject = 0, pubkey = 0; | 163 | int nodes = 0, kludge = 0, newhdr = 0, subject = 0, pubkey = 0; |
166 | char *infile, *outfile, *prog, *keyfile = NULL, *template = NULL, | 164 | char *infile, *outfile, *prog, *keyfile = NULL, *template = NULL, |
167 | *keyout = NULL; | 165 | *keyout = NULL; |
168 | #ifndef OPENSSL_NO_ENGINE | ||
169 | char *engine = NULL; | ||
170 | #endif | ||
171 | char *extensions = NULL; | 166 | char *extensions = NULL; |
172 | char *req_exts = NULL; | 167 | char *req_exts = NULL; |
173 | const EVP_CIPHER *cipher = NULL; | 168 | const EVP_CIPHER *cipher = NULL; |
@@ -203,21 +198,6 @@ req_main(int argc, char **argv) | |||
203 | goto bad; | 198 | goto bad; |
204 | outformat = str2fmt(*(++argv)); | 199 | outformat = str2fmt(*(++argv)); |
205 | } | 200 | } |
206 | #ifndef OPENSSL_NO_ENGINE | ||
207 | else if (strcmp(*argv, "-engine") == 0) { | ||
208 | if (--argc < 1) | ||
209 | goto bad; | ||
210 | engine = *(++argv); | ||
211 | } else if (strcmp(*argv, "-keygen_engine") == 0) { | ||
212 | if (--argc < 1) | ||
213 | goto bad; | ||
214 | gen_eng = ENGINE_by_id(*(++argv)); | ||
215 | if (gen_eng == NULL) { | ||
216 | BIO_printf(bio_err, "Can't find keygen engine %s\n", *argv); | ||
217 | goto end; | ||
218 | } | ||
219 | } | ||
220 | #endif | ||
221 | else if (strcmp(*argv, "-key") == 0) { | 201 | else if (strcmp(*argv, "-key") == 0) { |
222 | if (--argc < 1) | 202 | if (--argc < 1) |
223 | goto bad; | 203 | goto bad; |
@@ -366,9 +346,6 @@ bad: | |||
366 | BIO_printf(bio_err, " -verify verify signature on REQ\n"); | 346 | BIO_printf(bio_err, " -verify verify signature on REQ\n"); |
367 | BIO_printf(bio_err, " -modulus RSA modulus\n"); | 347 | BIO_printf(bio_err, " -modulus RSA modulus\n"); |
368 | BIO_printf(bio_err, " -nodes don't encrypt the output key\n"); | 348 | BIO_printf(bio_err, " -nodes don't encrypt the output key\n"); |
369 | #ifndef OPENSSL_NO_ENGINE | ||
370 | BIO_printf(bio_err, " -engine e use engine e, possibly a hardware device\n"); | ||
371 | #endif | ||
372 | BIO_printf(bio_err, " -subject output the request's subject\n"); | 349 | BIO_printf(bio_err, " -subject output the request's subject\n"); |
373 | BIO_printf(bio_err, " -passin private key password source\n"); | 350 | BIO_printf(bio_err, " -passin private key password source\n"); |
374 | BIO_printf(bio_err, " -key file use the private key contained in file\n"); | 351 | BIO_printf(bio_err, " -key file use the private key contained in file\n"); |
@@ -520,12 +497,8 @@ bad: | |||
520 | if ((in == NULL) || (out == NULL)) | 497 | if ((in == NULL) || (out == NULL)) |
521 | goto end; | 498 | goto end; |
522 | 499 | ||
523 | #ifndef OPENSSL_NO_ENGINE | ||
524 | e = setup_engine(bio_err, engine, 0); | ||
525 | #endif | ||
526 | |||
527 | if (keyfile != NULL) { | 500 | if (keyfile != NULL) { |
528 | pkey = load_key(bio_err, keyfile, keyform, 0, passin, e, | 501 | pkey = load_key(bio_err, keyfile, keyform, 0, passin, |
529 | "Private Key"); | 502 | "Private Key"); |
530 | if (!pkey) { | 503 | if (!pkey) { |
531 | /* | 504 | /* |
@@ -541,7 +514,7 @@ bad: | |||
541 | } | 514 | } |
542 | if (keyalg) { | 515 | if (keyalg) { |
543 | genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey, | 516 | genctx = set_keygen_ctx(bio_err, keyalg, &pkey_type, &newkey, |
544 | &keyalgstr, gen_eng); | 517 | &keyalgstr); |
545 | if (!genctx) | 518 | if (!genctx) |
546 | goto end; | 519 | goto end; |
547 | } | 520 | } |
@@ -552,7 +525,7 @@ bad: | |||
552 | } | 525 | } |
553 | if (!genctx) { | 526 | if (!genctx) { |
554 | genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &newkey, | 527 | genctx = set_keygen_ctx(bio_err, NULL, &pkey_type, &newkey, |
555 | &keyalgstr, gen_eng); | 528 | &keyalgstr); |
556 | if (!genctx) | 529 | if (!genctx) |
557 | goto end; | 530 | goto end; |
558 | } | 531 | } |
@@ -893,10 +866,6 @@ end: | |||
893 | sk_OPENSSL_STRING_free(pkeyopts); | 866 | sk_OPENSSL_STRING_free(pkeyopts); |
894 | if (sigopts) | 867 | if (sigopts) |
895 | sk_OPENSSL_STRING_free(sigopts); | 868 | sk_OPENSSL_STRING_free(sigopts); |
896 | #ifndef OPENSSL_NO_ENGINE | ||
897 | if (gen_eng) | ||
898 | ENGINE_free(gen_eng); | ||
899 | #endif | ||
900 | free(keyalgstr); | 869 | free(keyalgstr); |
901 | X509_REQ_free(req); | 870 | X509_REQ_free(req); |
902 | X509_free(x509ss); | 871 | X509_free(x509ss); |
@@ -1370,8 +1339,7 @@ check_end(const char *str, const char *end) | |||
1370 | 1339 | ||
1371 | static EVP_PKEY_CTX * | 1340 | static EVP_PKEY_CTX * |
1372 | set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, | 1341 | set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, |
1373 | long *pkeylen, char **palgnam, | 1342 | long *pkeylen, char **palgnam) |
1374 | ENGINE * keygen_engine) | ||
1375 | { | 1343 | { |
1376 | EVP_PKEY_CTX *gctx = NULL; | 1344 | EVP_PKEY_CTX *gctx = NULL; |
1377 | EVP_PKEY *param = NULL; | 1345 | EVP_PKEY *param = NULL; |
@@ -1396,19 +1364,14 @@ set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, | |||
1396 | else { | 1364 | else { |
1397 | const char *p = strchr(gstr, ':'); | 1365 | const char *p = strchr(gstr, ':'); |
1398 | int len; | 1366 | int len; |
1399 | ENGINE *tmpeng; | ||
1400 | const EVP_PKEY_ASN1_METHOD *ameth; | 1367 | const EVP_PKEY_ASN1_METHOD *ameth; |
1401 | 1368 | ||
1402 | if (p) | 1369 | if (p) |
1403 | len = p - gstr; | 1370 | len = p - gstr; |
1404 | else | 1371 | else |
1405 | len = strlen(gstr); | 1372 | len = strlen(gstr); |
1406 | /* | ||
1407 | * The lookup of a the string will cover all engines so keep | ||
1408 | * a note of the implementation. | ||
1409 | */ | ||
1410 | 1373 | ||
1411 | ameth = EVP_PKEY_asn1_find_str(&tmpeng, gstr, len); | 1374 | ameth = EVP_PKEY_asn1_find_str(NULL, gstr, len); |
1412 | 1375 | ||
1413 | if (!ameth) { | 1376 | if (!ameth) { |
1414 | BIO_printf(err, "Unknown algorithm %.*s\n", len, gstr); | 1377 | BIO_printf(err, "Unknown algorithm %.*s\n", len, gstr); |
@@ -1416,10 +1379,6 @@ set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, | |||
1416 | } | 1379 | } |
1417 | EVP_PKEY_asn1_get0_info(NULL, pkey_type, NULL, NULL, NULL, | 1380 | EVP_PKEY_asn1_get0_info(NULL, pkey_type, NULL, NULL, NULL, |
1418 | ameth); | 1381 | ameth); |
1419 | #ifndef OPENSSL_NO_ENGINE | ||
1420 | if (tmpeng) | ||
1421 | ENGINE_finish(tmpeng); | ||
1422 | #endif | ||
1423 | if (*pkey_type == EVP_PKEY_RSA) { | 1382 | if (*pkey_type == EVP_PKEY_RSA) { |
1424 | if (p) { | 1383 | if (p) { |
1425 | keylen = strtonum(p + 1, 0, LONG_MAX, &errstr); | 1384 | keylen = strtonum(p + 1, 0, LONG_MAX, &errstr); |
@@ -1470,26 +1429,21 @@ set_keygen_ctx(BIO * err, const char *gstr, int *pkey_type, | |||
1470 | } | 1429 | } |
1471 | if (palgnam) { | 1430 | if (palgnam) { |
1472 | const EVP_PKEY_ASN1_METHOD *ameth; | 1431 | const EVP_PKEY_ASN1_METHOD *ameth; |
1473 | ENGINE *tmpeng; | ||
1474 | const char *anam; | 1432 | const char *anam; |
1475 | ameth = EVP_PKEY_asn1_find(&tmpeng, *pkey_type); | 1433 | ameth = EVP_PKEY_asn1_find(NULL, *pkey_type); |
1476 | if (!ameth) { | 1434 | if (!ameth) { |
1477 | BIO_puts(err, "Internal error: can't find key algorithm\n"); | 1435 | BIO_puts(err, "Internal error: can't find key algorithm\n"); |
1478 | return NULL; | 1436 | return NULL; |
1479 | } | 1437 | } |
1480 | EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &anam, ameth); | 1438 | EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &anam, ameth); |
1481 | *palgnam = strdup(anam); | 1439 | *palgnam = strdup(anam); |
1482 | #ifndef OPENSSL_NO_ENGINE | ||
1483 | if (tmpeng) | ||
1484 | ENGINE_finish(tmpeng); | ||
1485 | #endif | ||
1486 | } | 1440 | } |
1487 | if (param) { | 1441 | if (param) { |
1488 | gctx = EVP_PKEY_CTX_new(param, keygen_engine); | 1442 | gctx = EVP_PKEY_CTX_new(param, NULL); |
1489 | *pkeylen = EVP_PKEY_bits(param); | 1443 | *pkeylen = EVP_PKEY_bits(param); |
1490 | EVP_PKEY_free(param); | 1444 | EVP_PKEY_free(param); |
1491 | } else | 1445 | } else |
1492 | gctx = EVP_PKEY_CTX_new_id(*pkey_type, keygen_engine); | 1446 | gctx = EVP_PKEY_CTX_new_id(*pkey_type, NULL); |
1493 | 1447 | ||
1494 | if (!gctx) { | 1448 | if (!gctx) { |
1495 | BIO_puts(err, "Error allocating keygen context\n"); | 1449 | BIO_puts(err, "Error allocating keygen context\n"); |