summaryrefslogtreecommitdiff
path: root/src/regress
diff options
context:
space:
mode:
Diffstat (limited to 'src/regress')
-rw-r--r--src/regress/lib/libssl/tlsext/tlsexttest.c101
1 files changed, 96 insertions, 5 deletions
diff --git a/src/regress/lib/libssl/tlsext/tlsexttest.c b/src/regress/lib/libssl/tlsext/tlsexttest.c
index c7983833dc..e61722542e 100644
--- a/src/regress/lib/libssl/tlsext/tlsexttest.c
+++ b/src/regress/lib/libssl/tlsext/tlsexttest.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tlsexttest.c,v 1.86 2024/03/26 02:43:56 beck Exp $ */ 1/* $OpenBSD: tlsexttest.c,v 1.87 2024/03/27 22:27:09 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2017 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2017 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -1109,7 +1109,6 @@ test_tlsext_ecpf_client(void)
1109 goto err; 1109 goto err;
1110 } 1110 }
1111 1111
1112
1113 failure = 0; 1112 failure = 0;
1114 1113
1115 err: 1114 err:
@@ -3648,6 +3647,7 @@ test_tlsext_keyshare_client(void)
3648 const struct tls_extension_funcs *server_funcs; 3647 const struct tls_extension_funcs *server_funcs;
3649 int failure; 3648 int failure;
3650 size_t dlen; 3649 size_t dlen;
3650 size_t idx;
3651 int alert; 3651 int alert;
3652 CBB cbb; 3652 CBB cbb;
3653 CBS cbs; 3653 CBS cbs;
@@ -3701,18 +3701,109 @@ test_tlsext_keyshare_client(void)
3701 goto done; 3701 goto done;
3702 } 3702 }
3703 3703
3704 (ssl)->version = TLS1_3_VERSION; 3704 ssl->version = TLS1_3_VERSION;
3705 CBS_init(&cbs, data, dlen); 3705
3706 /* Fake up the ssl enough so the key share can process */
3707 ssl->session = SSL_SESSION_new();
3708 ssl->s3 = calloc(1, sizeof(*ssl->s3));
3709 ssl->session->tlsext_supportedgroups = calloc(4,
3710 sizeof(unsigned short));
3711 if (ssl->session == NULL || ssl->s3 == NULL ||
3712 ssl->session->tlsext_supportedgroups == NULL) {
3713 FAIL("malloc");
3714 goto done;
3715 }
3716 ssl->session->tlsext_supportedgroups[0] = 29;
3717 ssl->session->tlsext_supportedgroups[1] = 23;
3718 ssl->session->tlsext_supportedgroups[2] = 24;
3719 ssl->session->tlsext_supportedgroups[3] = 25;
3720 ssl->session->tlsext_supportedgroups_length = 4;
3721 tls_extension_find(TLSEXT_TYPE_supported_groups, &idx);
3722 ssl->s3->hs.extensions_processed |= (1 << idx);
3723 ssl->s3->hs.extensions_seen |= (1 << idx);
3724 ssl->s3->hs.our_max_tls_version = TLS1_3_VERSION;
3706 3725
3726 /*
3727 * We should select the key share for group 29, when group 29
3728 * is the most preferred group
3729 */
3730 CBS_init(&cbs, data, dlen);
3707 if (!server_funcs->process(ssl, SSL_TLSEXT_MSG_CH, &cbs, &alert)) { 3731 if (!server_funcs->process(ssl, SSL_TLSEXT_MSG_CH, &cbs, &alert)) {
3708 FAIL("failed to parse client keyshare\n"); 3732 FAIL("failed to process client keyshare\n");
3733 goto done;
3734 }
3735 if (CBS_len(&cbs) != 0) {
3736 FAIL("extension data remaining\n");
3737 goto done;
3738 }
3739 if (ssl->s3->hs.key_share == NULL) {
3740 FAIL("Did not select a key share");
3709 goto done; 3741 goto done;
3710 } 3742 }
3711 3743
3744 /*
3745 * Pretend the client did not send the supported groups extension. We
3746 * should fail to process.
3747 */
3748 ssl->s3->hs.extensions_seen = 0;
3749 free(ssl->s3->hs.key_share);
3750 ssl->s3->hs.key_share = NULL;
3751 CBS_init(&cbs, data, dlen);
3752 if (server_funcs->process(ssl, SSL_TLSEXT_MSG_CH, &cbs, &alert)) {
3753 FAIL("Processed key share when supported groups not provided");
3754 goto done;
3755 }
3756 ssl->s3->hs.extensions_seen |= (1 << idx);
3757
3758 /*
3759 * Pretend supported groups did not get processed. We should fail to
3760 * process
3761 */
3762 ssl->s3->hs.extensions_processed = 0;
3763 ssl->s3->hs.key_share = NULL;
3764 CBS_init(&cbs, data, dlen);
3765 if (server_funcs->process(ssl, SSL_TLSEXT_MSG_CH, &cbs, &alert)) {
3766 FAIL("Processed key share when supported groups unprocesed");
3767 goto done;
3768 }
3769 ssl->s3->hs.extensions_processed |= (1 << idx);
3770
3771 /*
3772 * Remove group 29 by making it 0xbeef, meaning 29 has not been sent in
3773 * supported groups. This should fail to process.
3774 */
3775 ssl->session->tlsext_supportedgroups[0] = 0xbeef;
3776 ssl->s3->hs.key_share = NULL;
3777 CBS_init(&cbs, data, dlen);
3778 if (server_funcs->process(ssl, SSL_TLSEXT_MSG_CH, &cbs, &alert)) {
3779 FAIL("Processed key share with invalid group!");
3780 goto done;
3781 }
3782 ssl->session->tlsext_supportedgroups[0] = 29;
3783
3784 /*
3785 * Make 29 least preferred, while server supports both 29 and 25.
3786 * Client key share is for 29 but it prefers 25. We should successfully
3787 * process, but should not select this key share.
3788 */
3789 ssl->session->tlsext_supportedgroups[0] = 25;
3790 ssl->session->tlsext_supportedgroups[3] = 29;
3791 ssl->s3->hs.key_share = NULL;
3792 CBS_init(&cbs, data, dlen);
3793 if (!server_funcs->process(ssl, SSL_TLSEXT_MSG_CH, &cbs, &alert)) {
3794 FAIL("failed to process client keyshare\n");
3795 goto done;
3796 }
3712 if (CBS_len(&cbs) != 0) { 3797 if (CBS_len(&cbs) != 0) {
3713 FAIL("extension data remaining\n"); 3798 FAIL("extension data remaining\n");
3714 goto done; 3799 goto done;
3715 } 3800 }
3801 if (ssl->s3->hs.key_share != NULL) {
3802 FAIL("Selected a key share when I should not have!");
3803 goto done;
3804 }
3805 ssl->session->tlsext_supportedgroups[0] = 29;
3806 ssl->session->tlsext_supportedgroups[3] = 25;
3716 3807
3717 failure = 0; 3808 failure = 0;
3718 3809