]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - test/04-pkey.t
tcl_tests: ca.try: Ignore openssl crl exit status for 'corrupted CRL' test
[openssl-gost/engine.git] / test / 04-pkey.t
1 #!/usr/bin/perl
2 use Test2::V0;
3 skip_all('TODO: add pkey support in provider')
4     unless $ARGV[0] eq 'engine';
5 plan(2);
6 use Cwd 'abs_path';
7
8 #
9 # If this variable is set, engine would be loaded via configuration
10 # file. Otherwise - via command line
11
12 my $use_config = 1;
13
14 # prepare data for 
15
16
17 my $engine=$ENV{'ENGINE_NAME'}||"gost";
18
19 # Reopen STDERR to eliminate extra output
20 open STDERR, ">>","tests.err";
21
22 my $F;
23 my $eng_param;
24
25 open $F,">","test.cnf";
26 if (defined($use_config) && $use_config) {
27     $eng_param = "";
28     open $F,">","test.cnf";
29     print $F <<EOCFG;
30 openssl_conf = openssl_def
31 [openssl_def]
32 engines = engines
33 [engines]
34 ${engine}=gost_conf
35 [gost_conf]
36 default_algorithms = ALL
37
38 EOCFG
39 } else {
40     $eng_param = "-engine $engine"
41 }
42 close $F;
43 $ENV{'OPENSSL_CONF'}=abs_path('test.cnf');
44
45 subtest 'keys' => sub {
46     plan(15);
47     my @keys=(['gost2001','A',"-----BEGIN PRIVATE KEY-----
48 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgIgRhUDJ1WQASIf
49 nx+aUM2eagzV9dCt6mQ5wdtenr2ZS/Y=
50 -----END PRIVATE KEY-----
51 ","Private key: 46150327559001221F9F1F9A50CD9E6A0CD5F5D0ADEA6439C1DB5E9EBD994BF6
52 ","Public key:
53    X:789094AF6386A43AF191210FFED0AEA5D1D9750D8FF8BCD1B584BFAA966850E4
54    Y:25ED63EE42624403D08FC60E5F8130F121ECDC5E297D9E3C7B106C906E0855E9
55 Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
56 ","-----BEGIN PUBLIC KEY-----
57 MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQORQaJaqv4S10bz4
58 jw112dGlrtD+DyGR8TqkhmOvlJB46VUIbpBsEHs8nn0pXtzsIfEwgV8Oxo/QA0Ri
59 Qu5j7SU=
60 -----END PUBLIC KEY-----
61 "],
62 ['gost2001','B'=>'-----BEGIN PRIVATE KEY-----
63 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIgIgImwnCcqcfuXK
64 MVYg+UWQhiXYKz1yQ8kDSB7Ly515XH4=
65 -----END PRIVATE KEY-----
66 ','Private key: 226C2709CA9C7EE5CA315620F945908625D82B3D7243C903481ECBCB9D795C7E
67 ','Public key:
68    X:59C15439385CBE790274D6537D318A35B27413D265FFDC5FBE5354DF8C7AC591
69    Y:11B771AC016AA817542184D05F2C7DDD0F9A5A5C9F840A79B5B7A73658F3048A
70 Parameter set: id-GostR3410-2001-CryptoPro-B-ParamSet
71 ','-----BEGIN PUBLIC KEY-----
72 MGMwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEDQwAEQJHFeozfVFO+X9z/
73 ZdITdLI1ijF9U9Z0Anm+XDg5VMFZigTzWDant7V5CoSfXFqaD919LF/QhCFUF6hq
74 AaxxtxE=
75 -----END PUBLIC KEY-----
76 '],
77 ['gost2001','C'=>'-----BEGIN PRIVATE KEY-----
78 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIgIgKKUJVY2xlp24
79 mky1F9inWeq3mm0J/uza6HsDvspgSzY=
80 -----END PRIVATE KEY-----
81 ','Private key: 28A509558DB1969DB89A4CB517D8A759EAB79A6D09FEECDAE87B03BECA604B36
82 ','Public key:
83    X:58154320380CCFD2A101D2B7844516984023CF5A38610C4F98220E017270B2D4
84    Y:14C6977A6E9C0412DF5B53E69CD48DAF2B5805F55F6ACBEB4E01BA7B2BF84FC8
85 Parameter set: id-GostR3410-2001-CryptoPro-C-ParamSet
86 ','-----BEGIN PUBLIC KEY-----
87 MGMwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEDQwAEQNSycHIBDiKYTwxh
88 OFrPI0CYFkWEt9IBodLPDDggQxVYyE/4K3u6AU7ry2pf9QVYK6+N1JzmU1vfEgSc
89 bnqXxhQ=
90 -----END PUBLIC KEY-----
91 '],
92 ['gost2001','XA'=>,'-----BEGIN PRIVATE KEY-----
93 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgIgOFuMMveKUx/C
94 BOSjl9XCepDCHWHv/1bcjdKexKGJkZw=
95 -----END PRIVATE KEY-----
96 ','Private key: 385B8C32F78A531FC204E4A397D5C27A90C21D61EFFF56DC8DD29EC4A189919C
97 ','Public key:
98    X:FA969CB29310E897978A1C9245107B46499D5C14A3975BF8E10EF5F613BE4EC6
99    Y:17FCFACCB0F838AE730E8B4021E880937824214DFF5365A61576AC5E72F92E35
100 Parameter set: id-GostR3410-2001-CryptoPro-XchA-ParamSet
101 ','-----BEGIN PUBLIC KEY-----
102 MGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQMZOvhP29Q7h+FuX
103 oxRcnUlGexBFkhyKl5foEJOynJb6NS75cl6sdhWmZVP/TSEkeJOA6CFAiw5zrjj4
104 sMz6/Bc=
105 -----END PUBLIC KEY-----
106 '],
107 ['gost2001','XB'=>,'-----BEGIN PRIVATE KEY-----
108 MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIgIgE7WWqiYWoKLs
109 7ezZ8L8Q9JcT73Jf5NYfFnlnoKRIQGg=
110 -----END PRIVATE KEY-----
111 ','Private key: 13B596AA2616A0A2ECEDECD9F0BF10F49713EF725FE4D61F167967A0A4484068
112 ','Public key:
113    X:1D33A01774E501EFADD6C7A936728AF644749E98FEF5AE77A25E185955ED2E14
114    Y:FAD2D8101A99EDE8FBDF118B70A9894F4E6DE962B68D27E39B057624A51727
115 Parameter set: id-GostR3410-2001-CryptoPro-XchB-ParamSet
116 ','-----BEGIN PUBLIC KEY-----
117 MGMwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEDQwAEQBQu7VVZGF6id671
118 /piedET2inI2qcfWre8B5XQXoDMdJxelJHYFm+MnjbZi6W1OT4mpcIsR3/vo7Zka
119 ENjS+gA=
120 -----END PUBLIC KEY-----
121 ']
122 );
123     for my $keyinfo (@keys) {
124         my ($alg,$paramset,$seckey,$sectext,$pubtext,$pubkey) = @$keyinfo;
125         open $F,">",'tmp.pem';
126         print $F $seckey;
127         close $F;
128         #1.  Прочитать секретный ключ и напечатать публичный и секретный ключи
129         is(`openssl pkey -noout -text -in tmp.pem`,$sectext . $pubtext,
130             "Print key pair $alg:$paramset");
131         #2. Прочитать секретный ключ и вывести публичный (все алгоритмы)
132         is(`openssl pkey -pubout -in tmp.pem`,$pubkey,
133             "Compute public key $alg:$paramset");
134         open $F,">","tmp.pem";
135         print $F $pubkey;
136         close $F;
137         #3. Прочитать публичный и напечать его в виде текста
138         is(`openssl pkey -pubin -noout -in tmp.pem -text_pub`,$pubtext,
139             "Read and print public key $alg:$paramset");
140     }
141     #unlink "tmp.pem";
142 };
143
144 #4. Сгенерировать ключ два раза (для всех алгоритов и параметров).
145 # Проверить что получились числа требуемой длины и они не совпадают
146
147
148 #5. Проверить эталонную подпись
149
150 #6. Выработать подпись и проверить её
151
152 #7. Выработать подпись, поменять в ней один бит и убедиться что она
153 # перестала проверяться
154
155 # 8. Выработать подпись, поменять 1 бит в подписываемых данных и
156 # убедитсья, что подпись перестала быть корректной.
157
158 # 9. Выработать shared ключ по vko
159 #    Generate a shared key by vko
160 subtest 'derive' => sub {
161     my %derives=(
162 'id-GostR3410-2001-TestParamSet'=>
163 ['-----BEGIN PRIVATE KEY-----
164 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwAGByqFAwICHgEEIIOQ6j9mU+bDGvvpzF6ImLRUztRmxlftkGliGuICxnkT
165 -----END PRIVATE KEY-----',
166 'e49ff6ce142a54da577de28c69140b8eaca21bbf97a3584b2a071b974ab62dd2',
167 '-----BEGIN PRIVATE KEY-----
168 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwAGByqFAwICHgEEIA1EpaGE8PGO0erx6m4V+FYPbBSecBH8Fd4QUKvvfVdY
169 -----END PRIVATE KEY-----',
170 '13ff71a7787cf321d04e54fee29714008d81a1c972c871f374803ab96639d901',
171 'dc0e3c93b7c4e9186cf9d83ae23a8f080a7916e2d54a43e583e95795a486eaa6'],
172 'id-GostR3410-2001-CryptoPro-A-ParamSet'=>
173 ['-----BEGIN PRIVATE KEY-----
174 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIABLD+ZfhzArC3nsOaCGkMZSPrMMbsATYnWq1udDphdu
175 -----END PRIVATE KEY-----',
176 '8f3aad4a05ecf47377eff12293c993e353bc218cfb0f9af0c407bcf044454950',
177 '-----BEGIN PRIVATE KEY-----
178 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIMu2SqK9cBcaJNkHSKBUt7i8rr2JqbHVTeC6jsg4ir3c
179 -----END PRIVATE KEY-----',
180 'bcc1049e775dcaed60b00da185cd93dcc6fa705a14ed2add9f5af00d71e37f95',
181 'defbbd083692895d5c5c6a87e066b30964e5b527f56cf965a390096ba4bc9afb'],
182 'id-GostR3410-2001-CryptoPro-B-ParamSet'=>
183 ['-----BEGIN PRIVATE KEY-----
184 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIBTbapnHBIZDIjpvGGiwIP9qR4LrRjGHPlfa8w8GWWJ3
185 -----END PRIVATE KEY-----',
186 'c0306a860d36f0948dff7ae3b6b721a254f350f078a32062c5345365558e35e0',
187 '-----BEGIN PRIVATE KEY-----
188 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIC7D7cd3lNC00Q/yXLRtOhpPmBs71/twdNvDVXGnZdMP
189 -----END PRIVATE KEY-----',
190 'f5cb24ceb3433fc580ffc8058336dc6254477fb24df178427423540db18dd1b5',
191 '521cc034b603c21e26a3e47e38b56880bdd986089d14d6ffce4fbcad2d0f20bb'],
192 'id-GostR3410-2001-CryptoPro-C-ParamSet'=>
193 ['-----BEGIN PRIVATE KEY-----
194 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIDUY0Tplswjvx42N9rmzUgl3owlFeCTJuuhixPsGFCUR
195 -----END PRIVATE KEY-----',
196 'e882207141dc1a714002907d610ae5a7ba79a9c0c84bef13491038181f37d0f2',
197 '-----BEGIN PRIVATE KEY-----
198 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIGfgpqWECv1OpuZ3L4q4ZgpmGTS08NwPWgCIo61OalMg
199 -----END PRIVATE KEY-----',
200 '7f11fe4075a198c3afca5b4364afdc1cd45325cfa999a5b84fd510f90c3527c3',
201 'd61f1f55a1ad012884b969dbe2550f38f2356a029e5d8af07d50d10ca9812c58'],
202 'id-GostR3410-2001-CryptoPro-XchA-ParamSet'=>
203 ['-----BEGIN PRIVATE KEY-----
204 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIJ9zd4rb9MMqu4HnAEkd9+IrwUNSjUje4ljQVY4THYjC
205 -----END PRIVATE KEY-----',
206 '947ba3299cdb129386808638514bc4a21262123cd7e47ade7579e51439c70dac',
207 '-----BEGIN PRIVATE KEY-----
208 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIGwx1zcUdvsAyOr0jF+JR15DPN0hSTvy7f9ybA5OyiKN
209 -----END PRIVATE KEY-----',
210 '2cb9078a00f955aaa398d10c021dae9e954573c5d9f4d3190c4bce887731ea11',
211 'f4fb7e0f533a59cc40f17131f620be821e528f9cec2915b9f813159dc0e3a29e'],
212 'id-GostR3410-2001-CryptoPro-XchB-ParamSet'=>
213 ['-----BEGIN PRIVATE KEY-----
214 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIIqSv5Q/By1VtTk1U+1+A1WMMQ25Q2Ml5hkAmYlUBqxi
215 -----END PRIVATE KEY-----',
216 '44f89a85bbf256836f77e765f6ee0222d8ffd1f8f85e5197b06931178aa081ca',
217 '-----BEGIN PRIVATE KEY-----
218 MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIO+jfUUFM0d2WPxQF8gY4KcqCJk02tca3aYovZh1eowt
219 -----END PRIVATE KEY-----',
220 'be866445486068067f0e479b83dde1b1b9a07fc8bc8fa5f5c60d15a39e3f3562',
221 'e8d30d98363b8b889464f4664c6a0403723484923e2db89039603c7ae294c504'],
222 'id-tc26-gost-3410-2012-256-paramSetA'=>
223 ['-----BEGIN PRIVATE KEY-----
224 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCD5+u2ebYwQ9iDYWHmif4XeGgj2OijJuq4YsbTNoH3+Bw==
225 -----END PRIVATE KEY-----',
226 'a04b252bedc05f69fc92d8e985b52f0f984bccf3ef9f980ac7aca85f5ef11987',
227 '-----BEGIN PRIVATE KEY-----
228 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCDVwXdvq1zdBBmzVjG1WOBQR/dkwCzF6KSIiVkfQVCsKg==
229 -----END PRIVATE KEY-----',
230 'c019d8939e12740a328625cea86efa3b39170412772b3c110536410bdd58a854',
231 'e9f7c57547fa0cd3c9942c62f9c74a553626d5f9810975a476825cd6f22a4e86',
232 '-----BEGIN PUBLIC KEY-----
233 MF4wFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBA0MABEB3WS+MEcXnrMCdavPRgF28U5PDlV1atDh1ADUFxoB/f80OjqQ0T7cGQtk/2nWCGDX7uUrBGA8dql8Bnw9Sgn5+
234 -----END PUBLIC KEY-----'],
235 'id-tc26-gost-3410-2012-256-paramSetB'=>
236 ['-----BEGIN PRIVATE KEY-----
237 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCDQ6G51VK2+96rvFyG/dRqWOFNJA33jQajAnzra585aIA==
238 -----END PRIVATE KEY-----',
239 'a13a84314a8d571b5218ca26194fe2f38b5f43eb3ac94203c448f9940df2fdb2',
240 '-----BEGIN PRIVATE KEY-----
241 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCCvvOUfoyljV0zfUrfEj1nOgBbelamj+eXgl0qxDJjDDA==
242 -----END PRIVATE KEY-----',
243 '6f7c5716c08fca79725beb4afaf2a48fd2fa547536d267f2b869b6ced5fddfa4',
244 'c9b2ad43f1aa70185f94dbc207ab4a147002f8aac5cf2fcec9d771a36f5f7a91'],
245 'id-tc26-gost-3410-2012-256-paramSetC'=>
246 ['-----BEGIN PRIVATE KEY-----
247 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEDBCDq9XGURfLDPrDiMNPUcunrvUwI46FBO2EU+ok8a1DANw==
248 -----END PRIVATE KEY-----',
249 'c352cf32ce4fd12a294ac62f3e44808cc7b21178093ba454b447a9ab4395d9be',
250 '-----BEGIN PRIVATE KEY-----
251 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEDBCAWm69+rfnGTDZ24MR29IcjMsuPhjBQT6zxPvUYQBrGLg==
252 -----END PRIVATE KEY-----',
253 '27e3afdcb9f191b0465ae7d28245cee6ca44d537a7c67d938933cf2012ec71a6',
254 '43c9f321b3659ee5108f0bcd5527f403d445f486c9e492768f46a82359ee0385'],
255 'id-tc26-gost-3410-2012-256-paramSetD'=>
256 ['-----BEGIN PRIVATE KEY-----
257 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEEBCBnmzl1MutYiAXBmZa3GW5sK6Kznpt6V5i+xAl36RDhXQ==
258 -----END PRIVATE KEY-----',
259 'ebfb18e801fe2d41462c52571b1805e34993910b29f75a7a5517d3190b5d9d1d',
260 '-----BEGIN PRIVATE KEY-----
261 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEEBCBpp7anU1gMcaK/BzAQzAbUHXW2kuh6h9t67i67eIfAgQ==
262 -----END PRIVATE KEY-----',
263 '902a174ace21dc8ecf94e6a7e84cde115f902484e2c37d1d2652b1ef0a402dfc',
264 '3af2a69e68cd444acc269e75edb90dfe01b8f3d9f97fe7c8b36841df9a2771a1'],
265 'id-tc26-gost-3410-2012-512-paramSetA'=>
266 ['-----BEGIN PRIVATE KEY-----
267 MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRAVbz5k/8Zj8XbTEtlv9bK9i8FaIbm+NN9kCp2wCbiaw6AXvdBiQlMj7hSGv7AdW928VRszq9Elwc63VQcYzdnkw==
268 -----END PRIVATE KEY-----',
269 '8bb6886e74a3d04ec0cbbe799f2494fd577f3bd9b8c06d7ec4cfa7c597d2d0ae',
270 '-----BEGIN PRIVATE KEY-----
271 MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRASeoodGB639ETkSEfOLTFkTozKEpMVAlFPgvK6fOlD9u1/ITUXBoERea2R+HG3YNi81wTMqT0Njq9WnbQvgIx6g==
272 -----END PRIVATE KEY-----',
273 'e88ba18821e6a86787cb225ea9b731821efb9e07bdcfb7b0b8f78c70d4e88c2b',
274 '4d032ae84928991a48d83fc462da4d21173d8e832a3b30df71a6974f66e377a8'],
275 'id-tc26-gost-3410-2012-512-paramSetB'=>
276 ['-----BEGIN PRIVATE KEY-----
277 MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQICBggqhQMHAQECAwRAvQKu1fl21NUXvdWlYtRs3Bs4ZW9vQlV1rf1D1rfRUdxjuC2A3xdD9RoUupzK6EeNFkhTMbZ+euQTXwPFN6ykbA==
278 -----END PRIVATE KEY-----',
279 '6c9f8cb350dcea5e673fe29950d9e5a041b005ca81d1236d19ba658dcbfdce01',
280 '-----BEGIN PRIVATE KEY-----
281 MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQICBggqhQMHAQECAwRA+I8I9E0Fz0cKG21QHn7VluHB9j348leFmeXLfGUS+jLqllemtCObR7KLW3bkzH+EiqXbLNMm+JLsmeGv4/nvYQ==
282 -----END PRIVATE KEY-----',
283 'f7071ed951ac98570a5f9d299bf5a61d3dcb8082e8733b1571164ce6b54b2d8f',
284 'f37881bf843ecee4f0935c4f7653d4cb48b8db6a50394f89792dad899765d7d9'],
285 'id-tc26-gost-3410-2012-512-paramSetC'=>
286 ['-----BEGIN PRIVATE KEY-----
287 MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEA79FKW7MqF4pQJJvpAhKd9YkwsFXBzcaUhYt3N1KuJV6n5aJ4+kaJfuT3YbhtwWWzNIsIdXUZRaBEGO2cEwysa
288 -----END PRIVATE KEY-----',
289 'fa92c3898642b419b320b15a8285d6d01ae3a22cadc791b9ba52d12919e7008d',
290 '-----BEGIN PRIVATE KEY-----
291 MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEAiCNNQAMnur4EG8eSDpr5WjJaoHquSsK3wydCrGM3Cdbaa0kiuj5m0Mx16Vow7AwvG2DvlKJL8HgwuBqWlDaYa
292 -----END PRIVATE KEY-----',
293 '6e1db0da8832660fbf761119e41d356a1599686a157c9a598b8e18b56cb09791',
294 '2df0dfa8d437689d41fad965f13ea28ce27c29dd84514b376ea6ad9f0c7e3ece',
295 '-----BEGIN PUBLIC KEY-----
296 MIGgMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAwOBhAAEgYCPdAER26Ym73DSUXBamTLJcntdV3oZ7RRx/+Ijf13GnF36o36i8tEC13uJqOOmujEkAGPtui6yE4iJNVU0uM6yHmIEM5H0c81Sd/VQD8yXW1hyGAZvTMc+U/6oa30YU9YY7+t759d1CIVznPmq9C+VbAApyDCMFjuYnKD/nChsGA==
297 -----END PUBLIC KEY-----'],
298 'id-tc26-gost-3410-2012-256-paramSetA-rangetest'=>
299 ['-----BEGIN PRIVATE KEY-----
300 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCD5+u2ebYwQ9iDYWHmif4XeGgj2OijJuq4YsbTNoH3+Bw==
301 -----END PRIVATE KEY-----',
302 'a04b252bedc05f69fc92d8e985b52f0f984bccf3ef9f980ac7aca85f5ef11987',
303 '-----BEGIN PRIVATE KEY-----
304 MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCBmDDZsVa8VwTVme8jfzdgPAAAAAAAAAAAAAAAAAAAAQA==
305 -----END PRIVATE KEY-----',
306 '29132b8efb7b21a15133e51c70599031ea813cca86edb0985e86f331493b3d73',
307 '7206480037eb130595c0ed350046af8c96b0fc5bfb4030be65dbf3e207a25de2'],
308 'id-tc26-gost-3410-2012-512-paramSetC-rangetest'=>
309 ['-----BEGIN PRIVATE KEY-----
310 MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEA79FKW7MqF4pQJJvpAhKd9YkwsFXBzcaUhYt3N1KuJV6n5aJ4+kaJfuT3YbhtwWWzNIsIdXUZRaBEGO2cEwysa
311 -----END PRIVATE KEY-----',
312 'fa92c3898642b419b320b15a8285d6d01ae3a22cadc791b9ba52d12919e7008d',
313 '-----BEGIN PRIVATE KEY-----
314 MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEDsI/BH7zxilCahaafnqe3ILFBHUf+pM0wAqwZlpNuMyf////////////////////////////////////////8/
315 -----END PRIVATE KEY-----',
316 'fbcd6e72572335d291be497b7bfb264138ab7b2ecca00bc7a9fd90ad7557c0cc',
317 '8e5b7bd8b3680d3dc33627c5bed85fdeb4e1ba67307714eb260412ddbb4bb87e']
318 );
319     plan(64);
320     while(my($id, $v) = each %derives) {
321         my ($alice,$alicehash,$bob,$bobhash,$secrethash,$malice) = @$v;
322         # Alice: keygen
323         open $F,">",'alice.prv';
324         print $F $alice;
325         close $F;
326         system("openssl pkey -in alice.prv -out alice.pub.der -pubout -outform DER");
327         like(`openssl dgst -sha256 -r alice.pub.der`, qr/^$alicehash/, "Compute public key:$id:Alice");
328         # Bob: keygen
329         open $F,">",'bob.prv';
330         print $F $bob;
331         close $F;
332         system("openssl pkey -in bob.prv -out bob.pub.der -pubout -outform DER");
333         like(`openssl dgst -sha256 -r bob.pub.der`, qr/^$bobhash/, "Compute public key:$id:Bob");
334         # Alice: derive
335         system("openssl pkeyutl -derive -inkey alice.prv -keyform PEM -peerkey bob.pub.der -peerform DER -pkeyopt ukmhex:0100000000000000 -out secret_a.bin");
336         like(`openssl dgst -sha256 -r secret_a.bin`, qr/^$secrethash/, "Compute shared key:$id:Alice:Bob");
337         # Bob: derive
338         system("openssl pkeyutl -derive -inkey bob.prv -keyform PEM -peerkey alice.pub.der -peerform DER -pkeyopt ukmhex:0100000000000000 -out secret_b.bin");
339         like(`openssl dgst -sha256 -r secret_b.bin`, qr/^$secrethash/, "Compute shared key:$id:Bob:Alice");
340         if (defined $malice && $malice ne "") {
341             # Malice: negative test -- this PEM is in the small subgroup
342             open $F,">",'malice.pub';
343             print $F $malice;
344             close $F;
345             # NB system should return true on failure, so this is a negative test
346             ok(system("openssl pkeyutl -derive -inkey alice.prv -keyform PEM -peerkey malice.pub -peerform PEM -pkeyopt ukmhex:0100000000000000 -out secret_m.bin"), "Compute shared key:$id:Alice:Malice");
347             ok(system("openssl pkeyutl -derive -inkey bob.prv -keyform PEM -peerkey malice.pub -peerform PEM -pkeyopt ukmhex:0100000000000000 -out secret_m.bin"), "Compute shared key:$id:Bob:Malice");
348         }
349     }
350     unlink "alice.prv";
351     unlink "alice.pub.der";
352     unlink "bob.prv";
353     unlink "bob.pub.der";
354     unlink "secret_a.bin";
355     unlink "secret_b.bin";
356     unlink "malice.pub";
357     unlink "secret_m.bin";
358 };
359
360 # 10. Разобрать стандартый encrypted key
361
362 # 11. Сгенерирвоать encrypted key и его разобрать.
363
364 unlink "test.cnf";
365