summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2023-06-09 09:33:11 +0100
committerMatt Caswell <matt@openssl.org>2023-06-23 14:15:08 +0100
commitadf33f9e268b17ec1b4739707abb40b03b21ea6a (patch)
tree80d0030dc7ae2db11aa3fc326da4f466c4648ccf /test
parent7a949ae5f1799a6629cf6deb44ae0f38455a73dd (diff)
Add a test for an invalid group in the HRR
Test that if the client sends a key share for a group in the server's supported_group list but is otherwise invalid, that we don't select it in the HRR. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Todd Short <todd.short@me.com> (Merged from https://github.com/openssl/openssl/pull/21163)
Diffstat (limited to 'test')
-rw-r--r--test/recipes/70-test_tls13hrr.t42
1 files changed, 35 insertions, 7 deletions
diff --git a/test/recipes/70-test_tls13hrr.t b/test/recipes/70-test_tls13hrr.t
index 5892159414..8124106b68 100644
--- a/test/recipes/70-test_tls13hrr.t
+++ b/test/recipes/70-test_tls13hrr.t
@@ -36,7 +36,8 @@ my $proxy = TLSProxy::Proxy->new(
use constant {
CHANGE_HRR_CIPHERSUITE => 0,
CHANGE_CH1_CIPHERSUITE => 1,
- DUPLICATE_HRR => 2
+ DUPLICATE_HRR => 2,
+ INVALID_GROUP => 3
};
#Test 1: A client should fail if the server changes the ciphersuite between the
@@ -49,7 +50,7 @@ if (disabled("ec")) {
}
my $testtype = CHANGE_HRR_CIPHERSUITE;
$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
-plan tests => 3;
+plan tests => 4;
ok(TLSProxy::Message->fail(), "Server ciphersuite changes");
#Test 2: It is an error if the client changes the offered ciphersuites so that
@@ -78,6 +79,24 @@ $testtype = DUPLICATE_HRR;
$proxy->start();
ok($fatal_alert, "Server duplicated HRR");
+#Test 4: If the client sends a group that is in the supported_groups list but
+# otherwise not valid (e.g. not suitable for TLSv1.3) we should reject it
+# and not consider it when sending the HRR. We send brainpoolP512r1 in
+# the ClientHello, which is acceptable to the server but is not valid in
+# TLSv1.3. We expect the server to select X25519 in the HRR and the
+# handshake to complete successfully
+SKIP: {
+ skip "EC/TLSv1.2 is disabled in this build", 1
+ if disabled("ec") || disabled("tls1_2");
+
+ $proxy->clear();
+ $proxy->clientflags("-groups P-256:brainpoolP512r1:X25519");
+ $proxy->serverflags("-groups brainpoolP512r1:X25519");
+ $testtype = INVALID_GROUP;
+ $proxy->start();
+ ok(TLSProxy::Message->success(), "Invalid group with HRR");
+}
+
sub hrr_filter
{
my $proxy = shift;
@@ -131,16 +150,25 @@ sub hrr_filter
return;
}
- # CHANGE_CH1_CIPHERSUITE
if ($proxy->flight != 0) {
return;
}
my $ch1 = ${$proxy->message_list}[0];
- # The server will always pick TLS_AES_256_GCM_SHA384
- my @ciphersuites = (TLSProxy::Message::CIPHER_TLS13_AES_128_GCM_SHA256);
- $ch1->ciphersuite_len(2 * scalar @ciphersuites);
- $ch1->ciphersuites(\@ciphersuites);
+ if ($testtype == CHANGE_CH1_CIPHERSUITE) {
+ # The server will always pick TLS_AES_256_GCM_SHA384
+ my @ciphersuites = (TLSProxy::Message::CIPHER_TLS13_AES_128_GCM_SHA256);
+ $ch1->ciphersuite_len(2 * scalar @ciphersuites);
+ $ch1->ciphersuites(\@ciphersuites);
+ } elsif ($testtype == INVALID_GROUP) {
+ # INVALID_GROUP
+ my $ext = pack "C7",
+ 0x00, 0x05, #List Length
+ 0x00, 0x1c, #brainpoolP512r1 (not compatible with TLSv1.3)
+ 0x00, 0x01, 0xff; #key_exchange data
+ $ch1->set_extension(
+ TLSProxy::Message::EXT_KEY_SHARE, $ext);
+ }
$ch1->repack();
}