]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - test/04-pkey.t
Migrate test framework to Test2
[openssl-gost/engine.git] / test / 04-pkey.t
1 #!/usr/bin/perl
2 use Test2::V0;
3 plan(15);
4 use Cwd 'abs_path';
5
6 #
7 # If this variable is set, engine would be loaded via configuration
8 # file. Otherwise - via command line
9
10 my $use_config = 1;
11
12 # prepare data for 
13
14
15 # Set OPENSSL_ENGINES environment variable to just built engine
16 if(!defined $ENV{'OPENSSL_ENGINES'}){
17         $ENV{'OPENSSL_ENGINES'} = abs_path("../.libs");
18 }
19
20 my $engine=$ENV{'ENGINE_NAME'}||"gost";
21
22 # Reopen STDERR to eliminate extra output
23 open STDERR, ">>","tests.err";
24
25 my $F;
26 my $eng_param;
27
28 open $F,">","test.cnf";
29 if (defined($use_config) && $use_config) {
30         $eng_param = "";
31         open $F,">","test.cnf";
32         print $F <<EOCFG;
33 openssl_conf = openssl_def
34 [openssl_def]
35 engines = engines
36 [engines]
37 ${engine}=gost_conf
38 [gost_conf]
39 default_algorithms = ALL
40
41 EOCFG
42 } else {
43         $eng_param = "-engine $engine"
44 }
45 close $F;
46 $ENV{'OPENSSL_CONF'}=abs_path('test.cnf');
47
48
49 my @keys=(['gost2001','A',"-----BEGIN PRIVATE KEY-----
50 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgIgRhUDJ1WQASIf
51 nx+aUM2eagzV9dCt6mQ5wdtenr2ZS/Y=
52 -----END PRIVATE KEY-----
53 ","Private key: 46150327559001221F9F1F9A50CD9E6A0CD5F5D0ADEA6439C1DB5E9EBD994BF6
54 ","Public key:
55    X:789094AF6386A43AF191210FFED0AEA5D1D9750D8FF8BCD1B584BFAA966850E4
56    Y:25ED63EE42624403D08FC60E5F8130F121ECDC5E297D9E3C7B106C906E0855E9
57 Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
58 ","-----BEGIN PUBLIC KEY-----
59 MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQORQaJaqv4S10bz4
60 jw112dGlrtD+DyGR8TqkhmOvlJB46VUIbpBsEHs8nn0pXtzsIfEwgV8Oxo/QA0Ri
61 Qu5j7SU=
62 -----END PUBLIC KEY-----
63 "],
64 ['gost2001','B'=>'-----BEGIN PRIVATE KEY-----
65 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIgIgImwnCcqcfuXK
66 MVYg+UWQhiXYKz1yQ8kDSB7Ly515XH4=
67 -----END PRIVATE KEY-----
68 ','Private key: 226C2709CA9C7EE5CA315620F945908625D82B3D7243C903481ECBCB9D795C7E
69 ','Public key:
70    X:59C15439385CBE790274D6537D318A35B27413D265FFDC5FBE5354DF8C7AC591
71    Y:11B771AC016AA817542184D05F2C7DDD0F9A5A5C9F840A79B5B7A73658F3048A
72 Parameter set: id-GostR3410-2001-CryptoPro-B-ParamSet
73 ','-----BEGIN PUBLIC KEY-----
74 MGMwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEDQwAEQJHFeozfVFO+X9z/
75 ZdITdLI1ijF9U9Z0Anm+XDg5VMFZigTzWDant7V5CoSfXFqaD919LF/QhCFUF6hq
76 AaxxtxE=
77 -----END PUBLIC KEY-----
78 '],
79 ['gost2001','C'=>'-----BEGIN PRIVATE KEY-----
80 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIgIgKKUJVY2xlp24
81 mky1F9inWeq3mm0J/uza6HsDvspgSzY=
82 -----END PRIVATE KEY-----
83 ','Private key: 28A509558DB1969DB89A4CB517D8A759EAB79A6D09FEECDAE87B03BECA604B36
84 ','Public key:
85    X:58154320380CCFD2A101D2B7844516984023CF5A38610C4F98220E017270B2D4
86    Y:14C6977A6E9C0412DF5B53E69CD48DAF2B5805F55F6ACBEB4E01BA7B2BF84FC8
87 Parameter set: id-GostR3410-2001-CryptoPro-C-ParamSet
88 ','-----BEGIN PUBLIC KEY-----
89 MGMwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEDQwAEQNSycHIBDiKYTwxh
90 OFrPI0CYFkWEt9IBodLPDDggQxVYyE/4K3u6AU7ry2pf9QVYK6+N1JzmU1vfEgSc
91 bnqXxhQ=
92 -----END PUBLIC KEY-----
93 '],
94 ['gost2001','XA'=>,'-----BEGIN PRIVATE KEY-----
95 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgIgOFuMMveKUx/C
96 BOSjl9XCepDCHWHv/1bcjdKexKGJkZw=
97 -----END PRIVATE KEY-----
98 ','Private key: 385B8C32F78A531FC204E4A397D5C27A90C21D61EFFF56DC8DD29EC4A189919C
99 ','Public key:
100    X:FA969CB29310E897978A1C9245107B46499D5C14A3975BF8E10EF5F613BE4EC6
101    Y:17FCFACCB0F838AE730E8B4021E880937824214DFF5365A61576AC5E72F92E35
102 Parameter set: id-GostR3410-2001-CryptoPro-XchA-ParamSet
103 ','-----BEGIN PUBLIC KEY-----
104 MGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQMZOvhP29Q7h+FuX
105 oxRcnUlGexBFkhyKl5foEJOynJb6NS75cl6sdhWmZVP/TSEkeJOA6CFAiw5zrjj4
106 sMz6/Bc=
107 -----END PUBLIC KEY-----
108 '],
109 ['gost2001','XB'=>,'-----BEGIN PRIVATE KEY-----
110 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIgIgE7WWqiYWoKLs
111 7ezZ8L8Q9JcT73Jf5NYfFnlnoKRIQGg=
112 -----END PRIVATE KEY-----
113 ','Private key: 13B596AA2616A0A2ECEDECD9F0BF10F49713EF725FE4D61F167967A0A4484068
114 ','Public key:
115    X:1D33A01774E501EFADD6C7A936728AF644749E98FEF5AE77A25E185955ED2E14
116    Y:FAD2D8101A99EDE8FBDF118B70A9894F4E6DE962B68D27E39B057624A51727
117 Parameter set: id-GostR3410-2001-CryptoPro-XchB-ParamSet
118 ','-----BEGIN PUBLIC KEY-----
119 MGMwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEDQwAEQBQu7VVZGF6id671
120 /piedET2inI2qcfWre8B5XQXoDMdJxelJHYFm+MnjbZi6W1OT4mpcIsR3/vo7Zka
121 ENjS+gA=
122 -----END PUBLIC KEY-----
123 ']
124 );
125 for my $keyinfo (@keys) {
126         my ($alg,$paramset,$seckey,$sectext,$pubtext,$pubkey) = @$keyinfo;
127         open $F,">",'tmp.pem';
128         print $F $seckey;
129         close $F;
130         #1.  Прочитать секретный ключ и напечатать публичный и секретный ключи
131         is(`openssl pkey -noout -text -in tmp.pem`,$sectext . $pubtext,
132                 "Print key pair $alg:$paramset");
133         #2. Прочитать секретный ключ и вывести публичный (все алгоритмы)
134     is(`openssl pkey -pubout -in tmp.pem`,$pubkey,
135                 "Compute public key $alg:$paramset");
136         open $F,">","tmp.pem";
137         print $F $pubkey;
138         close $F;
139         #3. Прочитать публичный и напечать его в виде текста
140         is(`openssl pkey -pubin -noout -in tmp.pem -text`,$pubtext,
141                 "Read and print public key $alg:paramset");
142
143 }
144 unlink "tmp.pem";
145 #4. Сгенерировать ключ два раза (для всех алгоритов и параметров).
146 # Проверить что получились числа требуемой длины и они не совпадают
147
148
149 #5. Проверить эталонную подпись
150
151 #6. Выработать подпись и проверить её
152
153 #7. Выработать подпись, поменять в ней один бит и убедиться что она
154 # перестала проверяться
155
156 # 8. Выработать подпись, поменять 1 бит в подписываемых данных и
157 # убедитсья, что подпись перестала быть корректной.
158
159 # 9. Выработать shared ключ по vko
160
161 # 10. Разобрать стандартый encrypted key
162
163 # 11. Сгенерирвоать encrypted key и его разобрать.
164
165 unlink "test.cnf";
166