diff options
author | jsing <> | 2022-01-04 11:01:58 +0000 |
---|---|---|
committer | jsing <> | 2022-01-04 11:01:58 +0000 |
commit | 3baa905e223f4d3616de758891259e622b0c1f74 (patch) | |
tree | 8a36783ad5b1145ae0ab4959ccabc072f74a1619 /src/lib | |
parent | 5c3d4bb0be60368d72b04cf4d04bd98d27cb2bff (diff) | |
download | openbsd-3baa905e223f4d3616de758891259e622b0c1f74.tar.gz openbsd-3baa905e223f4d3616de758891259e622b0c1f74.tar.bz2 openbsd-3baa905e223f4d3616de758891259e622b0c1f74.zip |
Pull key share group/length CBB code up from tls13_key_share_public()
This provides better symmetry with the parsing code and will allow for
better reuse with the legacy stack, which has different message structures.
ok inoguchi@ tb@
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 23 | ||||
-rw-r--r-- | src/lib/libssl/tls13_key_share.c | 26 |
2 files changed, 22 insertions, 27 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c index c97ade8bdd..74b54154e3 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.102 2022/01/04 10:34:16 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_tlsext.c,v 1.103 2022/01/04 11:01: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> |
@@ -1455,13 +1455,17 @@ tlsext_keyshare_client_needs(SSL *s, uint16_t msg_type) | |||
1455 | int | 1455 | int |
1456 | tlsext_keyshare_client_build(SSL *s, uint16_t msg_type, CBB *cbb) | 1456 | tlsext_keyshare_client_build(SSL *s, uint16_t msg_type, CBB *cbb) |
1457 | { | 1457 | { |
1458 | CBB client_shares; | 1458 | CBB client_shares, key_exchange; |
1459 | 1459 | ||
1460 | if (!CBB_add_u16_length_prefixed(cbb, &client_shares)) | 1460 | if (!CBB_add_u16_length_prefixed(cbb, &client_shares)) |
1461 | return 0; | 1461 | return 0; |
1462 | 1462 | ||
1463 | if (!tls13_key_share_public(S3I(s)->hs.tls13.key_share, | 1463 | if (!CBB_add_u16(&client_shares, |
1464 | &client_shares)) | 1464 | tls13_key_share_group(S3I(s)->hs.tls13.key_share))) |
1465 | return 0; | ||
1466 | if (!CBB_add_u16_length_prefixed(&client_shares, &key_exchange)) | ||
1467 | return 0; | ||
1468 | if (!tls13_key_share_public(S3I(s)->hs.tls13.key_share, &key_exchange)) | ||
1465 | return 0; | 1469 | return 0; |
1466 | 1470 | ||
1467 | if (!CBB_flush(cbb)) | 1471 | if (!CBB_flush(cbb)) |
@@ -1531,6 +1535,8 @@ tlsext_keyshare_server_needs(SSL *s, uint16_t msg_type) | |||
1531 | int | 1535 | int |
1532 | tlsext_keyshare_server_build(SSL *s, uint16_t msg_type, CBB *cbb) | 1536 | tlsext_keyshare_server_build(SSL *s, uint16_t msg_type, CBB *cbb) |
1533 | { | 1537 | { |
1538 | CBB key_exchange; | ||
1539 | |||
1534 | /* In the case of a HRR, we only send the server selected group. */ | 1540 | /* In the case of a HRR, we only send the server selected group. */ |
1535 | if (S3I(s)->hs.tls13.hrr) { | 1541 | if (S3I(s)->hs.tls13.hrr) { |
1536 | if (S3I(s)->hs.tls13.server_group == 0) | 1542 | if (S3I(s)->hs.tls13.server_group == 0) |
@@ -1541,7 +1547,14 @@ tlsext_keyshare_server_build(SSL *s, uint16_t msg_type, CBB *cbb) | |||
1541 | if (S3I(s)->hs.tls13.key_share == NULL) | 1547 | if (S3I(s)->hs.tls13.key_share == NULL) |
1542 | return 0; | 1548 | return 0; |
1543 | 1549 | ||
1544 | if (!tls13_key_share_public(S3I(s)->hs.tls13.key_share, cbb)) | 1550 | if (!CBB_add_u16(cbb, tls13_key_share_group(S3I(s)->hs.tls13.key_share))) |
1551 | return 0; | ||
1552 | if (!CBB_add_u16_length_prefixed(cbb, &key_exchange)) | ||
1553 | return 0; | ||
1554 | if (!tls13_key_share_public(S3I(s)->hs.tls13.key_share, &key_exchange)) | ||
1555 | return 0; | ||
1556 | |||
1557 | if (!CBB_flush(cbb)) | ||
1545 | return 0; | 1558 | return 0; |
1546 | 1559 | ||
1547 | return 1; | 1560 | return 1; |
diff --git a/src/lib/libssl/tls13_key_share.c b/src/lib/libssl/tls13_key_share.c index 0d1c091462..70f1b673f6 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.6 2020/04/18 14:07:56 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_key_share.c,v 1.7 2022/01/04 11:01: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 | * |
@@ -187,28 +187,10 @@ tls13_key_share_public_x25519(struct tls13_key_share *ks, CBB *cbb) | |||
187 | int | 187 | int |
188 | tls13_key_share_public(struct tls13_key_share *ks, CBB *cbb) | 188 | tls13_key_share_public(struct tls13_key_share *ks, CBB *cbb) |
189 | { | 189 | { |
190 | CBB key_exchange; | 190 | if (ks->nid == NID_X25519) |
191 | 191 | return tls13_key_share_public_x25519(ks, cbb); | |
192 | if (!CBB_add_u16(cbb, ks->group_id)) | ||
193 | goto err; | ||
194 | if (!CBB_add_u16_length_prefixed(cbb, &key_exchange)) | ||
195 | goto err; | ||
196 | |||
197 | if (ks->nid == NID_X25519) { | ||
198 | if (!tls13_key_share_public_x25519(ks, &key_exchange)) | ||
199 | goto err; | ||
200 | } else { | ||
201 | if (!tls13_key_share_public_ecdhe_ecp(ks, &key_exchange)) | ||
202 | goto err; | ||
203 | } | ||
204 | |||
205 | if (!CBB_flush(cbb)) | ||
206 | goto err; | ||
207 | |||
208 | return 1; | ||
209 | 192 | ||
210 | err: | 193 | return tls13_key_share_public_ecdhe_ecp(ks, cbb); |
211 | return 0; | ||
212 | } | 194 | } |
213 | 195 | ||
214 | static int | 196 | static int |