summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/rsa/rsa_ameth.c4
-rw-r--r--src/lib/libssl/man/SSL_get_finished.36
-rw-r--r--src/lib/libssl/man/SSL_read_early_data.312
-rw-r--r--src/lib/libssl/s3_lib.c4
-rw-r--r--src/lib/libssl/ssl_clnt.c4
-rw-r--r--src/lib/libssl/ssl_local.h4
-rw-r--r--src/lib/libssl/ssl_sigalgs.h6
-rw-r--r--src/lib/libssl/ssl_srvr.c4
-rw-r--r--src/lib/libssl/ssl_tlsext.c34
-rw-r--r--src/lib/libssl/ssl_tlsext.h4
-rw-r--r--src/lib/libssl/tls1.h12
-rw-r--r--src/lib/libssl/tls13_client.c18
-rw-r--r--src/lib/libssl/tls13_handshake.c4
-rw-r--r--src/lib/libssl/tls13_internal.h6
-rw-r--r--src/lib/libssl/tls13_key_schedule.c12
-rw-r--r--src/lib/libssl/tls13_lib.c16
-rw-r--r--src/lib/libssl/tls13_record.h6
-rw-r--r--src/lib/libssl/tls13_record_layer.c24
-rw-r--r--src/lib/libssl/tls13_server.c16
19 files changed, 97 insertions, 99 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_ameth.c b/src/lib/libcrypto/rsa/rsa_ameth.c
index aca00a9ec8..9d8e2d2789 100644
--- a/src/lib/libcrypto/rsa/rsa_ameth.c
+++ b/src/lib/libcrypto/rsa/rsa_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: rsa_ameth.c,v 1.65 2026/04/07 13:16:41 tb Exp $ */ 1/* $OpenBSD: rsa_ameth.c,v 1.66 2026/08/21 17:15:22 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 */
@@ -879,7 +879,7 @@ rsa_pss_signature_info(const X509_ALGOR *alg, int *out_md_nid,
879 goto err; 879 goto err;
880 880
881 /* 881 /*
882 * RFC 8446, section 4.2.3 - restricts the digest algorithm: 882 * RFC 9846, section 4.3.3 - restricts the digest algorithm:
883 * - it must be one of SHA256, SHA384, and SHA512; 883 * - it must be one of SHA256, SHA384, and SHA512;
884 * - the same digest must be used in the mask generation function; 884 * - the same digest must be used in the mask generation function;
885 * - the salt length must match the output length of the digest. 885 * - the salt length must match the output length of the digest.
diff --git a/src/lib/libssl/man/SSL_get_finished.3 b/src/lib/libssl/man/SSL_get_finished.3
index 74e398563e..bf3913f7f0 100644
--- a/src/lib/libssl/man/SSL_get_finished.3
+++ b/src/lib/libssl/man/SSL_get_finished.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: SSL_get_finished.3,v 1.4 2026/08/21 17:05:01 tb Exp $ 1.\" $OpenBSD: SSL_get_finished.3,v 1.5 2026/08/21 17:15:22 tb Exp $
2.\" 2.\"
3.\" Copyright (c) 2020 Theo Buehler <tb@openbsd.org> 3.\" Copyright (c) 2020 Theo Buehler <tb@openbsd.org>
4.\" 4.\"
@@ -62,8 +62,8 @@ finished message.
62.Xr SSL_get_session 3 , 62.Xr SSL_get_session 3 ,
63.Xr SSL_set_session 3 63.Xr SSL_set_session 3
64.Sh STANDARDS 64.Sh STANDARDS
65RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3, 65RFC 9846: The Transport Layer Security (TLS) Protocol Version 1.3,
66section 4.4.4: Finished. 66section 4.5.3: Finished.
67.Pp 67.Pp
68RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2, 68RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2,
69section 7.4.9: Finished. 69section 7.4.9: Finished.
diff --git a/src/lib/libssl/man/SSL_read_early_data.3 b/src/lib/libssl/man/SSL_read_early_data.3
index d36b1e49f7..5ad0dc1d9d 100644
--- a/src/lib/libssl/man/SSL_read_early_data.3
+++ b/src/lib/libssl/man/SSL_read_early_data.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: SSL_read_early_data.3,v 1.5 2025/06/08 22:52:00 schwarze Exp $ 1.\" $OpenBSD: SSL_read_early_data.3,v 1.6 2026/08/21 17:15:22 tb Exp $
2.\" content checked up to: OpenSSL 6328d367 Jul 4 21:58:30 2020 +0200 2.\" content checked up to: OpenSSL 6328d367 Jul 4 21:58:30 2020 +0200
3.\" 3.\"
4.\" Copyright (c) 2020 Ingo Schwarze <schwarze@openbsd.org> 4.\" Copyright (c) 2020 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
15.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17.\" 17.\"
18.Dd $Mdocdate: June 8 2025 $ 18.Dd $Mdocdate: August 21 2026 $
19.Dt SSL_READ_EARLY_DATA 3 19.Dt SSL_READ_EARLY_DATA 3
20.Os 20.Os
21.Sh NAME 21.Sh NAME
@@ -158,15 +158,15 @@ or
158.Xr SSL_read 3 , 158.Xr SSL_read 3 ,
159.Xr SSL_write 3 159.Xr SSL_write 3
160.Sh STANDARDS 160.Sh STANDARDS
161RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3: 161RFC 9846: The Transport Layer Security (TLS) Protocol Version 1.3:
162.Bl -tag -width "section 4.2.10" -compact 162.Bl -tag -width "section 4.3.10" -compact
163.It Section 2.3 163.It Section 2.3
1640-RTT data 1640-RTT data
165.It Section 4.2.10 165.It Section 4.3.10
166Early Data Indication 166Early Data Indication
167.It Section 8 167.It Section 8
1680-RTT and Anti-Replay 1680-RTT and Anti-Replay
169.It Appendix E.5 169.It Appendix F.5
170Replay Attacks on 0-RTT 170Replay Attacks on 0-RTT
171.El 171.El
172.Sh HISTORY 172.Sh HISTORY
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index 929de03a3d..9a5e8cd2cc 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.261 2026/07/31 03:59:50 kenjiro Exp $ */ 1/* $OpenBSD: s3_lib.c,v 1.262 2026/08/21 17:15:22 tb 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 *
@@ -722,7 +722,7 @@ const SSL_CIPHER ssl3_ciphers[] = {
722 722
723#ifdef LIBRESSL_HAS_TLS1_3 723#ifdef LIBRESSL_HAS_TLS1_3
724 /* 724 /*
725 * TLSv1.3 cipher suites (RFC 8446). 725 * TLSv1.3 cipher suites (RFC 9846).
726 */ 726 */
727 { 727 {
728 .value = 0x1301, 728 .value = 0x1301,
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index 4803e35dd2..69221332f5 100644
--- a/src/lib/libssl/ssl_clnt.c
+++ b/src/lib/libssl/ssl_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_clnt.c,v 1.175 2026/07/15 15:00:17 jsing Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.176 2026/08/21 17:15:22 tb 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 *
@@ -893,7 +893,7 @@ ssl3_get_server_hello(SSL *s)
893 if (s->s3->hs.our_max_tls_version >= TLS1_2_VERSION && 893 if (s->s3->hs.our_max_tls_version >= TLS1_2_VERSION &&
894 s->s3->hs.negotiated_tls_version < s->s3->hs.our_max_tls_version) { 894 s->s3->hs.negotiated_tls_version < s->s3->hs.our_max_tls_version) {
895 /* 895 /*
896 * RFC 8446 section 4.1.3. We must not downgrade if the server 896 * RFC 9846 section 4.2.3. We must not downgrade if the server
897 * random value contains the TLS 1.2 or TLS 1.1 magical value. 897 * random value contains the TLS 1.2 or TLS 1.1 magical value.
898 */ 898 */
899 if (!CBS_skip(&server_random, 899 if (!CBS_skip(&server_random,
diff --git a/src/lib/libssl/ssl_local.h b/src/lib/libssl/ssl_local.h
index 9999d55963..67ca4a5511 100644
--- a/src/lib/libssl/ssl_local.h
+++ b/src/lib/libssl/ssl_local.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_local.h,v 1.42 2026/06/08 11:38:04 tb Exp $ */ 1/* $OpenBSD: ssl_local.h,v 1.43 2026/08/21 17:15:22 tb 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 *
@@ -428,7 +428,7 @@ struct ssl_session_st {
428 428
429 char *tlsext_hostname; 429 char *tlsext_hostname;
430 430
431 /* Session resumption - RFC 5077 and RFC 8446. */ 431 /* Session resumption - RFC 5077 and RFC 9846. */
432 unsigned char *tlsext_tick; /* Session ticket */ 432 unsigned char *tlsext_tick; /* Session ticket */
433 size_t tlsext_ticklen; /* Session ticket length */ 433 size_t tlsext_ticklen; /* Session ticket length */
434 uint32_t tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ 434 uint32_t tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */
diff --git a/src/lib/libssl/ssl_sigalgs.h b/src/lib/libssl/ssl_sigalgs.h
index 775842a093..e435ccc287 100644
--- a/src/lib/libssl/ssl_sigalgs.h
+++ b/src/lib/libssl/ssl_sigalgs.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_sigalgs.h,v 1.28 2026/05/31 14:34:44 jsing Exp $ */ 1/* $OpenBSD: ssl_sigalgs.h,v 1.29 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -23,8 +23,8 @@ __BEGIN_HIDDEN_DECLS
23#define SIGALG_NONE 0x0000 23#define SIGALG_NONE 0x0000
24 24
25/* 25/*
26 * RFC 8446 Section 4.2.3 26 * RFC 9846 section 4.3.3
27 * RFC 5246 Section 7.4.1.4.1 27 * RFC 5246 section 7.4.1.4.1
28 */ 28 */
29#define SIGALG_RSA_PKCS1_SHA224 0x0301 29#define SIGALG_RSA_PKCS1_SHA224 0x0301
30#define SIGALG_RSA_PKCS1_SHA256 0x0401 30#define SIGALG_RSA_PKCS1_SHA256 0x0401
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 73bdeacce0..43260d8065 100644
--- a/src/lib/libssl/ssl_srvr.c
+++ b/src/lib/libssl/ssl_srvr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_srvr.c,v 1.170 2026/06/06 15:24:26 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.171 2026/08/21 17:15:22 tb 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 *
@@ -1027,7 +1027,7 @@ ssl3_get_client_hello(SSL *s)
1027 if (s->s3->hs.our_max_tls_version >= TLS1_2_VERSION && 1027 if (s->s3->hs.our_max_tls_version >= TLS1_2_VERSION &&
1028 s->s3->hs.negotiated_tls_version < s->s3->hs.our_max_tls_version) { 1028 s->s3->hs.negotiated_tls_version < s->s3->hs.our_max_tls_version) {
1029 /* 1029 /*
1030 * RFC 8446 section 4.1.3. If we are downgrading from TLS 1.3 1030 * RFC 9846 section 4.2.3. If we are downgrading from TLS 1.3
1031 * we must set the last 8 bytes of the server random to magical 1031 * we must set the last 8 bytes of the server random to magical
1032 * values to indicate we meant to downgrade. For TLS 1.2 it is 1032 * values to indicate we meant to downgrade. For TLS 1.2 it is
1033 * recommended that we do the same. 1033 * recommended that we do the same.
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 039218e1ef..35e554e292 100644
--- a/src/lib/libssl/ssl_tlsext.c
+++ b/src/lib/libssl/ssl_tlsext.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.c,v 1.165 2026/08/18 04:40:17 tb Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.166 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -281,10 +281,8 @@ tlsext_supportedgroups_server_process(SSL *s, uint16_t msg_type, CBS *cbs,
281 if (!CBS_get_u16(&grouplist, &groups[i])) 281 if (!CBS_get_u16(&grouplist, &groups[i]))
282 goto err; 282 goto err;
283 /* 283 /*
284 * Do not allow duplicate groups to be sent. This is not 284 * RFC 9846 section 4.3.7: The "named_group_list" MUST NOT
285 * currently specified in RFC 8446 or earlier, but there is no 285 * contain any duplicate entries.
286 * legitimate justification for this to occur in TLS 1.2 or TLS
287 * 1.3.
288 */ 286 */
289 for (j = 0; j < i; j++) { 287 for (j = 0; j < i; j++) {
290 if (groups[i] == groups[j]) { 288 if (groups[i] == groups[j]) {
@@ -336,7 +334,7 @@ tlsext_supportedgroups_client_process(SSL *s, uint16_t msg_type, CBS *cbs,
336 return 0; 334 return 0;
337 335
338 /* 336 /*
339 * RFC 8446, section 4.2.7: TLSv1.3 servers can send this extension but 337 * RFC 9846 section 4.3.7: TLSv1.3 servers can send this extension but
340 * clients must not act on it during the handshake. This allows servers 338 * clients must not act on it during the handshake. This allows servers
341 * to advertise their preferences for subsequent handshakes. We ignore 339 * to advertise their preferences for subsequent handshakes. We ignore
342 * this complication. 340 * this complication.
@@ -1064,7 +1062,7 @@ tlsext_ocsp_client_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1064 if (ssl_effective_tls_version(s) >= TLS1_3_VERSION) { 1062 if (ssl_effective_tls_version(s) >= TLS1_3_VERSION) {
1065 if (msg_type == SSL_TLSEXT_MSG_CR) { 1063 if (msg_type == SSL_TLSEXT_MSG_CR) {
1066 /* 1064 /*
1067 * RFC 8446, 4.4.2.1 - the server may request an OCSP 1065 * RFC 9846, 4.5.1.1 - the server may request an OCSP
1068 * response with an empty status_request. 1066 * response with an empty status_request.
1069 */ 1067 */
1070 if (CBS_len(cbs) == 0) 1068 if (CBS_len(cbs) == 0)
@@ -1440,7 +1438,7 @@ tlsext_srtp_client_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1440#endif /* OPENSSL_NO_SRTP */ 1438#endif /* OPENSSL_NO_SRTP */
1441 1439
1442/* 1440/*
1443 * TLSv1.3 Key Share - RFC 8446 section 4.2.8. 1441 * TLSv1.3 Key Share - RFC 9846 section 4.3.8.
1444 */ 1442 */
1445static int 1443static int
1446tlsext_keyshare_client_needs(SSL *s, uint16_t msg_type) 1444tlsext_keyshare_client_needs(SSL *s, uint16_t msg_type)
@@ -1508,7 +1506,7 @@ tlsext_keyshare_server_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1508 CBS client_shares, key_exchange; 1506 CBS client_shares, key_exchange;
1509 1507
1510 /* 1508 /*
1511 * RFC 8446 section 4.2.8: 1509 * RFC 9846 section 4.3.8:
1512 * 1510 *
1513 * Each KeyShareEntry value MUST correspond to a group offered in the 1511 * Each KeyShareEntry value MUST correspond to a group offered in the
1514 * "supported_groups" extension and MUST appear in the same order. 1512 * "supported_groups" extension and MUST appear in the same order.
@@ -1597,7 +1595,7 @@ tlsext_keyshare_server_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1597 /* 1595 /*
1598 * There are no supported groups that are shared between the 1596 * There are no supported groups that are shared between the
1599 * client and server - this is treated as a handshake failure 1597 * client and server - this is treated as a handshake failure
1600 * or as insufficient security - see RFC 8446 section 4.1.1. 1598 * or as insufficient security - see RFC 9846 section 4.2.1.
1601 */ 1599 */
1602 *alert = TLS13_ALERT_HANDSHAKE_FAILURE; 1600 *alert = TLS13_ALERT_HANDSHAKE_FAILURE;
1603 return 0; 1601 return 0;
@@ -1766,7 +1764,7 @@ tlsext_keyshare_client_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1766} 1764}
1767 1765
1768/* 1766/*
1769 * Supported Versions - RFC 8446 section 4.2.1. 1767 * Supported Versions - RFC 9846 section 4.3.1.
1770 */ 1768 */
1771static int 1769static int
1772tlsext_versions_client_needs(SSL *s, uint16_t msg_type) 1770tlsext_versions_client_needs(SSL *s, uint16_t msg_type)
@@ -1868,7 +1866,7 @@ tlsext_versions_client_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1868 1866
1869 1867
1870/* 1868/*
1871 * Cookie - RFC 8446 section 4.2.2. 1869 * Cookie - RFC 9846 section 4.3.2.
1872 */ 1870 */
1873 1871
1874static int 1872static int
@@ -1980,7 +1978,7 @@ tlsext_cookie_client_process(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1980} 1978}
1981 1979
1982/* 1980/*
1983 * Pre-Shared Key Exchange Modes - RFC 8446, 4.2.9. 1981 * Pre-Shared Key Exchange Modes - RFC 9846 section 4.3.9.
1984 */ 1982 */
1985 1983
1986static int 1984static int
@@ -2050,7 +2048,7 @@ tlsext_psk_kex_modes_client_process(SSL *s, uint16_t msg_type, CBS *cbs,
2050} 2048}
2051 2049
2052/* 2050/*
2053 * Pre-Shared Key Extension - RFC 8446, 4.2.11 2051 * Pre-Shared Key Extension - RFC 9846 section 4.3.11
2054 */ 2052 */
2055 2053
2056static int 2054static int
@@ -2484,7 +2482,7 @@ tlsext_randomize_build_order(SSL *s)
2484 return 0; 2482 return 0;
2485 s->tlsext_build_order_len = N_TLS_EXTENSIONS; 2483 s->tlsext_build_order_len = N_TLS_EXTENSIONS;
2486 2484
2487 /* RFC 8446, section 4.2 - PSK MUST be the last extension in the CH. */ 2485 /* RFC 9846 section 4.3 - PSK MUST be the last extension in the CH. */
2488 if ((psk_ext = tls_extension_find(TLSEXT_TYPE_pre_shared_key, 2486 if ((psk_ext = tls_extension_find(TLSEXT_TYPE_pre_shared_key,
2489 NULL)) == NULL) 2487 NULL)) == NULL)
2490 return 0; 2488 return 0;
@@ -2538,7 +2536,7 @@ tlsext_build(SSL *s, int is_server, uint16_t msg_type, CBB *cbb)
2538 tlsext = s->tlsext_build_order[i]; 2536 tlsext = s->tlsext_build_order[i];
2539 ext = tlsext_funcs(tlsext, is_server); 2537 ext = tlsext_funcs(tlsext, is_server);
2540 2538
2541 /* RFC 8446 Section 4.2 */ 2539 /* RFC 9846 section 4.3 */
2542 if (tls_version >= TLS1_3_VERSION && 2540 if (tls_version >= TLS1_3_VERSION &&
2543 !(tlsext->messages & msg_type)) 2541 !(tlsext->messages & msg_type))
2544 continue; 2542 continue;
@@ -2571,7 +2569,7 @@ static int
2571tlsext_clienthello_hash_extension(SSL *s, uint16_t type, CBS *cbs) 2569tlsext_clienthello_hash_extension(SSL *s, uint16_t type, CBS *cbs)
2572{ 2570{
2573 /* 2571 /*
2574 * RFC 8446 4.1.2. For subsequent CH, early data will be removed, 2572 * RFC 9846, 4.2.2. For subsequent CH, early data will be removed,
2575 * cookie may be added, padding may be removed. 2573 * cookie may be added, padding may be removed.
2576 */ 2574 */
2577 struct tls13_ctx *ctx = s->tls13; 2575 struct tls13_ctx *ctx = s->tls13;
@@ -2644,7 +2642,7 @@ tlsext_parse(SSL *s, struct tlsext_data *td, int is_server, uint16_t msg_type,
2644 goto err; 2642 goto err;
2645 } 2643 }
2646 2644
2647 /* RFC 8446 Section 4.2 */ 2645 /* RFC 9846 section 4.3 */
2648 if (tls_version >= TLS1_3_VERSION && 2646 if (tls_version >= TLS1_3_VERSION &&
2649 !(tlsext->messages & msg_type)) { 2647 !(tlsext->messages & msg_type)) {
2650 alert_desc = SSL_AD_ILLEGAL_PARAMETER; 2648 alert_desc = SSL_AD_ILLEGAL_PARAMETER;
diff --git a/src/lib/libssl/ssl_tlsext.h b/src/lib/libssl/ssl_tlsext.h
index 4fd2ec05a0..e1fc2634c2 100644
--- a/src/lib/libssl/ssl_tlsext.h
+++ b/src/lib/libssl/ssl_tlsext.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.h,v 1.34 2024/03/26 03:44:11 beck Exp $ */ 1/* $OpenBSD: ssl_tlsext.h,v 1.35 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -20,7 +20,7 @@
20#ifndef HEADER_SSL_TLSEXT_H 20#ifndef HEADER_SSL_TLSEXT_H
21#define HEADER_SSL_TLSEXT_H 21#define HEADER_SSL_TLSEXT_H
22 22
23/* TLSv1.3 - RFC 8446 Section 4.2. */ 23/* TLSv1.3 - RFC 9846 section 4.3. */
24#define SSL_TLSEXT_MSG_CH 0x0001 /* ClientHello */ 24#define SSL_TLSEXT_MSG_CH 0x0001 /* ClientHello */
25#define SSL_TLSEXT_MSG_SH 0x0002 /* ServerHello */ 25#define SSL_TLSEXT_MSG_SH 0x0002 /* ServerHello */
26#define SSL_TLSEXT_MSG_EE 0x0004 /* EncryptedExtension */ 26#define SSL_TLSEXT_MSG_EE 0x0004 /* EncryptedExtension */
diff --git a/src/lib/libssl/tls1.h b/src/lib/libssl/tls1.h
index 2d5dffc6cf..42451a4214 100644
--- a/src/lib/libssl/tls1.h
+++ b/src/lib/libssl/tls1.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls1.h,v 1.61 2025/04/18 07:34:01 tb Exp $ */ 1/* $OpenBSD: tls1.h,v 1.62 2026/08/21 17:15:22 tb 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 *
@@ -240,7 +240,7 @@ extern "C" {
240/* ExtensionType value from RFC 5054. */ 240/* ExtensionType value from RFC 5054. */
241#define TLSEXT_TYPE_srp 12 241#define TLSEXT_TYPE_srp 12
242 242
243/* ExtensionType value from RFC 5246/RFC 8446. */ 243/* ExtensionType value from RFC 5246/RFC 9846. */
244#define TLSEXT_TYPE_signature_algorithms 13 244#define TLSEXT_TYPE_signature_algorithms 13
245 245
246/* ExtensionType value from RFC 5764. */ 246/* ExtensionType value from RFC 5764. */
@@ -258,7 +258,7 @@ extern "C" {
258/* ExtensionType value from RFC 4507. */ 258/* ExtensionType value from RFC 4507. */
259#define TLSEXT_TYPE_session_ticket 35 259#define TLSEXT_TYPE_session_ticket 35
260 260
261/* ExtensionType values from RFC 8446 section 4.2 */ 261/* ExtensionType values from RFC 9846 section 4.3 */
262#if defined(LIBRESSL_HAS_TLS1_3) || defined(LIBRESSL_INTERNAL) 262#if defined(LIBRESSL_HAS_TLS1_3) || defined(LIBRESSL_INTERNAL)
263#define TLSEXT_TYPE_pre_shared_key 41 263#define TLSEXT_TYPE_pre_shared_key 41
264#define TLSEXT_TYPE_early_data 42 264#define TLSEXT_TYPE_early_data 42
@@ -279,7 +279,7 @@ extern "C" {
279 279
280/* 280/*
281 * TLS 1.3 extension names from OpenSSL, where they decided to use a different 281 * TLS 1.3 extension names from OpenSSL, where they decided to use a different
282 * name from that given in RFC 8446. 282 * name from that given in RFC 9846.
283 */ 283 */
284#if defined(LIBRESSL_HAS_TLS1_3) 284#if defined(LIBRESSL_HAS_TLS1_3)
285#define TLSEXT_TYPE_psk TLSEXT_TYPE_pre_shared_key 285#define TLSEXT_TYPE_psk TLSEXT_TYPE_pre_shared_key
@@ -486,7 +486,7 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)
486#define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 486#define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4
487#define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 487#define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5
488 488
489/* TLS 1.3 cipher suites from RFC 8446 appendix B.4. */ 489/* TLS 1.3 cipher suites from RFC 9846 appendix B.4. */
490#if defined(LIBRESSL_HAS_TLS1_3) || defined(LIBRESSL_INTERNAL) 490#if defined(LIBRESSL_HAS_TLS1_3) || defined(LIBRESSL_INTERNAL)
491#define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 491#define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301
492#define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 492#define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302
@@ -725,7 +725,7 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)
725#define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" 725#define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305"
726#define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" 726#define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305"
727 727
728/* TLS 1.3 cipher suites from RFC 8446 appendix B.4. */ 728/* TLS 1.3 cipher suites from RFC 9846 appendix B.4. */
729#if defined(LIBRESSL_HAS_TLS1_3) || defined(LIBRESSL_INTERNAL) 729#if defined(LIBRESSL_HAS_TLS1_3) || defined(LIBRESSL_INTERNAL)
730#define TLS1_3_TXT_AES_128_GCM_SHA256 "AEAD-AES128-GCM-SHA256" 730#define TLS1_3_TXT_AES_128_GCM_SHA256 "AEAD-AES128-GCM-SHA256"
731#define TLS1_3_TXT_AES_256_GCM_SHA384 "AEAD-AES256-GCM-SHA384" 731#define TLS1_3_TXT_AES_256_GCM_SHA384 "AEAD-AES256-GCM-SHA384"
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c
index fec3e825fe..8abfdbdd1f 100644
--- a/src/lib/libssl/tls13_client.c
+++ b/src/lib/libssl/tls13_client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_client.c,v 1.108 2026/06/14 15:51:17 jsing Exp $ */ 1/* $OpenBSD: tls13_client.c,v 1.109 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -73,8 +73,8 @@ tls13_client_init(struct tls13_ctx *ctx)
73 /* 73 /*
74 * The legacy session identifier should either be set to an 74 * The legacy session identifier should either be set to an
75 * unpredictable 32-byte value or zero length... a non-zero length 75 * unpredictable 32-byte value or zero length... a non-zero length
76 * legacy session identifier triggers compatibility mode (see RFC 8446 76 * legacy session identifier triggers compatibility mode (see RFC 9846
77 * Appendix D.4). In the pre-TLSv1.3 case a zero length value is used. 77 * Appendix E.4). In the pre-TLSv1.3 case a zero length value is used.
78 */ 78 */
79 if (ctx->middlebox_compat && 79 if (ctx->middlebox_compat &&
80 ctx->hs->our_max_tls_version >= TLS1_3_VERSION) { 80 ctx->hs->our_max_tls_version >= TLS1_3_VERSION) {
@@ -242,7 +242,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs)
242 if (tls13_server_hello_is_legacy(cbs)) { 242 if (tls13_server_hello_is_legacy(cbs)) {
243 if (ctx->hs->our_max_tls_version >= TLS1_3_VERSION) { 243 if (ctx->hs->our_max_tls_version >= TLS1_3_VERSION) {
244 /* 244 /*
245 * RFC 8446 section 4.1.3: we must not downgrade if 245 * RFC 9846 section 4.2.3: we must not downgrade if
246 * the server random value contains the TLS 1.2 or 1.1 246 * the server random value contains the TLS 1.2 or 1.1
247 * magical value. 247 * magical value.
248 */ 248 */
@@ -285,7 +285,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs)
285 /* 285 /*
286 * The supported versions extension indicated 0x0304 or greater. 286 * The supported versions extension indicated 0x0304 or greater.
287 * Ensure that it was 0x0304 and that legacy version is set to 0x0303 287 * Ensure that it was 0x0304 and that legacy version is set to 0x0303
288 * (RFC 8446 section 4.2.1). 288 * (RFC 9846 section 4.3.1).
289 */ 289 */
290 if (ctx->hs->tls13.server_version != TLS1_3_VERSION || 290 if (ctx->hs->tls13.server_version != TLS1_3_VERSION ||
291 legacy_version != TLS1_2_VERSION) { 291 legacy_version != TLS1_2_VERSION) {
@@ -318,7 +318,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs)
318 if (!(ctx->handshake_stage.hs_type & WITHOUT_HRR) && !ctx->hs->tls13.hrr) { 318 if (!(ctx->handshake_stage.hs_type & WITHOUT_HRR) && !ctx->hs->tls13.hrr) {
319 /* 319 /*
320 * A ServerHello following a HelloRetryRequest MUST use the same 320 * A ServerHello following a HelloRetryRequest MUST use the same
321 * cipher suite (RFC 8446 section 4.1.4). 321 * cipher suite (RFC 9846 section 4.2.4).
322 */ 322 */
323 if (ctx->hs->cipher != cipher) { 323 if (ctx->hs->cipher != cipher) {
324 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 324 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER;
@@ -450,7 +450,7 @@ tls13_client_hello_retry_send(struct tls13_ctx *ctx, CBB *cbb)
450 /* 450 /*
451 * Ensure that the server supported group is one that we listed in our 451 * Ensure that the server supported group is one that we listed in our
452 * supported groups and is not the same as the key share we previously 452 * supported groups and is not the same as the key share we previously
453 * offered. See RFC 8446 section 4.2.8. 453 * offered. See RFC 9846 section 4.3.8.
454 */ 454 */
455 if (!tls1_check_group(ctx->ssl, ctx->hs->tls13.server_group)) { 455 if (!tls1_check_group(ctx->ssl, ctx->hs->tls13.server_group)) {
456 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER; 456 ctx->alert = TLS13_ALERT_ILLEGAL_PARAMETER;
@@ -855,8 +855,8 @@ tls13_client_select_certificate(struct tls13_ctx *ctx, SSL_CERT_PKEY **out_cpk,
855 *out_sigalg = NULL; 855 *out_sigalg = NULL;
856 856
857 /* 857 /*
858 * XXX - RFC 8446, 4.4.2.3: the server can communicate preferences 858 * XXX - RFC 9846, 4.5.1.2: the server can communicate preferences
859 * with the certificate_authorities (4.2.4) and oid_filters (4.2.5) 859 * with the certificate_authorities (4.3.4) and oid_filters (4.3.5)
860 * extensions. We should honor the former and must apply the latter. 860 * extensions. We should honor the former and must apply the latter.
861 */ 861 */
862 862
diff --git a/src/lib/libssl/tls13_handshake.c b/src/lib/libssl/tls13_handshake.c
index 0dc2333708..24178a3396 100644
--- a/src/lib/libssl/tls13_handshake.c
+++ b/src/lib/libssl/tls13_handshake.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_handshake.c,v 1.73 2024/02/03 19:57:14 tb Exp $ */ 1/* $OpenBSD: tls13_handshake.c,v 1.74 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018-2021 Theo Buehler <tb@openbsd.org> 3 * Copyright (c) 2018-2021 Theo Buehler <tb@openbsd.org>
4 * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2019 Joel Sing <jsing@openbsd.org>
@@ -22,7 +22,7 @@
22#include "tls13_handshake.h" 22#include "tls13_handshake.h"
23#include "tls13_internal.h" 23#include "tls13_internal.h"
24 24
25/* Based on RFC 8446 and inspired by s2n's TLS 1.2 state machine. */ 25/* Based on RFC 9846 and inspired by s2n's TLS 1.2 state machine. */
26 26
27struct tls13_handshake_action { 27struct tls13_handshake_action {
28 uint8_t handshake_type; 28 uint8_t handshake_type;
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h
index 7a7f8abc63..d3d7ddb9b3 100644
--- a/src/lib/libssl/tls13_internal.h
+++ b/src/lib/libssl/tls13_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_internal.h,v 1.105 2025/03/09 15:12:18 tb Exp $ */ 1/* $OpenBSD: tls13_internal.h,v 1.106 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@@ -114,7 +114,7 @@ struct tls13_secret {
114 size_t len; 114 size_t len;
115}; 115};
116 116
117/* RFC 8446 Section 7.1 Page 92 */ 117/* RFC 9846 section 7.1 */
118struct tls13_secrets { 118struct tls13_secrets {
119 const EVP_MD *digest; 119 const EVP_MD *digest;
120 int resumption; 120 int resumption;
@@ -339,7 +339,7 @@ int tls13_legacy_shutdown(SSL *ssl);
339int tls13_legacy_servername_process(struct tls13_ctx *ctx, uint8_t *alert); 339int tls13_legacy_servername_process(struct tls13_ctx *ctx, uint8_t *alert);
340 340
341/* 341/*
342 * Message Types - RFC 8446, Section B.3. 342 * Message Types - RFC 9846 section B.3.
343 * 343 *
344 * Values listed as "_RESERVED" were used in previous versions of TLS and are 344 * Values listed as "_RESERVED" were used in previous versions of TLS and are
345 * listed here for completeness. TLS 1.3 implementations MUST NOT send them but 345 * listed here for completeness. TLS 1.3 implementations MUST NOT send them but
diff --git a/src/lib/libssl/tls13_key_schedule.c b/src/lib/libssl/tls13_key_schedule.c
index 05bcf0f006..01fbe6603e 100644
--- a/src/lib/libssl/tls13_key_schedule.c
+++ b/src/lib/libssl/tls13_key_schedule.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_key_schedule.c,v 1.18 2022/11/26 16:08:56 tb Exp $ */ 1/* $OpenBSD: tls13_key_schedule.c,v 1.19 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018, Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018, Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -47,7 +47,7 @@ tls13_secret_cleanup(struct tls13_secret *secret)
47 47
48/* 48/*
49 * Allocate a set of secrets for a key schedule using 49 * Allocate a set of secrets for a key schedule using
50 * a size of hash_length from RFC 8446 section 7.1. 50 * a size of hash_length from RFC 9846 section 7.1.
51 */ 51 */
52struct tls13_secrets * 52struct tls13_secrets *
53tls13_secrets_create(const EVP_MD *digest, int resumption) 53tls13_secrets_create(const EVP_MD *digest, int resumption)
@@ -256,7 +256,7 @@ tls13_derive_early_secrets(struct tls13_secrets *secrets,
256 &secrets->empty_hash)) 256 &secrets->empty_hash))
257 return 0; 257 return 0;
258 258
259 /* RFC 8446 recommends */ 259 /* RFC 9846 recommends */
260 if (!secrets->insecure) 260 if (!secrets->insecure)
261 explicit_bzero(secrets->extracted_early.data, 261 explicit_bzero(secrets->extracted_early.data,
262 secrets->extracted_early.len); 262 secrets->extracted_early.len);
@@ -300,7 +300,7 @@ tls13_derive_handshake_secrets(struct tls13_secrets *secrets,
300 &secrets->empty_hash)) 300 &secrets->empty_hash))
301 return 0; 301 return 0;
302 302
303 /* RFC 8446 recommends */ 303 /* RFC 9846 recommends */
304 if (!secrets->insecure) 304 if (!secrets->insecure)
305 explicit_bzero(secrets->extracted_handshake.data, 305 explicit_bzero(secrets->extracted_handshake.data,
306 secrets->extracted_handshake.len); 306 secrets->extracted_handshake.len);
@@ -349,7 +349,7 @@ tls13_derive_application_secrets(struct tls13_secrets *secrets,
349 context)) 349 context))
350 return 0; 350 return 0;
351 351
352 /* RFC 8446 recommends */ 352 /* RFC 9846 recommends */
353 if (!secrets->insecure) 353 if (!secrets->insecure)
354 explicit_bzero(secrets->extracted_master.data, 354 explicit_bzero(secrets->extracted_master.data,
355 secrets->extracted_master.len); 355 secrets->extracted_master.len);
@@ -400,7 +400,7 @@ tls13_exporter(struct tls13_ctx *ctx, const uint8_t *label, size_t label_len,
400 int ret = 0; 400 int ret = 0;
401 401
402 /* 402 /*
403 * RFC 8446 Section 7.5. 403 * RFC 9846 section 7.5.
404 */ 404 */
405 405
406 memset(&context, 0, sizeof(context)); 406 memset(&context, 0, sizeof(context));
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c
index c3470b2931..f93452402f 100644
--- a/src/lib/libssl/tls13_lib.c
+++ b/src/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_lib.c,v 1.78 2025/06/07 10:25:12 tb Exp $ */ 1/* $OpenBSD: tls13_lib.c,v 1.79 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org>
@@ -25,14 +25,14 @@
25#include "tls13_internal.h" 25#include "tls13_internal.h"
26 26
27/* 27/*
28 * RFC 8446, section 4.6.1. Servers must not indicate a lifetime longer than 28 * RFC 9846 section 4.7.1. Servers must not indicate a lifetime longer than
29 * 7 days and clients must not cache tickets for longer than 7 days. 29 * 7 days and clients must not cache tickets for longer than 7 days.
30 */ 30 */
31 31
32#define TLS13_MAX_TICKET_LIFETIME (7 * 24 * 3600) 32#define TLS13_MAX_TICKET_LIFETIME (7 * 24 * 3600)
33 33
34/* 34/*
35 * Downgrade sentinels - RFC 8446 section 4.1.3, magic values which must be set 35 * Downgrade sentinels - RFC 9846 section 4.2.3, magic values which must be set
36 * by the server in server random if it is willing to downgrade but supports 36 * by the server in server random if it is willing to downgrade but supports
37 * TLSv1.3 37 * TLSv1.3
38 */ 38 */
@@ -44,7 +44,7 @@ const uint8_t tls13_downgrade_11[8] = {
44}; 44};
45 45
46/* 46/*
47 * HelloRetryRequest hash - RFC 8446 section 4.1.3. 47 * HelloRetryRequest hash - RFC 9846 section 4.2.3.
48 */ 48 */
49const uint8_t tls13_hello_retry_request_hash[32] = { 49const uint8_t tls13_hello_retry_request_hash[32] = {
50 0xcf, 0x21, 0xad, 0x74, 0xe5, 0x9a, 0x61, 0x11, 50 0xcf, 0x21, 0xad, 0x74, 0xe5, 0x9a, 0x61, 0x11,
@@ -54,7 +54,7 @@ const uint8_t tls13_hello_retry_request_hash[32] = {
54}; 54};
55 55
56/* 56/*
57 * Certificate Verify padding - RFC 8446 section 4.4.3. 57 * Certificate Verify padding - RFC 9846 section 4.5.2.
58 */ 58 */
59const uint8_t tls13_cert_verify_pad[64] = { 59const uint8_t tls13_cert_verify_pad[64] = {
60 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 60 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
@@ -156,7 +156,7 @@ tls13_alert_received_cb(uint8_t alert_level, uint8_t alert_desc, void *arg)
156 if (alert_desc == TLS13_ALERT_USER_CANCELED) { 156 if (alert_desc == TLS13_ALERT_USER_CANCELED) {
157 /* 157 /*
158 * We treat this as advisory, since a close_notify alert 158 * We treat this as advisory, since a close_notify alert
159 * SHOULD follow this alert (RFC 8446 section 6.1). 159 * MUST follow this alert (RFC 9846 section 6.1).
160 */ 160 */
161 return; 161 return;
162 } 162 }
@@ -369,7 +369,7 @@ tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs)
369 return tls13_send_alert(ctx->rl, alert); 369 return tls13_send_alert(ctx->rl, alert);
370} 370}
371 371
372/* RFC 8446 section 4.6.1 */ 372/* RFC 9846 section 4.7.1 */
373static ssize_t 373static ssize_t
374tls13_new_session_ticket_recv(struct tls13_ctx *ctx, CBS *cbs) 374tls13_new_session_ticket_recv(struct tls13_ctx *ctx, CBS *cbs)
375{ 375{
@@ -628,7 +628,7 @@ tls13_synthetic_handshake_message(struct tls13_ctx *ctx)
628 628
629 /* 629 /*
630 * Replace ClientHello with synthetic handshake message - see 630 * Replace ClientHello with synthetic handshake message - see
631 * RFC 8446 section 4.4.1. 631 * RFC 9846 section 4.1.
632 */ 632 */
633 if (!tls1_transcript_hash_init(s)) 633 if (!tls1_transcript_hash_init(s))
634 goto err; 634 goto err;
diff --git a/src/lib/libssl/tls13_record.h b/src/lib/libssl/tls13_record.h
index 18e4fa1aba..e9bcae6efd 100644
--- a/src/lib/libssl/tls13_record.h
+++ b/src/lib/libssl/tls13_record.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_record.h,v 1.5 2021/10/23 13:12:14 jsing Exp $ */ 1/* $OpenBSD: tls13_record.h,v 1.6 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -23,7 +23,7 @@
23__BEGIN_HIDDEN_DECLS 23__BEGIN_HIDDEN_DECLS
24 24
25/* 25/*
26 * TLSv1.3 Record Protocol - RFC 8446 section 5. 26 * TLSv1.3 Record Protocol - RFC 9846 section 5.
27 * 27 *
28 * The maximum plaintext is 2^14, however for inner plaintext an additional 28 * The maximum plaintext is 2^14, however for inner plaintext an additional
29 * byte is allowed for the content type. A maximum AEAD overhead of 255-bytes 29 * byte is allowed for the content type. A maximum AEAD overhead of 255-bytes
@@ -41,7 +41,7 @@ __BEGIN_HIDDEN_DECLS
41 (TLS13_RECORD_HEADER_LEN + TLS13_RECORD_MAX_CIPHERTEXT_LEN) 41 (TLS13_RECORD_HEADER_LEN + TLS13_RECORD_MAX_CIPHERTEXT_LEN)
42 42
43/* 43/*
44 * TLSv1.3 Per-Record Nonces and Sequence Numbers - RFC 8446 section 5.3. 44 * TLSv1.3 Per-Record Nonces and Sequence Numbers - RFC 9846 section 5.3.
45 */ 45 */
46#define TLS13_RECORD_SEQ_NUM_LEN 8 46#define TLS13_RECORD_SEQ_NUM_LEN 8
47 47
diff --git a/src/lib/libssl/tls13_record_layer.c b/src/lib/libssl/tls13_record_layer.c
index 778356af15..e573b50760 100644
--- a/src/lib/libssl/tls13_record_layer.c
+++ b/src/lib/libssl/tls13_record_layer.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_record_layer.c,v 1.75 2026/07/31 03:59:50 kenjiro Exp $ */ 1/* $OpenBSD: tls13_record_layer.c,v 1.76 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -95,7 +95,7 @@ struct tls13_record_layer {
95 uint8_t alert_level; 95 uint8_t alert_level;
96 uint8_t alert_desc; 96 uint8_t alert_desc;
97 97
98 /* Pending post-handshake handshake messages (RFC 8446, section 4.6). */ 98 /* Pending post-handshake handshake messages (RFC 9846, section 4.7). */
99 CBS phh_cbs; 99 CBS phh_cbs;
100 uint8_t *phh_data; 100 uint8_t *phh_data;
101 size_t phh_len; 101 size_t phh_len;
@@ -200,7 +200,7 @@ tls13_record_layer_inc_seq_num(uint8_t *seq_num)
200{ 200{
201 int i; 201 int i;
202 202
203 /* RFC 8446 section 5.3 - sequence numbers must not wrap. */ 203 /* RFC 9846 section 5.3 - sequence numbers must not wrap. */
204 if (memcmp(seq_num, tls13_max_seq_num, TLS13_RECORD_SEQ_NUM_LEN) == 0) 204 if (memcmp(seq_num, tls13_max_seq_num, TLS13_RECORD_SEQ_NUM_LEN) == 0)
205 return 0; 205 return 0;
206 206
@@ -222,7 +222,7 @@ tls13_record_layer_update_nonce(struct tls13_secret *nonce,
222 return 0; 222 return 0;
223 223
224 /* 224 /*
225 * RFC 8446 section 5.3 - sequence number is zero padded and XOR'd 225 * RFC 9846 section 5.3 - sequence number is zero padded and XOR'd
226 * with the IV to produce a per-record nonce. The IV will also be 226 * with the IV to produce a per-record nonce. The IV will also be
227 * at least 8-bytes in length. 227 * at least 8-bytes in length.
228 */ 228 */
@@ -284,7 +284,7 @@ tls13_record_layer_process_alert(struct tls13_record_layer *rl)
284 ssize_t ret = TLS13_IO_FAILURE; 284 ssize_t ret = TLS13_IO_FAILURE;
285 285
286 /* 286 /*
287 * RFC 8446 - sections 5.1 and 6. 287 * RFC 9846 - sections 5.1 and 6.
288 * 288 *
289 * A TLSv1.3 alert record can only contain a single alert - this means 289 * A TLSv1.3 alert record can only contain a single alert - this means
290 * that processing the alert must consume all of the record. The alert 290 * that processing the alert must consume all of the record. The alert
@@ -305,8 +305,8 @@ tls13_record_layer_process_alert(struct tls13_record_layer *rl)
305 tls_content_clear(rl->rcontent); 305 tls_content_clear(rl->rcontent);
306 306
307 /* 307 /*
308 * Alert level is ignored for closure alerts (RFC 8446 section 6.1), 308 * Alert level is ignored for closure alerts (RFC 9846 section 6.1),
309 * however for error alerts (RFC 8446 section 6.2), the alert level 309 * however for error alerts (RFC 9846 section 6.2), the alert level
310 * must be specified as fatal. 310 * must be specified as fatal.
311 */ 311 */
312 if (alert_desc == TLS13_ALERT_CLOSE_NOTIFY) { 312 if (alert_desc == TLS13_ALERT_CLOSE_NOTIFY) {
@@ -344,7 +344,7 @@ tls13_record_layer_send_alert(struct tls13_record_layer *rl)
344{ 344{
345 ssize_t ret; 345 ssize_t ret;
346 346
347 /* This has to fit into a single record, per RFC 8446 section 5.1. */ 347 /* This has to fit into a single record, per RFC 9846 section 5.1. */
348 if ((ret = tls13_record_layer_write_record(rl, SSL3_RT_ALERT, 348 if ((ret = tls13_record_layer_write_record(rl, SSL3_RT_ALERT,
349 rl->alert_data, rl->alert_len)) != rl->alert_len) { 349 rl->alert_data, rl->alert_len)) != rl->alert_len) {
350 if (ret == TLS13_IO_EOF) 350 if (ret == TLS13_IO_EOF)
@@ -604,7 +604,7 @@ tls13_record_layer_open_record_protected(struct tls13_record_layer *rl)
604 break; 604 break;
605 } 605 }
606 if (content_type == 0) { 606 if (content_type == 0) {
607 /* Unexpected message per RFC 8446 section 5.4. */ 607 /* Unexpected message per RFC 9846 section 5.4. */
608 rl->alert = TLS13_ALERT_UNEXPECTED_MESSAGE; 608 rl->alert = TLS13_ALERT_UNEXPECTED_MESSAGE;
609 goto err; 609 goto err;
610 } 610 }
@@ -835,7 +835,7 @@ tls13_record_layer_read_record(struct tls13_record_layer *rl)
835 /* 835 /*
836 * In response to a client hello we may receive an alert in a 836 * In response to a client hello we may receive an alert in a
837 * record with a legacy version. Otherwise enforce that the 837 * record with a legacy version. Otherwise enforce that the
838 * legacy record version is 0x0303 per RFC 8446, section 5.1. 838 * legacy record version is 0x0303 per RFC 9846, section 5.1.
839 */ 839 */
840 if (rl->legacy_version == TLS1_2_VERSION && 840 if (rl->legacy_version == TLS1_2_VERSION &&
841 tls13_record_version(rl->rrec) != TLS1_2_VERSION && 841 tls13_record_version(rl->rrec) != TLS1_2_VERSION &&
@@ -846,7 +846,7 @@ tls13_record_layer_read_record(struct tls13_record_layer *rl)
846 * Bag of hacks ahead... after the first ClientHello message has been 846 * Bag of hacks ahead... after the first ClientHello message has been
847 * sent or received and before the peer's Finished message has been 847 * sent or received and before the peer's Finished message has been
848 * received, we may receive an unencrypted ChangeCipherSpec record 848 * received, we may receive an unencrypted ChangeCipherSpec record
849 * (see RFC 8446 section 5 and appendix D.4). This record must be 849 * (see RFC 9846 section 5 and appendix E.4). This record must be
850 * ignored. 850 * ignored.
851 */ 851 */
852 if (content_type == SSL3_RT_CHANGE_CIPHER_SPEC) { 852 if (content_type == SSL3_RT_CHANGE_CIPHER_SPEC) {
@@ -881,7 +881,7 @@ tls13_record_layer_read_record(struct tls13_record_layer *rl)
881 /* 881 /*
882 * On receiving a handshake or alert record with empty inner plaintext, 882 * On receiving a handshake or alert record with empty inner plaintext,
883 * we must terminate the connection with an unexpected_message alert. 883 * we must terminate the connection with an unexpected_message alert.
884 * See RFC 8446 section 5.4. 884 * See RFC 9846 section 5.4.
885 */ 885 */
886 if (tls_content_remaining(rl->rcontent) == 0 && 886 if (tls_content_remaining(rl->rcontent) == 0 &&
887 (tls_content_type(rl->rcontent) == SSL3_RT_ALERT || 887 (tls_content_type(rl->rcontent) == SSL3_RT_ALERT ||
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c
index 8ad11c6428..8b0dc8a26b 100644
--- a/src/lib/libssl/tls13_server.c
+++ b/src/lib/libssl/tls13_server.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_server.c,v 1.113 2026/07/31 03:59:50 kenjiro Exp $ */ 1/* $OpenBSD: tls13_server.c,v 1.114 2026/08/21 17:15:22 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
@@ -102,13 +102,13 @@ tls13_client_hello_required_extensions(struct tls13_ctx *ctx)
102 SSL *s = ctx->ssl; 102 SSL *s = ctx->ssl;
103 103
104 /* 104 /*
105 * RFC 8446, section 9.2. If the ClientHello has supported_versions 105 * RFC 9846 section 9.2. If the ClientHello has supported_versions
106 * containing TLSv1.3, presence or absence of some extensions requires 106 * containing TLSv1.3, presence or absence of some extensions requires
107 * presence or absence of others. 107 * presence or absence of others.
108 */ 108 */
109 109
110 /* 110 /*
111 * RFC 8446 section 4.2.9 - if we received a pre_shared_key, then we 111 * RFC 9846 section 4.3.9 - if we received a pre_shared_key, then we
112 * also need psk_key_exchange_modes. Otherwise, section 9.2 specifies 112 * also need psk_key_exchange_modes. Otherwise, section 9.2 specifies
113 * that we need both signature_algorithms and supported_groups. 113 * that we need both signature_algorithms and supported_groups.
114 */ 114 */
@@ -133,7 +133,7 @@ tls13_client_hello_required_extensions(struct tls13_ctx *ctx)
133 133
134 /* 134 /*
135 * XXX - Require server_name from client? If so, we SHOULD enforce 135 * XXX - Require server_name from client? If so, we SHOULD enforce
136 * this here - RFC 8446, 9.2. 136 * this here - RFC 9846, 9.2.
137 */ 137 */
138 138
139 return 1; 139 return 1;
@@ -246,7 +246,7 @@ tls13_client_hello_process(struct tls13_ctx *ctx, CBS *cbs)
246 /* 246 /*
247 * The legacy session identifier must either be zero length or a 32 byte 247 * The legacy session identifier must either be zero length or a 32 byte
248 * value (in which case the client is requesting middlebox compatibility 248 * value (in which case the client is requesting middlebox compatibility
249 * mode), as per RFC 8446 section 4.1.2. If it is valid, store the value 249 * mode), as per RFC 9846 section 4.2.2. If it is valid, store the value
250 * so that we can echo it back to the client. 250 * so that we can echo it back to the client.
251 */ 251 */
252 if (CBS_len(&session_id) != 0 && 252 if (CBS_len(&session_id) != 0 &&
@@ -459,7 +459,7 @@ tls13_server_hello_retry_request_sent(struct tls13_ctx *ctx)
459 /* 459 /*
460 * If the client has requested middlebox compatibility mode, 460 * If the client has requested middlebox compatibility mode,
461 * we MUST send a dummy CCS following our first handshake message. 461 * we MUST send a dummy CCS following our first handshake message.
462 * See RFC 8446 Appendix D.4. 462 * See RFC 9846 Appendix E.4.
463 */ 463 */
464 if (ctx->hs->tls13.legacy_session_id_len > 0) 464 if (ctx->hs->tls13.legacy_session_id_len > 0)
465 ctx->send_dummy_ccs_after = 1; 465 ctx->send_dummy_ccs_after = 1;
@@ -519,7 +519,7 @@ tls13_server_hello_sent(struct tls13_ctx *ctx)
519 /* 519 /*
520 * If the client has requested middlebox compatibility mode, 520 * If the client has requested middlebox compatibility mode,
521 * we MUST send a dummy CCS following our first handshake message. 521 * we MUST send a dummy CCS following our first handshake message.
522 * See RFC 8446 Appendix D.4. 522 * See RFC 9846 Appendix E.4.
523 */ 523 */
524 if ((ctx->handshake_stage.hs_type & WITHOUT_HRR) && 524 if ((ctx->handshake_stage.hs_type & WITHOUT_HRR) &&
525 ctx->hs->tls13.legacy_session_id_len > 0) 525 ctx->hs->tls13.legacy_session_id_len > 0)
@@ -572,7 +572,7 @@ tls13_server_check_certificate(struct tls13_ctx *ctx, SSL_CERT_PKEY *cpk,
572 572
573 /* 573 /*
574 * The digitalSignature bit MUST be set if the Key Usage extension is 574 * The digitalSignature bit MUST be set if the Key Usage extension is
575 * present as per RFC 8446 section 4.4.2.2. 575 * present as per RFC 9846 section 4.5.1.2.
576 */ 576 */
577 if (!(X509_get_key_usage(cpk->x509) & X509v3_KU_DIGITAL_SIGNATURE)) 577 if (!(X509_get_key_usage(cpk->x509) & X509v3_KU_DIGITAL_SIGNATURE))
578 goto done; 578 goto done;