diff options
Diffstat (limited to 'src/lib/libssl/tls13_client.c')
-rw-r--r-- | src/lib/libssl/tls13_client.c | 28 |
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; |