Enforce compression_method in TLS 1.3 draft 22.
Change-Id: Ic99a949258e62cad168c2c39507ca63100a8ffe5
Reviewed-on: https://boringssl-review.googlesource.com/23264
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/ssl/handshake_client.cc b/ssl/handshake_client.cc
index 583aceb..7b1c097 100644
--- a/ssl/handshake_client.cc
+++ b/ssl/handshake_client.cc
@@ -295,33 +295,14 @@
return 0;
}
- // Renegotiations do not participate in session resumption.
- int has_session_id = ssl->session != NULL &&
- !ssl->s3->initial_handshake_complete &&
- ssl->session->session_id_length > 0;
-
CBB child;
if (!CBB_add_u16(&body, hs->client_version) ||
!CBB_add_bytes(&body, ssl->s3->client_random, SSL3_RANDOM_SIZE) ||
- !CBB_add_u8_length_prefixed(&body, &child)) {
+ !CBB_add_u8_length_prefixed(&body, &child) ||
+ !CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
return 0;
}
- if (has_session_id) {
- if (!CBB_add_bytes(&child, ssl->session->session_id,
- ssl->session->session_id_length)) {
- return 0;
- }
- } else {
- // In TLS 1.3 experimental encodings, send a fake placeholder session ID
- // when we do not otherwise have one to send.
- if (hs->max_version >= TLS1_3_VERSION &&
- ssl_is_resumption_variant(ssl->tls13_variant) &&
- !CBB_add_bytes(&child, hs->session_id, hs->session_id_len)) {
- return 0;
- }
- }
-
if (SSL_is_dtls(ssl)) {
if (!CBB_add_u8_length_prefixed(&body, &child) ||
!CBB_add_bytes(&child, ssl->d1->cookie, ssl->d1->cookie_len)) {
@@ -472,7 +453,13 @@
// Initialize a random session ID for the experimental TLS 1.3 variant
// requiring a session id.
- if (ssl_is_resumption_variant(ssl->tls13_variant)) {
+ if (ssl->session != nullptr &&
+ !ssl->s3->initial_handshake_complete &&
+ ssl->session->session_id_length > 0) {
+ hs->session_id_len = ssl->session->session_id_length;
+ OPENSSL_memcpy(hs->session_id, ssl->session->session_id,
+ hs->session_id_len);
+ } else if (ssl_is_resumption_variant(ssl->tls13_variant)) {
hs->session_id_len = sizeof(hs->session_id);
if (!RAND_bytes(hs->session_id, hs->session_id_len)) {
return ssl_hs_error;