summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorop <>2023-06-18 11:43:03 +0000
committerop <>2023-06-18 11:43:03 +0000
commit727678bac9040805562e79cfeca4ee4b953bd557 (patch)
treecc3e371985ef9f03635d4ad74f97569e0f8bd591
parent2810e2ca8ccbcc1d5ea8e11a8475a66e01d25b73 (diff)
downloadopenbsd-727678bac9040805562e79cfeca4ee4b953bd557.tar.gz
openbsd-727678bac9040805562e79cfeca4ee4b953bd557.tar.bz2
openbsd-727678bac9040805562e79cfeca4ee4b953bd557.zip
libtls: switch ECDSA_METHOD usage to EC_KEY_METHOD
smtpd and the bits it needs in libtls are the only consumer left of ECDSA_METHOD, which is long deprecated. This paves the way for the removal in libcrypto. The diff is from gilles' work on OpenSMTPD-portable, libretls had a similar diff. ok tb@, jsing@
-rw-r--r--src/lib/libtls/tls.c10
-rw-r--r--src/lib/libtls/tls_internal.h4
-rw-r--r--src/lib/libtls/tls_signer.c15
3 files changed, 12 insertions, 17 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c
index 989339dc03..8444169bdc 100644
--- a/src/lib/libtls/tls.c
+++ b/src/lib/libtls/tls.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.c,v 1.96 2023/05/25 07:46:21 op Exp $ */ 1/* $OpenBSD: tls.c,v 1.97 2023/06/18 11:43:03 op Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -389,7 +389,7 @@ static int
389tls_keypair_setup_pkey(struct tls *ctx, struct tls_keypair *keypair, EVP_PKEY *pkey) 389tls_keypair_setup_pkey(struct tls *ctx, struct tls_keypair *keypair, EVP_PKEY *pkey)
390{ 390{
391 RSA_METHOD *rsa_method; 391 RSA_METHOD *rsa_method;
392 ECDSA_METHOD *ecdsa_method; 392 EC_KEY_METHOD *ecdsa_method;
393 RSA *rsa = NULL; 393 RSA *rsa = NULL;
394 EC_KEY *eckey = NULL; 394 EC_KEY *eckey = NULL;
395 int ret = -1; 395 int ret = -1;
@@ -427,15 +427,15 @@ tls_keypair_setup_pkey(struct tls *ctx, struct tls_keypair *keypair, EVP_PKEY *p
427 break; 427 break;
428 case EVP_PKEY_EC: 428 case EVP_PKEY_EC:
429 if ((eckey = EVP_PKEY_get1_EC_KEY(pkey)) == NULL || 429 if ((eckey = EVP_PKEY_get1_EC_KEY(pkey)) == NULL ||
430 ECDSA_set_ex_data(eckey, 0, keypair->pubkey_hash) == 0) { 430 EC_KEY_set_ex_data(eckey, 0, keypair->pubkey_hash) == 0) {
431 tls_set_errorx(ctx, "EC key setup failure"); 431 tls_set_errorx(ctx, "EC key setup failure");
432 goto err; 432 goto err;
433 } 433 }
434 if (ctx->config->sign_cb != NULL) { 434 if (ctx->config->sign_cb != NULL) {
435 ecdsa_method = tls_signer_ecdsa_method(); 435 ecdsa_method = tls_signer_ecdsa_method();
436 if (ecdsa_method == NULL || 436 if (ecdsa_method == NULL ||
437 ECDSA_set_ex_data(eckey, 1, ctx->config) == 0 || 437 EC_KEY_set_ex_data(eckey, 1, ctx->config) == 0 ||
438 ECDSA_set_method(eckey, ecdsa_method) == 0) { 438 EC_KEY_set_method(eckey, ecdsa_method) == 0) {
439 tls_set_errorx(ctx, "failed to setup EC key"); 439 tls_set_errorx(ctx, "failed to setup EC key");
440 goto err; 440 goto err;
441 } 441 }
diff --git a/src/lib/libtls/tls_internal.h b/src/lib/libtls/tls_internal.h
index f4c23f64e6..af081a079a 100644
--- a/src/lib/libtls/tls_internal.h
+++ b/src/lib/libtls/tls_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_internal.h,v 1.81 2023/04/09 18:26:26 tb Exp $ */ 1/* $OpenBSD: tls_internal.h,v 1.82 2023/06/18 11:43:03 op Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> 3 * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org>
4 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
@@ -298,7 +298,7 @@ int tls_cert_pubkey_hash(X509 *_cert, char **_hash);
298int tls_password_cb(char *_buf, int _size, int _rwflag, void *_u); 298int tls_password_cb(char *_buf, int _size, int _rwflag, void *_u);
299 299
300RSA_METHOD *tls_signer_rsa_method(void); 300RSA_METHOD *tls_signer_rsa_method(void);
301ECDSA_METHOD *tls_signer_ecdsa_method(void); 301EC_KEY_METHOD *tls_signer_ecdsa_method(void);
302 302
303#define TLS_PADDING_NONE 0 303#define TLS_PADDING_NONE 0
304#define TLS_PADDING_RSA_PKCS1 1 304#define TLS_PADDING_RSA_PKCS1 1
diff --git a/src/lib/libtls/tls_signer.c b/src/lib/libtls/tls_signer.c
index f6005d3e07..372fa77819 100644
--- a/src/lib/libtls/tls_signer.c
+++ b/src/lib/libtls/tls_signer.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_signer.c,v 1.5 2023/04/09 18:26:26 tb Exp $ */ 1/* $OpenBSD: tls_signer.c,v 1.6 2023/06/18 11:43:03 op Exp $ */
2/* 2/*
3 * Copyright (c) 2021 Eric Faurot <eric@openbsd.org> 3 * Copyright (c) 2021 Eric Faurot <eric@openbsd.org>
4 * 4 *
@@ -419,26 +419,21 @@ tls_ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv,
419 return (NULL); 419 return (NULL);
420} 420}
421 421
422ECDSA_METHOD * 422EC_KEY_METHOD *
423tls_signer_ecdsa_method(void) 423tls_signer_ecdsa_method(void)
424{ 424{
425 static ECDSA_METHOD *ecdsa_method = NULL; 425 static EC_KEY_METHOD *ecdsa_method = NULL;
426 426
427 pthread_mutex_lock(&signer_method_lock); 427 pthread_mutex_lock(&signer_method_lock);
428 428
429 if (ecdsa_method != NULL) 429 if (ecdsa_method != NULL)
430 goto out; 430 goto out;
431 431
432 ecdsa_method = calloc(1, sizeof(*ecdsa_method)); 432 ecdsa_method = EC_KEY_METHOD_new(NULL);
433 if (ecdsa_method == NULL) 433 if (ecdsa_method == NULL)
434 goto out; 434 goto out;
435 435
436 ecdsa_method->ecdsa_do_sign = tls_ecdsa_do_sign; 436 EC_KEY_METHOD_set_sign(ecdsa_method, NULL, NULL, tls_ecdsa_do_sign);
437 ecdsa_method->name = strdup("libtls ECDSA method");
438 if (ecdsa_method->name == NULL) {
439 free(ecdsa_method);
440 ecdsa_method = NULL;
441 }
442 437
443 out: 438 out:
444 pthread_mutex_unlock(&signer_method_lock); 439 pthread_mutex_unlock(&signer_method_lock);