diff options
Diffstat (limited to 'src/lib/libcrypto/rsa')
| -rw-r--r-- | src/lib/libcrypto/rsa/rsa_pmeth.c | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_pmeth.c b/src/lib/libcrypto/rsa/rsa_pmeth.c index cb82b0908f..9be9079613 100644 --- a/src/lib/libcrypto/rsa/rsa_pmeth.c +++ b/src/lib/libcrypto/rsa/rsa_pmeth.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rsa_pmeth.c,v 1.39 2023/07/08 12:26:45 beck Exp $ */ | 1 | /* $OpenBSD: rsa_pmeth.c,v 1.40 2023/12/28 21:59:07 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 2006. | 3 | * project 2006. |
| 4 | */ | 4 | */ |
| @@ -756,32 +756,36 @@ pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) | |||
| 756 | { | 756 | { |
| 757 | RSA *rsa = NULL; | 757 | RSA *rsa = NULL; |
| 758 | RSA_PKEY_CTX *rctx = ctx->data; | 758 | RSA_PKEY_CTX *rctx = ctx->data; |
| 759 | BN_GENCB *pcb, cb; | 759 | BN_GENCB *pcb = NULL; |
| 760 | int ret; | 760 | BN_GENCB cb = {0}; |
| 761 | int ret = 0; | ||
| 761 | 762 | ||
| 762 | if (rctx->pub_exp == NULL) { | 763 | if (rctx->pub_exp == NULL) { |
| 763 | if ((rctx->pub_exp = BN_new()) == NULL) | 764 | if ((rctx->pub_exp = BN_new()) == NULL) |
| 764 | return 0; | 765 | goto err; |
| 765 | if (!BN_set_word(rctx->pub_exp, RSA_F4)) | 766 | if (!BN_set_word(rctx->pub_exp, RSA_F4)) |
| 766 | return 0; | 767 | goto err; |
| 767 | } | 768 | } |
| 769 | |||
| 768 | if ((rsa = RSA_new()) == NULL) | 770 | if ((rsa = RSA_new()) == NULL) |
| 769 | return 0; | 771 | goto err; |
| 770 | if (ctx->pkey_gencb != NULL) { | 772 | if (ctx->pkey_gencb != NULL) { |
| 771 | pcb = &cb; | 773 | pcb = &cb; |
| 772 | evp_pkey_set_cb_translate(pcb, ctx); | 774 | evp_pkey_set_cb_translate(pcb, ctx); |
| 773 | } else { | ||
| 774 | pcb = NULL; | ||
| 775 | } | 775 | } |
| 776 | ret = RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, pcb); | 776 | if (!RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, pcb)) |
| 777 | if (ret > 0 && !rsa_set_pss_param(rsa, ctx)) { | 777 | goto err; |
| 778 | RSA_free(rsa); | 778 | if (!rsa_set_pss_param(rsa, ctx)) |
| 779 | return 0; | 779 | goto err; |
| 780 | } | 780 | if (!EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, rsa)) |
| 781 | if (ret > 0) | 781 | goto err; |
| 782 | EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, rsa); | 782 | rsa = NULL; |
| 783 | else | 783 | |
| 784 | RSA_free(rsa); | 784 | ret = 1; |
| 785 | |||
| 786 | err: | ||
| 787 | RSA_free(rsa); | ||
| 788 | |||
| 785 | return ret; | 789 | return ret; |
| 786 | } | 790 | } |
| 787 | 791 | ||
