diff options
-rw-r--r-- | src/lib/libtls/tls.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index f3e7148f0d..989339dc03 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.c,v 1.95 2023/05/14 07:26:25 op Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.96 2023/05/25 07:46:21 op Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -410,12 +410,18 @@ tls_keypair_setup_pkey(struct tls *ctx, struct tls_keypair *keypair, EVP_PKEY *p | |||
410 | tls_set_errorx(ctx, "RSA key setup failure"); | 410 | tls_set_errorx(ctx, "RSA key setup failure"); |
411 | goto err; | 411 | goto err; |
412 | } | 412 | } |
413 | if (ctx->config->sign_cb == NULL) | 413 | if (ctx->config->sign_cb != NULL) { |
414 | break; | 414 | rsa_method = tls_signer_rsa_method(); |
415 | if ((rsa_method = tls_signer_rsa_method()) == NULL || | 415 | if (rsa_method == NULL || |
416 | RSA_set_ex_data(rsa, 1, ctx->config) == 0 || | 416 | RSA_set_ex_data(rsa, 1, ctx->config) == 0 || |
417 | RSA_set_method(rsa, rsa_method) == 0) { | 417 | RSA_set_method(rsa, rsa_method) == 0) { |
418 | tls_set_errorx(ctx, "failed to setup RSA key"); | 418 | tls_set_errorx(ctx, "failed to setup RSA key"); |
419 | goto err; | ||
420 | } | ||
421 | } | ||
422 | /* Reset the key to work around caching in OpenSSL 3. */ | ||
423 | if (EVP_PKEY_set1_RSA(pkey, rsa) == 0) { | ||
424 | tls_set_errorx(ctx, "failed to set RSA key"); | ||
419 | goto err; | 425 | goto err; |
420 | } | 426 | } |
421 | break; | 427 | break; |
@@ -425,12 +431,18 @@ tls_keypair_setup_pkey(struct tls *ctx, struct tls_keypair *keypair, EVP_PKEY *p | |||
425 | tls_set_errorx(ctx, "EC key setup failure"); | 431 | tls_set_errorx(ctx, "EC key setup failure"); |
426 | goto err; | 432 | goto err; |
427 | } | 433 | } |
428 | if (ctx->config->sign_cb == NULL) | 434 | if (ctx->config->sign_cb != NULL) { |
429 | break; | 435 | ecdsa_method = tls_signer_ecdsa_method(); |
430 | if ((ecdsa_method = tls_signer_ecdsa_method()) == NULL || | 436 | if (ecdsa_method == NULL || |
431 | ECDSA_set_ex_data(eckey, 1, ctx->config) == 0 || | 437 | ECDSA_set_ex_data(eckey, 1, ctx->config) == 0 || |
432 | ECDSA_set_method(eckey, ecdsa_method) == 0) { | 438 | ECDSA_set_method(eckey, ecdsa_method) == 0) { |
433 | tls_set_errorx(ctx, "failed to setup EC key"); | 439 | tls_set_errorx(ctx, "failed to setup EC key"); |
440 | goto err; | ||
441 | } | ||
442 | } | ||
443 | /* Reset the key to work around caching in OpenSSL 3. */ | ||
444 | if (EVP_PKEY_set1_EC_KEY(pkey, eckey) == 0) { | ||
445 | tls_set_errorx(ctx, "failed to set EC key"); | ||
434 | goto err; | 446 | goto err; |
435 | } | 447 | } |
436 | break; | 448 | break; |