summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2021-03-10 18:27:02 +0000
committerjsing <>2021-03-10 18:27:02 +0000
commitbec282ffa4cbd669be0dc9e8fab07c4c21ebcb66 (patch)
treed994b83bcf4c074517ad35a21855741c2995e67b /src/lib
parent9108b7f38107e9f7ce1aaa33e615a7935b057ad0 (diff)
downloadopenbsd-bec282ffa4cbd669be0dc9e8fab07c4c21ebcb66.tar.gz
openbsd-bec282ffa4cbd669be0dc9e8fab07c4c21ebcb66.tar.bz2
openbsd-bec282ffa4cbd669be0dc9e8fab07c4c21ebcb66.zip
Improve internal version handling.
Add handshake fields for our minimum TLS version, our maximum TLS version and the TLS version negotiated during the handshake. Initialise our min/max versions at the start of the handshake and leave these unchanged. The negotiated TLS version is set in the client once we receive the ServerHello and in the server at the point we select the highest shared version. Provide an ssl_effective_version() function that returns the negotiated TLS version if known, otherwise our maximum TLS version - this is effectively what is stored in s->version currently. Convert most of the internal code to use one of these three version fields, which greatly simplifies code (especially in the TLS extension handling code). ok tb@
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/ssl_clnt.c20
-rw-r--r--src/lib/libssl/ssl_locl.h26
-rw-r--r--src/lib/libssl/ssl_pkt.c7
-rw-r--r--src/lib/libssl/ssl_sigalgs.c8
-rw-r--r--src/lib/libssl/ssl_srvr.c21
-rw-r--r--src/lib/libssl/ssl_tlsext.c116
-rw-r--r--src/lib/libssl/ssl_versions.c26
-rw-r--r--src/lib/libssl/tls13_client.c20
-rw-r--r--src/lib/libssl/tls13_server.c9
9 files changed, 145 insertions, 108 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index 70bda982c6..97418f1ac7 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.84 2021/02/22 15:59:10 jsing Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.85 2021/03/10 18:27:01 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 *
@@ -218,7 +218,14 @@ ssl3_connect(SSL *s)
218 goto end; 218 goto end;
219 } 219 }
220 220
221 /* s->version=SSL3_VERSION; */ 221 if (!ssl_supported_tls_version_range(s,
222 &S3I(s)->hs.our_min_tls_version,
223 &S3I(s)->hs.our_max_tls_version)) {
224 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE);
225 ret = -1;
226 goto end;
227 }
228
222 s->internal->type = SSL_ST_CONNECT; 229 s->internal->type = SSL_ST_CONNECT;
223 230
224 if (!ssl3_setup_init_buffer(s)) { 231 if (!ssl3_setup_init_buffer(s)) {
@@ -904,6 +911,12 @@ ssl3_get_server_hello(SSL *s)
904 } 911 }
905 s->version = server_version; 912 s->version = server_version;
906 913
914 S3I(s)->hs.negotiated_tls_version = ssl_tls_version(server_version);
915 if (S3I(s)->hs.negotiated_tls_version == 0) {
916 SSLerror(s, ERR_R_INTERNAL_ERROR);
917 goto err;
918 }
919
907 if ((method = ssl_get_method(server_version)) == NULL) { 920 if ((method = ssl_get_method(server_version)) == NULL) {
908 SSLerror(s, ERR_R_INTERNAL_ERROR); 921 SSLerror(s, ERR_R_INTERNAL_ERROR);
909 goto err; 922 goto err;
@@ -1019,7 +1032,7 @@ ssl3_get_server_hello(SSL *s)
1019 1032
1020 /* TLS v1.2 only ciphersuites require v1.2 or later. */ 1033 /* TLS v1.2 only ciphersuites require v1.2 or later. */
1021 if ((cipher->algorithm_ssl & SSL_TLSV1_2) && 1034 if ((cipher->algorithm_ssl & SSL_TLSV1_2) &&
1022 (TLS1_get_version(s) < TLS1_2_VERSION)) { 1035 S3I(s)->hs.negotiated_tls_version < TLS1_2_VERSION) {
1023 al = SSL_AD_ILLEGAL_PARAMETER; 1036 al = SSL_AD_ILLEGAL_PARAMETER;
1024 SSLerror(s, SSL_R_WRONG_CIPHER_RETURNED); 1037 SSLerror(s, SSL_R_WRONG_CIPHER_RETURNED);
1025 goto fatal_err; 1038 goto fatal_err;
@@ -1982,6 +1995,7 @@ ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, CBB *cbb)
1982 goto err; 1995 goto err;
1983 } 1996 }
1984 1997
1998 /* XXX - our max protocol version. */
1985 pms[0] = s->client_version >> 8; 1999 pms[0] = s->client_version >> 8;
1986 pms[1] = s->client_version & 0xff; 2000 pms[1] = s->client_version & 0xff;
1987 arc4random_buf(&pms[2], sizeof(pms) - 2); 2001 arc4random_buf(&pms[2], sizeof(pms) - 2);
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index b2af8fd7c9..6f66a8932e 100644
--- a/src/lib/libssl/ssl_locl.h
+++ b/src/lib/libssl/ssl_locl.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_locl.h,v 1.324 2021/02/27 14:20:50 jsing Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.325 2021/03/10 18:27:01 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 *
@@ -407,6 +407,23 @@ typedef struct ssl_session_internal_st {
407#define SSI(s) (s->session->internal) 407#define SSI(s) (s->session->internal)
408 408
409typedef struct ssl_handshake_st { 409typedef struct ssl_handshake_st {
410 /*
411 * Minimum and maximum versions supported for this handshake. These are
412 * initialised at the start of a handshake based on the method in use
413 * and the current protocol version configuration.
414 */
415 uint16_t our_min_tls_version;
416 uint16_t our_max_tls_version;
417
418 /*
419 * Version negotiated for this session. For a client this is set once
420 * the server selected version is parsed from the ServerHello (either
421 * from the legacy version or supported versions extension). For a
422 * server this is set once we select the version we will use with the
423 * client.
424 */
425 uint16_t negotiated_tls_version;
426
410 /* state contains one of the SSL3_ST_* values. */ 427 /* state contains one of the SSL3_ST_* values. */
411 int state; 428 int state;
412 429
@@ -435,10 +452,6 @@ typedef struct cert_pkey_st {
435} CERT_PKEY; 452} CERT_PKEY;
436 453
437typedef struct ssl_handshake_tls13_st { 454typedef struct ssl_handshake_tls13_st {
438 uint16_t min_version;
439 uint16_t max_version;
440 uint16_t version;
441
442 int use_legacy; 455 int use_legacy;
443 int hrr; 456 int hrr;
444 457
@@ -468,7 +481,6 @@ typedef struct ssl_handshake_tls13_st {
468 EVP_MD_CTX *clienthello_md_ctx; 481 EVP_MD_CTX *clienthello_md_ctx;
469 unsigned char *clienthello_hash; 482 unsigned char *clienthello_hash;
470 unsigned int clienthello_hash_len; 483 unsigned int clienthello_hash_len;
471
472} SSL_HANDSHAKE_TLS13; 484} SSL_HANDSHAKE_TLS13;
473 485
474struct tls12_record_layer; 486struct tls12_record_layer;
@@ -1117,6 +1129,8 @@ int ssl_version_set_max(const SSL_METHOD *meth, uint16_t proto_ver,
1117 uint16_t min_tls_ver, uint16_t *out_tls_ver, uint16_t *out_proto_ver); 1129 uint16_t min_tls_ver, uint16_t *out_tls_ver, uint16_t *out_proto_ver);
1118int ssl_enabled_tls_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); 1130int ssl_enabled_tls_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver);
1119int ssl_supported_tls_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); 1131int ssl_supported_tls_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver);
1132uint16_t ssl_tls_version(uint16_t version);
1133uint16_t ssl_effective_tls_version(SSL *s);
1120int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver); 1134int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver);
1121int ssl_max_supported_version(SSL *s, uint16_t *max_ver); 1135int ssl_max_supported_version(SSL *s, uint16_t *max_ver);
1122int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver); 1136int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver);
diff --git a/src/lib/libssl/ssl_pkt.c b/src/lib/libssl/ssl_pkt.c
index 894064c817..5b1af504fb 100644
--- a/src/lib/libssl/ssl_pkt.c
+++ b/src/lib/libssl/ssl_pkt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_pkt.c,v 1.36 2021/02/20 14:14:16 tb Exp $ */ 1/* $OpenBSD: ssl_pkt.c,v 1.37 2021/03/10 18:27:02 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 *
@@ -561,8 +561,9 @@ do_ssl3_write(SSL *s, int type, const unsigned char *buf, unsigned int len)
561 * bytes and record version number > TLS 1.0. 561 * bytes and record version number > TLS 1.0.
562 */ 562 */
563 version = s->version; 563 version = s->version;
564 if (S3I(s)->hs.state == SSL3_ST_CW_CLNT_HELLO_B && !s->internal->renegotiate && 564 if (S3I(s)->hs.state == SSL3_ST_CW_CLNT_HELLO_B &&
565 TLS1_get_version(s) > TLS1_VERSION) 565 !s->internal->renegotiate &&
566 S3I(s)->hs.our_max_tls_version > TLS1_VERSION)
566 version = TLS1_VERSION; 567 version = TLS1_VERSION;
567 568
568 /* 569 /*
diff --git a/src/lib/libssl/ssl_sigalgs.c b/src/lib/libssl/ssl_sigalgs.c
index 1b5aad72f7..68bb6a3889 100644
--- a/src/lib/libssl/ssl_sigalgs.c
+++ b/src/lib/libssl/ssl_sigalgs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_sigalgs.c,v 1.22 2020/10/11 01:13:04 guenther Exp $ */ 1/* $OpenBSD: ssl_sigalgs.c,v 1.23 2021/03/10 18:27:02 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -265,7 +265,7 @@ ssl_sigalg_select(SSL *s, EVP_PKEY *pkey)
265 int check_curve = 0; 265 int check_curve = 0;
266 CBS cbs; 266 CBS cbs;
267 267
268 if (TLS1_get_version(s) >= TLS1_3_VERSION) { 268 if (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION) {
269 tls_sigalgs = tls13_sigalgs; 269 tls_sigalgs = tls13_sigalgs;
270 tls_sigalgs_len = tls13_sigalgs_len; 270 tls_sigalgs_len = tls13_sigalgs_len;
271 check_curve = 1; 271 check_curve = 1;
@@ -291,7 +291,7 @@ ssl_sigalg_select(SSL *s, EVP_PKEY *pkey)
291 * RFC 5246 allows a TLS 1.2 client to send no sigalgs, in 291 * RFC 5246 allows a TLS 1.2 client to send no sigalgs, in
292 * which case the server must use the the default. 292 * which case the server must use the the default.
293 */ 293 */
294 if (TLS1_get_version(s) < TLS1_3_VERSION && 294 if (S3I(s)->hs.negotiated_tls_version < TLS1_3_VERSION &&
295 S3I(s)->hs.sigalgs == NULL) { 295 S3I(s)->hs.sigalgs == NULL) {
296 switch (pkey->type) { 296 switch (pkey->type) {
297 case EVP_PKEY_RSA: 297 case EVP_PKEY_RSA:
@@ -323,7 +323,7 @@ ssl_sigalg_select(SSL *s, EVP_PKEY *pkey)
323 continue; 323 continue;
324 324
325 /* RSA cannot be used without PSS in TLSv1.3. */ 325 /* RSA cannot be used without PSS in TLSv1.3. */
326 if (TLS1_get_version(s) >= TLS1_3_VERSION && 326 if (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION &&
327 sigalg->key_type == EVP_PKEY_RSA && 327 sigalg->key_type == EVP_PKEY_RSA &&
328 (sigalg->flags & SIGALG_FLAG_RSA_PSS) == 0) 328 (sigalg->flags & SIGALG_FLAG_RSA_PSS) == 0)
329 continue; 329 continue;
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index be9c27f73f..373a20d61b 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.95 2021/02/20 14:16:56 tb Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.96 2021/03/10 18:27:02 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 *
@@ -219,6 +219,14 @@ ssl3_accept(SSL *s)
219 goto end; 219 goto end;
220 } 220 }
221 221
222 if (!ssl_supported_tls_version_range(s,
223 &S3I(s)->hs.our_min_tls_version,
224 &S3I(s)->hs.our_max_tls_version)) {
225 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE);
226 ret = -1;
227 goto end;
228 }
229
222 s->internal->type = SSL_ST_ACCEPT; 230 s->internal->type = SSL_ST_ACCEPT;
223 231
224 if (!ssl3_setup_init_buffer(s)) { 232 if (!ssl3_setup_init_buffer(s)) {
@@ -844,7 +852,7 @@ ssl3_get_client_hello(SSL *s)
844 */ 852 */
845 if (!ssl_downgrade_max_version(s, &max_version)) 853 if (!ssl_downgrade_max_version(s, &max_version))
846 goto err; 854 goto err;
847 if (ssl_max_shared_version(s, client_version, &shared_version) != 1) { 855 if (!ssl_max_shared_version(s, client_version, &shared_version)) {
848 if ((s->client_version >> 8) == SSL3_VERSION_MAJOR && 856 if ((s->client_version >> 8) == SSL3_VERSION_MAJOR &&
849 !tls12_record_layer_write_protected(s->internal->rl)) { 857 !tls12_record_layer_write_protected(s->internal->rl)) {
850 /* 858 /*
@@ -860,6 +868,12 @@ ssl3_get_client_hello(SSL *s)
860 s->client_version = client_version; 868 s->client_version = client_version;
861 s->version = shared_version; 869 s->version = shared_version;
862 870
871 S3I(s)->hs.negotiated_tls_version = ssl_tls_version(shared_version);
872 if (S3I(s)->hs.negotiated_tls_version == 0) {
873 SSLerror(s, ERR_R_INTERNAL_ERROR);
874 goto err;
875 }
876
863 if ((method = ssl_get_method(shared_version)) == NULL) { 877 if ((method = ssl_get_method(shared_version)) == NULL) {
864 SSLerror(s, ERR_R_INTERNAL_ERROR); 878 SSLerror(s, ERR_R_INTERNAL_ERROR);
865 goto err; 879 goto err;
@@ -1718,6 +1732,8 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs)
1718 int al = -1; 1732 int al = -1;
1719 1733
1720 arc4random_buf(fakekey, sizeof(fakekey)); 1734 arc4random_buf(fakekey, sizeof(fakekey));
1735
1736 /* XXX - peer max protocol version. */
1721 fakekey[0] = s->client_version >> 8; 1737 fakekey[0] = s->client_version >> 8;
1722 fakekey[1] = s->client_version & 0xff; 1738 fakekey[1] = s->client_version & 0xff;
1723 1739
@@ -1754,6 +1770,7 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs)
1754 /* SSLerror(s, SSL_R_BAD_RSA_DECRYPT); */ 1770 /* SSLerror(s, SSL_R_BAD_RSA_DECRYPT); */
1755 } 1771 }
1756 1772
1773 /* XXX - peer max version. */
1757 if ((al == -1) && !((pms[0] == (s->client_version >> 8)) && 1774 if ((al == -1) && !((pms[0] == (s->client_version >> 8)) &&
1758 (pms[1] == (s->client_version & 0xff)))) { 1775 (pms[1] == (s->client_version & 0xff)))) {
1759 /* 1776 /*
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index dca9de0305..4f4a39d4bb 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.86 2021/02/08 17:20:47 jsing Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.87 2021/03/10 18:27:02 jsing 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>
@@ -174,7 +174,7 @@ int
174tlsext_supportedgroups_client_needs(SSL *s, uint16_t msg_type) 174tlsext_supportedgroups_client_needs(SSL *s, uint16_t msg_type)
175{ 175{
176 return ssl_has_ecc_ciphers(s) || 176 return ssl_has_ecc_ciphers(s) ||
177 (S3I(s)->hs_tls13.max_version >= TLS1_3_VERSION); 177 (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION);
178} 178}
179 179
180int 180int
@@ -472,7 +472,8 @@ tlsext_ri_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
472int 472int
473tlsext_ri_server_needs(SSL *s, uint16_t msg_type) 473tlsext_ri_server_needs(SSL *s, uint16_t msg_type)
474{ 474{
475 return (s->version < TLS1_3_VERSION && S3I(s)->send_connection_binding); 475 return (S3I(s)->hs.negotiated_tls_version < TLS1_3_VERSION &&
476 S3I(s)->send_connection_binding);
476} 477}
477 478
478int 479int
@@ -554,7 +555,7 @@ tlsext_ri_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
554int 555int
555tlsext_sigalgs_client_needs(SSL *s, uint16_t msg_type) 556tlsext_sigalgs_client_needs(SSL *s, uint16_t msg_type)
556{ 557{
557 return (TLS1_get_client_version(s) >= TLS1_2_VERSION); 558 return (S3I(s)->hs.our_max_tls_version >= TLS1_2_VERSION);
558} 559}
559 560
560int 561int
@@ -564,8 +565,7 @@ tlsext_sigalgs_client_build(SSL *s, uint16_t msg_type, CBB *cbb)
564 size_t tls_sigalgs_len = tls12_sigalgs_len; 565 size_t tls_sigalgs_len = tls12_sigalgs_len;
565 CBB sigalgs; 566 CBB sigalgs;
566 567
567 if (TLS1_get_client_version(s) >= TLS1_3_VERSION && 568 if (S3I(s)->hs.our_min_tls_version >= TLS1_3_VERSION) {
568 S3I(s)->hs_tls13.min_version >= TLS1_3_VERSION) {
569 tls_sigalgs = tls13_sigalgs; 569 tls_sigalgs = tls13_sigalgs;
570 tls_sigalgs_len = tls13_sigalgs_len; 570 tls_sigalgs_len = tls13_sigalgs_len;
571 } 571 }
@@ -600,7 +600,7 @@ tlsext_sigalgs_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
600int 600int
601tlsext_sigalgs_server_needs(SSL *s, uint16_t msg_type) 601tlsext_sigalgs_server_needs(SSL *s, uint16_t msg_type)
602{ 602{
603 return (s->version >= TLS1_3_VERSION); 603 return (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION);
604} 604}
605 605
606int 606int
@@ -610,7 +610,7 @@ tlsext_sigalgs_server_build(SSL *s, uint16_t msg_type, CBB *cbb)
610 size_t tls_sigalgs_len = tls12_sigalgs_len; 610 size_t tls_sigalgs_len = tls12_sigalgs_len;
611 CBB sigalgs; 611 CBB sigalgs;
612 612
613 if (s->version >= TLS1_3_VERSION) { 613 if (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION) {
614 tls_sigalgs = tls13_sigalgs; 614 tls_sigalgs = tls13_sigalgs;
615 tls_sigalgs_len = tls13_sigalgs_len; 615 tls_sigalgs_len = tls13_sigalgs_len;
616 } 616 }
@@ -632,7 +632,7 @@ tlsext_sigalgs_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
632{ 632{
633 CBS sigalgs; 633 CBS sigalgs;
634 634
635 if (s->version < TLS1_3_VERSION) 635 if (ssl_effective_tls_version(s) < TLS1_3_VERSION)
636 return 0; 636 return 0;
637 637
638 if (!CBS_get_u16_length_prefixed(cbs, &sigalgs)) 638 if (!CBS_get_u16_length_prefixed(cbs, &sigalgs))
@@ -981,7 +981,7 @@ tlsext_ocsp_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
981int 981int
982tlsext_ocsp_server_needs(SSL *s, uint16_t msg_type) 982tlsext_ocsp_server_needs(SSL *s, uint16_t msg_type)
983{ 983{
984 if (s->version >= TLS1_3_VERSION && 984 if (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION &&
985 s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp && 985 s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp &&
986 s->ctx->internal->tlsext_status_cb != NULL) { 986 s->ctx->internal->tlsext_status_cb != NULL) {
987 s->internal->tlsext_status_expected = 0; 987 s->internal->tlsext_status_expected = 0;
@@ -998,7 +998,7 @@ tlsext_ocsp_server_build(SSL *s, uint16_t msg_type, CBB *cbb)
998{ 998{
999 CBB ocsp_response; 999 CBB ocsp_response;
1000 1000
1001 if (s->version >= TLS1_3_VERSION) { 1001 if (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION) {
1002 if (!CBB_add_u8(cbb, TLSEXT_STATUSTYPE_ocsp)) 1002 if (!CBB_add_u8(cbb, TLSEXT_STATUSTYPE_ocsp))
1003 return 0; 1003 return 0;
1004 if (!CBB_add_u24_length_prefixed(cbb, &ocsp_response)) 1004 if (!CBB_add_u24_length_prefixed(cbb, &ocsp_response))
@@ -1016,11 +1016,10 @@ tlsext_ocsp_server_build(SSL *s, uint16_t msg_type, CBB *cbb)
1016int 1016int
1017tlsext_ocsp_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert) 1017tlsext_ocsp_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1018{ 1018{
1019 CBS response;
1020 uint16_t version = TLS1_get_client_version(s);
1021 uint8_t status_type; 1019 uint8_t status_type;
1020 CBS response;
1022 1021
1023 if (version >= TLS1_3_VERSION) { 1022 if (ssl_effective_tls_version(s) >= TLS1_3_VERSION) {
1024 if (msg_type == SSL_TLSEXT_MSG_CR) { 1023 if (msg_type == SSL_TLSEXT_MSG_CR) {
1025 /* 1024 /*
1026 * RFC 8446, 4.4.2.1 - the server may request an OCSP 1025 * RFC 8446, 4.4.2.1 - the server may request an OCSP
@@ -1406,11 +1405,7 @@ tlsext_srtp_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1406int 1405int
1407tlsext_keyshare_client_needs(SSL *s, uint16_t msg_type) 1406tlsext_keyshare_client_needs(SSL *s, uint16_t msg_type)
1408{ 1407{
1409 /* XXX once this gets initialized when we get tls13_client.c */ 1408 return (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION);
1410 if (S3I(s)->hs_tls13.max_version == 0)
1411 return 0;
1412 return (!SSL_is_dtls(s) && S3I(s)->hs_tls13.max_version >=
1413 TLS1_3_VERSION);
1414} 1409}
1415 1410
1416int 1411int
@@ -1457,7 +1452,7 @@ tlsext_keyshare_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1457 * Ignore this client share if we're using earlier than TLSv1.3 1452 * Ignore this client share if we're using earlier than TLSv1.3
1458 * or we've already selected a key share. 1453 * or we've already selected a key share.
1459 */ 1454 */
1460 if (S3I(s)->hs_tls13.max_version < TLS1_3_VERSION) 1455 if (S3I(s)->hs.our_max_tls_version < TLS1_3_VERSION)
1461 continue; 1456 continue;
1462 if (S3I(s)->hs_tls13.key_share != NULL) 1457 if (S3I(s)->hs_tls13.key_share != NULL)
1463 continue; 1458 continue;
@@ -1485,10 +1480,8 @@ tlsext_keyshare_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1485int 1480int
1486tlsext_keyshare_server_needs(SSL *s, uint16_t msg_type) 1481tlsext_keyshare_server_needs(SSL *s, uint16_t msg_type)
1487{ 1482{
1488 if (SSL_is_dtls(s) || s->version < TLS1_3_VERSION) 1483 return (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION &&
1489 return 0; 1484 tlsext_extension_seen(s, TLSEXT_TYPE_key_share));
1490
1491 return tlsext_extension_seen(s, TLSEXT_TYPE_key_share);
1492} 1485}
1493 1486
1494int 1487int
@@ -1550,9 +1543,7 @@ tlsext_keyshare_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1550int 1543int
1551tlsext_versions_client_needs(SSL *s, uint16_t msg_type) 1544tlsext_versions_client_needs(SSL *s, uint16_t msg_type)
1552{ 1545{
1553 if (SSL_is_dtls(s)) 1546 return (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION);
1554 return 0;
1555 return (S3I(s)->hs_tls13.max_version >= TLS1_3_VERSION);
1556} 1547}
1557 1548
1558int 1549int
@@ -1562,11 +1553,8 @@ tlsext_versions_client_build(SSL *s, uint16_t msg_type, CBB *cbb)
1562 uint16_t version; 1553 uint16_t version;
1563 CBB versions; 1554 CBB versions;
1564 1555
1565 max = S3I(s)->hs_tls13.max_version; 1556 max = S3I(s)->hs.our_max_tls_version;
1566 min = S3I(s)->hs_tls13.min_version; 1557 min = S3I(s)->hs.our_min_tls_version;
1567
1568 if (min < TLS1_VERSION)
1569 return 0;
1570 1558
1571 if (!CBB_add_u8_length_prefixed(cbb, &versions)) 1559 if (!CBB_add_u8_length_prefixed(cbb, &versions))
1572 return 0; 1560 return 0;
@@ -1591,8 +1579,8 @@ tlsext_versions_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1591 uint16_t max, min; 1579 uint16_t max, min;
1592 uint16_t matched_version = 0; 1580 uint16_t matched_version = 0;
1593 1581
1594 max = S3I(s)->hs_tls13.max_version; 1582 max = S3I(s)->hs.our_max_tls_version;
1595 min = S3I(s)->hs_tls13.min_version; 1583 min = S3I(s)->hs.our_min_tls_version;
1596 1584
1597 if (!CBS_get_u8_length_prefixed(cbs, &versions)) 1585 if (!CBS_get_u8_length_prefixed(cbs, &versions))
1598 goto err; 1586 goto err;
@@ -1608,16 +1596,8 @@ tlsext_versions_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1608 matched_version = version; 1596 matched_version = version;
1609 } 1597 }
1610 1598
1611 /* 1599 if (matched_version > 0) {
1612 * XXX if we haven't matched a version we should 1600 /* XXX - this should be stored for later processing. */
1613 * fail - but we currently need to succeed to
1614 * ignore this before the server code for 1.3
1615 * is set up and initialized.
1616 */
1617 if (max == 0)
1618 return 1; /* XXX */
1619
1620 if (matched_version != 0) {
1621 s->version = matched_version; 1601 s->version = matched_version;
1622 return 1; 1602 return 1;
1623 } 1603 }
@@ -1633,17 +1613,13 @@ tlsext_versions_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1633int 1613int
1634tlsext_versions_server_needs(SSL *s, uint16_t msg_type) 1614tlsext_versions_server_needs(SSL *s, uint16_t msg_type)
1635{ 1615{
1636 return (!SSL_is_dtls(s) && s->version >= TLS1_3_VERSION); 1616 return (S3I(s)->hs.negotiated_tls_version >= TLS1_3_VERSION);
1637} 1617}
1638 1618
1639int 1619int
1640tlsext_versions_server_build(SSL *s, uint16_t msg_type, CBB *cbb) 1620tlsext_versions_server_build(SSL *s, uint16_t msg_type, CBB *cbb)
1641{ 1621{
1642 if (!CBB_add_u16(cbb, TLS1_3_VERSION)) 1622 return CBB_add_u16(cbb, TLS1_3_VERSION);
1643 return 0;
1644 /* XXX set 1.2 in legacy version? */
1645
1646 return 1;
1647} 1623}
1648 1624
1649int 1625int
@@ -1656,6 +1632,7 @@ tlsext_versions_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1656 return 0; 1632 return 0;
1657 } 1633 }
1658 1634
1635 /* XXX - need to fix for DTLS 1.3 */
1659 if (selected_version < TLS1_3_VERSION) { 1636 if (selected_version < TLS1_3_VERSION) {
1660 *alert = SSL_AD_ILLEGAL_PARAMETER; 1637 *alert = SSL_AD_ILLEGAL_PARAMETER;
1661 return 0; 1638 return 0;
@@ -1675,12 +1652,8 @@ tlsext_versions_client_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1675int 1652int
1676tlsext_cookie_client_needs(SSL *s, uint16_t msg_type) 1653tlsext_cookie_client_needs(SSL *s, uint16_t msg_type)
1677{ 1654{
1678 if (SSL_is_dtls(s)) 1655 return (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION &&
1679 return 0; 1656 S3I(s)->hs_tls13.cookie_len > 0 && S3I(s)->hs_tls13.cookie != NULL);
1680 if (S3I(s)->hs_tls13.max_version < TLS1_3_VERSION)
1681 return 0;
1682 return (S3I(s)->hs_tls13.cookie_len > 0 &&
1683 S3I(s)->hs_tls13.cookie != NULL);
1684} 1657}
1685 1658
1686int 1659int
@@ -1734,17 +1707,12 @@ tlsext_cookie_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert)
1734int 1707int
1735tlsext_cookie_server_needs(SSL *s, uint16_t msg_type) 1708tlsext_cookie_server_needs(SSL *s, uint16_t msg_type)
1736{ 1709{
1737
1738 if (SSL_is_dtls(s))
1739 return 0;
1740 if (S3I(s)->hs_tls13.max_version < TLS1_3_VERSION)
1741 return 0;
1742 /* 1710 /*
1743 * Server needs to set cookie value in tls13 handshake 1711 * Server needs to set cookie value in tls13 handshake
1744 * in order to send one, should only be sent with HRR. 1712 * in order to send one, should only be sent with HRR.
1745 */ 1713 */
1746 return (S3I(s)->hs_tls13.cookie_len > 0 && 1714 return (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION &&
1747 S3I(s)->hs_tls13.cookie != NULL); 1715 S3I(s)->hs_tls13.cookie_len > 0 && S3I(s)->hs_tls13.cookie != NULL);
1748} 1716}
1749 1717
1750int 1718int
@@ -2033,13 +2001,10 @@ tlsext_build(SSL *s, int is_server, uint16_t msg_type, CBB *cbb)
2033 const struct tls_extension *tlsext; 2001 const struct tls_extension *tlsext;
2034 CBB extensions, extension_data; 2002 CBB extensions, extension_data;
2035 int extensions_present = 0; 2003 int extensions_present = 0;
2004 uint16_t tls_version;
2036 size_t i; 2005 size_t i;
2037 uint16_t version;
2038 2006
2039 if (is_server) 2007 tls_version = ssl_effective_tls_version(s);
2040 version = s->version;
2041 else
2042 version = TLS1_get_client_version(s);
2043 2008
2044 if (!CBB_add_u16_length_prefixed(cbb, &extensions)) 2009 if (!CBB_add_u16_length_prefixed(cbb, &extensions))
2045 return 0; 2010 return 0;
@@ -2049,7 +2014,7 @@ tlsext_build(SSL *s, int is_server, uint16_t msg_type, CBB *cbb)
2049 ext = tlsext_funcs(tlsext, is_server); 2014 ext = tlsext_funcs(tlsext, is_server);
2050 2015
2051 /* RFC 8446 Section 4.2 */ 2016 /* RFC 8446 Section 4.2 */
2052 if (version >= TLS1_3_VERSION && 2017 if (tls_version >= TLS1_3_VERSION &&
2053 !(tlsext->messages & msg_type)) 2018 !(tlsext->messages & msg_type))
2054 continue; 2019 continue;
2055 2020
@@ -2112,15 +2077,12 @@ tlsext_parse(SSL *s, int is_server, uint16_t msg_type, CBS *cbs, int *alert)
2112 CBS extensions, extension_data; 2077 CBS extensions, extension_data;
2113 uint16_t type; 2078 uint16_t type;
2114 size_t idx; 2079 size_t idx;
2115 uint16_t version; 2080 uint16_t tls_version;
2116 int alert_desc; 2081 int alert_desc;
2117 2082
2118 S3I(s)->hs.extensions_seen = 0; 2083 tls_version = ssl_effective_tls_version(s);
2119 2084
2120 if (is_server) 2085 S3I(s)->hs.extensions_seen = 0;
2121 version = s->version;
2122 else
2123 version = TLS1_get_client_version(s);
2124 2086
2125 /* An empty extensions block is valid. */ 2087 /* An empty extensions block is valid. */
2126 if (CBS_len(cbs) == 0) 2088 if (CBS_len(cbs) == 0)
@@ -2143,7 +2105,7 @@ tlsext_parse(SSL *s, int is_server, uint16_t msg_type, CBS *cbs, int *alert)
2143 CBS_len(&extension_data), 2105 CBS_len(&extension_data),
2144 s->internal->tlsext_debug_arg); 2106 s->internal->tlsext_debug_arg);
2145 2107
2146 if (!SSL_is_dtls(s) && version >= TLS1_3_VERSION && is_server && 2108 if (tls_version >= TLS1_3_VERSION && is_server &&
2147 msg_type == SSL_TLSEXT_MSG_CH) { 2109 msg_type == SSL_TLSEXT_MSG_CH) {
2148 if (!tlsext_clienthello_hash_extension(s, type, 2110 if (!tlsext_clienthello_hash_extension(s, type,
2149 &extension_data)) 2111 &extension_data))
@@ -2155,7 +2117,7 @@ tlsext_parse(SSL *s, int is_server, uint16_t msg_type, CBS *cbs, int *alert)
2155 continue; 2117 continue;
2156 2118
2157 /* RFC 8446 Section 4.2 */ 2119 /* RFC 8446 Section 4.2 */
2158 if (version >= TLS1_3_VERSION && 2120 if (tls_version >= TLS1_3_VERSION &&
2159 !(tlsext->messages & msg_type)) { 2121 !(tlsext->messages & msg_type)) {
2160 alert_desc = SSL_AD_ILLEGAL_PARAMETER; 2122 alert_desc = SSL_AD_ILLEGAL_PARAMETER;
2161 goto err; 2123 goto err;
diff --git a/src/lib/libssl/ssl_versions.c b/src/lib/libssl/ssl_versions.c
index a216de6e81..37957fd0ab 100644
--- a/src/lib/libssl/ssl_versions.c
+++ b/src/lib/libssl/ssl_versions.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_versions.c,v 1.13 2021/02/25 17:06:05 jsing Exp $ */ 1/* $OpenBSD: ssl_versions.c,v 1.14 2021/03/10 18:27:02 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -171,6 +171,30 @@ ssl_supported_tls_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver)
171 return 1; 171 return 1;
172} 172}
173 173
174uint16_t
175ssl_tls_version(uint16_t version)
176{
177 if (version == TLS1_VERSION || version == TLS1_1_VERSION ||
178 version == TLS1_2_VERSION || version == TLS1_3_VERSION)
179 return version;
180
181 if (version == DTLS1_VERSION)
182 return TLS1_1_VERSION;
183 if (version == DTLS1_2_VERSION)
184 return TLS1_2_VERSION;
185
186 return 0;
187}
188
189uint16_t
190ssl_effective_tls_version(SSL *s)
191{
192 if (S3I(s)->hs.negotiated_tls_version > 0)
193 return S3I(s)->hs.negotiated_tls_version;
194
195 return S3I(s)->hs.our_max_tls_version;
196}
197
174int 198int
175ssl_max_supported_version(SSL *s, uint16_t *max_ver) 199ssl_max_supported_version(SSL *s, uint16_t *max_ver)
176{ 200{
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c
index a7c3bf2c00..4de3d3693b 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.73 2021/02/25 17:06:05 jsing Exp $ */ 1/* $OpenBSD: tls13_client.c,v 1.74 2021/03/10 18:27:02 jsing 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 *
@@ -31,12 +31,12 @@ tls13_client_init(struct tls13_ctx *ctx)
31 size_t groups_len; 31 size_t groups_len;
32 SSL *s = ctx->ssl; 32 SSL *s = ctx->ssl;
33 33
34 if (!ssl_supported_tls_version_range(s, &ctx->hs->min_version, 34 if (!ssl_supported_tls_version_range(s, &S3I(s)->hs.our_min_tls_version,
35 &ctx->hs->max_version)) { 35 &S3I(s)->hs.our_max_tls_version)) {
36 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); 36 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE);
37 return 0; 37 return 0;
38 } 38 }
39 s->client_version = s->version = ctx->hs->max_version; 39 s->client_version = s->version = S3I(s)->hs.our_max_tls_version;
40 40
41 tls13_record_layer_set_retry_after_phh(ctx->rl, 41 tls13_record_layer_set_retry_after_phh(ctx->rl,
42 (s->internal->mode & SSL_MODE_AUTO_RETRY) != 0); 42 (s->internal->mode & SSL_MODE_AUTO_RETRY) != 0);
@@ -64,7 +64,8 @@ tls13_client_init(struct tls13_ctx *ctx)
64 * legacy session identifier triggers compatibility mode (see RFC 8446 64 * legacy session identifier triggers compatibility mode (see RFC 8446
65 * Appendix D.4). In the pre-TLSv1.3 case a zero length value is used. 65 * Appendix D.4). In the pre-TLSv1.3 case a zero length value is used.
66 */ 66 */
67 if (ctx->middlebox_compat && ctx->hs->max_version >= TLS1_3_VERSION) { 67 if (ctx->middlebox_compat &&
68 S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION) {
68 arc4random_buf(ctx->hs->legacy_session_id, 69 arc4random_buf(ctx->hs->legacy_session_id,
69 sizeof(ctx->hs->legacy_session_id)); 70 sizeof(ctx->hs->legacy_session_id));
70 ctx->hs->legacy_session_id_len = 71 ctx->hs->legacy_session_id_len =
@@ -91,7 +92,7 @@ tls13_client_hello_build(struct tls13_ctx *ctx, CBB *cbb)
91 SSL *s = ctx->ssl; 92 SSL *s = ctx->ssl;
92 93
93 /* Legacy client version is capped at TLS 1.2. */ 94 /* Legacy client version is capped at TLS 1.2. */
94 client_version = ctx->hs->max_version; 95 client_version = S3I(s)->hs.our_max_tls_version;
95 if (client_version > TLS1_2_VERSION) 96 if (client_version > TLS1_2_VERSION)
96 client_version = TLS1_2_VERSION; 97 client_version = TLS1_2_VERSION;
97 98
@@ -133,7 +134,9 @@ tls13_client_hello_build(struct tls13_ctx *ctx, CBB *cbb)
133int 134int
134tls13_client_hello_send(struct tls13_ctx *ctx, CBB *cbb) 135tls13_client_hello_send(struct tls13_ctx *ctx, CBB *cbb)
135{ 136{
136 if (ctx->hs->min_version < TLS1_2_VERSION) 137 SSL *s = ctx->ssl;
138
139 if (S3I(s)->hs.our_min_tls_version < TLS1_2_VERSION)
137 tls13_record_layer_set_legacy_version(ctx->rl, TLS1_VERSION); 140 tls13_record_layer_set_legacy_version(ctx->rl, TLS1_VERSION);
138 141
139 /* We may receive a pre-TLSv1.3 alert in response to the client hello. */ 142 /* We may receive a pre-TLSv1.3 alert in response to the client hello. */
@@ -228,7 +231,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs)
228 goto err; 231 goto err;
229 232
230 if (tls13_server_hello_is_legacy(cbs)) { 233 if (tls13_server_hello_is_legacy(cbs)) {
231 if (ctx->hs->max_version >= TLS1_3_VERSION) { 234 if (S3I(s)->hs.our_max_tls_version >= TLS1_3_VERSION) {
232 /* 235 /*
233 * RFC 8446 section 4.1.3: we must not downgrade if 236 * RFC 8446 section 4.1.3: we must not downgrade if
234 * the server random value contains the TLS 1.2 or 1.1 237 * the server random value contains the TLS 1.2 or 1.1
@@ -280,6 +283,7 @@ tls13_server_hello_process(struct tls13_ctx *ctx, CBS *cbs)
280 ctx->alert = TLS13_ALERT_PROTOCOL_VERSION; 283 ctx->alert = TLS13_ALERT_PROTOCOL_VERSION;
281 goto err; 284 goto err;
282 } 285 }
286 S3I(s)->hs.negotiated_tls_version = ctx->hs->server_version;
283 287
284 /* The session_id must match. */ 288 /* The session_id must match. */
285 if (!CBS_mem_equal(&session_id, ctx->hs->legacy_session_id, 289 if (!CBS_mem_equal(&session_id, ctx->hs->legacy_session_id,
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c
index 715066fb59..29c63bcd06 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.70 2021/02/25 17:06:05 jsing Exp $ */ 1/* $OpenBSD: tls13_server.c,v 1.71 2021/03/10 18:27:02 jsing 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>
@@ -29,12 +29,12 @@ tls13_server_init(struct tls13_ctx *ctx)
29{ 29{
30 SSL *s = ctx->ssl; 30 SSL *s = ctx->ssl;
31 31
32 if (!ssl_supported_tls_version_range(s, &ctx->hs->min_version, 32 if (!ssl_supported_tls_version_range(s, &S3I(s)->hs.our_min_tls_version,
33 &ctx->hs->max_version)) { 33 &S3I(s)->hs.our_max_tls_version)) {
34 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE); 34 SSLerror(s, SSL_R_NO_PROTOCOLS_AVAILABLE);
35 return 0; 35 return 0;
36 } 36 }
37 s->version = ctx->hs->max_version; 37 s->version = S3I(s)->hs.our_max_tls_version;
38 38
39 tls13_record_layer_set_retry_after_phh(ctx->rl, 39 tls13_record_layer_set_retry_after_phh(ctx->rl,
40 (s->internal->mode & SSL_MODE_AUTO_RETRY) != 0); 40 (s->internal->mode & SSL_MODE_AUTO_RETRY) != 0);
@@ -163,6 +163,7 @@ tls13_client_hello_process(struct tls13_ctx *ctx, CBS *cbs)
163 goto err; 163 goto err;
164 return tls13_use_legacy_server(ctx); 164 return tls13_use_legacy_server(ctx);
165 } 165 }
166 S3I(s)->hs.negotiated_tls_version = TLS1_3_VERSION;
166 167
167 /* Add decoded values to the current ClientHello hash */ 168 /* Add decoded values to the current ClientHello hash */
168 if (!tls13_clienthello_hash_init(ctx)) { 169 if (!tls13_clienthello_hash_init(ctx)) {