diff options
author | jsing <> | 2022-01-06 18:23:56 +0000 |
---|---|---|
committer | jsing <> | 2022-01-06 18:23:56 +0000 |
commit | 8aaae3574818dcc48e518588a5f21f25567c50f6 (patch) | |
tree | 576e268ac740ee1d976432ed20601d429a60115e /src/lib/libssl/s3_lib.c | |
parent | 58c29787c787c30889a5c9cdee9a109dfb201177 (diff) | |
download | openbsd-8aaae3574818dcc48e518588a5f21f25567c50f6.tar.gz openbsd-8aaae3574818dcc48e518588a5f21f25567c50f6.tar.bz2 openbsd-8aaae3574818dcc48e518588a5f21f25567c50f6.zip |
Convert legacy TLS client to tls_key_share.
This requires adding DHE support to tls_key_share. In doing so,
tls_key_share_peer_public() has to lose the group argument and gains
an invalid_key argument. The one place that actually needs the group
check is tlsext_keyshare_client_parse(), so add code to do this.
ok inoguchi@ tb@
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
-rw-r--r-- | src/lib/libssl/s3_lib.c | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index b83a380547..54261c575a 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.220 2022/01/05 17:10:02 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.221 2022/01/06 18:23:56 jsing 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 | * |
@@ -1665,35 +1665,17 @@ long | |||
1665 | _SSL_get_peer_tmp_key(SSL *s, EVP_PKEY **key) | 1665 | _SSL_get_peer_tmp_key(SSL *s, EVP_PKEY **key) |
1666 | { | 1666 | { |
1667 | EVP_PKEY *pkey = NULL; | 1667 | EVP_PKEY *pkey = NULL; |
1668 | SESS_CERT *sc; | ||
1669 | int ret = 0; | 1668 | int ret = 0; |
1670 | 1669 | ||
1671 | *key = NULL; | 1670 | *key = NULL; |
1672 | 1671 | ||
1673 | if (s->session == NULL || s->session->sess_cert == NULL) | 1672 | if (S3I(s)->hs.key_share == NULL) |
1674 | return 0; | 1673 | goto err; |
1675 | |||
1676 | sc = s->session->sess_cert; | ||
1677 | 1674 | ||
1678 | if ((pkey = EVP_PKEY_new()) == NULL) | 1675 | if ((pkey = EVP_PKEY_new()) == NULL) |
1679 | return 0; | ||
1680 | |||
1681 | if (sc->peer_dh_tmp != NULL) { | ||
1682 | if (!EVP_PKEY_set1_DH(pkey, sc->peer_dh_tmp)) | ||
1683 | goto err; | ||
1684 | } else if (sc->peer_ecdh_tmp) { | ||
1685 | if (!EVP_PKEY_set1_EC_KEY(pkey, sc->peer_ecdh_tmp)) | ||
1686 | goto err; | ||
1687 | } else if (sc->peer_x25519_tmp != NULL) { | ||
1688 | if (!ssl_kex_dummy_ecdhe_x25519(pkey)) | ||
1689 | goto err; | ||
1690 | } else if (S3I(s)->hs.key_share != NULL) { | ||
1691 | if (!tls_key_share_peer_pkey(S3I(s)->hs.key_share, | ||
1692 | pkey)) | ||
1693 | goto err; | ||
1694 | } else { | ||
1695 | goto err; | 1676 | goto err; |
1696 | } | 1677 | if (!tls_key_share_peer_pkey(S3I(s)->hs.key_share, pkey)) |
1678 | goto err; | ||
1697 | 1679 | ||
1698 | *key = pkey; | 1680 | *key = pkey; |
1699 | pkey = NULL; | 1681 | pkey = NULL; |