diff options
-rw-r--r-- | src/lib/libssl/s3_lib.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 14 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 14 | ||||
-rw-r--r-- | src/lib/libssl/ssl_seclevel.c | 16 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sigalgs.c | 14 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sigalgs.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/ssl_srvr.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/t1_lib.c | 274 | ||||
-rw-r--r-- | src/lib/libssl/tls13_client.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/tls13_server.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/tls_key_share.c | 6 |
12 files changed, 204 insertions, 162 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 4575a141cf..cfd50e66be 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.233 2022/06/29 21:18:04 tb Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.234 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -2494,13 +2494,13 @@ ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt, | |||
2494 | STACK_OF(SSL_CIPHER) *prio, *allow; | 2494 | STACK_OF(SSL_CIPHER) *prio, *allow; |
2495 | SSL_CIPHER *c, *ret = NULL; | 2495 | SSL_CIPHER *c, *ret = NULL; |
2496 | int can_use_ecc; | 2496 | int can_use_ecc; |
2497 | int i, ii, ok; | 2497 | int i, ii, nid, ok; |
2498 | SSL_CERT *cert; | 2498 | SSL_CERT *cert; |
2499 | 2499 | ||
2500 | /* Let's see which ciphers we can support */ | 2500 | /* Let's see which ciphers we can support */ |
2501 | cert = s->cert; | 2501 | cert = s->cert; |
2502 | 2502 | ||
2503 | can_use_ecc = (tls1_get_shared_curve(s) != NID_undef); | 2503 | can_use_ecc = tls1_get_supported_group(s, &nid); |
2504 | 2504 | ||
2505 | /* | 2505 | /* |
2506 | * Do not set the compare functions, because this may lead to a | 2506 | * Do not set the compare functions, because this may lead to a |
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index 604b55277c..8fe416b74a 100644 --- a/src/lib/libssl/ssl_clnt.c +++ b/src/lib/libssl/ssl_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_clnt.c,v 1.149 2022/06/30 11:17:49 tb Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.150 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1271,13 +1271,13 @@ static int | |||
1271 | ssl3_get_server_kex_ecdhe(SSL *s, CBS *cbs) | 1271 | ssl3_get_server_kex_ecdhe(SSL *s, CBS *cbs) |
1272 | { | 1272 | { |
1273 | uint8_t curve_type; | 1273 | uint8_t curve_type; |
1274 | uint16_t curve_id; | 1274 | uint16_t group_id; |
1275 | int decode_error; | 1275 | int decode_error; |
1276 | CBS public; | 1276 | CBS public; |
1277 | 1277 | ||
1278 | if (!CBS_get_u8(cbs, &curve_type)) | 1278 | if (!CBS_get_u8(cbs, &curve_type)) |
1279 | goto decode_err; | 1279 | goto decode_err; |
1280 | if (!CBS_get_u16(cbs, &curve_id)) | 1280 | if (!CBS_get_u16(cbs, &group_id)) |
1281 | goto decode_err; | 1281 | goto decode_err; |
1282 | 1282 | ||
1283 | /* Only named curves are supported. */ | 1283 | /* Only named curves are supported. */ |
@@ -1291,17 +1291,17 @@ ssl3_get_server_kex_ecdhe(SSL *s, CBS *cbs) | |||
1291 | goto decode_err; | 1291 | goto decode_err; |
1292 | 1292 | ||
1293 | /* | 1293 | /* |
1294 | * Check that the curve is one of our preferences - if it is not, | 1294 | * Check that the group is one of our preferences - if it is not, |
1295 | * the server has sent us an invalid curve. | 1295 | * the server has sent us an invalid group. |
1296 | */ | 1296 | */ |
1297 | if (!tls1_check_curve(s, curve_id)) { | 1297 | if (!tls1_check_group(s, group_id)) { |
1298 | SSLerror(s, SSL_R_WRONG_CURVE); | 1298 | SSLerror(s, SSL_R_WRONG_CURVE); |
1299 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); | 1299 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); |
1300 | goto err; | 1300 | goto err; |
1301 | } | 1301 | } |
1302 | 1302 | ||
1303 | tls_key_share_free(s->s3->hs.key_share); | 1303 | tls_key_share_free(s->s3->hs.key_share); |
1304 | if ((s->s3->hs.key_share = tls_key_share_new(curve_id)) == NULL) | 1304 | if ((s->s3->hs.key_share = tls_key_share_new(group_id)) == NULL) |
1305 | goto err; | 1305 | goto err; |
1306 | 1306 | ||
1307 | if (!tls_key_share_peer_public(s->s3->hs.key_share, &public, | 1307 | if (!tls_key_share_peer_public(s->s3->hs.key_share, &public, |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index d3e600b6b7..a2ca99c02d 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.409 2022/06/30 16:05:07 tb Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.410 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1306,7 +1306,7 @@ int ssl_security_cert(const SSL_CTX *ctx, const SSL *ssl, X509 *x509, | |||
1306 | int is_peer, int *out_error); | 1306 | int is_peer, int *out_error); |
1307 | int ssl_security_cert_chain(const SSL *ssl, STACK_OF(X509) *sk, | 1307 | int ssl_security_cert_chain(const SSL *ssl, STACK_OF(X509) *sk, |
1308 | X509 *x509, int *out_error); | 1308 | X509 *x509, int *out_error); |
1309 | int ssl_security_supported_group(const SSL *ssl, uint16_t curve_id); | 1309 | int ssl_security_supported_group(const SSL *ssl, uint16_t group_id); |
1310 | 1310 | ||
1311 | int ssl_get_new_session(SSL *s, int session); | 1311 | int ssl_get_new_session(SSL *s, int session); |
1312 | int ssl_get_prev_session(SSL *s, CBS *session_id, CBS *ext_block, | 1312 | int ssl_get_prev_session(SSL *s, CBS *session_id, CBS *ext_block, |
@@ -1515,11 +1515,11 @@ int tls1_set_groups(uint16_t **out_group_ids, size_t *out_group_ids_len, | |||
1515 | int tls1_set_group_list(uint16_t **out_group_ids, size_t *out_group_ids_len, | 1515 | int tls1_set_group_list(uint16_t **out_group_ids, size_t *out_group_ids_len, |
1516 | const char *groups); | 1516 | const char *groups); |
1517 | 1517 | ||
1518 | int tls1_ec_curve_id2nid(const uint16_t curve_id); | 1518 | int tls1_ec_group_id2nid(uint16_t group_id, int *out_nid); |
1519 | int tls1_ec_curve_id2bits(const uint16_t curve_id); | 1519 | int tls1_ec_group_id2bits(uint16_t group_id, int *out_bits); |
1520 | uint16_t tls1_ec_nid2curve_id(const int nid); | 1520 | int tls1_ec_nid2group_id(int nid, uint16_t *out_group_id); |
1521 | int tls1_check_curve(SSL *s, const uint16_t group_id); | 1521 | int tls1_check_group(SSL *s, uint16_t group_id); |
1522 | int tls1_get_shared_curve(SSL *s); | 1522 | int tls1_get_supported_group(SSL *s, int *group_nid); |
1523 | 1523 | ||
1524 | int ssl_check_clienthello_tlsext_early(SSL *s); | 1524 | int ssl_check_clienthello_tlsext_early(SSL *s); |
1525 | int ssl_check_clienthello_tlsext_late(SSL *s); | 1525 | int ssl_check_clienthello_tlsext_late(SSL *s); |
diff --git a/src/lib/libssl/ssl_seclevel.c b/src/lib/libssl/ssl_seclevel.c index 35f8b8891b..2e0b74141f 100644 --- a/src/lib/libssl/ssl_seclevel.c +++ b/src/lib/libssl/ssl_seclevel.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_seclevel.c,v 1.14 2022/06/30 16:05:07 tb Exp $ */ | 1 | /* $OpenBSD: ssl_seclevel.c,v 1.15 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2020 Theo Buehler <tb@openbsd.org> | 3 | * Copyright (c) 2020 Theo Buehler <tb@openbsd.org> |
4 | * | 4 | * |
@@ -401,23 +401,23 @@ ssl_security_cert_chain(const SSL *ssl, STACK_OF(X509) *sk, X509 *x509, | |||
401 | } | 401 | } |
402 | 402 | ||
403 | int | 403 | int |
404 | ssl_security_supported_group(const SSL *ssl, uint16_t curve_id) | 404 | ssl_security_supported_group(const SSL *ssl, uint16_t group_id) |
405 | { | 405 | { |
406 | CBB cbb; | 406 | CBB cbb; |
407 | int bits, nid; | 407 | int bits, nid; |
408 | uint8_t curve[2]; | 408 | uint8_t group[2]; |
409 | 409 | ||
410 | if ((bits = tls1_ec_curve_id2bits(curve_id)) == 0) | 410 | if (!tls1_ec_group_id2bits(group_id, &bits)) |
411 | return 0; | 411 | return 0; |
412 | if ((nid = tls1_ec_curve_id2nid(curve_id)) == NID_undef) | 412 | if (!tls1_ec_group_id2nid(group_id, &nid)) |
413 | return 0; | 413 | return 0; |
414 | 414 | ||
415 | if (!CBB_init_fixed(&cbb, curve, sizeof(curve))) | 415 | if (!CBB_init_fixed(&cbb, group, sizeof(group))) |
416 | return 0; | 416 | return 0; |
417 | if (!CBB_add_u16(&cbb, curve_id)) | 417 | if (!CBB_add_u16(&cbb, group_id)) |
418 | return 0; | 418 | return 0; |
419 | if (!CBB_finish(&cbb, NULL, NULL)) | 419 | if (!CBB_finish(&cbb, NULL, NULL)) |
420 | return 0; | 420 | return 0; |
421 | 421 | ||
422 | return ssl_security(ssl, SSL_SECOP_CURVE_SUPPORTED, bits, nid, curve); | 422 | return ssl_security(ssl, SSL_SECOP_CURVE_SUPPORTED, bits, nid, group); |
423 | } | 423 | } |
diff --git a/src/lib/libssl/ssl_sigalgs.c b/src/lib/libssl/ssl_sigalgs.c index 9c38a076ac..754d76e72a 100644 --- a/src/lib/libssl/ssl_sigalgs.c +++ b/src/lib/libssl/ssl_sigalgs.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_sigalgs.c,v 1.45 2022/06/29 07:55:59 tb Exp $ */ | 1 | /* $OpenBSD: ssl_sigalgs.c,v 1.46 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org> |
4 | * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> |
@@ -39,7 +39,7 @@ const struct ssl_sigalg sigalgs[] = { | |||
39 | .key_type = EVP_PKEY_EC, | 39 | .key_type = EVP_PKEY_EC, |
40 | .md = EVP_sha512, | 40 | .md = EVP_sha512, |
41 | .security_level = 5, | 41 | .security_level = 5, |
42 | .curve_nid = NID_secp521r1, | 42 | .group_nid = NID_secp521r1, |
43 | }, | 43 | }, |
44 | #ifndef OPENSSL_NO_GOST | 44 | #ifndef OPENSSL_NO_GOST |
45 | { | 45 | { |
@@ -60,7 +60,7 @@ const struct ssl_sigalg sigalgs[] = { | |||
60 | .key_type = EVP_PKEY_EC, | 60 | .key_type = EVP_PKEY_EC, |
61 | .md = EVP_sha384, | 61 | .md = EVP_sha384, |
62 | .security_level = 4, | 62 | .security_level = 4, |
63 | .curve_nid = NID_secp384r1, | 63 | .group_nid = NID_secp384r1, |
64 | }, | 64 | }, |
65 | { | 65 | { |
66 | .value = SIGALG_RSA_PKCS1_SHA256, | 66 | .value = SIGALG_RSA_PKCS1_SHA256, |
@@ -73,7 +73,7 @@ const struct ssl_sigalg sigalgs[] = { | |||
73 | .key_type = EVP_PKEY_EC, | 73 | .key_type = EVP_PKEY_EC, |
74 | .md = EVP_sha256, | 74 | .md = EVP_sha256, |
75 | .security_level = 3, | 75 | .security_level = 3, |
76 | .curve_nid = NID_X9_62_prime256v1, | 76 | .group_nid = NID_X9_62_prime256v1, |
77 | }, | 77 | }, |
78 | #ifndef OPENSSL_NO_GOST | 78 | #ifndef OPENSSL_NO_GOST |
79 | { | 79 | { |
@@ -321,12 +321,12 @@ ssl_sigalg_pkey_ok(SSL *s, const struct ssl_sigalg *sigalg, EVP_PKEY *pkey) | |||
321 | (sigalg->flags & SIGALG_FLAG_RSA_PSS) == 0) | 321 | (sigalg->flags & SIGALG_FLAG_RSA_PSS) == 0) |
322 | return 0; | 322 | return 0; |
323 | 323 | ||
324 | /* Ensure that curve matches for EC keys. */ | 324 | /* Ensure that group matches for EC keys. */ |
325 | if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) { | 325 | if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) { |
326 | if (sigalg->curve_nid == 0) | 326 | if (sigalg->group_nid == 0) |
327 | return 0; | 327 | return 0; |
328 | if (EC_GROUP_get_curve_name(EC_KEY_get0_group( | 328 | if (EC_GROUP_get_curve_name(EC_KEY_get0_group( |
329 | EVP_PKEY_get0_EC_KEY(pkey))) != sigalg->curve_nid) | 329 | EVP_PKEY_get0_EC_KEY(pkey))) != sigalg->group_nid) |
330 | return 0; | 330 | return 0; |
331 | } | 331 | } |
332 | 332 | ||
diff --git a/src/lib/libssl/ssl_sigalgs.h b/src/lib/libssl/ssl_sigalgs.h index 5be2122906..21a54d642b 100644 --- a/src/lib/libssl/ssl_sigalgs.h +++ b/src/lib/libssl/ssl_sigalgs.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_sigalgs.h,v 1.25 2022/06/29 07:53:58 tb Exp $ */ | 1 | /* $OpenBSD: ssl_sigalgs.h,v 1.26 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org> |
4 | * | 4 | * |
@@ -65,7 +65,7 @@ struct ssl_sigalg { | |||
65 | int key_type; | 65 | int key_type; |
66 | const EVP_MD *(*md)(void); | 66 | const EVP_MD *(*md)(void); |
67 | int security_level; | 67 | int security_level; |
68 | int curve_nid; | 68 | int group_nid; |
69 | int flags; | 69 | int flags; |
70 | }; | 70 | }; |
71 | 71 | ||
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c index 8f110831e4..526d9e678b 100644 --- a/src/lib/libssl/ssl_srvr.c +++ b/src/lib/libssl/ssl_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_srvr.c,v 1.146 2022/06/30 11:17:50 tb Exp $ */ | 1 | /* $OpenBSD: ssl_srvr.c,v 1.147 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1380,7 +1380,7 @@ ssl3_send_server_kex_ecdhe(SSL *s, CBB *cbb) | |||
1380 | CBB public; | 1380 | CBB public; |
1381 | int nid; | 1381 | int nid; |
1382 | 1382 | ||
1383 | if ((nid = tls1_get_shared_curve(s)) == NID_undef) { | 1383 | if (!tls1_get_supported_group(s, &nid)) { |
1384 | SSLerror(s, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE); | 1384 | SSLerror(s, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE); |
1385 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); | 1385 | ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); |
1386 | goto err; | 1386 | goto err; |
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c index 88d26fd326..7457925572 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.117 2022/06/30 16:05:07 tb Exp $ */ | 1 | /* $OpenBSD: ssl_tlsext.c,v 1.118 2022/07/02 16:00:12 tb 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> |
@@ -1516,7 +1516,7 @@ tlsext_keyshare_server_parse(SSL *s, uint16_t msg_type, CBS *cbs, int *alert) | |||
1516 | continue; | 1516 | continue; |
1517 | 1517 | ||
1518 | /* XXX - consider implementing server preference. */ | 1518 | /* XXX - consider implementing server preference. */ |
1519 | if (!tls1_check_curve(s, group)) | 1519 | if (!tls1_check_group(s, group)) |
1520 | continue; | 1520 | continue; |
1521 | 1521 | ||
1522 | /* Decode and store the selected key share. */ | 1522 | /* Decode and store the selected key share. */ |
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 9748901268..beaaae1eb0 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_lib.c,v 1.190 2022/07/02 15:53:37 tb Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.191 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -150,12 +150,16 @@ tls1_clear(SSL *s) | |||
150 | s->version = s->method->version; | 150 | s->version = s->method->version; |
151 | } | 151 | } |
152 | 152 | ||
153 | struct curve { | 153 | struct supported_group { |
154 | int nid; | 154 | int nid; |
155 | int bits; | 155 | int bits; |
156 | }; | 156 | }; |
157 | 157 | ||
158 | static const struct curve nid_list[] = { | 158 | /* |
159 | * Supported groups (formerly known as named curves) | ||
160 | * https://www.iana.org/assignments/tls-parameters/#tls-parameters-8 | ||
161 | */ | ||
162 | static const struct supported_group nid_list[] = { | ||
159 | [1] = { | 163 | [1] = { |
160 | .nid = NID_sect163k1, | 164 | .nid = NID_sect163k1, |
161 | .bits = 80, | 165 | .bits = 80, |
@@ -274,6 +278,8 @@ static const struct curve nid_list[] = { | |||
274 | }, | 278 | }, |
275 | }; | 279 | }; |
276 | 280 | ||
281 | #define NID_LIST_LEN (sizeof(nid_list) / sizeof(nid_list[0])) | ||
282 | |||
277 | #if 0 | 283 | #if 0 |
278 | static const uint8_t ecformats_list[] = { | 284 | static const uint8_t ecformats_list[] = { |
279 | TLSEXT_ECPOINTFORMAT_uncompressed, | 285 | TLSEXT_ECPOINTFORMAT_uncompressed, |
@@ -287,7 +293,7 @@ static const uint8_t ecformats_default[] = { | |||
287 | }; | 293 | }; |
288 | 294 | ||
289 | #if 0 | 295 | #if 0 |
290 | static const uint16_t eccurves_list[] = { | 296 | static const uint16_t ecgroups_list[] = { |
291 | 29, /* X25519 (29) */ | 297 | 29, /* X25519 (29) */ |
292 | 14, /* sect571r1 (14) */ | 298 | 14, /* sect571r1 (14) */ |
293 | 13, /* sect571k1 (13) */ | 299 | 13, /* sect571k1 (13) */ |
@@ -320,116 +326,155 @@ static const uint16_t eccurves_list[] = { | |||
320 | }; | 326 | }; |
321 | #endif | 327 | #endif |
322 | 328 | ||
323 | static const uint16_t eccurves_client_default[] = { | 329 | static const uint16_t ecgroups_client_default[] = { |
324 | 29, /* X25519 (29) */ | 330 | 29, /* X25519 (29) */ |
325 | 23, /* secp256r1 (23) */ | 331 | 23, /* secp256r1 (23) */ |
326 | 24, /* secp384r1 (24) */ | 332 | 24, /* secp384r1 (24) */ |
327 | 25, /* secp521r1 (25) */ | 333 | 25, /* secp521r1 (25) */ |
328 | }; | 334 | }; |
329 | 335 | ||
330 | static const uint16_t eccurves_server_default[] = { | 336 | static const uint16_t ecgroups_server_default[] = { |
331 | 29, /* X25519 (29) */ | 337 | 29, /* X25519 (29) */ |
332 | 23, /* secp256r1 (23) */ | 338 | 23, /* secp256r1 (23) */ |
333 | 24, /* secp384r1 (24) */ | 339 | 24, /* secp384r1 (24) */ |
334 | }; | 340 | }; |
335 | 341 | ||
336 | int | 342 | int |
337 | tls1_ec_curve_id2nid(const uint16_t curve_id) | 343 | tls1_ec_group_id2nid(uint16_t group_id, int *out_nid) |
338 | { | 344 | { |
339 | const struct curve *curve; | 345 | const struct supported_group *group; |
340 | 346 | ||
341 | /* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */ | 347 | if (group_id < 1 || group_id >= NID_LIST_LEN) |
342 | if ((curve_id < 1) || | 348 | return 0; |
343 | ((unsigned int)curve_id >= sizeof(nid_list) / sizeof(nid_list[0]))) | 349 | |
344 | return NID_undef; | 350 | if ((group = &nid_list[group_id]) == NULL) |
351 | return 0; | ||
345 | 352 | ||
346 | if ((curve = &nid_list[curve_id]) == NULL) | 353 | *out_nid = group->nid; |
347 | return NID_undef; | ||
348 | 354 | ||
349 | return curve->nid; | 355 | return 1; |
350 | } | 356 | } |
351 | 357 | ||
352 | int | 358 | int |
353 | tls1_ec_curve_id2bits(const uint16_t curve_id) | 359 | tls1_ec_group_id2bits(uint16_t group_id, int *out_bits) |
354 | { | 360 | { |
355 | const struct curve *curve; | 361 | const struct supported_group *group; |
356 | 362 | ||
357 | if ((curve_id < 1) || | 363 | if (group_id < 1 || group_id >= NID_LIST_LEN) |
358 | ((unsigned int)curve_id >= sizeof(nid_list) / sizeof(nid_list[0]))) | ||
359 | return 0; | 364 | return 0; |
360 | 365 | ||
361 | if ((curve = &nid_list[curve_id]) == NULL) | 366 | if ((group = &nid_list[group_id]) == NULL) |
362 | return 0; | 367 | return 0; |
363 | 368 | ||
364 | return curve->bits; | 369 | *out_bits = group->bits; |
370 | |||
371 | return 1; | ||
365 | } | 372 | } |
366 | 373 | ||
367 | uint16_t | 374 | int |
368 | tls1_ec_nid2curve_id(const int nid) | 375 | tls1_ec_nid2group_id(const int nid, uint16_t *out_group_id) |
369 | { | 376 | { |
370 | /* ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) */ | 377 | uint16_t group_id; |
378 | |||
371 | switch (nid) { | 379 | switch (nid) { |
372 | case NID_sect163k1: /* sect163k1 (1) */ | 380 | case NID_sect163k1: |
373 | return 1; | 381 | group_id = 1; |
374 | case NID_sect163r1: /* sect163r1 (2) */ | 382 | break; |
375 | return 2; | 383 | case NID_sect163r1: |
376 | case NID_sect163r2: /* sect163r2 (3) */ | 384 | group_id = 2; |
377 | return 3; | 385 | break; |
378 | case NID_sect193r1: /* sect193r1 (4) */ | 386 | case NID_sect163r2: |
379 | return 4; | 387 | group_id = 3; |
380 | case NID_sect193r2: /* sect193r2 (5) */ | 388 | break; |
381 | return 5; | 389 | case NID_sect193r1: |
382 | case NID_sect233k1: /* sect233k1 (6) */ | 390 | group_id = 4; |
383 | return 6; | 391 | break; |
384 | case NID_sect233r1: /* sect233r1 (7) */ | 392 | case NID_sect193r2: |
385 | return 7; | 393 | group_id = 5; |
386 | case NID_sect239k1: /* sect239k1 (8) */ | 394 | break; |
387 | return 8; | 395 | case NID_sect233k1: |
388 | case NID_sect283k1: /* sect283k1 (9) */ | 396 | group_id = 6; |
389 | return 9; | 397 | break; |
390 | case NID_sect283r1: /* sect283r1 (10) */ | 398 | case NID_sect233r1: |
391 | return 10; | 399 | group_id = 7; |
392 | case NID_sect409k1: /* sect409k1 (11) */ | 400 | break; |
393 | return 11; | 401 | case NID_sect239k1: |
394 | case NID_sect409r1: /* sect409r1 (12) */ | 402 | group_id = 8; |
395 | return 12; | 403 | break; |
396 | case NID_sect571k1: /* sect571k1 (13) */ | 404 | case NID_sect283k1: |
397 | return 13; | 405 | group_id = 9; |
398 | case NID_sect571r1: /* sect571r1 (14) */ | 406 | break; |
399 | return 14; | 407 | case NID_sect283r1: |
400 | case NID_secp160k1: /* secp160k1 (15) */ | 408 | group_id = 10; |
401 | return 15; | 409 | break; |
402 | case NID_secp160r1: /* secp160r1 (16) */ | 410 | case NID_sect409k1: |
403 | return 16; | 411 | group_id = 11; |
404 | case NID_secp160r2: /* secp160r2 (17) */ | 412 | break; |
405 | return 17; | 413 | case NID_sect409r1: |
406 | case NID_secp192k1: /* secp192k1 (18) */ | 414 | group_id = 12; |
407 | return 18; | 415 | break; |
408 | case NID_X9_62_prime192v1: /* secp192r1 (19) */ | 416 | case NID_sect571k1: |
409 | return 19; | 417 | group_id = 13; |
410 | case NID_secp224k1: /* secp224k1 (20) */ | 418 | break; |
411 | return 20; | 419 | case NID_sect571r1: |
412 | case NID_secp224r1: /* secp224r1 (21) */ | 420 | group_id = 14; |
413 | return 21; | 421 | break; |
414 | case NID_secp256k1: /* secp256k1 (22) */ | 422 | case NID_secp160k1: |
415 | return 22; | 423 | group_id = 15; |
416 | case NID_X9_62_prime256v1: /* secp256r1 (23) */ | 424 | break; |
417 | return 23; | 425 | case NID_secp160r1: |
418 | case NID_secp384r1: /* secp384r1 (24) */ | 426 | group_id = 16; |
419 | return 24; | 427 | break; |
420 | case NID_secp521r1: /* secp521r1 (25) */ | 428 | case NID_secp160r2: |
421 | return 25; | 429 | group_id = 17; |
422 | case NID_brainpoolP256r1: /* brainpoolP256r1 (26) */ | 430 | break; |
423 | return 26; | 431 | case NID_secp192k1: |
424 | case NID_brainpoolP384r1: /* brainpoolP384r1 (27) */ | 432 | group_id = 18; |
425 | return 27; | 433 | break; |
426 | case NID_brainpoolP512r1: /* brainpoolP512r1 (28) */ | 434 | case NID_X9_62_prime192v1: /* aka secp192r1 */ |
427 | return 28; | 435 | group_id = 19; |
428 | case NID_X25519: /* X25519 (29) */ | 436 | break; |
429 | return 29; | 437 | case NID_secp224k1: |
438 | group_id = 20; | ||
439 | break; | ||
440 | case NID_secp224r1: | ||
441 | group_id = 21; | ||
442 | break; | ||
443 | case NID_secp256k1: | ||
444 | group_id = 22; | ||
445 | break; | ||
446 | case NID_X9_62_prime256v1: /* aka secp256r1 */ | ||
447 | group_id = 23; | ||
448 | break; | ||
449 | case NID_secp384r1: | ||
450 | group_id = 24; | ||
451 | break; | ||
452 | case NID_secp521r1: | ||
453 | group_id = 25; | ||
454 | break; | ||
455 | case NID_brainpoolP256r1: | ||
456 | group_id = 26; | ||
457 | break; | ||
458 | case NID_brainpoolP384r1: | ||
459 | group_id = 27; | ||
460 | break; | ||
461 | case NID_brainpoolP512r1: | ||
462 | group_id = 28; | ||
463 | break; | ||
464 | case NID_X25519: | ||
465 | group_id = 29; | ||
466 | break; | ||
430 | default: | 467 | default: |
431 | return 0; | 468 | group_id = 0; |
469 | break; | ||
432 | } | 470 | } |
471 | |||
472 | if (group_id == 0) | ||
473 | return 0; | ||
474 | |||
475 | *out_group_id = group_id; | ||
476 | |||
477 | return 1; | ||
433 | } | 478 | } |
434 | 479 | ||
435 | /* | 480 | /* |
@@ -476,11 +521,11 @@ tls1_get_group_list(SSL *s, int client_groups, const uint16_t **pgroups, | |||
476 | return; | 521 | return; |
477 | 522 | ||
478 | if (!s->server) { | 523 | if (!s->server) { |
479 | *pgroups = eccurves_client_default; | 524 | *pgroups = ecgroups_client_default; |
480 | *pgroupslen = sizeof(eccurves_client_default) / 2; | 525 | *pgroupslen = sizeof(ecgroups_client_default) / 2; |
481 | } else { | 526 | } else { |
482 | *pgroups = eccurves_server_default; | 527 | *pgroups = ecgroups_server_default; |
483 | *pgroupslen = sizeof(eccurves_server_default) / 2; | 528 | *pgroupslen = sizeof(ecgroups_server_default) / 2; |
484 | } | 529 | } |
485 | } | 530 | } |
486 | 531 | ||
@@ -491,13 +536,11 @@ tls1_set_groups(uint16_t **out_group_ids, size_t *out_group_ids_len, | |||
491 | uint16_t *group_ids; | 536 | uint16_t *group_ids; |
492 | size_t i; | 537 | size_t i; |
493 | 538 | ||
494 | group_ids = calloc(ngroups, sizeof(uint16_t)); | 539 | if ((group_ids = calloc(ngroups, sizeof(uint16_t))) == NULL) |
495 | if (group_ids == NULL) | ||
496 | return 0; | 540 | return 0; |
497 | 541 | ||
498 | for (i = 0; i < ngroups; i++) { | 542 | for (i = 0; i < ngroups; i++) { |
499 | group_ids[i] = tls1_ec_nid2curve_id(groups[i]); | 543 | if (!tls1_ec_nid2group_id(groups[i], &group_ids[i])) { |
500 | if (group_ids[i] == 0) { | ||
501 | free(group_ids); | 544 | free(group_ids); |
502 | return 0; | 545 | return 0; |
503 | } | 546 | } |
@@ -537,8 +580,7 @@ tls1_set_group_list(uint16_t **out_group_ids, size_t *out_group_ids_len, | |||
537 | goto err; | 580 | goto err; |
538 | group_ids = new_group_ids; | 581 | group_ids = new_group_ids; |
539 | 582 | ||
540 | group_ids[ngroups] = tls1_ec_nid2curve_id(nid); | 583 | if (!tls1_ec_nid2group_id(nid, &group_ids[ngroups])) |
541 | if (group_ids[ngroups] == 0) | ||
542 | goto err; | 584 | goto err; |
543 | 585 | ||
544 | ngroups++; | 586 | ngroups++; |
@@ -558,9 +600,9 @@ tls1_set_group_list(uint16_t **out_group_ids, size_t *out_group_ids_len, | |||
558 | return 0; | 600 | return 0; |
559 | } | 601 | } |
560 | 602 | ||
561 | /* Check that a curve is one of our preferences. */ | 603 | /* Check that a group is one of our preferences. */ |
562 | int | 604 | int |
563 | tls1_check_curve(SSL *s, const uint16_t curve_id) | 605 | tls1_check_group(SSL *s, uint16_t group_id) |
564 | { | 606 | { |
565 | const uint16_t *groups; | 607 | const uint16_t *groups; |
566 | size_t groupslen, i; | 608 | size_t groupslen, i; |
@@ -570,14 +612,14 @@ tls1_check_curve(SSL *s, const uint16_t curve_id) | |||
570 | for (i = 0; i < groupslen; i++) { | 612 | for (i = 0; i < groupslen; i++) { |
571 | if (!ssl_security_supported_group(s, groups[i])) | 613 | if (!ssl_security_supported_group(s, groups[i])) |
572 | continue; | 614 | continue; |
573 | if (groups[i] == curve_id) | 615 | if (groups[i] == group_id) |
574 | return (1); | 616 | return 1; |
575 | } | 617 | } |
576 | return (0); | 618 | return 0; |
577 | } | 619 | } |
578 | 620 | ||
579 | int | 621 | int |
580 | tls1_get_shared_curve(SSL *s) | 622 | tls1_get_supported_group(SSL *s, int *out_nid) |
581 | { | 623 | { |
582 | size_t preflen, supplen, i, j; | 624 | size_t preflen, supplen, i, j; |
583 | const uint16_t *pref, *supp; | 625 | const uint16_t *pref, *supp; |
@@ -585,9 +627,9 @@ tls1_get_shared_curve(SSL *s) | |||
585 | 627 | ||
586 | /* Cannot do anything on the client side. */ | 628 | /* Cannot do anything on the client side. */ |
587 | if (s->server == 0) | 629 | if (s->server == 0) |
588 | return (NID_undef); | 630 | return 0; |
589 | 631 | ||
590 | /* Return first preference shared curve. */ | 632 | /* Return first preference supported group. */ |
591 | server_pref = (s->internal->options & SSL_OP_CIPHER_SERVER_PREFERENCE); | 633 | server_pref = (s->internal->options & SSL_OP_CIPHER_SERVER_PREFERENCE); |
592 | tls1_get_group_list(s, (server_pref == 0), &pref, &preflen); | 634 | tls1_get_group_list(s, (server_pref == 0), &pref, &preflen); |
593 | tls1_get_group_list(s, (server_pref != 0), &supp, &supplen); | 635 | tls1_get_group_list(s, (server_pref != 0), &supp, &supplen); |
@@ -597,15 +639,15 @@ tls1_get_shared_curve(SSL *s) | |||
597 | continue; | 639 | continue; |
598 | for (j = 0; j < supplen; j++) { | 640 | for (j = 0; j < supplen; j++) { |
599 | if (pref[i] == supp[j]) | 641 | if (pref[i] == supp[j]) |
600 | return (tls1_ec_curve_id2nid(pref[i])); | 642 | return tls1_ec_group_id2nid(pref[i], out_nid); |
601 | } | 643 | } |
602 | } | 644 | } |
603 | return (NID_undef); | 645 | return 0; |
604 | } | 646 | } |
605 | 647 | ||
606 | /* For an EC key set TLS ID and required compression based on parameters. */ | 648 | /* For an EC key set TLS ID and required compression based on parameters. */ |
607 | static int | 649 | static int |
608 | tls1_set_ec_id(uint16_t *curve_id, uint8_t *comp_id, EC_KEY *ec) | 650 | tls1_set_ec_id(uint16_t *group_id, uint8_t *comp_id, EC_KEY *ec) |
609 | { | 651 | { |
610 | const EC_GROUP *grp; | 652 | const EC_GROUP *grp; |
611 | const EC_METHOD *meth; | 653 | const EC_METHOD *meth; |
@@ -615,18 +657,18 @@ tls1_set_ec_id(uint16_t *curve_id, uint8_t *comp_id, EC_KEY *ec) | |||
615 | if (ec == NULL) | 657 | if (ec == NULL) |
616 | return (0); | 658 | return (0); |
617 | 659 | ||
618 | /* Determine whether the curve is defined over a prime field. */ | 660 | /* Determine whether the group is defined over a prime field. */ |
619 | if ((grp = EC_KEY_get0_group(ec)) == NULL) | 661 | if ((grp = EC_KEY_get0_group(ec)) == NULL) |
620 | return (0); | 662 | return (0); |
621 | if ((meth = EC_GROUP_method_of(grp)) == NULL) | 663 | if ((meth = EC_GROUP_method_of(grp)) == NULL) |
622 | return (0); | 664 | return (0); |
623 | prime_field = (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field); | 665 | prime_field = (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field); |
624 | 666 | ||
625 | /* Determine curve ID - NID_undef results in a curve ID of zero. */ | 667 | /* Determine group ID. */ |
626 | nid = EC_GROUP_get_curve_name(grp); | 668 | nid = EC_GROUP_get_curve_name(grp); |
627 | /* If we have an ID set it, otherwise set arbitrary explicit curve. */ | 669 | /* If we have an ID set it, otherwise set arbitrary explicit group. */ |
628 | if ((*curve_id = tls1_ec_nid2curve_id(nid)) == 0) | 670 | if (!tls1_ec_nid2group_id(nid, group_id)) |
629 | *curve_id = prime_field ? 0xff01 : 0xff02; | 671 | *group_id = prime_field ? 0xff01 : 0xff02; |
630 | 672 | ||
631 | if (comp_id == NULL) | 673 | if (comp_id == NULL) |
632 | return (1); | 674 | return (1); |
@@ -646,7 +688,7 @@ tls1_set_ec_id(uint16_t *curve_id, uint8_t *comp_id, EC_KEY *ec) | |||
646 | 688 | ||
647 | /* Check that an EC key is compatible with extensions. */ | 689 | /* Check that an EC key is compatible with extensions. */ |
648 | static int | 690 | static int |
649 | tls1_check_ec_key(SSL *s, const uint16_t *curve_id, const uint8_t *comp_id) | 691 | tls1_check_ec_key(SSL *s, const uint16_t *group_id, const uint8_t *comp_id) |
650 | { | 692 | { |
651 | size_t groupslen, formatslen, i; | 693 | size_t groupslen, formatslen, i; |
652 | const uint16_t *groups; | 694 | const uint16_t *groups; |
@@ -667,12 +709,12 @@ tls1_check_ec_key(SSL *s, const uint16_t *curve_id, const uint8_t *comp_id) | |||
667 | } | 709 | } |
668 | 710 | ||
669 | /* | 711 | /* |
670 | * Check curve list if present, otherwise everything is supported. | 712 | * Check group list if present, otherwise everything is supported. |
671 | */ | 713 | */ |
672 | tls1_get_group_list(s, 1, &groups, &groupslen); | 714 | tls1_get_group_list(s, 1, &groups, &groupslen); |
673 | if (curve_id != NULL && groups != NULL) { | 715 | if (group_id != NULL && groups != NULL) { |
674 | for (i = 0; i < groupslen; i++) { | 716 | for (i = 0; i < groupslen; i++) { |
675 | if (groups[i] == *curve_id) | 717 | if (groups[i] == *group_id) |
676 | break; | 718 | break; |
677 | } | 719 | } |
678 | if (i == groupslen) | 720 | if (i == groupslen) |
@@ -687,7 +729,7 @@ int | |||
687 | tls1_check_ec_server_key(SSL *s) | 729 | tls1_check_ec_server_key(SSL *s) |
688 | { | 730 | { |
689 | SSL_CERT_PKEY *cpk = s->cert->pkeys + SSL_PKEY_ECC; | 731 | SSL_CERT_PKEY *cpk = s->cert->pkeys + SSL_PKEY_ECC; |
690 | uint16_t curve_id; | 732 | uint16_t group_id; |
691 | uint8_t comp_id; | 733 | uint8_t comp_id; |
692 | EC_KEY *eckey; | 734 | EC_KEY *eckey; |
693 | EVP_PKEY *pkey; | 735 | EVP_PKEY *pkey; |
@@ -698,10 +740,10 @@ tls1_check_ec_server_key(SSL *s) | |||
698 | return (0); | 740 | return (0); |
699 | if ((eckey = EVP_PKEY_get0_EC_KEY(pkey)) == NULL) | 741 | if ((eckey = EVP_PKEY_get0_EC_KEY(pkey)) == NULL) |
700 | return (0); | 742 | return (0); |
701 | if (!tls1_set_ec_id(&curve_id, &comp_id, eckey)) | 743 | if (!tls1_set_ec_id(&group_id, &comp_id, eckey)) |
702 | return (0); | 744 | return (0); |
703 | 745 | ||
704 | return tls1_check_ec_key(s, &curve_id, &comp_id); | 746 | return tls1_check_ec_key(s, &group_id, &comp_id); |
705 | } | 747 | } |
706 | 748 | ||
707 | int | 749 | int |
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c index 11eb880a6e..fb2dd69eb2 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.94 2022/02/03 16:33:12 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_client.c,v 1.95 2022/07/02 16:00:12 tb 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 | * |
@@ -440,7 +440,7 @@ tls13_client_hello_retry_send(struct tls13_ctx *ctx, CBB *cbb) | |||
440 | * supported groups and is not the same as the key share we previously | 440 | * supported groups and is not the same as the key share we previously |
441 | * offered. | 441 | * offered. |
442 | */ | 442 | */ |
443 | if (!tls1_check_curve(ctx->ssl, ctx->hs->tls13.server_group)) | 443 | if (!tls1_check_group(ctx->ssl, ctx->hs->tls13.server_group)) |
444 | return 0; /* XXX alert */ | 444 | return 0; /* XXX alert */ |
445 | if (ctx->hs->tls13.server_group == tls_key_share_group(ctx->hs->key_share)) | 445 | if (ctx->hs->tls13.server_group == tls_key_share_group(ctx->hs->key_share)) |
446 | return 0; /* XXX alert */ | 446 | return 0; /* XXX alert */ |
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c index 2c1c12ff25..c5c86ab95f 100644 --- a/src/lib/libssl/tls13_server.c +++ b/src/lib/libssl/tls13_server.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_server.c,v 1.98 2022/06/04 01:14:43 tb Exp $ */ | 1 | /* $OpenBSD: tls13_server.c,v 1.99 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> |
4 | * Copyright (c) 2020 Bob Beck <beck@openbsd.org> | 4 | * Copyright (c) 2020 Bob Beck <beck@openbsd.org> |
@@ -432,9 +432,9 @@ tls13_server_hello_retry_request_send(struct tls13_ctx *ctx, CBB *cbb) | |||
432 | 432 | ||
433 | if (ctx->hs->key_share != NULL) | 433 | if (ctx->hs->key_share != NULL) |
434 | return 0; | 434 | return 0; |
435 | if ((nid = tls1_get_shared_curve(ctx->ssl)) == NID_undef) | 435 | if (!tls1_get_supported_group(ctx->ssl, &nid)) |
436 | return 0; | 436 | return 0; |
437 | if ((ctx->hs->tls13.server_group = tls1_ec_nid2curve_id(nid)) == 0) | 437 | if (!tls1_ec_nid2group_id(nid, &ctx->hs->tls13.server_group)) |
438 | return 0; | 438 | return 0; |
439 | 439 | ||
440 | if (!tls13_server_hello_build(ctx, cbb, 1)) | 440 | if (!tls13_server_hello_build(ctx, cbb, 1)) |
diff --git a/src/lib/libssl/tls_key_share.c b/src/lib/libssl/tls_key_share.c index c170f08649..048db25bd5 100644 --- a/src/lib/libssl/tls_key_share.c +++ b/src/lib/libssl/tls_key_share.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls_key_share.c,v 1.6 2022/07/02 09:33:20 tb Exp $ */ | 1 | /* $OpenBSD: tls_key_share.c,v 1.7 2022/07/02 16:00:12 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2020, 2021 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2020, 2021 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -61,7 +61,7 @@ tls_key_share_new(uint16_t group_id) | |||
61 | { | 61 | { |
62 | int nid; | 62 | int nid; |
63 | 63 | ||
64 | if ((nid = tls1_ec_curve_id2nid(group_id)) == NID_undef) | 64 | if (!tls1_ec_group_id2nid(group_id, &nid)) |
65 | return NULL; | 65 | return NULL; |
66 | 66 | ||
67 | return tls_key_share_new_internal(nid, group_id); | 67 | return tls_key_share_new_internal(nid, group_id); |
@@ -73,7 +73,7 @@ tls_key_share_new_nid(int nid) | |||
73 | uint16_t group_id = 0; | 73 | uint16_t group_id = 0; |
74 | 74 | ||
75 | if (nid != NID_dhKeyAgreement) { | 75 | if (nid != NID_dhKeyAgreement) { |
76 | if ((group_id = tls1_ec_nid2curve_id(nid)) == 0) | 76 | if (!tls1_ec_nid2group_id(nid, &group_id)) |
77 | return NULL; | 77 | return NULL; |
78 | } | 78 | } |
79 | 79 | ||