summaryrefslogtreecommitdiff
path: root/src/lib/libssl/tls13_record.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/tls13_record.c')
-rw-r--r--src/lib/libssl/tls13_record.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/lib/libssl/tls13_record.c b/src/lib/libssl/tls13_record.c
index 857d3bee49..1a4e22ee47 100644
--- a/src/lib/libssl/tls13_record.c
+++ b/src/lib/libssl/tls13_record.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_record.c,v 1.1 2019/01/19 02:53:54 jsing Exp $ */ 1/* $OpenBSD: tls13_record.c,v 1.2 2019/01/20 09:12:05 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 *
@@ -62,6 +62,17 @@ tls13_record_free(struct tls13_record *rec)
62 freezero(rec, sizeof(struct tls13_record)); 62 freezero(rec, sizeof(struct tls13_record));
63} 63}
64 64
65int
66tls13_record_header(struct tls13_record *rec, CBS *cbs)
67{
68 if (rec->data_len < TLS13_RECORD_HEADER_LEN)
69 return 0;
70
71 CBS_init(cbs, rec->data, TLS13_RECORD_HEADER_LEN);
72
73 return 1;
74}
75
65uint8_t 76uint8_t
66tls13_record_content_type(struct tls13_record *rec) 77tls13_record_content_type(struct tls13_record *rec)
67{ 78{
@@ -89,13 +100,18 @@ tls13_record_data(struct tls13_record *rec, CBS *cbs)
89 CBS_init(cbs, rec->data, rec->data_len); 100 CBS_init(cbs, rec->data, rec->data_len);
90} 101}
91 102
92void 103int
93tls13_record_set_data(struct tls13_record *rec, uint8_t *data, size_t data_len) 104tls13_record_set_data(struct tls13_record *rec, uint8_t *data, size_t data_len)
94{ 105{
106 if (data_len > TLS13_RECORD_MAX_LEN)
107 return 0;
108
95 freezero(rec->data, rec->data_len); 109 freezero(rec->data, rec->data_len);
96 rec->data = data; 110 rec->data = data;
97 rec->data_len = data_len; 111 rec->data_len = data_len;
98 CBS_init(&rec->cbs, rec->data, rec->data_len); 112 CBS_init(&rec->cbs, rec->data, rec->data_len);
113
114 return 1;
99} 115}
100 116
101ssize_t 117ssize_t
@@ -124,6 +140,10 @@ tls13_record_recv(struct tls13_record *rec, tls13_read_cb wire_read,
124 if (!CBS_get_u16(&cbs, &rec_len)) 140 if (!CBS_get_u16(&cbs, &rec_len))
125 return TLS13_IO_FAILURE; 141 return TLS13_IO_FAILURE;
126 142
143 /* XXX - record overflow alert. */
144 if (rec_len > TLS13_RECORD_MAX_CIPHERTEXT_LEN)
145 return TLS13_IO_FAILURE;
146
127 rec->content_type = content_type; 147 rec->content_type = content_type;
128 rec->rec_len = rec_len; 148 rec->rec_len = rec_len;
129 } 149 }