summaryrefslogtreecommitdiffstats
path: root/test/recipes/15-test_gendhparam.t
diff options
context:
space:
mode:
Diffstat (limited to 'test/recipes/15-test_gendhparam.t')
-rw-r--r--test/recipes/15-test_gendhparam.t170
1 files changed, 170 insertions, 0 deletions
diff --git a/test/recipes/15-test_gendhparam.t b/test/recipes/15-test_gendhparam.t
new file mode 100644
index 0000000000..b5fe644889
--- /dev/null
+++ b/test/recipes/15-test_gendhparam.t
@@ -0,0 +1,170 @@
+#! /usr/bin/env perl
+# Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the Apache License 2.0 (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+use strict;
+use warnings;
+
+use OpenSSL::Test;
+use OpenSSL::Test::Utils;
+
+setup("test_gendhparam");
+
+my @testdata = (
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ "type:fips186_4", 'digest:SHA256', 'gindex:1' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'gindex:', 'pcounter:', 'SEED:' ],
+ message => 'DH fips186_4 param gen with verifiable g',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ "type:fips186_4", 'digest:SHA256', 'gindex:1' ],
+ expect => [ 'ERROR' ],
+ message => 'fips186_4 param gen should fail if DHX is not used',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ "type:fips186_4", 'digest:SHA512-224', 'gindex:1' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'gindex:', 'pcounter:', 'SEED:' ],
+ message => 'DH fips186_4 param gen with verifiable g and truncated digest',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'type:fips186_2', 'pbits:1024', 'qbits:160' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'h:', 'pcounter:', 'SEED:' ],
+ message => 'DHX fips186_2 param gen with a selected p and q size with unverifyable g',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'type:fips186_2', 'dh_paramgen_prime_len:1024', 'dh_paramgen_subprime_len:160' ],
+ message => 'DHX fips186_2 param gen with a selected p and q size using aliased',
+ expect => [ "BEGIN X9.42 DH PARAMETERS" ],
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'type:fips186_2', 'dh_paramgen_prime_len:1024', 'dh_paramgen_subprime_len:160' ],
+ message => 'DH fips186_2 param gen with a selected p and q size using aliases should fail',
+ expect => [ "ERROR" ],
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'group:ffdhe2048'],
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:' ],
+ message => 'DH named group ffdhe selection',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'dh_param:ffdhe8192'],
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:' ],
+ message => 'DH named group ffdhe selection using alias',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'group:modp_3072'],
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:' ],
+ message => 'DH named group modp selection',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'dh_param:modp_4096'],
+ message => 'DH named group modp selection using alias',
+ expect => [ 'BEGIN DH PARAMETERS', 'GROUP:'],
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'group:dh_2048_256' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX RFC5114 named group selection',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'dh_param:dh_2048_224' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX RFC5114 named group selection using alias',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'dh_rfc5114:2'],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX RFC5114 named group selection using an id',
+ },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'dh_rfc5114:1', 'dh_paramgen_type:1' ],
+ expect => [ 'BEGIN X9.42 DH PARAMETERS', 'GROUP:' ],
+ message => 'DHX paramgen_type is ignored if the group is set',
+ },
+ {
+ algorithm => 'DH',
+ pkeyopts => [ 'dh_rfc5114:1', 'dh_paramgen_type:1' ],
+ expect => [ 'ERROR' ],
+ message => "Setting dh_paramgen_type to fips186 should fail for DH keys",
+ },
+# These tests using the safeprime generator were removed as they are slow..
+# {
+# algorithm => 'DH',
+# pkeyopts => [ 'type:generator', 'safeprime-generator:5'],
+# expect => [ 'BEGIN DH PARAMETERS', 'G: 5' ],
+# message => 'DH safe prime generator',
+# },
+# {
+# algorithm => 'DH',
+# pkeyopts => [ 'dh_paramgen_type:0', 'dh_paramgen_generator:5'],
+# expect => [ 'BEGIN DH PARAMETERS', 'G: 5' ],
+# message => 'DH safe prime generator using an alias',
+# },
+ {
+ algorithm => 'DHX',
+ pkeyopts => [ 'type:generator', 'safeprime-generator:5'],
+ expect => [ 'ERROR' ],
+ message => 'safe prime generator should fail for DHX',
+ },
+);
+
+plan skip_all => "DH isn't supported in this build" if disabled("dh");
+
+plan tests => scalar @testdata;
+
+foreach my $test (@testdata) {
+ my $alg = $test->{algorithm};
+ my $msg = $test->{message};
+ my @testargs = @{ $test->{pkeyopts} };
+ my @expected = @{ $test->{expect} };
+ my @pkeyopts= ();
+ foreach (@testargs) {
+ push(@pkeyopts, '-pkeyopt');
+ push(@pkeyopts, $_);
+ }
+ my @lines = run(app(['openssl', 'genpkey', '-genparam',
+ '-algorithm', $alg, '-text', @pkeyopts]),
+ capture => 1);
+ ok(compareline(\@lines, \@expected), $msg);
+}
+
+# Check that the stdout output matches the expected value.
+sub compareline {
+ my ($ref_lines, $ref_expected) = @_;
+ my @lines = @$ref_lines;
+ my @expected = @$ref_expected;
+
+ if (@lines == 0 and $expected[0] eq 'ERROR') {
+ return 1;
+ }
+ print "-----------------\n";
+ foreach (@lines) {
+ print $_;
+ }
+ print "-----------------\n";
+ foreach my $ex (@expected) {
+ if ( !grep { index($_, $ex) >= 0 } @lines) {
+ print "ERROR: Cannot find: $ex\n";
+ return 0;
+ }
+ }
+ return 1;
+}