openssl/test/ssl-tests/14-curves.cnf.in
Viktor Dukhovni fed9be39ff Make RFC8422 deprecated TLS EC curves disablable
Also move the deprecated curves to the end of the list, and order the
soon most preferred groups first.

Reviewed-by: Paul Dale <ppzgs1@gmail.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26873)
2025-02-26 12:14:02 +01:00

194 lines
5.9 KiB
Perl

# -*- mode: perl; -*-
## SSL test configurations
package ssltests;
use strict;
use warnings;
use OpenSSL::Test;
use OpenSSL::Test::Utils;
our $fips_mode;
our $fips_3_4;
my @curves = ("prime256v1", "secp384r1", "secp521r1");
my @curves_no_fips = ("X25519", "X448");
push @curves, @curves_no_fips if !$fips_mode;
#Curves *only* suitable for use in TLSv1.3
my @curves_tls_1_3 = ("ffdhe2048", "ffdhe3072", "ffdhe4096", "ffdhe6144",
"ffdhe8192");
my @curves_tls_1_3_no_fips = ("brainpoolP256r1tls13", "brainpoolP384r1tls13",
"brainpoolP512r1tls13");
push @curves_tls_1_3, @curves_tls_1_3_no_fips if !$fips_mode;
push @curves, @curves_tls_1_3;
my @curves_tls_1_2 = ();
push @curves_tls_1_2,
"sect233k1", "sect233r1", "sect283k1", "sect283r1", "sect409k1",
"sect409r1", "sect571k1", "sect571r1", "secp224r1"
unless ($fips_3_4 || disabled("tls-deprecated-ec"));
my @curves_non_fips = ();
push @curves_non_fips,
"sect163k1", "sect163r2", "prime192v1", "sect163r1", "sect193r1",
"sect193r2", "sect239k1", "secp160k1", "secp160r1", "secp160r2",
"secp192k1", "secp224k1", "secp256k1"
unless disabled("tls-deprecated-ec");
push @curves_non_fips,
"brainpoolP256r1", "brainpoolP384r1", "brainpoolP512r1";
push @curves_tls_1_2, @curves_non_fips if !$fips_mode;
our @tests = ();
sub get_key_type {
my $group = shift;
my $keyType;
if ($group =~ /ffdhe/) {
$keyType = "dhKeyAgreement";
} else {
$keyType = $group;
}
return $keyType;
}
sub generate_tests() {
foreach (0..$#curves) {
my $curve = $curves[$_];
push @tests, {
name => "curve-${curve}",
server => {
"Curves" => $curve,
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3"
},
client => {
"CipherString" => 'ECDHE@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3",
"Curves" => $curve
},
test => {
"ExpectedTmpKeyType" => get_key_type($curve),
"ExpectedProtocol" => "TLSv1.3",
"ExpectedResult" => "Success"
},
};
}
foreach (0..$#curves_tls_1_2) {
my $curve = $curves_tls_1_2[$_];
push @tests, {
name => "curve-${curve}",
server => {
"Curves" => $curve,
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3"
},
client => {
"CipherString" => 'ECDHE@SECLEVEL=1',
"MaxProtocol" => "TLSv1.2",
"Curves" => $curve
},
test => {
"ExpectedTmpKeyType" => get_key_type($curve),
"ExpectedProtocol" => "TLSv1.2",
"ExpectedResult" => "Success"
},
};
}
foreach (0..$#curves_tls_1_2) {
my $curve = $curves_tls_1_2[$_];
push @tests, {
name => "curve-${curve}-tls12-in-tls13",
server => {
"Curves" => "$curve:P-256",
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3"
},
client => {
"CipherString" => 'ECDHE@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3",
"MinProtocol" => "TLSv1.3",
"Curves" => "$curve:P-256"
},
test => {
#This curve is not allowed in a TLSv1.3 key_share. We should
#succeed but fallback to P-256
"ExpectedTmpKeyType" => "P-256",
"ExpectedProtocol" => "TLSv1.3",
"ExpectedResult" => "Success"
},
};
}
foreach (0..$#curves_tls_1_2) {
my $curve = $curves_tls_1_2[$_];
push @tests, {
name => "curve-${curve}-tls13",
server => {
"Curves" => $curve,
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3"
},
client => {
"CipherString" => 'ECDHE@SECLEVEL=1',
"MinProtocol" => "TLSv1.3",
"Curves" => $curve
},
test => {
"ExpectedResult" => "ClientFail"
},
};
}
if (!$fips_3_4) {
foreach (0..$#curves_tls_1_3) {
my $curve = $curves_tls_1_3[$_];
push @tests, {
name => "curve-${curve}-tls13-in-tls12",
server => {
"Curves" => $curve,
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3"
},
client => {
"CipherString" => 'ECDHE@SECLEVEL=1',
"MaxProtocol" => "TLSv1.2",
"Curves" => $curve
},
test => {
#These curves are only suitable for TLSv1.3 so we expect the
#server to fail because it has no shared groups for TLSv1.2
#ECDHE key exchange
"ExpectedResult" => "ServerFail"
},
};
push @tests, {
name => "curve-${curve}-tls13-in-tls12-2",
server => {
"Curves" => $curve,
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.2"
},
client => {
"CipherString" => 'DEFAULT@SECLEVEL=1',
"MaxProtocol" => "TLSv1.3",
"Curves" => $curve
},
test => {
#These curves are only suitable for TLSv1.3. We expect TLSv1.2
#negotiation to succeed because we fall back to some other
#ciphersuite
"ExpectedResult" => "Success"
},
};
}
}
}
generate_tests();