VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.7/test/recipes/20-test_dhparam.t@ 97371

最後變更 在這個檔案從97371是 94320,由 vboxsync 提交於 3 年 前

libs/openssl-3.0.1: Export to OSE and fix copyright headers in Makefiles, bugref:10128

檔案大小: 6.8 KB
 
1#! /usr/bin/env perl
2# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
3#
4# Licensed under the Apache License 2.0 (the "License"). You may not use
5# this file except in compliance with the License. You can obtain a copy
6# in the file LICENSE in the source distribution or at
7# https://www.openssl.org/source/license.html
8
9
10use strict;
11use warnings;
12
13use OpenSSL::Test qw(:DEFAULT data_file);
14use OpenSSL::Test::Utils;
15
16#Tests for the dhparam CLI application
17
18setup("test_dhparam");
19
20plan skip_all => "DH is not supported in this build"
21 if disabled("dh");
22plan tests => 17;
23
24sub checkdhparams {
25 my $file = shift; #Filename containing params
26 my $type = shift; #PKCS3 or X9.42?
27 my $gen = shift; #2, 5 or something else (0 is "something else")?
28 my $format = shift; #DER or PEM?
29 my $bits = shift; #Number of bits in p
30 my $pemtype;
31 my $readtype;
32 my $readbits = 0;
33 my $genline;
34
35 if (-T $file) {
36 #Text file. Check it looks like PEM
37 open(PEMFILE, '<', $file) or die $!;
38 if (my $firstline = <PEMFILE>) {
39 $firstline =~ s/\R$//;
40 if ($firstline eq "-----BEGIN DH PARAMETERS-----") {
41 $pemtype = "PKCS3";
42 } elsif ($firstline eq "-----BEGIN X9.42 DH PARAMETERS-----") {
43 $pemtype = "X9.42";
44 } else {
45 $pemtype = "";
46 }
47 } else {
48 $pemtype = "";
49 }
50 close(PEMFILE);
51 ok(($format eq "PEM") && defined $pemtype, "Checking format is PEM");
52 } else {
53 ok($format eq "DER", "Checking format is DER");
54 #No PEM type in this case, so we just set the pemtype to the expected
55 #type so that we never fail that part of the test
56 $pemtype = $type;
57 }
58 my @textdata = run(app(['openssl', 'dhparam', '-in', $file, '-noout',
59 '-text', '-inform', $format]), capture => 1);
60 chomp(@textdata);
61 #Trim trailing whitespace
62 @textdata = grep { s/\s*$//g } @textdata;
63 if (grep { $_ =~ 'Q:' } @textdata) {
64 $readtype = "X9.42";
65 } else {
66 $readtype = "PKCS3";
67 }
68 ok(($type eq $pemtype) && ($type eq $readtype),
69 "Checking parameter type is ".$type." ($pemtype, $readtype)");
70
71 if (defined $textdata[0] && $textdata[0] =~ /DH Parameters: \((\d+) bit\)/) {
72 $readbits = $1;
73 }
74 ok($bits == $readbits, "Checking number of bits is $bits");
75 if ($gen == 2 || $gen == 5) {
76 #For generators 2 and 5 the value appears on the same line
77 $genline = "G: $gen (0x$gen)";
78 } else {
79 #For any other generator the value appears on the following line
80 $genline = "G:";
81 }
82
83 ok((grep { (index($_, $genline) + length ($genline)) == length ($_)} @textdata),
84 "Checking generator is correct");
85}
86
87#Test some "known good" parameter files to check that we can read them
88subtest "Read: 1024 bit PKCS3 params, generator 2, PEM file" => sub {
89 plan tests => 4;
90 checkdhparams(data_file("pkcs3-2-1024.pem"), "PKCS3", 2, "PEM", 1024);
91};
92subtest "Read: 1024 bit PKCS3 params, generator 5, PEM file" => sub {
93 plan tests => 4;
94 checkdhparams(data_file("pkcs3-5-1024.pem"), "PKCS3", 5, "PEM", 1024);
95};
96subtest "Read: 2048 bit PKCS3 params, generator 2, PEM file" => sub {
97 plan tests => 4;
98 checkdhparams(data_file("pkcs3-2-2048.pem"), "PKCS3", 2, "PEM", 2048);
99};
100subtest "Read: 1024 bit X9.42 params, PEM file" => sub {
101 plan tests => 4;
102 checkdhparams(data_file("x942-0-1024.pem"), "X9.42", 0, "PEM", 1024);
103};
104subtest "Read: 1024 bit PKCS3 params, generator 2, DER file" => sub {
105 plan tests => 4;
106 checkdhparams(data_file("pkcs3-2-1024.der"), "PKCS3", 2, "DER", 1024);
107};
108subtest "Read: 1024 bit PKCS3 params, generator 5, DER file" => sub {
109 plan tests => 4;
110 checkdhparams(data_file("pkcs3-5-1024.der"), "PKCS3", 5, "DER", 1024);
111};
112subtest "Read: 2048 bit PKCS3 params, generator 2, DER file" => sub {
113 plan tests => 4;
114 checkdhparams(data_file("pkcs3-2-2048.der"), "PKCS3", 2, "DER", 2048);
115};
116subtest "Read: 1024 bit X9.42 params, DER file" => sub {
117 checkdhparams(data_file("x942-0-1024.der"), "X9.42", 0, "DER", 1024);
118};
119
120#Test that generating parameters of different types creates what we expect. We
121#use 512 for the size for speed reasons. Don't use this in real applications!
122subtest "Generate: 512 bit PKCS3 params, generator 2, PEM file" => sub {
123 plan tests => 5;
124 ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-2-512.pem',
125 '512' ])));
126 checkdhparams("gen-pkcs3-2-512.pem", "PKCS3", 2, "PEM", 512);
127};
128subtest "Generate: 512 bit PKCS3 params, explicit generator 2, PEM file" => sub {
129 plan tests => 5;
130 ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-exp2-512.pem', '-2',
131 '512' ])));
132 checkdhparams("gen-pkcs3-exp2-512.pem", "PKCS3", 2, "PEM", 512);
133};
134subtest "Generate: 512 bit PKCS3 params, generator 5, PEM file" => sub {
135 plan tests => 5;
136 ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-5-512.pem', '-5',
137 '512' ])));
138 checkdhparams("gen-pkcs3-5-512.pem", "PKCS3", 5, "PEM", 512);
139};
140subtest "Generate: 512 bit PKCS3 params, generator 2, explicit PEM file" => sub {
141 plan tests => 5;
142 ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-pkcs3-2-512.exp.pem',
143 '-outform', 'PEM', '512' ])));
144 checkdhparams("gen-pkcs3-2-512.exp.pem", "PKCS3", 2, "PEM", 512);
145};
146SKIP: {
147 skip "Skipping tests that require DSA", 4 if disabled("dsa");
148
149 subtest "Generate: 512 bit X9.42 params, generator 0, PEM file" => sub {
150 plan tests => 5;
151 ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-0-512.pem',
152 '-dsaparam', '512' ])));
153 checkdhparams("gen-x942-0-512.pem", "X9.42", 0, "PEM", 512);
154 };
155 subtest "Generate: 512 bit X9.42 params, explicit generator 2, PEM file" => sub {
156 plan tests => 1;
157 #Expected to fail - you cannot select a generator with '-dsaparam'
158 ok(!run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-exp2-512.pem', '-2',
159 '-dsaparam', '512' ])));
160 };
161 subtest "Generate: 512 bit X9.42 params, generator 5, PEM file" => sub {
162 plan tests => 1;
163 #Expected to fail - you cannot select a generator with '-dsaparam'
164 ok(!run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-5-512.pem',
165 '-5', '-dsaparam', '512' ])));
166 };
167 subtest "Generate: 512 bit X9.42 params, generator 0, DER file" => sub {
168 plan tests => 5;
169 ok(run(app([ 'openssl', 'dhparam', '-out', 'gen-x942-0-512.der',
170 '-dsaparam', '-outform', 'DER', '512' ])));
171 checkdhparams("gen-x942-0-512.der", "X9.42", 0, "DER", 512);
172 };
173}
174
175ok(run(app(["openssl", "dhparam", "-noout", "-text"],
176 stdin => data_file("pkcs3-2-1024.pem"))),
177 "stdinbuffer input test that uses BIO_gets");
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette