summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/tls13_client.c27
-rw-r--r--src/lib/libssl/tls13_internal.h5
-rw-r--r--src/lib/libssl/tls13_key_share.c26
-rw-r--r--src/lib/libssl/tls13_server.c4
4 files changed, 37 insertions, 25 deletions
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c
index 22cda1e6be..5cd588875e 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.48 2020/04/08 16:23:58 jsing Exp $ */ 1/* $OpenBSD: tls13_client.c,v 1.49 2020/04/17 17:16:53 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 *
@@ -36,6 +36,8 @@ tls13_connect(struct tls13_ctx *ctx)
36static int 36static int
37tls13_client_init(struct tls13_ctx *ctx) 37tls13_client_init(struct tls13_ctx *ctx)
38{ 38{
39 const uint16_t *groups;
40 size_t groups_len;
39 SSL *s = ctx->ssl; 41 SSL *s = ctx->ssl;
40 42
41 if (!ssl_supported_version_range(s, &ctx->hs->min_version, 43 if (!ssl_supported_version_range(s, &ctx->hs->min_version,
@@ -51,7 +53,11 @@ tls13_client_init(struct tls13_ctx *ctx)
51 if (!tls1_transcript_init(s)) 53 if (!tls1_transcript_init(s))
52 return 0; 54 return 0;
53 55
54 if ((ctx->hs->key_share = tls13_key_share_new(NID_X25519)) == NULL) 56 /* Generate a key share using our preferred group. */
57 tls1_get_group_list(s, 0, &groups, &groups_len);
58 if (groups_len < 1)
59 return 0;
60 if ((ctx->hs->key_share = tls13_key_share_new(groups[0])) == NULL)
55 return 0; 61 return 0;
56 if (!tls13_key_share_generate(ctx->hs->key_share)) 62 if (!tls13_key_share_generate(ctx->hs->key_share))
57 return 0; 63 return 0;
@@ -560,23 +566,20 @@ tls13_server_hello_recv(struct tls13_ctx *ctx, CBS *cbs)
560int 566int
561tls13_client_hello_retry_send(struct tls13_ctx *ctx, CBB *cbb) 567tls13_client_hello_retry_send(struct tls13_ctx *ctx, CBB *cbb)
562{ 568{
563 int nid;
564
565 /* 569 /*
566 * Ensure that the server supported group is not the same 570 * Ensure that the server supported group is one that we listed in our
567 * as the one we previously offered and that it was one that 571 * supported groups and is not the same as the key share we previously
568 * we listed in our supported groups. 572 * offered.
569 */ 573 */
570 if (ctx->hs->server_group == tls13_key_share_group(ctx->hs->key_share)) 574 if (!tls1_check_curve(ctx->ssl, ctx->hs->server_group))
571 return 0; /* XXX alert */ 575 return 0; /* XXX alert */
572 if ((nid = tls1_ec_curve_id2nid(ctx->hs->server_group)) == 0) 576 if (ctx->hs->server_group == tls13_key_share_group(ctx->hs->key_share))
573 return 0;
574 if (nid != NID_X25519 && nid != NID_X9_62_prime256v1 && nid != NID_secp384r1)
575 return 0; /* XXX alert */ 577 return 0; /* XXX alert */
576 578
577 /* Switch to new key share. */ 579 /* Switch to new key share. */
578 tls13_key_share_free(ctx->hs->key_share); 580 tls13_key_share_free(ctx->hs->key_share);
579 if ((ctx->hs->key_share = tls13_key_share_new(nid)) == NULL) 581 if ((ctx->hs->key_share =
582 tls13_key_share_new(ctx->hs->server_group)) == NULL)
580 return 0; 583 return 0;
581 if (!tls13_key_share_generate(ctx->hs->key_share)) 584 if (!tls13_key_share_generate(ctx->hs->key_share))
582 return 0; 585 return 0;
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h
index 053a7972a0..8d5d9c4efe 100644
--- a/src/lib/libssl/tls13_internal.h
+++ b/src/lib/libssl/tls13_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_internal.h,v 1.61 2020/03/10 17:15:02 jsing Exp $ */ 1/* $OpenBSD: tls13_internal.h,v 1.62 2020/04/17 17:16:53 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@@ -123,7 +123,8 @@ int tls13_update_server_traffic_secret(struct tls13_secrets *secrets);
123 */ 123 */
124struct tls13_key_share; 124struct tls13_key_share;
125 125
126struct tls13_key_share *tls13_key_share_new(int nid); 126struct tls13_key_share *tls13_key_share_new(uint16_t group_id);
127struct tls13_key_share *tls13_key_share_new_nid(int nid);
127void tls13_key_share_free(struct tls13_key_share *ks); 128void tls13_key_share_free(struct tls13_key_share *ks);
128 129
129uint16_t tls13_key_share_group(struct tls13_key_share *ks); 130uint16_t tls13_key_share_group(struct tls13_key_share *ks);
diff --git a/src/lib/libssl/tls13_key_share.c b/src/lib/libssl/tls13_key_share.c
index c38a3e3cb8..5404c04070 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.3 2020/02/04 18:06:26 jsing Exp $ */ 1/* $OpenBSD: tls13_key_share.c,v 1.4 2020/04/17 17:16:53 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2020 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -36,24 +36,32 @@ struct tls13_key_share {
36}; 36};
37 37
38struct tls13_key_share * 38struct tls13_key_share *
39tls13_key_share_new(int nid) 39tls13_key_share_new(uint16_t group_id)
40{ 40{
41 struct tls13_key_share *ks; 41 struct tls13_key_share *ks;
42 int nid;
42 43
43 if ((ks = calloc(1, sizeof(struct tls13_key_share))) == NULL) 44 if ((nid = tls1_ec_curve_id2nid(group_id)) == 0)
44 goto err; 45 return NULL;
45 46
46 if ((ks->group_id = tls1_ec_nid2curve_id(nid)) == 0) 47 if ((ks = calloc(1, sizeof(struct tls13_key_share))) == NULL)
47 goto err; 48 return NULL;
48 49
50 ks->group_id = group_id;
49 ks->nid = nid; 51 ks->nid = nid;
50 52
51 return ks; 53 return ks;
54}
52 55
53 err: 56struct tls13_key_share *
54 tls13_key_share_free(ks); 57tls13_key_share_new_nid(int nid)
58{
59 uint16_t group_id;
60
61 if ((group_id = tls1_ec_nid2curve_id(nid)) == 0)
62 return NULL;
55 63
56 return NULL; 64 return tls13_key_share_new(group_id);
57} 65}
58 66
59void 67void
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c
index 3b170f9370..1aebf5840c 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.28 2020/03/10 17:23:25 jsing Exp $ */ 1/* $OpenBSD: tls13_server.c,v 1.29 2020/04/17 17:16:53 jsing 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>
@@ -49,7 +49,7 @@ tls13_server_init(struct tls13_ctx *ctx)
49 if ((s->session = SSL_SESSION_new()) == NULL) 49 if ((s->session = SSL_SESSION_new()) == NULL)
50 return 0; 50 return 0;
51 51
52 if ((ctx->hs->key_share = tls13_key_share_new(NID_X25519)) == NULL) 52 if ((ctx->hs->key_share = tls13_key_share_new_nid(NID_X25519)) == NULL)
53 return 0; 53 return 0;
54 if (!tls13_key_share_generate(ctx->hs->key_share)) 54 if (!tls13_key_share_generate(ctx->hs->key_share))
55 return 0; 55 return 0;