Commit 2c47163573 for openssl.org
commit 2c471635734f03166906bd1a2db3f2ca0bf3b192
Author: Jakub Zelenka <jakub.zelenka@openssl.foundation>
Date: Tue Jun 30 19:21:26 2026 +0200
apps: test ecparam app -param_enc option
Exercise the previously untested -param_enc option of the ecparam app
by round-tripping the secp384r1 fixtures between named_curve and
explicit encodings (compared byte for byte against the reference
files), and check that an invalid value is rejected.
Assisted-by: Claude:claude-opus-4-8
Reviewed-by: Matt Caswell <matt@openssl.foundation>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
MergeDate: Mon Jul 13 15:00:27 2026
(Merged from https://github.com/openssl/openssl/pull/31799)
diff --git a/test/recipes/15-test_ecparam.t b/test/recipes/15-test_ecparam.t
index 0d72154745..571c62cf1a 100644
--- a/test/recipes/15-test_ecparam.t
+++ b/test/recipes/15-test_ecparam.t
@@ -30,7 +30,7 @@ if (disabled("sm2")) {
@valid = grep { !/sm2-.*\.pem/} @valid;
}
-plan tests => 14;
+plan tests => 15;
sub checkload {
my $files = shift; # List of files
@@ -199,4 +199,29 @@ subtest "Check loading of fips and non-fips params" => sub {
$ENV{OPENSSL_CONF} = $defaultconf;
};
+subtest "Check ecparam -param_enc converts between named and explicit" => sub {
+ plan tests => 3;
+
+ my $named = data_file('valid', 'secp384r1-named.pem');
+ my $explicit = data_file('valid', 'secp384r1-explicit.pem');
+
+ # The encodings are canonical, so re-encoding a named curve as explicit
+ # (and vice versa) must reproduce the matching reference file byte for byte.
+ my $to_explicit = 'param-explicit.tst';
+ ok(run(app(['openssl', 'ecparam', '-in', $named, '-param_enc', 'explicit',
+ '-out', $to_explicit]))
+ && !compare($to_explicit, $explicit),
+ "named_curve params re-encoded as explicit match the reference file");
+
+ my $to_named = 'param-named.tst';
+ ok(run(app(['openssl', 'ecparam', '-in', $explicit, '-param_enc',
+ 'named_curve', '-out', $to_named]))
+ && !compare($to_named, $named),
+ "explicit params re-encoded as named_curve match the reference file");
+
+ ok(!run(app(['openssl', 'ecparam', '-in', $named, '-noout',
+ '-param_enc', 'bogus'])),
+ "an invalid parameter encoding is rejected");
+};
+
ok(run(app(['openssl', 'ecparam', '-list_curves'])), "Test -list_curves");