summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/ssl_tlsext.c13
-rw-r--r--src/lib/libssl/tls13_key_share.c12
2 files changed, 11 insertions, 14 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 46f30aa47e..58ba11954d 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.58 2020/01/30 17:09:23 jsing Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.59 2020/02/01 12:41:58 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>
@@ -1274,7 +1274,7 @@ tlsext_keyshare_client_build(SSL *s, CBB *cbb)
1274int 1274int
1275tlsext_keyshare_server_parse(SSL *s, CBS *cbs, int *alert) 1275tlsext_keyshare_server_parse(SSL *s, CBS *cbs, int *alert)
1276{ 1276{
1277 CBS client_shares; 1277 CBS client_shares, key_exchange;
1278 uint16_t group; 1278 uint16_t group;
1279 1279
1280 if (!CBS_get_u16_length_prefixed(cbs, &client_shares)) 1280 if (!CBS_get_u16_length_prefixed(cbs, &client_shares))
@@ -1285,6 +1285,8 @@ tlsext_keyshare_server_parse(SSL *s, CBS *cbs, int *alert)
1285 /* Unpack client share. */ 1285 /* Unpack client share. */
1286 if (!CBS_get_u16(&client_shares, &group)) 1286 if (!CBS_get_u16(&client_shares, &group))
1287 goto err; 1287 goto err;
1288 if (!CBS_get_u16_length_prefixed(&client_shares, &key_exchange))
1289 return 0;
1288 1290
1289 /* 1291 /*
1290 * XXX support other groups later. 1292 * XXX support other groups later.
@@ -1295,7 +1297,7 @@ tlsext_keyshare_server_parse(SSL *s, CBS *cbs, int *alert)
1295 continue; 1297 continue;
1296 1298
1297 if (!tls13_key_share_peer_public(S3I(s)->hs_tls13.key_share, 1299 if (!tls13_key_share_peer_public(S3I(s)->hs_tls13.key_share,
1298 group, &client_shares)) 1300 group, &key_exchange))
1299 goto err; 1301 goto err;
1300 } 1302 }
1301 1303
@@ -1330,16 +1332,19 @@ tlsext_keyshare_server_build(SSL *s, CBB *cbb)
1330int 1332int
1331tlsext_keyshare_client_parse(SSL *s, CBS *cbs, int *alert) 1333tlsext_keyshare_client_parse(SSL *s, CBS *cbs, int *alert)
1332{ 1334{
1335 CBS key_exchange;
1333 uint16_t group; 1336 uint16_t group;
1334 1337
1335 /* Unpack server share. */ 1338 /* Unpack server share. */
1336 if (!CBS_get_u16(cbs, &group)) 1339 if (!CBS_get_u16(cbs, &group))
1337 goto err; 1340 goto err;
1341 if (!CBS_get_u16_length_prefixed(cbs, &key_exchange))
1342 return 0;
1338 1343
1339 /* XXX - Handle other groups and verify that they're valid. */ 1344 /* XXX - Handle other groups and verify that they're valid. */
1340 1345
1341 if (!tls13_key_share_peer_public(S3I(s)->hs_tls13.key_share, 1346 if (!tls13_key_share_peer_public(S3I(s)->hs_tls13.key_share,
1342 group, cbs)) 1347 group, &key_exchange))
1343 goto err; 1348 goto err;
1344 1349
1345 return 1; 1350 return 1;
diff --git a/src/lib/libssl/tls13_key_share.c b/src/lib/libssl/tls13_key_share.c
index 9a83b9f9f7..3fe38ecc37 100644
--- a/src/lib/libssl/tls13_key_share.c
+++ b/src/lib/libssl/tls13_key_share.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_key_share.c,v 1.1 2020/01/30 17:09:23 jsing Exp $ */ 1/* $OpenBSD: tls13_key_share.c,v 1.2 2020/02/01 12:41:58 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2020 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -161,22 +161,14 @@ int
161tls13_key_share_peer_public(struct tls13_key_share *ks, uint16_t group, 161tls13_key_share_peer_public(struct tls13_key_share *ks, uint16_t group,
162 CBS *cbs) 162 CBS *cbs)
163{ 163{
164 CBS key_exchange;
165
166 if (ks->group_id != group) 164 if (ks->group_id != group)
167 return 0; 165 return 0;
168 166
169 if (!CBS_get_u16_length_prefixed(cbs, &key_exchange))
170 return 0;
171
172 if (ks->nid == NID_X25519) { 167 if (ks->nid == NID_X25519) {
173 if (!tls13_key_share_peer_public_x25519(ks, &key_exchange)) 168 if (!tls13_key_share_peer_public_x25519(ks, cbs))
174 return 0; 169 return 0;
175 } 170 }
176 171
177 if (CBS_len(cbs) != 0)
178 return 0;
179
180 return 1; 172 return 1;
181} 173}
182 174