summaryrefslogtreecommitdiff
path: root/src/lib/libssl/tls13_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/tls13_client.c')
-rw-r--r--src/lib/libssl/tls13_client.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c
index b842cbd39c..4ec29ea956 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.21 2020/01/21 03:40:05 beck Exp $ */ 1/* $OpenBSD: tls13_client.c,v 1.22 2020/01/21 12:08:04 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 *
@@ -115,14 +115,28 @@ tls13_use_legacy_client(struct tls13_ctx *ctx)
115 if (s->bbio != s->wbio) 115 if (s->bbio != s->wbio)
116 s->wbio = BIO_push(s->bbio, s->wbio); 116 s->wbio = BIO_push(s->bbio, s->wbio);
117 117
118 if (!tls13_handshake_msg_content(ctx->hs_msg, &cbs)) 118 /* Stash any unprocessed data from the last record. */
119 goto err; 119 tls13_record_layer_rbuf(ctx->rl, &cbs);
120 if (CBS_len(&cbs) > 0) {
121 if (!CBS_write_bytes(&cbs,
122 S3I(s)->rbuf.buf + SSL3_RT_HEADER_LENGTH,
123 S3I(s)->rbuf.len - SSL3_RT_HEADER_LENGTH, NULL))
124 goto err;
120 125
121 if (!BUF_MEM_grow_clean(s->internal->init_buf, CBS_len(&cbs) + 4)) 126 S3I(s)->rbuf.offset = SSL3_RT_HEADER_LENGTH;
122 goto err; 127 S3I(s)->rbuf.left = CBS_len(&cbs);
128 S3I(s)->rrec.type = SSL3_RT_HANDSHAKE;
129 S3I(s)->rrec.length = CBS_len(&cbs);
130 s->internal->rstate = SSL_ST_READ_BODY;
131 s->internal->packet = S3I(s)->rbuf.buf;
132 s->internal->packet_length = SSL3_RT_HEADER_LENGTH;
133 s->internal->mac_packet = 1;
134 }
123 135
124 if (!CBS_write_bytes(&cbs, s->internal->init_buf->data + 4, 136 /* Stash the current handshake message. */
125 s->internal->init_buf->length - 4, NULL)) 137 tls13_handshake_msg_data(ctx->hs_msg, &cbs);
138 if (!CBS_write_bytes(&cbs, s->internal->init_buf->data,
139 s->internal->init_buf->length, NULL))
126 goto err; 140 goto err;
127 141
128 S3I(s)->tmp.reuse_message = 1; 142 S3I(s)->tmp.reuse_message = 1;