]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - test_gost2814789.c
Merge branch 'master' of https://github.com/gost-engine/engine
[openssl-gost/engine.git] / test_gost2814789.c
1 /* vim: set fileencoding=ascii : Charset: ASCII */
2 /* test/gostr2814789t.c */
3 /* ====================================================================
4  * Copyright (c) 2012 Crypto-Pro, Ltd., Serguei E. Leontiev,
5  *                    lse@cryptopro.ru
6  *
7  * This file is distributed under the same license as OpenSSL
8  * ====================================================================
9  */
10 #include <stdio.h>
11
12 #include <stdlib.h>
13 #include <string.h>
14 #include <openssl/conf.h>
15 #include <openssl/crypto.h>
16 #include <openssl/engine.h>
17 #include <openssl/evp.h>
18 #include <openssl/hmac.h>
19 #include <openssl/obj_mac.h>
20
21 #define CCGOST_ID "gost"
22 #define CCGOST_DIR "."
23
24 #include "gost89.h"
25
26 #define G89_MAX_TC_LEN  (2048)
27 #define G89_BLOCK_LEN (8)
28
29 typedef enum g89_mode_ {
30     G89_ECB,
31     G89_CFB,
32     G89_CNT,
33     G89_IMIT
34 }   g89_mode;
35
36 typedef struct g89_tc_ {
37     unsigned long long ullLen;          // ullLen > G89_MAX_TC_LEN
38                                         //     Clear text ullLen
39                                         //     of zero bytes
40     const byte bIn[G89_MAX_TC_LEN];     // Clear text, when
41                                         //     ullLen <= G89_MAX_TC_LEN
42     const char *szParamSet;             // S-Box ID
43     const char *szDerive;               // String for derive bRawKey
44     const byte bRawKey[EVP_MAX_KEY_LENGTH];
45     g89_mode gMode;                     // Mode of encryption or MAC
46     const byte bIV[EVP_MAX_IV_LENGTH];  // IV for CFB or CNT mode
47     const byte bOut[G89_MAX_TC_LEN];    // Cipher text for ECB/CFB/CNT
48                                         // mode, when ullLen <= G89_MAX_TC_LEN;
49                                         // Last 16 byte of cipher text for
50                                         // ECB/CFB/CNT, when ullLen >
51                                         // G89_MAX_TC_LEN;
52                                         // 4 byte MAC for imitovstavka
53 }   g89_tc;
54
55 const g89_tc tcs[] = {
56   /*
57    * GOST R 34.11-94 Test cases
58    */
59     { /* see p. A.3.1 [GOSTR341194], p. 7.3.1 [ENG-GOSTR341194] */
60       /* <http://tools.ietf.org/html/rfc5831#section-7.3.1> */
61       /* Iteration 1, K[1], see Errata for RFC 5831 */
62         8,
63         {
64             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
65         },
66         "id-GostR3410-94-TestParamSet",
67         NULL,
68         {
69             0x54, 0x6d, 0x20, 0x33, 0x68, 0x65, 0x6c, 0x32,
70             0x69, 0x73, 0x65, 0x20, 0x73, 0x73, 0x6e, 0x62,
71             0x20, 0x61, 0x67, 0x79, 0x69, 0x67, 0x74, 0x74,
72             0x73, 0x65, 0x68, 0x65, 0x20, 0x2c, 0x3d, 0x73
73         },
74         G89_ECB,
75         { 0 },
76         {
77             0x1b, 0x0b, 0xbc, 0x32, 0xce, 0xbc, 0xab, 0x42
78         }
79     },
80     { /* see p. A.3.1 [GOSTR341194], p. 7.3.1 [ENG-GOSTR341194] */
81       /* <http://tools.ietf.org/html/rfc5831#section-7.3.1> */
82       /* Iteration 1, K[4] */
83         8,
84         {
85             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
86         },
87         "id-GostR3410-94-TestParamSet",
88         NULL,
89         {
90             0xec, 0x0a, 0x8b, 0xa1, 0x5e, 0xc0, 0x04, 0xa8,
91             0xba, 0xc5, 0x0c, 0xac, 0x0c, 0x62, 0x1d, 0xee,
92             0xe1, 0xc7, 0xb8, 0xe7, 0x00, 0x7a, 0xe2, 0xec,
93             0xf2, 0x73, 0x1b, 0xff, 0x4e, 0x80, 0xe2, 0xa0
94         },
95         G89_ECB,
96         { 0 },
97         {
98             0x2d, 0x56, 0x2a, 0x0d, 0x19, 0x04, 0x86, 0xe7
99         }
100     },
101     { /* see p. A.3.1 [GOSTR341194], p. 7.3.1 [ENG-GOSTR341194] */
102       /* <http://tools.ietf.org/html/rfc5831#section-7.3.1> */
103       /* Iteration 2, K[1] */
104         8,
105         {
106             0x34, 0xc0, 0x15, 0x33, 0xe3, 0x7d, 0x1c, 0x56
107         },
108         "id-GostR3410-94-TestParamSet",
109         NULL,
110         {
111             0x34, 0x87, 0x24, 0xa4, 0xc1, 0xa6, 0x76, 0x67,
112             0x15, 0x3d, 0xde, 0x59, 0x33, 0x88, 0x42, 0x50,
113             0xe3, 0x24, 0x8c, 0x65, 0x7d, 0x41, 0x3b, 0x8c,
114             0x1c, 0x9c, 0xa0, 0x9a, 0x56, 0xd9, 0x68, 0xcf
115         },
116         G89_ECB,
117         { 0 },
118         {
119             0x86, 0x3e, 0x78, 0xdd, 0x2d, 0x60, 0xd1, 0x3c
120         }
121     },
122   /*
123    * id-Gost28147-89-CryptoPro-A-ParamSet (1.2.643.2.2.31.1)
124    * Test cases
125    */
126     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
127         16,
128         {
129             0x74, 0x3d, 0x76, 0xf9, 0x1b, 0xee, 0x35, 0x3c,
130             0xa2, 0x5c, 0x3b, 0x10, 0xeb, 0x64, 0xcf, 0xf5
131         },
132         "id-Gost28147-89-CryptoPro-A-ParamSet",
133         "testecb1",
134         {
135             0xbb, 0xf1, 0xed, 0xd3, 0x20, 0xaf, 0x8a, 0x62,
136             0x8e, 0x11, 0xc8, 0xa9, 0x51, 0xcc, 0xbe, 0x81,
137             0x47, 0x7b, 0x41, 0xa1, 0x6a, 0xf6, 0x7f, 0x05,
138             0xe8, 0x51, 0x2f, 0x9e, 0x01, 0xf8, 0xcf, 0x49
139         },
140         G89_ECB,
141         { 0 },
142         {
143             0xc3, 0x73, 0x90, 0x95, 0x35, 0x58, 0x08, 0x63,
144             0xcb, 0x68, 0x85, 0x96, 0x77, 0xe8, 0xfb, 0xa9
145         }
146     },
147     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
148         16,
149         {
150             0xd2, 0xfd, 0xf8, 0x3a, 0xc1, 0xb4, 0x39, 0x23,
151             0x2e, 0xaa, 0xcc, 0x98, 0x0a, 0x02, 0xda, 0x33
152         },
153         "id-Gost28147-89-CryptoPro-A-ParamSet",
154         "testcfb1",
155         {
156             0x8d, 0x5a, 0x2c, 0x83, 0xa7, 0xc7, 0x0a, 0x61,
157             0xd6, 0x1b, 0x34, 0xb5, 0x1f, 0xdf, 0x42, 0x68,
158             0x66, 0x71, 0xa3, 0x5d, 0x87, 0x4c, 0xfd, 0x84,
159             0x99, 0x36, 0x63, 0xb6, 0x1e, 0xd6, 0x0d, 0xad
160         },
161         G89_CFB,
162         {
163             0x46, 0x60, 0x6f, 0x0d, 0x88, 0x34, 0x23, 0x5a
164         },
165         {
166             0x88, 0xb7, 0x75, 0x16, 0x74, 0xa5, 0xee, 0x2d,
167             0x14, 0xfe, 0x91, 0x67, 0xd0, 0x5c, 0xcc, 0x40
168         }
169     },
170     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
171         16,
172         {
173             0x90, 0xa2, 0x39, 0x66, 0xae, 0x01, 0xb9, 0xa3,
174             0x52, 0x4e, 0xc8, 0xed, 0x6c, 0xdd, 0x88, 0x30
175         },
176         "id-Gost28147-89-CryptoPro-A-ParamSet",
177         "testcnt1",
178         {
179             0x59, 0x9f, 0x84, 0xba, 0xc3, 0xf3, 0xd2, 0xf1,
180             0x60, 0xe1, 0xe3, 0xf2, 0x6a, 0x96, 0x1a, 0xf9,
181             0x9c, 0x48, 0xb2, 0x4e, 0xbc, 0xbb, 0xbf, 0x7c,
182             0xd8, 0xf3, 0xac, 0xcd, 0x96, 0x8d, 0x28, 0x6a
183         },
184         G89_CNT,
185         {
186             0x8d, 0xaf, 0xa8, 0xd1, 0x58, 0xed, 0x05, 0x8d
187         },
188         {
189             0x6e, 0x72, 0x62, 0xcc, 0xe3, 0x59, 0x36, 0x90,
190             0x83, 0x3a, 0xfe, 0xa9, 0x1b, 0xc9, 0xbe, 0xce
191         }
192     },
193     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
194         16,
195         {
196             0xb5, 0xa1, 0xf0, 0xe3, 0xce, 0x2f, 0x02, 0x1d,
197             0x67, 0x61, 0x94, 0x34, 0x5c, 0x41, 0xe3, 0x6e
198         },
199         "id-Gost28147-89-CryptoPro-A-ParamSet",
200         "testimit1",
201         {
202             0x9d, 0x05, 0xb7, 0x9e, 0x90, 0xca, 0xd0, 0x0a,
203             0x2c, 0xda, 0xd2, 0x2e, 0xf4, 0xe8, 0x6f, 0x5c,
204             0xf5, 0xdc, 0x37, 0x68, 0x19, 0x85, 0xb3, 0xbf,
205             0xaa, 0x18, 0xc1, 0xc3, 0x05, 0x0a, 0x91, 0xa2
206         },
207         G89_IMIT,
208         { 0 },
209         {
210             0xf8, 0x1f, 0x08, 0xa3
211         }
212     },
213   /*
214    * Other paramsets and key meshing test cases.
215    */
216     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
217         1039,
218         {
219             0x8c, 0x9c, 0x44, 0x35, 0xfb, 0xe9, 0xa5, 0xa3,
220             0xa0, 0xae, 0x28, 0x56, 0x91, 0x10, 0x8e, 0x1e ,
221             0xd2, 0xbb, 0x18, 0x53, 0x81, 0x27, 0x0d, 0xa6,
222             0x68, 0x59, 0x36, 0xc5, 0x81, 0x62, 0x9a, 0x8e,
223             0x7d, 0x50, 0xf1, 0x6f, 0x97, 0x62, 0x29, 0xec,
224             0x80, 0x51, 0xe3, 0x7d, 0x6c, 0xc4, 0x07, 0x95,
225             0x28, 0x63, 0xdc, 0xb4, 0xb9, 0x2d, 0xb8, 0x13,
226             0xb1, 0x05, 0xb5, 0xf9, 0xeb, 0x75, 0x37, 0x4e,
227             0xf7, 0xbf, 0x51, 0xf1, 0x98, 0x86, 0x43, 0xc4,
228             0xe4, 0x3d, 0x3e, 0xa7, 0x62, 0xec, 0x41, 0x59,
229             0xe0, 0xbd, 0xfb, 0xb6, 0xfd, 0xec, 0xe0, 0x77,
230             0x13, 0xd2, 0x59, 0x90, 0xa1, 0xb8, 0x97, 0x6b,
231             0x3d, 0x8b, 0x7d, 0xfc, 0x9d, 0xca, 0x82, 0x73,
232             0x32, 0x70, 0x0a, 0x74, 0x03, 0xc6, 0x0c, 0x26,
233             0x7f, 0x56, 0xf0, 0x9d, 0xb2, 0xeb, 0x71, 0x40,
234             0xd7, 0xc3, 0xb1, 0xa7, 0xc5, 0x1e, 0x20, 0x17,
235             0xb3, 0x50, 0x1d, 0x8a, 0x6e, 0x19, 0xcb, 0xbe,
236             0x20, 0x86, 0x2b, 0xd6, 0x1c, 0xfd, 0xb4, 0xb7,
237             0x5d, 0x9a, 0xb3, 0xe3, 0x7d, 0x15, 0x7a, 0x35,
238             0x01, 0x9f, 0x5d, 0x65, 0x89, 0x4b, 0x34, 0xc6,
239             0xf4, 0x81, 0x3f, 0x78, 0x30, 0xcf, 0xe9, 0x15,
240             0x90, 0x9a, 0xf9, 0xde, 0xba, 0x63, 0xd0, 0x19,
241             0x14, 0x66, 0x3c, 0xb9, 0xa4, 0xb2, 0x84, 0x94,
242             0x02, 0xcf, 0xce, 0x20, 0xcf, 0x76, 0xe7, 0xc5,
243             0x48, 0xf7, 0x69, 0x3a, 0x5d, 0xec, 0xaf, 0x41,
244             0xa7, 0x12, 0x64, 0x83, 0xf5, 0x99, 0x1e, 0x9e,
245             0xb2, 0xab, 0x86, 0x16, 0x00, 0x23, 0x8e, 0xe6,
246             0xd9, 0x80, 0x0b, 0x6d, 0xc5, 0x93, 0xe2, 0x5c,
247             0x8c, 0xd8, 0x5e, 0x5a, 0xae, 0x4a, 0x85, 0xfd,
248             0x76, 0x01, 0xea, 0x30, 0xf3, 0x78, 0x34, 0x10,
249             0x72, 0x51, 0xbc, 0x9f, 0x76, 0xce, 0x1f, 0xd4,
250             0x8f, 0x33, 0x50, 0x34, 0xc7, 0x4d, 0x7b, 0xcf,
251             0x91, 0x63, 0x7d, 0x82, 0x9e, 0xa1, 0x23, 0x45,
252             0xf5, 0x45, 0xac, 0x98, 0x7a, 0x48, 0xff, 0x64,
253             0xd5, 0x59, 0x47, 0xde, 0x2b, 0x3f, 0xfa, 0xec,
254             0x50, 0xe0, 0x81, 0x60, 0x8b, 0xc3, 0xfc, 0x80,
255             0x98, 0x17, 0xc7, 0xa3, 0xc2, 0x57, 0x3d, 0xab,
256             0x91, 0x67, 0xf5, 0xc4, 0xab, 0x92, 0xc8, 0xd6,
257             0x3b, 0x6b, 0x3f, 0xff, 0x15, 0x6b, 0xcf, 0x53,
258             0x65, 0x02, 0xf1, 0x74, 0xca, 0xa9, 0xbe, 0x24,
259             0xd2, 0xf0, 0xb7, 0x26, 0xa8, 0xd7, 0x6d, 0xed,
260             0x90, 0x36, 0x7b, 0x3e, 0x41, 0xa9, 0x7f, 0xa3,
261             0x1b, 0xf4, 0x43, 0xc5, 0x51, 0xbe, 0x28, 0x59,
262             0xe9, 0x45, 0x26, 0x49, 0x38, 0x32, 0xf8, 0xf3,
263             0x92, 0x6e, 0x30, 0xcc, 0xb0, 0xa0, 0xf9, 0x01,
264             0x14, 0xc8, 0xba, 0xd9, 0xf0, 0x2a, 0x29, 0xe2,
265             0x52, 0x9a, 0x76, 0x95, 0x3a, 0x16, 0x32, 0xec,
266             0xf4, 0x10, 0xec, 0xee, 0x47, 0x00, 0x70, 0x19,
267             0xe4, 0x72, 0x35, 0x66, 0x44, 0x53, 0x2d, 0xa2,
268             0xf3, 0xaa, 0x7e, 0x8a, 0x33, 0x13, 0xcd, 0xc8,
269             0xbf, 0x0e, 0x40, 0x90, 0x00, 0xe4, 0x42, 0xc3,
270             0x09, 0x84, 0xe1, 0x66, 0x17, 0xa2, 0xaf, 0x03,
271             0xab, 0x6b, 0xa1, 0xec, 0xfb, 0x17, 0x72, 0x81,
272             0xfe, 0x9a, 0x9f, 0xf4, 0xb2, 0x33, 0x1f, 0xae,
273             0x0c, 0xd1, 0x6a, 0xae, 0x19, 0xb8, 0xaf, 0xec,
274             0xe3, 0xea, 0x00, 0xf8, 0xac, 0x87, 0x07, 0x5f,
275             0x6d, 0xb0, 0xac, 0x6b, 0x22, 0x48, 0x36, 0xbf,
276             0x22, 0x18, 0xb0, 0x03, 0x9f, 0x6c, 0x70, 0x45,
277             0x36, 0xf0, 0x6b, 0xc6, 0xc2, 0xa5, 0x72, 0x2c,
278             0xd8, 0xe0, 0x27, 0x3d, 0xec, 0x56, 0x07, 0x05,
279             0x7d, 0x83, 0xa1, 0x65, 0x7d, 0x41, 0x5b, 0xcd,
280             0x77, 0x24, 0xe5, 0xaa, 0x76, 0x47, 0xd0, 0x50,
281             0xf6, 0xe7, 0xb5, 0x59, 0x75, 0x31, 0x27, 0xef,
282             0xd8, 0xa6, 0x4e, 0x7f, 0xb8, 0x40, 0xb1, 0xdf,
283             0x53, 0x14, 0xed, 0xf1, 0x68, 0x5f, 0xfc, 0x3f,
284             0x02, 0xdb, 0x05, 0xeb, 0x31, 0xe4, 0x2c, 0x7f,
285             0x32, 0xb5, 0x70, 0x8e, 0x75, 0x85, 0xa4, 0x5c,
286             0x16, 0x23, 0x37, 0xf2, 0x10, 0x79, 0xcb, 0xdc,
287             0xf8, 0x1c, 0x25, 0xc2, 0xa1, 0x3d, 0x9c, 0x33,
288             0x6c, 0xed, 0xc3, 0xe7, 0xf3, 0x02, 0x87, 0x82,
289             0x4e, 0xfb, 0xac, 0xb3, 0x2d, 0xfc, 0xf8, 0x0d,
290             0x1d, 0x4a, 0x39, 0xd4, 0xb3, 0x09, 0xbb, 0xe9,
291             0x25, 0xc7, 0xec, 0x6a, 0x87, 0x72, 0x84, 0xed,
292             0x12, 0x60, 0x19, 0x64, 0xeb, 0x16, 0x2a, 0x5b,
293             0x10, 0x76, 0x27, 0xff, 0x7b, 0xe4, 0xae, 0xe5,
294             0xa4, 0x04, 0x02, 0x7f, 0xbb, 0x0a, 0xb5, 0xf4,
295             0x05, 0xa5, 0x56, 0x1c, 0x53, 0x31, 0x7a, 0x93,
296             0xba, 0x16, 0x15, 0xab, 0x62, 0x60, 0xfc, 0xde,
297             0x72, 0x36, 0x6e, 0x28, 0xaf, 0x98, 0x0d, 0xe6,
298             0xf4, 0xde, 0x60, 0xa7, 0x7e, 0x06, 0x07, 0x86,
299             0xf3, 0x94, 0xb6, 0x6d, 0x0d, 0x93, 0xa6, 0xbc,
300             0x60, 0x70, 0x33, 0xac, 0x3f, 0xa1, 0xa8, 0x4a,
301             0x20, 0x61, 0xb6, 0xb5, 0x43, 0xa3, 0x15, 0x5a,
302             0x00, 0xbe, 0x76, 0x98, 0x57, 0x72, 0xab, 0x7a,
303             0x0e, 0x18, 0x93, 0x82, 0x3a, 0x18, 0x78, 0x6e,
304             0x71, 0x7b, 0x78, 0x4f, 0x7e, 0x8c, 0xde, 0x7a,
305             0x62, 0xb5, 0x0a, 0x7c, 0x45, 0x1d, 0x16, 0xd5,
306             0xc3, 0x8c, 0x9b, 0x25, 0xb4, 0x50, 0x90, 0xcd,
307             0x96, 0x93, 0xad, 0x0f, 0xd4, 0x43, 0xcb, 0x49,
308             0x0f, 0xfc, 0x5a, 0x31, 0xf4, 0x19, 0xb7, 0xd4,
309             0xeb, 0x4d, 0x40, 0x58, 0xd0, 0x3b, 0xc8, 0xe0,
310             0x4a, 0x54, 0x2f, 0xdb, 0x22, 0xc3, 0x29, 0x7b,
311             0x40, 0x90, 0x61, 0x43, 0xd3, 0x7e, 0xe2, 0x30,
312             0x2b, 0x48, 0x3c, 0xce, 0x90, 0x93, 0xb1, 0x8b,
313             0x31, 0x96, 0x65, 0x6d, 0x57, 0x8b, 0x9d, 0x4d,
314             0x53, 0xf0, 0x83, 0x1c, 0xe5, 0xa1, 0x9d, 0x55,
315             0xe3, 0xbf, 0x7e, 0xca, 0x1a, 0x74, 0x66, 0x14,
316             0xcc, 0x47, 0x43, 0xd9, 0xbb, 0xef, 0x97, 0x7d,
317             0xb7, 0x6e, 0xff, 0xf1, 0x22, 0xf8, 0x10, 0x2d,
318             0x3f, 0xcd, 0x49, 0x96, 0xd9, 0x09, 0x11, 0xb8,
319             0x33, 0xd0, 0x23, 0x9a, 0xfa, 0x16, 0xcb, 0x50,
320             0x26, 0x57, 0x24, 0x5c, 0x0e, 0xba, 0xf0, 0x3f,
321             0x37, 0x2f, 0xa3, 0xf7, 0x18, 0x57, 0x48, 0x48,
322             0x95, 0xcf, 0xef, 0x87, 0x67, 0x2a, 0xe9, 0xb6,
323             0x8a, 0x21, 0x36, 0x7f, 0xff, 0x48, 0x6c, 0x46,
324             0x35, 0x57, 0xf2, 0xbc, 0x48, 0x67, 0x8f, 0x63,
325             0x23, 0x78, 0x11, 0x2b, 0xc2, 0x08, 0xde, 0x51,
326             0xe8, 0x8b, 0x92, 0x29, 0xf9, 0x9a, 0x9e, 0xad,
327             0xed, 0x0f, 0xeb, 0xa2, 0xd2, 0x40, 0x92, 0xd4,
328             0xde, 0x62, 0x95, 0x76, 0xfd, 0x6e, 0x3c, 0xbf,
329             0xc0, 0xd7, 0x0d, 0xe5, 0x1b, 0xa4, 0xc7, 0x18,
330             0xe1, 0x58, 0xa4, 0x56, 0xef, 0x2e, 0x17, 0x1b,
331             0x75, 0xcb, 0xbc, 0xf9, 0x2a, 0x95, 0x71, 0xa7,
332             0x1d, 0x7f, 0xe7, 0x73, 0x63, 0x05, 0x6b, 0x19,
333             0x4c, 0xf4, 0x22, 0x14, 0xc4, 0x59, 0x88, 0x66,
334             0x92, 0x86, 0x61, 0x5c, 0x6a, 0xae, 0xec, 0x58,
335             0xff, 0xc9, 0xf2, 0x44, 0xd4, 0xa2, 0xf5, 0x98,
336             0xeb, 0x5f, 0x09, 0xbc, 0x8a, 0xbf, 0x3c, 0xb4,
337             0x3e, 0xb1, 0x20, 0x05, 0x44, 0x96, 0x79, 0x0a,
338             0x40, 0x92, 0x7f, 0x9d, 0xd1, 0xaf, 0xbc, 0x90,
339             0x95, 0x0a, 0x81, 0xd4, 0xa7, 0xc6, 0xb8, 0xe0,
340             0xe4, 0x39, 0x30, 0x1d, 0x79, 0xc0, 0xe5, 0xfa,
341             0xb4, 0xe9, 0x63, 0xb4, 0x09, 0x72, 0x3b, 0x3e,
342             0xd9, 0xf6, 0xd9, 0x10, 0x21, 0x18, 0x7e, 0xe5,
343             0xad, 0x81, 0xd7, 0xd5, 0x82, 0xd0, 0x8c, 0x3b,
344             0x38, 0x95, 0xf8, 0x92, 0x01, 0xa9, 0x92, 0x00,
345             0x70, 0xd1, 0xa7, 0x88, 0x77, 0x1f, 0x3a, 0xeb,
346             0xb5, 0xe4, 0xf5, 0x9d, 0xc7, 0x37, 0x86, 0xb2,
347             0x12, 0x46, 0x34, 0x19, 0x72, 0x8c, 0xf5, 0x8c,
348             0xf6, 0x78, 0x98, 0xe0, 0x7c, 0xd3, 0xf4
349         },
350         "id-Gost28147-89-CryptoPro-B-ParamSet",
351         "testcfb2",
352         {
353             0x48, 0x0c, 0x74, 0x1b, 0x02, 0x6b, 0x55, 0xd5,
354             0xb6, 0x6d, 0xd7, 0x1d, 0x40, 0x48, 0x05, 0x6b,
355             0x6d, 0xeb, 0x3c, 0x29, 0x0f, 0x84, 0x80, 0x23,
356             0xee, 0x0d, 0x47, 0x77, 0xe3, 0xfe, 0x61, 0xc9
357         },
358         G89_CFB,
359         {
360             0x1f, 0x3f, 0x82, 0x1e, 0x0d, 0xd8, 0x1e, 0x22
361         },
362         {
363             0x23, 0xc6, 0x7f, 0x20, 0xa1, 0x23, 0x58, 0xbc,
364             0x7b, 0x05, 0xdb, 0x21, 0x15, 0xcf, 0x96, 0x41,
365             0xc7, 0x88, 0xef, 0x76, 0x5c, 0x49, 0xdb, 0x42,
366             0xbf, 0xf3, 0xc0, 0xf5, 0xbd, 0x5d, 0xd9, 0x8e,
367             0xaf, 0x3d, 0xf4, 0xe4, 0xda, 0x88, 0xbd, 0xbc,
368             0x47, 0x5d, 0x76, 0x07, 0xc9, 0x5f, 0x54, 0x1d,
369             0x1d, 0x6a, 0xa1, 0x2e, 0x18, 0xd6, 0x60, 0x84,
370             0x02, 0x18, 0x37, 0x92, 0x92, 0x15, 0xab, 0x21,
371             0xee, 0x21, 0xcc, 0x71, 0x6e, 0x51, 0xd9, 0x2b,
372             0xcc, 0x81, 0x97, 0x3f, 0xeb, 0x45, 0x99, 0xb8,
373             0x1b, 0xda, 0xff, 0x90, 0xd3, 0x41, 0x06, 0x9c,
374             0x3f, 0xfb, 0xe4, 0xb2, 0xdc, 0xc9, 0x03, 0x0d,
375             0xa7, 0xae, 0xd7, 0x7d, 0x02, 0xb8, 0x32, 0xab,
376             0xf3, 0x65, 0xa3, 0x65, 0x6c, 0x4e, 0xe4, 0xa2,
377             0x5e, 0x9e, 0xee, 0xcd, 0xde, 0x79, 0x36, 0x6b,
378             0x1b, 0xe1, 0x3c, 0xdf, 0x10, 0xad, 0x4f, 0x02,
379             0xe1, 0x14, 0xaa, 0x09, 0xb4, 0x0b, 0x76, 0xeb,
380             0x69, 0x38, 0x20, 0x02, 0xcb, 0x8e, 0xc0, 0xdf,
381             0xca, 0x48, 0x74, 0xc3, 0x31, 0xad, 0x42, 0x2c,
382             0x51, 0x9b, 0xd0, 0x6a, 0xc1, 0x36, 0xd7, 0x21,
383             0xdf, 0xb0, 0x45, 0xba, 0xca, 0x7f, 0x35, 0x20,
384             0x28, 0xbb, 0xc1, 0x76, 0xfd, 0x43, 0x5d, 0x23,
385             0x7d, 0x31, 0x84, 0x1a, 0x97, 0x4d, 0x83, 0xaa,
386             0x7e, 0xf1, 0xc4, 0xe6, 0x83, 0xac, 0x0d, 0xef,
387             0xef, 0x3c, 0xa4, 0x7c, 0x48, 0xe4, 0xc8, 0xca,
388             0x0d, 0x7d, 0xea, 0x7c, 0x45, 0xd7, 0x73, 0x50,
389             0x25, 0x1d, 0x01, 0xc4, 0x02, 0x1a, 0xcd, 0xe0,
390             0x38, 0x5b, 0xa8, 0x5a, 0x16, 0x9a, 0x10, 0x59,
391             0x74, 0xd7, 0x19, 0xc6, 0xf3, 0xb5, 0x17, 0xf6,
392             0x59, 0x8d, 0x62, 0xaf, 0x44, 0xe8, 0xdc, 0xe9,
393             0xc1, 0x76, 0xf1, 0xd0, 0xbd, 0x29, 0xd7, 0xec,
394             0x1d, 0xac, 0x57, 0xdb, 0x1a, 0x3f, 0xd8, 0xf6,
395             0x6e, 0xb6, 0xe6, 0xdf, 0x36, 0xe7, 0x89, 0xce,
396             0x56, 0x35, 0x43, 0x1c, 0x7d, 0x57, 0x79, 0x0e,
397             0xd8, 0xf4, 0xd7, 0xa7, 0x0d, 0xc6, 0x8f, 0x91,
398             0x66, 0x67, 0x82, 0x0f, 0x49, 0xc9, 0xc5, 0x65,
399             0x81, 0xa1, 0x39, 0x5a, 0x53, 0x9f, 0x02, 0xa5,
400             0xd5, 0x36, 0x22, 0xa8, 0xa8, 0x1c, 0x37, 0x0e,
401             0x76, 0x46, 0xdf, 0xbd, 0x6a, 0xdb, 0xfc, 0x1b,
402             0xbd, 0x10, 0xb8, 0xb1, 0xbc, 0x72, 0x4c, 0x58,
403             0x4a, 0xda, 0x6d, 0x66, 0x00, 0xda, 0x7a, 0x66,
404             0xa0, 0xe7, 0x3b, 0x39, 0xa3, 0xf7, 0x05, 0x07,
405             0xfa, 0x21, 0x4b, 0xc7, 0x94, 0xc0, 0xd3, 0x7b,
406             0x19, 0x02, 0x5d, 0x4a, 0x10, 0xf1, 0xc2, 0x0f,
407             0x19, 0x68, 0x27, 0xc7, 0x7d, 0xbf, 0x55, 0x03,
408             0x57, 0x7d, 0xaf, 0x77, 0xae, 0x80, 0x2f, 0x7a,
409             0xe6, 0x1f, 0x4b, 0xdc, 0x15, 0x18, 0xc0, 0x62,
410             0xa1, 0xe8, 0xd9, 0x1c, 0x9e, 0x8c, 0x96, 0x39,
411             0xc1, 0xc4, 0x88, 0xf7, 0x0c, 0xe1, 0x04, 0x84,
412             0x68, 0x51, 0xce, 0xf1, 0x90, 0xda, 0x7f, 0x76,
413             0xc8, 0xc0, 0x88, 0xef, 0x8e, 0x15, 0x25, 0x3e,
414             0x7b, 0xe4, 0x79, 0xb5, 0x66, 0x2d, 0x9c, 0xd1,
415             0x13, 0xda, 0xd0, 0xd5, 0x46, 0xd5, 0x8d, 0x46,
416             0x18, 0x07, 0xee, 0xd8, 0xc9, 0x64, 0xe3, 0xbe,
417             0x0e, 0x68, 0x27, 0x09, 0x96, 0x26, 0xf6, 0xe2,
418             0x19, 0x61, 0x3f, 0xf4, 0x58, 0x27, 0x0a, 0xeb,
419             0xce, 0x7c, 0xb6, 0x68, 0x92, 0xe7, 0x12, 0x3b,
420             0x31, 0xd4, 0x48, 0xdf, 0x35, 0x8d, 0xf4, 0x86,
421             0x42, 0x2a, 0x15, 0x4b, 0xe8, 0x19, 0x1f, 0x26,
422             0x65, 0x9b, 0xa8, 0xda, 0x4b, 0x79, 0x1f, 0x8e,
423             0xe6, 0x13, 0x7e, 0x49, 0x8f, 0xc1, 0xce, 0xdc,
424             0x5e, 0x64, 0x74, 0xce, 0x02, 0x78, 0xe0, 0xcf,
425             0xa0, 0xed, 0x5e, 0x31, 0x74, 0xd1, 0xd0, 0xb4,
426             0xee, 0x70, 0x19, 0x14, 0x3c, 0x8f, 0x16, 0xa6,
427             0xcf, 0x12, 0x93, 0x15, 0x88, 0xeb, 0x91, 0x65,
428             0x76, 0x98, 0xfd, 0xa1, 0x94, 0x30, 0xba, 0x43,
429             0x62, 0x65, 0x40, 0x04, 0x77, 0x9e, 0xd6, 0xab,
430             0x8b, 0x0d, 0x93, 0x80, 0x50, 0x5f, 0xa2, 0x76,
431             0x20, 0xa7, 0xd6, 0x9c, 0x27, 0x15, 0x27, 0xbc,
432             0xa5, 0x5a, 0xbf, 0xe9, 0x92, 0x82, 0x05, 0xa8,
433             0x41, 0xe9, 0xb5, 0x60, 0xd5, 0xc0, 0xd7, 0x4b,
434             0xad, 0x38, 0xb2, 0xe9, 0xd1, 0xe5, 0x51, 0x5f,
435             0x24, 0x78, 0x24, 0x9a, 0x23, 0xd2, 0xc2, 0x48,
436             0xbd, 0x0e, 0xf1, 0x37, 0x72, 0x91, 0x87, 0xb0,
437             0x4e, 0xbd, 0x99, 0x6b, 0x2c, 0x01, 0xb6, 0x79,
438             0x69, 0xec, 0x0c, 0xed, 0xe5, 0x3f, 0x50, 0x64,
439             0x7c, 0xb9, 0xdd, 0xe1, 0x92, 0x81, 0xb5, 0xd0,
440             0xcb, 0x17, 0x83, 0x86, 0x8b, 0xea, 0x4f, 0x93,
441             0x08, 0xbc, 0x22, 0x0c, 0xef, 0xe8, 0x0d, 0xf5,
442             0x9e, 0x23, 0xe1, 0xf9, 0xb7, 0x6b, 0x45, 0x0b,
443             0xcb, 0xa9, 0xb6, 0x4d, 0x28, 0x25, 0xba, 0x3e,
444             0x86, 0xf2, 0x75, 0x47, 0x5d, 0x9d, 0x6b, 0xf6,
445             0x8a, 0x05, 0x58, 0x73, 0x3d, 0x00, 0xde, 0xfd,
446             0x69, 0xb1, 0x61, 0x16, 0xf5, 0x2e, 0xb0, 0x9f,
447             0x31, 0x6a, 0x00, 0xb9, 0xef, 0x71, 0x63, 0x47,
448             0xa3, 0xca, 0xe0, 0x40, 0xa8, 0x7e, 0x02, 0x04,
449             0xfe, 0xe5, 0xce, 0x48, 0x73, 0xe3, 0x94, 0xcf,
450             0xe2, 0xff, 0x29, 0x7e, 0xf6, 0x32, 0xbb, 0xb7,
451             0x55, 0x12, 0x21, 0x7a, 0x9c, 0x75, 0x04, 0x0c,
452             0xb4, 0x7c, 0xb0, 0x3d, 0x40, 0xb3, 0x11, 0x9a,
453             0x7a, 0x9a, 0x13, 0xfb, 0x77, 0xa7, 0x51, 0x68,
454             0xf7, 0x05, 0x47, 0x3b, 0x0f, 0x52, 0x5c, 0xe6,
455             0xc2, 0x99, 0x3a, 0x37, 0x54, 0x5c, 0x4f, 0x2b,
456             0xa7, 0x01, 0x08, 0x74, 0xbc, 0x91, 0xe3, 0xe2,
457             0xfe, 0x65, 0x94, 0xfd, 0x3d, 0x18, 0xe0, 0xf0,
458             0x62, 0xed, 0xc2, 0x10, 0x82, 0x9c, 0x58, 0x7f,
459             0xb2, 0xa3, 0x87, 0x8a, 0x74, 0xd9, 0xc1, 0xfb,
460             0x84, 0x28, 0x17, 0xc7, 0x2b, 0xcb, 0x53, 0x1f,
461             0x4e, 0x8a, 0x82, 0xfc, 0xb4, 0x3f, 0xc1, 0x47,
462             0x25, 0xf3, 0x21, 0xdc, 0x4c, 0x2d, 0x08, 0xfa,
463             0xe7, 0x0f, 0x03, 0xa9, 0x68, 0xde, 0x6b, 0x41,
464             0xa0, 0xf9, 0x41, 0x6c, 0x57, 0x4d, 0x3a, 0x0e,
465             0xea, 0x51, 0xca, 0x9f, 0x97, 0x11, 0x7d, 0xf6,
466             0x8e, 0x88, 0x63, 0x67, 0xc9, 0x65, 0x13, 0xca,
467             0x38, 0xed, 0x35, 0xbe, 0xf4, 0x27, 0xa9, 0xfc,
468             0xa9, 0xe6, 0xc3, 0x40, 0x86, 0x08, 0x39, 0x72,
469             0x37, 0xee, 0xb2, 0x87, 0x09, 0x96, 0xb7, 0x40,
470             0x87, 0x36, 0x92, 0xc1, 0x5d, 0x6a, 0x2c, 0x43,
471             0xca, 0x25, 0xc8, 0x35, 0x37, 0x2d, 0xb5, 0xa9,
472             0x27, 0x44, 0x50, 0xf2, 0x6d, 0x22, 0x75, 0x41,
473             0x77, 0x2a, 0xdb, 0xb1, 0x8c, 0x6d, 0x05, 0xe8,
474             0xc9, 0x99, 0xc7, 0x08, 0xf9, 0x14, 0x8f, 0x78,
475             0xa9, 0x8f, 0xc2, 0x5a, 0x7a, 0x65, 0xc5, 0xd8,
476             0x86, 0xbb, 0x72, 0x69, 0x6b, 0x6b, 0x45, 0x83,
477             0x5b, 0xb1, 0xf7, 0xcd, 0x16, 0x73, 0xee, 0xe9,
478             0x80, 0x85, 0xfe, 0x8e, 0xe1, 0xae, 0x53, 0x8f,
479             0xde, 0xbe, 0x48, 0x8b, 0x59, 0xef, 0xf6, 0x7e,
480             0xd8, 0xb5, 0xa8, 0x47, 0xc0, 0x4e, 0x15, 0x58,
481             0xca, 0xd3, 0x2f, 0xf8, 0x6c, 0xa6, 0x3d, 0x78,
482             0x4d, 0x7a, 0x54, 0xd6, 0x10, 0xe5, 0xcc, 0x05,
483             0xe2, 0x29, 0xb5, 0x86, 0x07, 0x39, 0x7d, 0x78,
484             0x8e, 0x5a, 0x8f, 0x83, 0x4c, 0xe7, 0x3d, 0x68,
485             0x3e, 0xe5, 0x02, 0xe6, 0x64, 0x4f, 0x5e, 0xb4,
486             0x49, 0x77, 0xf0, 0xc0, 0xfa, 0x6f, 0xc8, 0xfb,
487             0x9f, 0x84, 0x6f, 0x55, 0xfb, 0x30, 0x5e, 0x89,
488             0x93, 0xa9, 0xf3, 0xa6, 0xa3, 0xd7, 0x26, 0xbb,
489             0xd8, 0xa8, 0xd9, 0x95, 0x1d, 0xfe, 0xfc, 0xd7,
490             0xa8, 0x93, 0x66, 0x2f, 0x04, 0x53, 0x06, 0x64,
491             0x7f, 0x31, 0x29, 0xae, 0xb7, 0x9f, 0xba, 0xc4,
492             0x6d, 0x68, 0xd1, 0x24, 0x32, 0xf4, 0x11
493         }
494     },
495     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
496         4,
497         {
498             0x07, 0x9c, 0x91, 0xbe
499         },
500         "id-Gost28147-89-CryptoPro-C-ParamSet",
501         "testcfb3",
502         {
503             0x77, 0xc3, 0x45, 0x8e, 0xf6, 0x42, 0xe7, 0x04,
504             0x8e, 0xfc, 0x08, 0xe4, 0x70, 0x96, 0xd6, 0x05,
505             0x93, 0x59, 0x02, 0x6d, 0x6f, 0x97, 0xca, 0xe9,
506             0xcf, 0x89, 0x44, 0x4b, 0xde, 0x6c, 0x22, 0x1d
507         },
508         G89_CFB,
509         {
510             0x43, 0x7c, 0x3e, 0x8e, 0x2f, 0x2a, 0x00, 0x98
511         },
512         {
513             0x19, 0x35, 0x81, 0x34
514         }
515     },
516     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
517         9,
518         {
519             0x2f, 0x31, 0xd8, 0x83, 0xb4, 0x20, 0xe8, 0x6e,
520             0xda
521         },
522         "id-Gost28147-89-CryptoPro-D-ParamSet",
523         "testcfb4",
524         {
525             0x38, 0x9f, 0xe8, 0x37, 0xff, 0x9c, 0x5d, 0x29,
526             0xfc, 0x48, 0x55, 0xa0, 0x87, 0xea, 0xe8, 0x40,
527             0x20, 0x87, 0x5b, 0xb2, 0x01, 0x15, 0x55, 0xa7,
528             0xe3, 0x2d, 0xcb, 0x3d, 0xd6, 0x59, 0x04, 0x73
529         },
530         G89_CFB,
531         {
532             0xc5, 0xa2, 0xd2, 0x1f, 0x2f, 0xdf, 0xb8, 0xeb
533         },
534         {
535             0x6d, 0xa4, 0xed, 0x40, 0x08, 0x88, 0x71, 0xad,
536             0x16
537         }
538     },
539     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
540         5242880+8,
541         { 0 },
542         "id-Gost28147-89-CryptoPro-A-ParamSet",
543         "test5Mcfb",
544         {
545             0x61, 0x58, 0x44, 0x5a, 0x41, 0xf6, 0xc7, 0x0f,
546             0x6b, 0xdb, 0x51, 0x91, 0x6a, 0xf6, 0x81, 0x30,
547             0x8c, 0xa7, 0x98, 0xdd, 0x38, 0x35, 0x8a, 0x60,
548             0x85, 0xb4, 0xf0, 0xf9, 0x43, 0xa2, 0x7d, 0x9a
549         },
550         G89_CFB,
551         {
552             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
553         },
554         {
555             0x1c, 0x16, 0xa0, 0xe9, 0x63, 0x94, 0xfe, 0x38,
556             0x37, 0xa7, 0x9b, 0x70, 0x25, 0x2e, 0xd6, 0x00
557         }
558     },
559     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
560         4294967296ULL+16,
561         { 0 },
562         "id-Gost28147-89-CryptoPro-A-ParamSet",
563         "test4Gcfb",
564         {
565             0xae, 0x57, 0xa2, 0xdd, 0xa4, 0xef, 0x4f, 0x96,
566             0xb8, 0x94, 0xa5, 0xd1, 0x1b, 0xc8, 0x9b, 0x42,
567             0xa5, 0x24, 0xcc, 0x89, 0x5c, 0xb8, 0x92, 0x52,
568             0xc1, 0x12, 0x6a, 0xb0, 0x9a, 0x26, 0xe8, 0x06
569         },
570         G89_CFB,
571         {
572             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
573         },
574         {
575             0x2e, 0x62, 0xb0, 0x2e, 0xc7, 0x87, 0x4b, 0x29,
576             0x33, 0x16, 0x6b, 0xb4, 0xd6, 0x61, 0x66, 0xd9
577         }
578     },
579     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
580         1037,
581         {
582             0x3d, 0x0b, 0x69, 0xf7, 0xa8, 0xe4, 0xfc, 0x99,
583             0x22, 0x2e, 0xee, 0xd1, 0x63, 0x12, 0xfe, 0xa8,
584             0x9d, 0xcb, 0x6c, 0x4d, 0x48, 0x8c, 0xe8, 0xbd,
585             0x8b, 0x60, 0xf1, 0xbf, 0x7b, 0xe3, 0x79, 0xd5,
586             0x2b, 0x25, 0x97, 0x13, 0xef, 0x35, 0xda, 0xf4,
587             0xbc, 0x77, 0xce, 0xea, 0xe9, 0x3f, 0xa4, 0xb6,
588             0x01, 0xd5, 0x73, 0x29, 0x58, 0xda, 0xd7, 0x67,
589             0x17, 0xac, 0xe4, 0x75, 0x2f, 0x57, 0x23, 0xac,
590             0x96, 0x21, 0xc7, 0x62, 0x2d, 0xf7, 0x32, 0xb5,
591             0x44, 0x5f, 0x72, 0xb1, 0x5f, 0xba, 0x1b, 0x1e,
592             0xdb, 0x4a, 0x09, 0x8c, 0x92, 0x61, 0xa2, 0xb0,
593             0x49, 0x68, 0xe5, 0xb3, 0xa2, 0x8f, 0x13, 0x4b,
594             0xf5, 0x4d, 0x84, 0xda, 0xab, 0xa0, 0xb6, 0xd1,
595             0x5a, 0x63, 0x19, 0xe8, 0xa2, 0x09, 0xf6, 0x76,
596             0x6f, 0x9b, 0x48, 0x0a, 0x15, 0x5d, 0xb7, 0x20,
597             0x21, 0x9a, 0x2e, 0xb9, 0x6d, 0xfa, 0x1e, 0xc2,
598             0x0e, 0xef, 0x15, 0xab, 0x59, 0x01, 0xfe, 0x43,
599             0x90, 0xf2, 0x62, 0xca, 0x4a, 0x9a, 0x48, 0x38,
600             0xab, 0x6f, 0x9d, 0x21, 0xb3, 0xad, 0xa7, 0x60,
601             0x46, 0xe3, 0xef, 0xd0, 0xe3, 0x1d, 0xc5, 0xe1,
602             0xb8, 0xa1, 0xe2, 0x99, 0x20, 0xc5, 0x76, 0xcc,
603             0xaa, 0x8a, 0xa9, 0x45, 0x55, 0xa0, 0x78, 0x00,
604             0x64, 0xde, 0xcf, 0x5b, 0xdf, 0x26, 0x48, 0xcd,
605             0xba, 0x8a, 0xb5, 0xfb, 0xfd, 0x4a, 0xd5, 0xc4,
606             0xe0, 0x43, 0xa6, 0x71, 0x90, 0xa4, 0x8b, 0xca,
607             0x2e, 0x88, 0x7b, 0xac, 0xb2, 0xdc, 0xf2, 0x01,
608             0xcb, 0xda, 0x6e, 0x91, 0x27, 0x28, 0x44, 0x88,
609             0x9a, 0xd2, 0x12, 0xf1, 0xa6, 0xf5, 0xb7, 0x61,
610             0xce, 0x79, 0x62, 0x52, 0x3c, 0xe6, 0x14, 0x73,
611             0xd1, 0x41, 0x92, 0x50, 0xbd, 0xdc, 0x3b, 0xd0,
612             0xa7, 0x11, 0x8c, 0x3a, 0xe4, 0x2d, 0xf2, 0x52,
613             0xd3, 0x2f, 0x7c, 0x8e, 0x54, 0x90, 0x4e, 0x23,
614             0xae, 0xb3, 0xa0, 0xf3, 0x25, 0x7e, 0x66, 0xaa,
615             0x0f, 0x6f, 0x81, 0x72, 0x77, 0xbb, 0xd3, 0x47,
616             0xe8, 0x05, 0xff, 0xe1, 0x5b, 0xc9, 0x37, 0x50,
617             0x33, 0x49, 0x17, 0xaf, 0xab, 0x1d, 0xe1, 0x15,
618             0xf2, 0xe5, 0x98, 0x5e, 0x2d, 0x05, 0x1f, 0x0d,
619             0x55, 0x97, 0xed, 0xff, 0x5e, 0xe0, 0x0f, 0xc3,
620             0x9c, 0xbd, 0x82, 0xc2, 0x06, 0xbe, 0x45, 0x66,
621             0xae, 0x33, 0xbe, 0x28, 0x48, 0xe9, 0x2d, 0x1a,
622             0xe6, 0x65, 0x8e, 0xdf, 0x76, 0x03, 0x73, 0x4b,
623             0xc0, 0x80, 0x71, 0xf9, 0xac, 0xba, 0xa0, 0xb0,
624             0x19, 0x1a, 0x0a, 0xd4, 0x35, 0x12, 0x88, 0x76,
625             0x05, 0x75, 0x8f, 0x7c, 0xb5, 0xf0, 0x19, 0x75,
626             0x6d, 0x05, 0xcb, 0x0d, 0xbc, 0x8d, 0xe9, 0xf0,
627             0xd4, 0xdb, 0x3c, 0x3c, 0x29, 0x8e, 0x2c, 0x32,
628             0x1d, 0xf7, 0xb6, 0x49, 0xcf, 0xdb, 0x63, 0xee,
629             0x3c, 0xfa, 0x33, 0x73, 0x6f, 0xe4, 0x97, 0x4e,
630             0x2f, 0xc9, 0x4c, 0x5c, 0x65, 0xfe, 0xea, 0xfb,
631             0xc6, 0xdd, 0xc1, 0x1c, 0x47, 0x3f, 0xf4, 0x50,
632             0x2f, 0xde, 0x1b, 0x5b, 0x0b, 0x16, 0xca, 0xb6,
633             0x46, 0x44, 0xf2, 0xc1, 0x0d, 0xa1, 0x1d, 0xa6,
634             0xdb, 0xf0, 0x3d, 0xb1, 0x6c, 0x05, 0x31, 0x85,
635             0x8e, 0x74, 0xae, 0xf2, 0x39, 0x26, 0xf7, 0xc1,
636             0xe7, 0x4c, 0xdd, 0x9d, 0x40, 0xb8, 0xf3, 0xc5,
637             0xc2, 0x16, 0x64, 0x6b, 0xaa, 0xdb, 0x4b, 0x82,
638             0x5c, 0xd3, 0x02, 0xd3, 0x8f, 0x26, 0x79, 0x8d,
639             0xb0, 0x78, 0x70, 0x19, 0x58, 0x0c, 0xb4, 0x31,
640             0x88, 0x44, 0x1c, 0x91, 0x6f, 0xf4, 0x52, 0x39,
641             0xa8, 0xf5, 0xc0, 0x1b, 0xfe, 0xf2, 0x0e, 0x4b,
642             0xac, 0x0a, 0xc2, 0x7e, 0x9c, 0x9b, 0xeb, 0x5d,
643             0x4e, 0x4f, 0x42, 0xd8, 0x71, 0x0a, 0x97, 0x27,
644             0x03, 0x14, 0x96, 0xa6, 0x3d, 0x04, 0xea, 0x9f,
645             0x14, 0x14, 0x27, 0x4c, 0xd9, 0xa2, 0x89, 0x5f,
646             0x65, 0x4a, 0xe1, 0x9d, 0x2c, 0xb8, 0xf8, 0xd4,
647             0x8f, 0x2a, 0x57, 0x36, 0xcc, 0x06, 0x9c, 0x2c,
648             0xc5, 0x13, 0x16, 0xdf, 0xfc, 0xae, 0x22, 0x16,
649             0xa8, 0x2b, 0x71, 0x6f, 0x1d, 0xb3, 0x47, 0x54,
650             0x3f, 0x2d, 0x0a, 0x68, 0x9f, 0x2e, 0xf6, 0x90,
651             0xd8, 0xa1, 0x21, 0x09, 0xd4, 0x97, 0xb9, 0x7b,
652             0x7f, 0x9b, 0x6a, 0xed, 0xd1, 0xf0, 0xe3, 0xb6,
653             0x28, 0xc7, 0x62, 0x82, 0x00, 0xc9, 0x38, 0xa1,
654             0x82, 0x78, 0xce, 0x87, 0xc8, 0x53, 0xac, 0x4f,
655             0x2e, 0x31, 0xb9, 0x50, 0x7f, 0x36, 0x00, 0x4a,
656             0x32, 0xe6, 0xd8, 0xbb, 0x59, 0x45, 0x0e, 0x91,
657             0x1b, 0x38, 0xa9, 0xbc, 0xb9, 0x5e, 0x6c, 0x6a,
658             0x9c, 0x03, 0x01, 0x1c, 0xde, 0xe8, 0x1f, 0x1e,
659             0xe3, 0xde, 0x25, 0xa2, 0x56, 0x79, 0xe1, 0xbd,
660             0x58, 0xc4, 0x93, 0xe6, 0xd0, 0x8a, 0x4d, 0x08,
661             0xab, 0xf7, 0xaa, 0xc3, 0x7d, 0xc1, 0xee, 0x68,
662             0x37, 0xbc, 0x78, 0x0b, 0x19, 0x68, 0x2b, 0x2b,
663             0x2e, 0x6d, 0xc4, 0x6f, 0xaa, 0x3b, 0xc6, 0x19,
664             0xcb, 0xf1, 0x58, 0xb9, 0x60, 0x85, 0x45, 0xae,
665             0x52, 0x97, 0xba, 0x24, 0x32, 0x13, 0x72, 0x16,
666             0x6e, 0x7b, 0xc1, 0x98, 0xac, 0xb1, 0xed, 0xb4,
667             0xcc, 0x6c, 0xcf, 0x45, 0xfc, 0x50, 0x89, 0x80,
668             0x8e, 0x7a, 0xa4, 0xd3, 0x64, 0x50, 0x63, 0x37,
669             0xc9, 0x6c, 0xf1, 0xc4, 0x3d, 0xfb, 0xde, 0x5a,
670             0x5c, 0xa8, 0x21, 0x35, 0xe6, 0x2e, 0x8c, 0x2a,
671             0x3c, 0x12, 0x17, 0x79, 0x9a, 0x0d, 0x2e, 0x79,
672             0xeb, 0x67, 0x1f, 0x2b, 0xf8, 0x6e, 0xca, 0xc1,
673             0xfa, 0x45, 0x18, 0x9e, 0xdf, 0x6a, 0xe6, 0xcb,
674             0xe9, 0x5c, 0xc3, 0x09, 0xaf, 0x93, 0x58, 0x13,
675             0xbf, 0x90, 0x84, 0x87, 0x75, 0xd6, 0x82, 0x28,
676             0x8d, 0xe7, 0x2f, 0xa3, 0xfb, 0x97, 0x74, 0x2a,
677             0x73, 0x04, 0x82, 0x06, 0x76, 0x69, 0xb1, 0x0b,
678             0x19, 0xfc, 0xae, 0xb3, 0xdd, 0x2a, 0xe5, 0xc1,
679             0x05, 0xd8, 0x80, 0x95, 0x22, 0x90, 0x71, 0xfc,
680             0xc2, 0x92, 0x42, 0xfd, 0xf1, 0x70, 0xb4, 0x68,
681             0x88, 0xa4, 0x9e, 0x0a, 0x24, 0x40, 0x13, 0xc8,
682             0xa2, 0x56, 0x4f, 0x39, 0xe6, 0x06, 0xf1, 0xdc,
683             0xf5, 0x13, 0x0e, 0xad, 0x9c, 0x8b, 0xaf, 0xe9,
684             0xe3, 0x88, 0x72, 0xff, 0xa0, 0x6d, 0xda, 0x08,
685             0x70, 0xb9, 0x2e, 0x83, 0xc5, 0xbb, 0x32, 0xa5,
686             0x74, 0xc7, 0xfb, 0x7b, 0x76, 0xaf, 0x02, 0xbb,
687             0x2b, 0xb8, 0x5e, 0x65, 0x02, 0xfe, 0x0e, 0xa0,
688             0x99, 0xce, 0x01, 0x3b, 0x35, 0xe1, 0xb0, 0x22,
689             0xe5, 0x94, 0xbd, 0xdd, 0x8e, 0xbb, 0xf6, 0x75,
690             0xbf, 0xbf, 0xee, 0x7a, 0xb1, 0x58, 0xb4, 0x81,
691             0xb8, 0x39, 0x3e, 0xb6, 0x1e, 0xde, 0xda, 0x1b,
692             0xd5, 0xf7, 0xdd, 0x7d, 0x65, 0x9c, 0xaa, 0x56,
693             0x93, 0xb8, 0xaf, 0x48, 0x53, 0xc7, 0x22, 0xe4,
694             0x1c, 0xdf, 0xe9, 0x79, 0xb4, 0x20, 0x89, 0xcc,
695             0x2a, 0x79, 0x2c, 0x09, 0xbe, 0x78, 0xcf, 0xcc,
696             0xf2, 0x90, 0xd6, 0x65, 0xc5, 0x29, 0xfc, 0xda,
697             0x69, 0xfc, 0xc0, 0xd6, 0x70, 0x99, 0x61, 0x3f,
698             0x60, 0x02, 0xd8, 0x12, 0x22, 0xc8, 0x34, 0xc6,
699             0x3b, 0xb3, 0xc2, 0x33, 0xa1, 0x5c, 0x8f, 0x4c,
700             0xd1, 0x52, 0x72, 0xf2, 0x42, 0x05, 0x8e, 0x18,
701             0x1f, 0x16, 0xda, 0xb8, 0x53, 0xa1, 0x5f, 0x01,
702             0x32, 0x1b, 0x90, 0xb3, 0x53, 0x9b, 0xd0, 0x85,
703             0x61, 0x2d, 0x17, 0xed, 0x0a, 0xa4, 0xa5, 0x27,
704             0x09, 0x75, 0x7c, 0xbc, 0x30, 0xf7, 0x5e, 0x59,
705             0x9a, 0x07, 0x96, 0x84, 0x28, 0x86, 0x4b, 0xa7,
706             0x22, 0x35, 0x28, 0xc7, 0xed, 0x0d, 0xc3, 0xce,
707             0x98, 0xcc, 0x2d, 0xec, 0xd4, 0x98, 0x09, 0x8e,
708             0x52, 0x5f, 0x2b, 0x9a, 0x13, 0xbe, 0x99, 0x16,
709             0x73, 0xd1, 0x1f, 0x81, 0xe5, 0xa2, 0x08, 0x78,
710             0xcb, 0x0c, 0x20, 0xd4, 0xa5, 0xea, 0x4b, 0x5b,
711             0x95, 0x5a, 0x92, 0x9a, 0x52
712         },
713         "id-Gost28147-89-CryptoPro-A-ParamSet",
714         "testcnt2",
715         {
716             0x1b, 0x5d, 0xdb, 0x77, 0xcf, 0xf9, 0xec, 0x95,
717             0x5e, 0xcc, 0x67, 0x9f, 0x5d, 0x28, 0xad, 0x4a,
718             0x27, 0xf4, 0x32, 0xc6, 0xb2, 0xcb, 0xb1, 0x45,
719             0x6a, 0x88, 0x14, 0x0c, 0x9b, 0x9b, 0x5f, 0x48
720         },
721         G89_CNT,
722         {
723             0x71, 0x58, 0x8c, 0xe1, 0x55, 0xf4, 0xf6, 0xb3
724         },
725         {
726             0x8e, 0xcd, 0x8f, 0xc8, 0xac, 0xe1, 0x15, 0x48,
727             0x2d, 0xae, 0x24, 0x8a, 0xc7, 0xfb, 0xba, 0x0f,
728             0x1d, 0x8a, 0x95, 0xa2, 0x43, 0xef, 0xcb, 0xdc,
729             0x59, 0x57, 0xa7, 0xc7, 0x0e, 0xe3, 0xe2, 0xb9,
730             0x0d, 0x86, 0x29, 0x62, 0xcb, 0x83, 0x4d, 0x07,
731             0x0c, 0x40, 0xd4, 0x7b, 0x2e, 0xca, 0xba, 0xbf,
732             0x4a, 0x60, 0x3b, 0x31, 0x98, 0xc8, 0x88, 0x47,
733             0xd9, 0x82, 0xab, 0xfc, 0x8f, 0x48, 0xe2, 0x46,
734             0xab, 0xd3, 0xa1, 0xab, 0x8a, 0x05, 0x22, 0x8c,
735             0xf4, 0xec, 0x9a, 0x1e, 0x76, 0xab, 0x1a, 0x60,
736             0xd9, 0x25, 0x6b, 0xb8, 0x56, 0xe5, 0xb2, 0xea,
737             0x10, 0xf3, 0x62, 0x04, 0x32, 0x5e, 0xaa, 0x3b,
738             0x7b, 0x57, 0xbc, 0x3b, 0x8b, 0x43, 0x47, 0xf2,
739             0xd5, 0x03, 0x7e, 0x51, 0x01, 0xff, 0x77, 0x28,
740             0xca, 0x90, 0xa3, 0xfe, 0x7e, 0x2e, 0x70, 0x16,
741             0x75, 0x18, 0x44, 0xf0, 0x1b, 0x85, 0x05, 0xea,
742             0xe3, 0x21, 0xf7, 0x26, 0x86, 0x76, 0x3c, 0x67,
743             0x9d, 0xfc, 0xbc, 0x10, 0x7f, 0x77, 0xe4, 0xed,
744             0xd3, 0x12, 0xf8, 0x83, 0x00, 0x1f, 0x4b, 0x92,
745             0x95, 0x92, 0x5c, 0xf3, 0x5a, 0xf3, 0xb7, 0xd0,
746             0xa9, 0x5f, 0xf2, 0x18, 0xc4, 0x66, 0x62, 0xc1,
747             0x84, 0x0e, 0x66, 0xe8, 0x80, 0x7d, 0x1f, 0xf0,
748             0xba, 0x01, 0x9b, 0x71, 0xae, 0x93, 0xcc, 0x27,
749             0x54, 0x34, 0x9a, 0xbd, 0xca, 0xee, 0x52, 0x09,
750             0x92, 0x9d, 0xb0, 0xd5, 0xd9, 0xba, 0x2f, 0xb9,
751             0x96, 0xdc, 0xfa, 0xbd, 0xce, 0xea, 0x1a, 0x7b,
752             0x9a, 0x1d, 0x13, 0xa7, 0x11, 0xe2, 0x9a, 0x64,
753             0xf6, 0xd3, 0xee, 0xc6, 0x33, 0xb7, 0x6e, 0xef,
754             0x25, 0x9e, 0x1e, 0x7c, 0xe3, 0x1f, 0x2c, 0x6e,
755             0xa9, 0xc0, 0xf8, 0xc1, 0xbf, 0x3b, 0xf8, 0x34,
756             0x03, 0x9b, 0xa1, 0x40, 0x5b, 0x0c, 0x3c, 0x09,
757             0x66, 0x9d, 0x63, 0xe2, 0xe2, 0x04, 0x8f, 0x06,
758             0x84, 0x74, 0x68, 0xb2, 0x5c, 0x3b, 0x4c, 0xad,
759             0x0b, 0x3f, 0x03, 0xb3, 0x07, 0x8a, 0x64, 0xa7,
760             0x36, 0x56, 0x26, 0x39, 0x66, 0xda, 0xe9, 0x6d,
761             0x1b, 0xd5, 0x88, 0xe8, 0x5c, 0xaf, 0x5a, 0x4c,
762             0x49, 0xf7, 0xf5, 0xb7, 0x78, 0xf0, 0xde, 0xec,
763             0xcd, 0x16, 0x23, 0x9e, 0x8c, 0x13, 0xbe, 0x6b,
764             0x6f, 0x9b, 0x07, 0xe5, 0xbb, 0xcc, 0x3a, 0x1b,
765             0x6f, 0x43, 0xdf, 0xff, 0x46, 0x2a, 0xae, 0x47,
766             0x19, 0x18, 0x9a, 0x25, 0x09, 0xc9, 0x24, 0x40,
767             0x0c, 0x4b, 0xa7, 0xda, 0x5e, 0x0d, 0xee, 0xfa,
768             0x62, 0x45, 0x8e, 0xcc, 0x2f, 0x23, 0x08, 0x1d,
769             0x92, 0xf0, 0xfe, 0x82, 0x0f, 0xd7, 0x11, 0x60,
770             0x7e, 0x0b, 0x0b, 0x75, 0xf4, 0xf5, 0x3b, 0xc0,
771             0xa4, 0xe8, 0x72, 0xa5, 0xb6, 0xfa, 0x5a, 0xad,
772             0x5a, 0x4f, 0x39, 0xb5, 0xa2, 0x12, 0x96, 0x0a,
773             0x32, 0x84, 0xb2, 0xa1, 0x06, 0x68, 0x56, 0x57,
774             0x97, 0xa3, 0x7b, 0x22, 0x61, 0x76, 0x5d, 0x30,
775             0x1a, 0x31, 0xab, 0x99, 0x06, 0xc5, 0x1a, 0x96,
776             0xcf, 0xcf, 0x14, 0xff, 0xb2, 0xc4, 0xcc, 0x2b,
777             0xbf, 0x0c, 0x9d, 0x91, 0x8f, 0x79, 0x5b, 0xbc,
778             0xa9, 0x6b, 0x91, 0x6a, 0xb4, 0x93, 0x5c, 0x7b,
779             0x5d, 0xc2, 0x8a, 0x75, 0xc0, 0xc1, 0x08, 0xfa,
780             0x99, 0xf9, 0x4d, 0x5e, 0x0c, 0x06, 0x64, 0x60,
781             0xa9, 0x01, 0x4a, 0x34, 0x0f, 0x33, 0x84, 0x95,
782             0x69, 0x30, 0xc1, 0x1c, 0x36, 0xf8, 0xfc, 0x30,
783             0x23, 0xb2, 0x71, 0xe5, 0x52, 0x4d, 0x12, 0x1a,
784             0xc9, 0xbe, 0xee, 0xc9, 0xcb, 0x01, 0x85, 0xf3,
785             0xdb, 0x30, 0xf9, 0x41, 0xa9, 0x40, 0xb0, 0x06,
786             0x29, 0x77, 0xcd, 0xc5, 0xec, 0x58, 0x02, 0x48,
787             0x83, 0x53, 0x44, 0x6a, 0xd2, 0xca, 0x05, 0xd8,
788             0x5a, 0x08, 0xeb, 0xa9, 0xf4, 0xe6, 0xc7, 0x9d,
789             0xd5, 0x7b, 0x74, 0x0b, 0x31, 0xb7, 0xa5, 0x57,
790             0x7c, 0x7a, 0xfd, 0x1a, 0x0e, 0xd7, 0x97, 0x41,
791             0xbf, 0xdd, 0xc6, 0x19, 0x6c, 0x77, 0x8c, 0x18,
792             0x52, 0x57, 0x83, 0xba, 0x71, 0x25, 0xee, 0x39,
793             0xbb, 0xe2, 0x43, 0xa0, 0x14, 0xdc, 0x0e, 0x84,
794             0xb4, 0x2b, 0xde, 0x3e, 0xe5, 0x36, 0xb7, 0xa2,
795             0x92, 0x98, 0x05, 0xb8, 0x96, 0xe5, 0xd0, 0x8c,
796             0x08, 0x93, 0x35, 0xc2, 0x81, 0xe0, 0xfc, 0x59,
797             0x71, 0xe2, 0x44, 0x49, 0x5d, 0xda, 0xfb, 0x9c,
798             0xaa, 0x70, 0x9f, 0x43, 0xa8, 0xa5, 0xd9, 0x67,
799             0xd9, 0x8f, 0xa3, 0x1e, 0xbe, 0x0e, 0xec, 0xdf,
800             0x12, 0x2b, 0x6a, 0xe7, 0x1c, 0x12, 0x17, 0xe7,
801             0xc4, 0x6d, 0x50, 0xc9, 0x52, 0x7a, 0xd5, 0xe8,
802             0x7f, 0xbc, 0x07, 0x15, 0xac, 0xdb, 0x93, 0x66,
803             0xb1, 0xf0, 0xa7, 0x7b, 0x2f, 0xe9, 0xec, 0xd0,
804             0x47, 0x69, 0x59, 0x87, 0xf1, 0x4c, 0x3e, 0x4b,
805             0x9b, 0x11, 0x79, 0x13, 0xe4, 0x96, 0xf6, 0x56,
806             0x04, 0x6e, 0x0b, 0x33, 0xfc, 0x40, 0xf6, 0xc7,
807             0xc1, 0x43, 0xb1, 0xbf, 0x0e, 0xb3, 0x87, 0xfd,
808             0x0b, 0x1c, 0x63, 0x46, 0x3a, 0xd3, 0xa0, 0x17,
809             0x59, 0x25, 0x94, 0x6c, 0x9c, 0x3d, 0x0c, 0x81,
810             0xce, 0x82, 0x72, 0x42, 0x28, 0xf9, 0x37, 0x6a,
811             0x6d, 0xe4, 0x12, 0xf4, 0x21, 0xaa, 0xf7, 0xfe,
812             0x27, 0x55, 0x40, 0x1a, 0x14, 0xc3, 0x39, 0x5b,
813             0xbf, 0x63, 0xc2, 0x5f, 0x10, 0x1f, 0x14, 0x25,
814             0xd0, 0xce, 0xf3, 0x14, 0x48, 0x13, 0xa5, 0x0b,
815             0x4d, 0x38, 0xcf, 0x0d, 0x34, 0xc0, 0x0a, 0x11,
816             0xb4, 0xb5, 0x72, 0xc8, 0x4b, 0xc2, 0x6f, 0xe7,
817             0x9d, 0x93, 0xf7, 0xdf, 0xb8, 0x43, 0x72, 0x7e,
818             0xda, 0x3e, 0x20, 0x1f, 0xbc, 0x21, 0x2a, 0xce,
819             0x00, 0xfa, 0x96, 0x9f, 0x3d, 0xe5, 0x88, 0x96,
820             0xef, 0x29, 0x84, 0xdf, 0x6c, 0x1c, 0x96, 0xd8,
821             0x58, 0x47, 0xaa, 0x92, 0xf3, 0x07, 0xe5, 0xfb,
822             0xaf, 0xea, 0x95, 0x7e, 0x0b, 0x71, 0xcd, 0x81,
823             0x0f, 0xb7, 0x0a, 0x59, 0x8f, 0x31, 0x4d, 0xd1,
824             0xc3, 0xf3, 0x2f, 0x70, 0x5c, 0x59, 0x18, 0x97,
825             0xaf, 0x77, 0x95, 0x5e, 0xaf, 0x40, 0x06, 0x12,
826             0x81, 0x61, 0x86, 0x08, 0x4e, 0xbc, 0x89, 0x46,
827             0x07, 0x2e, 0x5b, 0x10, 0xaa, 0x12, 0xf0, 0xa7,
828             0x84, 0xe2, 0x9a, 0x08, 0xf1, 0xde, 0x59, 0xe3,
829             0x0e, 0x47, 0x4b, 0xff, 0xc3, 0xc9, 0x18, 0xaf,
830             0x95, 0x9c, 0x67, 0x2a, 0xde, 0x8a, 0x7a, 0x99,
831             0x04, 0xc4, 0xb8, 0x97, 0x4c, 0x04, 0x29, 0x71,
832             0x05, 0xda, 0xb3, 0xd6, 0xdb, 0x6c, 0x71, 0xe6,
833             0xe8, 0x03, 0xbf, 0x94, 0x7d, 0xde, 0x3d, 0xc8,
834             0x44, 0xfa, 0x7d, 0x62, 0xb4, 0x36, 0x03, 0xee,
835             0x36, 0x52, 0x64, 0xb4, 0x85, 0x6d, 0xd5, 0x78,
836             0xf0, 0x6f, 0x67, 0x2d, 0x0e, 0xe0, 0x2c, 0x88,
837             0x9b, 0x55, 0x19, 0x29, 0x40, 0xf6, 0x8c, 0x12,
838             0xbb, 0x2c, 0x83, 0x96, 0x40, 0xc0, 0x36, 0xf5,
839             0x77, 0xff, 0x70, 0x8c, 0x75, 0x92, 0x0b, 0xad,
840             0x05, 0x9b, 0x7e, 0xa2, 0xfc, 0xa9, 0xd1, 0x64,
841             0x76, 0x82, 0x13, 0xba, 0x22, 0x5e, 0x33, 0x0e,
842             0x26, 0x70, 0xa9, 0xbe, 0x74, 0x28, 0xf5, 0xe2,
843             0xc4, 0x96, 0xee, 0x3a, 0xbc, 0x97, 0xa6, 0x2c,
844             0x2a, 0xe0, 0x64, 0x8d, 0x35, 0xc6, 0x1a, 0xca,
845             0xf4, 0x92, 0xfa, 0xc3, 0xf1, 0x1f, 0x98, 0xe4,
846             0x43, 0x88, 0x69, 0x3a, 0x09, 0xbf, 0x63, 0xe5,
847             0x96, 0x29, 0x0b, 0x9b, 0x62, 0x23, 0x14, 0x8a,
848             0x95, 0xe4, 0x1c, 0x5c, 0x0a, 0xa9, 0xc5, 0xb9,
849             0x6f, 0x4f, 0x2b, 0x25, 0x6f, 0x74, 0x1e, 0x18,
850             0xd5, 0xfe, 0x27, 0x7d, 0x3f, 0x6e, 0x55, 0x2c,
851             0x67, 0xe6, 0xde, 0xb5, 0xcc, 0xc0, 0x2d, 0xff,
852             0xc4, 0xe4, 0x06, 0x21, 0xa5, 0xc8, 0xd3, 0xd6,
853             0x6c, 0xa1, 0xc3, 0xfb, 0x88, 0x92, 0xb1, 0x1d,
854             0x90, 0xe1, 0x35, 0x05, 0x9b, 0x29, 0x6d, 0xba,
855             0xf1, 0xf4, 0x1e, 0x23, 0x2e
856         }
857     },
858     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
859         5242880+8,
860         { 0 },
861         "id-Gost28147-89-CryptoPro-A-ParamSet",
862         "test5Mcnt",
863         {
864             0x07, 0x52, 0x65, 0xe7, 0xca, 0xa3, 0xca, 0x45,
865             0xcf, 0x3a, 0x05, 0x1d, 0x38, 0x03, 0x53, 0x0c,
866             0x22, 0x31, 0xba, 0x99, 0x4f, 0x9b, 0x6a, 0x1b,
867             0x7e, 0x09, 0x9d, 0x4e, 0xb5, 0xc9, 0x84, 0x2e
868         },
869         G89_CNT,
870         {
871             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
872         },
873         {
874             0x3d, 0x05, 0x07, 0x57, 0xc0, 0x75, 0x89, 0x97,
875             0xd6, 0x94, 0x49, 0x11, 0x1d, 0xd0, 0x91, 0xee
876         }
877     },
878     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
879         4294967296ULL+16,
880         { 0 },
881         "id-Gost28147-89-CryptoPro-A-ParamSet",
882         "test4Gcnt",
883         {
884             0x75, 0xa3, 0x3c, 0xae, 0x03, 0x6b, 0x10, 0xdb,
885             0xc1, 0x56, 0x50, 0x89, 0x03, 0xd2, 0x9f, 0x91,
886             0xee, 0xe8, 0x64, 0x1d, 0x43, 0xf2, 0x4e, 0xf8,
887             0xf2, 0x6c, 0xed, 0xda, 0x8f, 0xe4, 0x88, 0xe9
888         },
889         G89_CNT,
890         {
891             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
892         },
893         {
894             0xfa, 0x6c, 0x96, 0x78, 0xe2, 0xf8, 0xdd, 0xaa,
895             0x67, 0x5a, 0xc9, 0x5d, 0x57, 0xf1, 0xbd, 0x99
896         }
897     },
898     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
899         1035,
900         {
901             0xd6, 0xcf, 0x31, 0x96, 0x9c, 0xa1, 0xfb, 0xd6,
902             0x8d, 0xa3, 0xdd, 0x01, 0xd9, 0x88, 0xc0, 0x2f,
903             0xbc, 0x46, 0xc7, 0x3a, 0xe4, 0x21, 0x86, 0x96,
904             0x8d, 0xe2, 0xca, 0xb6, 0x37, 0xa2, 0xe1, 0xa8,
905             0x7e, 0xa7, 0x79, 0x2e, 0xa4, 0x56, 0x75, 0x7f,
906             0x3e, 0x55, 0x8b, 0x43, 0xae, 0x65, 0xdf, 0xaa,
907             0x42, 0xb6, 0x00, 0xa6, 0x61, 0x03, 0x0d, 0xd3,
908             0x41, 0x02, 0x27, 0x23, 0x95, 0x79, 0x9b, 0x34,
909             0x81, 0xa9, 0x86, 0xb5, 0xa7, 0x90, 0xe2, 0xae,
910             0xc4, 0x2f, 0xc3, 0x8e, 0x32, 0x56, 0x13, 0xfa,
911             0x4d, 0x4e, 0x9f, 0x15, 0x75, 0x7e, 0x74, 0xdc,
912             0x32, 0x2d, 0xee, 0x4d, 0x67, 0x70, 0x9f, 0x62,
913             0xb9, 0xc4, 0xdb, 0x24, 0x84, 0xcc, 0x16, 0x7b,
914             0xda, 0x22, 0xf7, 0xc5, 0xf3, 0x93, 0x35, 0x73,
915             0xc6, 0x03, 0x1c, 0x77, 0xa5, 0xf2, 0x76, 0x56,
916             0xb4, 0x95, 0xd4, 0x7e, 0x0d, 0x20, 0xc6, 0x6e,
917             0xee, 0x8f, 0x25, 0x48, 0xff, 0x7e, 0x01, 0x3a,
918             0xb4, 0x1f, 0xaa, 0x35, 0xc0, 0x33, 0x58, 0x9c,
919             0xb5, 0xba, 0x65, 0x4b, 0xd3, 0x51, 0x14, 0xec,
920             0x61, 0xce, 0xe4, 0xba, 0x49, 0xba, 0x39, 0x32,
921             0xab, 0xce, 0x81, 0x72, 0xce, 0xab, 0xed, 0xd4,
922             0xd2, 0x19, 0x87, 0x85, 0x92, 0xfa, 0x64, 0x34,
923             0xd8, 0x86, 0xf4, 0x8a, 0x08, 0x3c, 0xde, 0xee,
924             0x97, 0x92, 0x92, 0x69, 0xba, 0x9b, 0x5f, 0x7a,
925             0x03, 0xc1, 0x5d, 0x43, 0x02, 0x8c, 0xbe, 0xd2,
926             0x46, 0x72, 0x81, 0x40, 0x7d, 0x68, 0x98, 0x45,
927             0x0b, 0x54, 0x27, 0x1c, 0xaf, 0x80, 0x42, 0xe4,
928             0xd5, 0xd4, 0xe4, 0xa2, 0x98, 0x07, 0x8f, 0x03,
929             0xf5, 0x2c, 0x8c, 0x88, 0xca, 0x5a, 0xde, 0xe4,
930             0x9f, 0xb1, 0x5f, 0x82, 0xff, 0x20, 0x67, 0x52,
931             0x85, 0x84, 0x4f, 0xc8, 0xfe, 0xa7, 0x9e, 0xae,
932             0x1c, 0xfa, 0xb8, 0x75, 0xd3, 0xf7, 0x9f, 0x0d,
933             0xda, 0x2d, 0xe6, 0xcc, 0x86, 0x6b, 0xa4, 0x14,
934             0x65, 0xc3, 0xf9, 0x15, 0xbc, 0x87, 0xf5, 0xae,
935             0x8c, 0x10, 0xd4, 0xce, 0x5b, 0x9c, 0xe2, 0xdd,
936             0x42, 0x03, 0x09, 0x87, 0x47, 0xed, 0x5d, 0xd0,
937             0x7a, 0x69, 0x4c, 0xfa, 0x43, 0x7d, 0xbf, 0x07,
938             0x85, 0x6a, 0xee, 0x68, 0xe6, 0x7a, 0x57, 0xb2,
939             0x20, 0x8d, 0x80, 0xf2, 0x91, 0x6f, 0x5c, 0x07,
940             0x8c, 0xe4, 0x6a, 0x49, 0x90, 0x85, 0x8b, 0x77,
941             0x29, 0x56, 0x1c, 0x5e, 0xa9, 0x3f, 0xab, 0x8b,
942             0x79, 0xa3, 0x6f, 0x6b, 0x34, 0xcb, 0x61, 0xf6,
943             0xe6, 0x92, 0xd1, 0x48, 0x9e, 0x11, 0xa2, 0x82,
944             0xc0, 0x4e, 0x23, 0xd2, 0x15, 0x0d, 0x8d, 0xff,
945             0xfa, 0x17, 0x9d, 0x81, 0xb8, 0xbc, 0xd7, 0x5b,
946             0x08, 0x81, 0x20, 0x40, 0xc0, 0x3c, 0x06, 0x8b,
947             0x1a, 0x88, 0x0b, 0x4b, 0x7b, 0x31, 0xf5, 0xd4,
948             0x4e, 0x09, 0xd1, 0x4d, 0x0d, 0x7f, 0x45, 0xd1,
949             0x09, 0x35, 0xba, 0xce, 0x65, 0xdd, 0xf2, 0xb8,
950             0xfb, 0x7a, 0xbc, 0xc4, 0x4b, 0xc8, 0x75, 0xda,
951             0x6b, 0xce, 0x3d, 0xe8, 0x94, 0xcc, 0x23, 0x6f,
952             0xb0, 0x3b, 0x4f, 0x7d, 0x07, 0xb9, 0x0f, 0x62,
953             0x92, 0x7e, 0xda, 0x70, 0x50, 0xce, 0xd3, 0x28,
954             0x12, 0x11, 0x00, 0xeb, 0x8d, 0x63, 0x70, 0x78,
955             0xa8, 0x7b, 0x76, 0xab, 0xc6, 0x40, 0xc0, 0x4e,
956             0x80, 0xdd, 0xf0, 0xfe, 0x83, 0x72, 0x56, 0x4c,
957             0x09, 0x4c, 0xf1, 0x72, 0x72, 0x86, 0x26, 0x31,
958             0xc3, 0xc2, 0xdc, 0x8e, 0xc7, 0xf4, 0x35, 0xec,
959             0x17, 0x06, 0x63, 0x47, 0x49, 0x88, 0x47, 0xaf,
960             0xb3, 0x38, 0x4f, 0x7e, 0x44, 0x95, 0xb5, 0xbb,
961             0x1d, 0xbd, 0x5a, 0x91, 0x5b, 0xd0, 0x1a, 0xdf,
962             0x0d, 0x0b, 0x50, 0xd8, 0xe2, 0x0e, 0xc5, 0x00,
963             0x2d, 0x5b, 0x29, 0x19, 0xaa, 0x2b, 0x64, 0xc5,
964             0x40, 0x31, 0x48, 0x11, 0xbc, 0x04, 0xd1, 0xcf,
965             0x6d, 0xf9, 0xa5, 0x2f, 0x4a, 0xc9, 0x82, 0xfa,
966             0x59, 0xe1, 0xfc, 0xab, 0x1c, 0x33, 0x26, 0x0a,
967             0x5f, 0xef, 0xf2, 0x06, 0xd8, 0xd3, 0x7e, 0x16,
968             0x58, 0x16, 0x78, 0x73, 0xae, 0xba, 0xeb, 0xe5,
969             0x3d, 0xb2, 0x0a, 0xb3, 0x32, 0x2d, 0x14, 0xa4,
970             0xfa, 0x3f, 0x1f, 0x43, 0xf9, 0x7b, 0xa9, 0x43,
971             0x98, 0x18, 0x94, 0x07, 0x07, 0xe5, 0x19, 0x34,
972             0xa8, 0x16, 0x5f, 0x71, 0x67, 0xaa, 0x29, 0xe5,
973             0xfa, 0xf0, 0x83, 0x06, 0x1d, 0x9d, 0xfc, 0xfe,
974             0xfe, 0x8c, 0xb5, 0xb2, 0xa9, 0xe7, 0xa0, 0x40,
975             0x60, 0xb6, 0x71, 0x9e, 0xab, 0x5b, 0x83, 0xb9,
976             0x0c, 0x2b, 0x58, 0x23, 0x80, 0x09, 0x9e, 0x5d,
977             0x94, 0x7d, 0x40, 0x76, 0xa9, 0x16, 0x96, 0x9e,
978             0x83, 0xe0, 0x0d, 0xec, 0xa0, 0xec, 0x76, 0x2a,
979             0xb7, 0xa0, 0xff, 0xb8, 0x50, 0x4c, 0x5b, 0xc6,
980             0x8b, 0x0a, 0x65, 0x2e, 0xfe, 0xb4, 0x40, 0x9a,
981             0x01, 0xd8, 0xc6, 0xa3, 0xab, 0x99, 0xa2, 0xc5,
982             0x0c, 0x08, 0xc4, 0xb7, 0xee, 0x4d, 0x1d, 0xc4,
983             0x08, 0x15, 0xd0, 0xdb, 0xaa, 0x63, 0x4f, 0x31,
984             0xeb, 0x14, 0x97, 0x43, 0xbd, 0xc1, 0x94, 0x08,
985             0xe6, 0xde, 0x43, 0x9f, 0x95, 0x0b, 0x96, 0x7e,
986             0x7f, 0x3c, 0x68, 0xba, 0x6f, 0xc4, 0xc9, 0x35,
987             0x2b, 0xc4, 0x0e, 0xda, 0x1f, 0x91, 0x68, 0x64,
988             0x63, 0x34, 0x73, 0xbe, 0x57, 0x75, 0xb9, 0xed,
989             0xf7, 0x2d, 0x3b, 0x05, 0x21, 0x93, 0x28, 0x48,
990             0x96, 0x95, 0x97, 0xa0, 0xd2, 0x7d, 0x78, 0xbb,
991             0x6a, 0x49, 0x8f, 0x76, 0x55, 0x74, 0x63, 0xb9,
992             0xc5, 0x36, 0x12, 0x25, 0xbf, 0x03, 0x82, 0x8f,
993             0xf0, 0xf6, 0x80, 0xbb, 0x33, 0xb4, 0xf4, 0x17,
994             0x27, 0x1c, 0xf3, 0x4c, 0x10, 0xa3, 0xe4, 0xd1,
995             0x55, 0xd9, 0x68, 0x21, 0x4e, 0x5a, 0x83, 0x67,
996             0xbf, 0xf8, 0x3c, 0x7d, 0x4e, 0x62, 0xd3, 0x28,
997             0xa7, 0x26, 0x6f, 0xe9, 0xee, 0xc2, 0x0b, 0x2d,
998             0x03, 0x84, 0xb1, 0xff, 0xd6, 0x68, 0x1f, 0xb6,
999             0xf2, 0xe4, 0x0f, 0xda, 0x2d, 0xee, 0x5f, 0x6e,
1000             0x21, 0xc8, 0xe1, 0xfc, 0xad, 0x6b, 0x0e, 0x04,
1001             0x7d, 0xaf, 0xc2, 0x3b, 0xa5, 0x68, 0x9b, 0x0c,
1002             0xf3, 0x56, 0xf3, 0xda, 0x8d, 0xc8, 0x7d, 0x39,
1003             0xdc, 0xd5, 0x99, 0xc6, 0x01, 0x10, 0xce, 0x42,
1004             0x1b, 0xac, 0x48, 0xdc, 0x97, 0x78, 0x0a, 0xec,
1005             0xb3, 0x8f, 0x47, 0x35, 0xa3, 0x6a, 0x64, 0xb2,
1006             0x8e, 0x63, 0x69, 0x22, 0x66, 0xae, 0x2e, 0xe0,
1007             0x88, 0xf9, 0x40, 0x3c, 0xc9, 0xa2, 0x57, 0x61,
1008             0xf6, 0xad, 0xf0, 0xdc, 0x90, 0x56, 0x3f, 0x06,
1009             0x9b, 0x7d, 0xbd, 0xc2, 0x81, 0x02, 0xab, 0xb8,
1010             0x15, 0x09, 0x88, 0x4a, 0xff, 0x2f, 0x31, 0xbf,
1011             0x5e, 0xfa, 0x6a, 0x7e, 0xf6, 0xc5, 0xa7, 0xf7,
1012             0xd5, 0xab, 0x55, 0xac, 0xae, 0x0d, 0x8c, 0x8d,
1013             0x7f, 0x4b, 0x25, 0xbb, 0x32, 0xff, 0x11, 0x33,
1014             0x2e, 0x37, 0x37, 0x69, 0x96, 0x15, 0x17, 0xb1,
1015             0x17, 0x49, 0xe0, 0x9a, 0x9c, 0xd9, 0x5b, 0x8d,
1016             0x58, 0xa3, 0x1d, 0x92, 0x87, 0xf8, 0x80, 0xb9,
1017             0xbd, 0x5a, 0xec, 0x40, 0xe1, 0x00, 0x33, 0x60,
1018             0xe4, 0x86, 0x16, 0x6d, 0x61, 0x81, 0xf2, 0x28,
1019             0x6a, 0xa7, 0xce, 0x3f, 0x95, 0xae, 0x43, 0xca,
1020             0xe1, 0x3f, 0x81, 0x74, 0x7e, 0x1c, 0x47, 0x17,
1021             0x95, 0xc6, 0x60, 0xda, 0x74, 0x77, 0xd9, 0x9f,
1022             0xfa, 0x92, 0xb4, 0xbe, 0xe1, 0x23, 0x98, 0x18,
1023             0x95, 0x63, 0x03, 0x13, 0x4c, 0x1a, 0x2d, 0x41,
1024             0xcd, 0xe4, 0x84, 0xf7, 0xe6, 0x38, 0xef, 0xff,
1025             0x95, 0xb2, 0xe8, 0x7c, 0x8f, 0x58, 0xb5, 0xb5,
1026             0xed, 0x27, 0x7f, 0x3c, 0x18, 0xab, 0xbe, 0x7f,
1027             0x4f, 0xe2, 0x35, 0x15, 0x71, 0xb7, 0x6f, 0x85,
1028             0x38, 0x9b, 0x88, 0xf6, 0x9c, 0x8d, 0x43, 0xb5,
1029             0x58, 0x9e, 0xf2, 0xd1, 0x96, 0xbe, 0xb7, 0xad,
1030             0x1a, 0xa0, 0x98
1031         },
1032         "id-Gost28147-89-CryptoPro-A-ParamSet",
1033         "testimit2",
1034         {
1035             0x80, 0xd9, 0xa0, 0xdc, 0x21, 0xf9, 0x30, 0x40,
1036             0x75, 0xfe, 0x49, 0x1b, 0x9e, 0x71, 0x90, 0x91,
1037             0x78, 0x88, 0x21, 0x60, 0x39, 0xe7, 0xc9, 0x2b,
1038             0xfb, 0x55, 0x1d, 0xf4, 0xdd, 0x2b, 0x0a, 0x01
1039         },
1040         G89_IMIT,
1041         { 0 },
1042         {
1043             0x90, 0xf2, 0x11, 0x9a
1044         }
1045     },
1046     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1047         10,
1048         {
1049             0x1d, 0xeb, 0xe6, 0x79, 0x0a, 0x59, 0x00, 0xe6,
1050             0x8e, 0x5c
1051         },
1052         "id-Gost28147-89-CryptoPro-A-ParamSet",
1053         "testimit3",
1054         {
1055             0xa9, 0xb6, 0x37, 0xcc, 0x6d, 0x9b, 0x2f, 0x25,
1056             0xb0, 0xdf, 0x47, 0x04, 0x50, 0x68, 0xb0, 0x27,
1057             0x41, 0x27, 0x58, 0x6a, 0xbd, 0x0a, 0x6e, 0x50,
1058             0x2f, 0xc6, 0xfc, 0xc0, 0x3e, 0x29, 0x42, 0xa5
1059         },
1060         G89_IMIT,
1061         { 0 },
1062         {
1063             0x31, 0x7c, 0x16, 0xe4
1064         }
1065     },
1066     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1067         6,
1068         {
1069             0xef, 0x06, 0x8f, 0x14, 0xc9, 0x04
1070         },
1071         "id-Gost28147-89-CryptoPro-A-ParamSet",
1072         "testimit4",
1073         {
1074             0xb0, 0x6c, 0x48, 0x23, 0x0a, 0x6e, 0xf4, 0xec,
1075             0x27, 0x98, 0x01, 0x23, 0xa7, 0xd8, 0xbf, 0x60,
1076             0x89, 0xef, 0xad, 0xe8, 0x8f, 0x79, 0x14, 0x8c,
1077             0x18, 0x5c, 0x9a, 0xda, 0xef, 0x0b, 0xdd, 0xa0
1078         },
1079         G89_IMIT,
1080         { 0 },
1081         {
1082             0xe9, 0x72, 0xae, 0xbf
1083         }
1084     },
1085     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1086         16,
1087         {
1088             0x02, 0xf8, 0xec, 0x2b, 0x4d, 0x1f, 0xbc, 0x7c,
1089             0x6e, 0x47, 0xe3, 0x87, 0x22, 0x75, 0x41, 0xa7
1090         },
1091         "id-Gost28147-89-CryptoPro-B-ParamSet",
1092         "testimit5",
1093         {
1094             0x33, 0xd3, 0xef, 0x01, 0x19, 0x95, 0x0e, 0x15,
1095             0xa1, 0x69, 0x75, 0xae, 0x56, 0x27, 0x17, 0x79,
1096             0x63, 0x47, 0xab, 0x62, 0x9d, 0x4a, 0xf0, 0x34,
1097             0xd3, 0x1e, 0x69, 0x74, 0xec, 0x31, 0x48, 0xfc
1098         },
1099         G89_IMIT,
1100         { 0 },
1101         {
1102             0xf5, 0x55, 0x1f, 0x28
1103         }
1104     },
1105     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1106         8,
1107         {
1108             0xf3, 0xb2, 0x29, 0xd2, 0x7a, 0x37, 0x03, 0x12
1109         },
1110         "id-Gost28147-89-CryptoPro-A-ParamSet",
1111         "testimit6",
1112         {
1113             0x42, 0x35, 0x81, 0x91, 0x0b, 0xa9, 0x99, 0xff,
1114             0xd9, 0x43, 0xf8, 0xc6, 0x19, 0x55, 0x1f, 0x2f,
1115             0x2d, 0x45, 0x40, 0x20, 0x1e, 0x1d, 0x32, 0x7a,
1116             0xb1, 0x07, 0x6b, 0x4f, 0x45, 0x90, 0xd9, 0x80
1117         },
1118         G89_IMIT,
1119         { 0 },
1120         {
1121             0x6e, 0x15, 0xfa, 0xe8
1122         }
1123     },
1124     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1125         0,
1126         {
1127             0
1128         },
1129         "id-Gost28147-89-CryptoPro-A-ParamSet",
1130         "testimit7",
1131         {
1132             0x26, 0xcb, 0xb9, 0xf0, 0x0c, 0x62, 0x9f, 0xaa,
1133             0x4a, 0x1d, 0xb6, 0x30, 0x09, 0x01, 0x56, 0x89,
1134             0x66, 0xd4, 0xe4, 0x0e, 0xfe, 0xf6, 0x10, 0x6b,
1135             0x6c, 0xe8, 0x04, 0x3a, 0xe3, 0x61, 0x4b, 0x19
1136         },
1137         G89_IMIT,
1138         { 0 },
1139         {
1140             0x00, 0x00, 0x00, 0x00
1141         }
1142     },
1143     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1144         5242880,
1145         { 0 },
1146         "id-Gost28147-89-CryptoPro-A-ParamSet",
1147         "test5Mimit",
1148         {
1149             0xaa, 0x85, 0x84, 0xcd, 0x65, 0x28, 0xe1, 0xdb,
1150             0xb8, 0x20, 0x19, 0x43, 0xe0, 0x36, 0x35, 0x10,
1151             0x19, 0xc3, 0x70, 0x5b, 0x27, 0xc1, 0x9d, 0x84,
1152             0x75, 0xa3, 0xc6, 0x49, 0x46, 0x8f, 0x7c, 0x4e
1153         },
1154         G89_IMIT,
1155         { 0 },
1156         {
1157             0x2a, 0xe6, 0x23, 0xc6
1158         }
1159     },
1160     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1161         3221225472ULL + 16,
1162         { 0 },
1163         "id-Gost28147-89-CryptoPro-A-ParamSet",
1164         "test3Gimit1",
1165         {
1166             0xd5, 0xda, 0xfe, 0x06, 0x60, 0xdc, 0xf0, 0xb3,
1167             0x49, 0x5a, 0x02, 0x59, 0xc8, 0x2e, 0x4a, 0x2b,
1168             0xcc, 0x9b, 0x98, 0x04, 0xb7, 0xf2, 0x78, 0xb7,
1169             0xce, 0xa3, 0xf2, 0xdb, 0x9e, 0xa8, 0x49, 0x1d
1170         },
1171         G89_IMIT,
1172         { 0 },
1173         {
1174             0xcc, 0x46, 0x67, 0xe4
1175         }
1176     },
1177     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1178         4ULL*1024*1024*1024ULL,
1179         { 0 },
1180         "id-Gost28147-89-CryptoPro-A-ParamSet",
1181         "test4Gimit3",
1182         {
1183             0x0d, 0xf1, 0xa8, 0x7f, 0x57, 0x03, 0x44, 0xcc,
1184             0xdb, 0x20, 0xde, 0xed, 0x85, 0x50, 0x38, 0xda,
1185             0xc9, 0x44, 0xec, 0x2c, 0x0d, 0x66, 0xb7, 0xdc,
1186             0x17, 0x14, 0x55, 0x95, 0x33, 0x6e, 0x43, 0x3e
1187         },
1188         G89_IMIT,
1189         { 0 },
1190         {
1191             0xb7, 0x21, 0x2e, 0x48
1192         }
1193     },
1194     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1195         4ULL*1024*1024*1024+4ULL,
1196         { 0 },
1197         "id-Gost28147-89-CryptoPro-A-ParamSet",
1198         "test4Gimit1",
1199         {
1200             0x0c, 0xf3, 0xe9, 0xb0, 0x28, 0x3b, 0x9f, 0x8b,
1201             0xe3, 0x82, 0xb9, 0xa2, 0xa6, 0xbd, 0x80, 0xd2,
1202             0xcd, 0xfa, 0x3f, 0xf7, 0x90, 0xa7, 0x55, 0x06,
1203             0x9b, 0x7a, 0x58, 0xee, 0xe7, 0xf1, 0x9d, 0xbe
1204         },
1205         G89_IMIT,
1206         { 0 },
1207         {
1208             0xda, 0x15, 0x10, 0x73
1209         }
1210     },
1211     { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */
1212         4ULL*1024*1024*1024+10ULL,
1213         { 0 },
1214         "id-Gost28147-89-CryptoPro-A-ParamSet",
1215         "test4Gimit2",
1216         {
1217             0x97, 0x1a, 0x42, 0x22, 0xfa, 0x07, 0xb2, 0xca,
1218             0xf9, 0xd2, 0x34, 0x5a, 0x92, 0xb1, 0x1f, 0x6b,
1219             0x53, 0xf8, 0xaf, 0xed, 0x9a, 0x73, 0xc4, 0x38,
1220             0xd7, 0x7d, 0x25, 0x81, 0x00, 0x0d, 0xd4, 0x29
1221         },
1222         G89_IMIT,
1223         { 0 },
1224         {
1225             0x52, 0xaa, 0x22, 0xb4
1226         }
1227     }
1228 };
1229
1230 int main(int argc, char *argv[])
1231 {
1232     int t;
1233     unsigned long long ullMaxLen = 6*1000*1000;
1234     int ignore = 0;
1235     ENGINE *impl = NULL;
1236     EVP_MD_CTX *mctx = NULL;
1237     EVP_CIPHER_CTX *ectx = NULL;
1238     EVP_PKEY *mac_key;
1239     byte bDerive[EVP_MAX_KEY_LENGTH];
1240     byte bTest[G89_MAX_TC_LEN];
1241     byte bTest1[G89_MAX_TC_LEN];
1242     unsigned long long ullLeft;
1243     static const byte bZB[40*1024*1024] = { 0 };
1244     static byte bTS[40*1024*1024] = { 0 };
1245     unsigned int mdl = 0;
1246     int enlu = 0;
1247     int enlf = 0;
1248     size_t siglen;
1249     size_t l = 0;
1250
1251     const EVP_MD *md_gost94 = NULL;
1252     const EVP_CIPHER *cp_g89cfb = NULL;
1253     const EVP_CIPHER *cp_g89cnt = NULL;
1254     const EVP_CIPHER *ctype = NULL;
1255     const EVP_MD *md_g89imit = NULL;
1256
1257     long lErrLine;
1258     CONF *pConfig = NCONF_new(NULL);
1259     BIO *bpConf;
1260     char sConf[] =
1261             "openssl_conf = openssl_def\n"
1262             "\n"
1263             "[openssl_def]\n"
1264             "engines = engine_section\n"
1265             "\n"
1266             "[engine_section]\n"
1267             "gost = gost_section\n"
1268             "\n"
1269             "[gost_section]\n"
1270             "default_algorithms = ALL\n"
1271             "\n"
1272             ;
1273
1274     printf("Testing GOST 28147-89 ");
1275
1276     if(1 < argc) {
1277        if(1 != sscanf(argv[1], "%llu", &ullMaxLen) ||
1278           ( 2 < argc ?
1279             1 != sscanf(argv[2], "%d", &ignore) : 0)) {
1280            fflush(NULL);
1281            fprintf(stderr, "Usage: %s [maxlen [ignore-error]]\n",
1282                                argv[0]);
1283            return 1;
1284        }
1285     }
1286
1287     /*
1288      * Internal function test on GostR3411_94_TestParamSet
1289      */
1290     #ifdef OPENSSL_NO_DYNAMIC_ENGINE
1291     {
1292         gost_ctx ctx;
1293
1294         for(t = 0; t < sizeof(tcs)/sizeof(tcs[0]); t++) {
1295             const gost_subst_block *pSubst = NULL;
1296
1297             if(1024 < tcs[t].ullLen) {
1298                 /* Key meshing check by engine tests */
1299                 continue;
1300             }
1301             memset(bTest, 0xc3, sizeof(bTest));
1302             if(0 == strcmp(tcs[t].szParamSet,
1303                         "id-GostR3410-94-TestParamSet")) {
1304                 pSubst = &GostR3411_94_TestParamSet;
1305             } else if(0 == strcmp(tcs[t].szParamSet,
1306                         "id-Gost28147-89-CryptoPro-A-ParamSet")) {
1307                 pSubst = &Gost28147_CryptoProParamSetA;
1308             } else if(0 == strcmp(tcs[t].szParamSet,
1309                         "id-Gost28147-89-CryptoPro-B-ParamSet")) {
1310                 pSubst = &Gost28147_CryptoProParamSetB;
1311             } else if(0 == strcmp(tcs[t].szParamSet,
1312                         "id-Gost28147-89-CryptoPro-C-ParamSet")) {
1313                 pSubst = &Gost28147_CryptoProParamSetC;
1314             } else if(0 == strcmp(tcs[t].szParamSet,
1315                         "id-Gost28147-89-CryptoPro-D-ParamSet")) {
1316                 pSubst = &Gost28147_CryptoProParamSetD;
1317             }
1318             gost_init(&ctx, pSubst);
1319             gost_key(&ctx, tcs[t].bRawKey);
1320             switch(tcs[t].gMode) {
1321             case G89_ECB:
1322                 gost_enc(&ctx, tcs[t].bIn, bTest,
1323                             (int)((tcs[t].ullLen + G89_BLOCK_LEN - 1)/
1324                                   G89_BLOCK_LEN));
1325                 l = (size_t)tcs[t].ullLen;
1326                 break;
1327             case G89_CFB:
1328                 gost_enc_cfb(&ctx, tcs[t].bIV, tcs[t].bIn,
1329                             bTest,
1330                             (int)((tcs[t].ullLen + G89_BLOCK_LEN - 1)/
1331                                   G89_BLOCK_LEN));
1332                 l = (size_t)tcs[t].ullLen;
1333                 break;
1334             case G89_CNT:
1335                 /* GOST 28147-89 cipher CNT mode check by engine
1336                  * tests
1337                  */
1338                 continue;
1339             case G89_IMIT:
1340                 gost_mac(&ctx, 32, tcs[t].bIn,
1341                                     (unsigned int)tcs[t].ullLen,
1342                                     bTest);
1343                 gost_mac_iv(&ctx, 32, tcs[t].bIV, tcs[t].bIn,
1344                                     (unsigned int)tcs[t].ullLen,
1345                                     bTest1);
1346                 if(0 != memcmp(bTest, bTest1, 4)) {
1347                     fflush(NULL);
1348                     fprintf(stderr, "\nInternal test t=%d len=%llu "
1349                                     "failed (gost_mac_iv).\n", t,
1350                                     tcs[t].ullLen);
1351                     if(!ignore) {
1352                         return 2;
1353                     }
1354                 }
1355                 l = 4;
1356                 break;
1357             }
1358             gost_destroy(&ctx);
1359
1360             if(0 != memcmp(tcs[t].bOut, bTest, l)) {
1361                 fflush(NULL);
1362                 fprintf(stderr, "\nInternal test t=%d len=%llu "
1363                                 "failed.\n", t,
1364                                 tcs[t].ullLen);
1365                 if(!ignore) {
1366                     return 3;
1367                 }
1368             } else {
1369                 printf(",");
1370                 fflush(NULL);
1371             }
1372         }
1373     }
1374     #endif
1375
1376     /*
1377      * ccgost engine test on GostR3411_94_CryptoProParamSet
1378      */
1379     #ifndef OPENSSL_NO_DYNAMIC_ENGINE
1380         setenv("OPENSSL_ENGINES", CCGOST_DIR, 1);
1381     #endif
1382     ERR_load_crypto_strings();
1383     ENGINE_load_builtin_engines();
1384     OPENSSL_load_builtin_modules();
1385
1386     bpConf = BIO_new_mem_buf(sConf, -1);
1387     if(!NCONF_load_bio(pConfig, bpConf, &lErrLine)) {
1388         fflush(NULL);
1389         fprintf(stderr, "NCONF_load_bio: ErrLine=%ld: %s\n",
1390                 lErrLine,
1391                 ERR_error_string(ERR_get_error(), NULL));
1392         return 4;
1393     }
1394     BIO_free(bpConf);
1395
1396     if(!CONF_modules_load(pConfig, NULL, 0)) {
1397         fflush(NULL);
1398         fprintf(stderr, "CONF_modules_load: %s\n",
1399                 ERR_error_string(ERR_get_error(), NULL));
1400         return 5;
1401     }
1402
1403         /* Test load engine */
1404     if(NULL == (impl = ENGINE_by_id(CCGOST_ID))) {
1405         fflush(NULL);
1406         fprintf(stderr, "Can't load engine id \"" CCGOST_ID "\"\n");
1407         if(!ignore) {
1408             return 6;
1409         }
1410     }
1411     if(NULL == (md_gost94 = EVP_get_digestbyname(SN_id_GostR3411_94))) {
1412         fflush(NULL);
1413         fprintf(stderr, "\"" SN_id_GostR3411_94 "\" - not found\n");
1414         if(!ignore) {
1415             return 7;
1416         }
1417     }
1418     if(NULL == (cp_g89cfb = EVP_get_cipherbyname(SN_id_Gost28147_89))) {
1419         fflush(NULL);
1420         fprintf(stderr, "\"" SN_id_Gost28147_89 "\" - not found\n");
1421         if(!ignore) {
1422             return 8;
1423         }
1424     }
1425     if(NULL == (cp_g89cnt = EVP_get_cipherbyname(SN_gost89_cnt))) {
1426         fflush(NULL);
1427         fprintf(stderr, "\"" SN_gost89_cnt "\" - not found\n");
1428         if(!ignore) {
1429             return 9;
1430         }
1431     }
1432     if(NULL == (md_g89imit = EVP_get_digestbyname(SN_id_Gost28147_89_MAC))) {
1433         fflush(NULL);
1434         fprintf(stderr, "\"" SN_id_Gost28147_89_MAC "\" - not found\n");
1435         if(!ignore) {
1436             return 10;
1437         }
1438     }
1439
1440         /* Test cases */
1441     for(t = 0; t < sizeof(tcs)/sizeof(tcs[0]); t++) {
1442         if(NULL == tcs[t].szDerive) {
1443             continue;
1444         }
1445         memset(bDerive, 0x3c, sizeof(bDerive));
1446         mdl = sizeof(bDerive);
1447         EVP_Digest(tcs[t].szDerive, strlen(tcs[t].szDerive),
1448                         bDerive, &mdl,
1449                         md_gost94, impl);
1450         if(0 != memcmp(tcs[t].bRawKey, bDerive, mdl)) {
1451             fflush(NULL);
1452             fprintf(stderr, "Engine test t=%d "
1453                         "derive key error.\n", t);
1454             if(!ignore) {
1455                 return 12;
1456             }
1457         }
1458         if(ullMaxLen < tcs[t].ullLen) {
1459             continue;
1460         }
1461         memset(bTest, 0xa5, sizeof(bTest));
1462         memset(bTest1, 0x5a, sizeof(bTest1));
1463         if(!ENGINE_ctrl_cmd_string(impl,
1464                     "CRYPT_PARAMS",
1465                     tcs[t].szParamSet, 0)) {
1466             fflush(NULL);
1467             fprintf(stderr, "ENGINE_ctrl_cmd_string: %s\n",
1468                     ERR_error_string(ERR_get_error(), NULL));
1469             return 11;
1470         }
1471         switch(tcs[t].gMode) {
1472         case G89_ECB:
1473             /* OpenSSL/ccgost not implemented GOST 28147-89 ECB */
1474             continue;
1475         case G89_CFB:
1476             ctype = cp_g89cfb;
1477             goto engine_cipher_check;
1478         case G89_CNT:
1479             if(0 != strcmp("id-Gost28147-89-CryptoPro-A-ParamSet",
1480                                             tcs[t].szParamSet)) {
1481                 /*
1482                  * ccgost engine can't change S-Box for gost-cnt
1483                  */
1484                 continue;
1485             }
1486             ctype = cp_g89cnt;
1487 engine_cipher_check:
1488             EVP_CIPHER_CTX_init(ectx);
1489             EVP_EncryptInit_ex(ectx, ctype, impl,
1490                                     bDerive, tcs[t].bIV);
1491             if(G89_MAX_TC_LEN >= tcs[t].ullLen) {
1492                 enlu = sizeof(bTest);
1493                 EVP_EncryptUpdate(ectx, bTest, &enlu,
1494                                     tcs[t].bIn, (int)tcs[t].ullLen);
1495                 l = (size_t)tcs[t].ullLen;
1496             } else {
1497                 for(ullLeft = tcs[t].ullLen;
1498                             ullLeft >= sizeof(bZB);
1499                                     ullLeft -= sizeof(bZB)) {
1500                     printf("B");
1501                     fflush(NULL);
1502                     enlu = sizeof(bTS);
1503                     EVP_EncryptUpdate(ectx, bTS, &enlu,
1504                                             bZB, sizeof(bZB));
1505                 }
1506                 printf("b%llu/%llu", ullLeft, tcs[t].ullLen);
1507                 fflush(NULL);
1508                 EVP_EncryptUpdate(ectx, bTS, &enlu,
1509                                         bZB, (int)ullLeft);
1510                 memcpy(bTest, &bTS[enlu-16], 16);
1511                 enlu = (int)tcs[t].ullLen;
1512                 l = 16;
1513             }
1514             enlf = sizeof(bTest1);
1515             EVP_EncryptFinal_ex(ectx, bTest1, &enlf);
1516             EVP_CIPHER_CTX_cleanup(ectx);
1517             break;
1518         case G89_IMIT:
1519             if(0 != strcmp("id-Gost28147-89-CryptoPro-A-ParamSet",
1520                                             tcs[t].szParamSet)) {
1521                 /*
1522                  * ccgost engine can't change S-Box for gost-mac
1523                  */
1524                 continue;
1525             }
1526             EVP_MD_CTX_init(mctx);
1527             mac_key = EVP_PKEY_new_mac_key(
1528                                 NID_id_Gost28147_89_MAC, NULL,
1529                                 bDerive, mdl);
1530             EVP_DigestSignInit(mctx, NULL,
1531                                     md_g89imit, impl, mac_key);
1532             if(G89_MAX_TC_LEN >= tcs[t].ullLen) {
1533                 EVP_DigestSignUpdate(mctx, tcs[t].bIn,
1534                                     (unsigned int)tcs[t].ullLen);
1535             } else {
1536                 for(ullLeft = tcs[t].ullLen;
1537                             ullLeft >= sizeof(bZB);
1538                                     ullLeft -= sizeof(bZB)) {
1539                     printf("B");
1540                     fflush(NULL);
1541                     EVP_DigestSignUpdate(mctx, bZB, sizeof(bZB));
1542                 }
1543                 printf("b%llu/%llu", ullLeft, tcs[t].ullLen);
1544                 fflush(NULL);
1545                 EVP_DigestSignUpdate(mctx, bZB,
1546                                         (unsigned int)ullLeft);
1547             }
1548             siglen = 4;
1549             EVP_DigestSignFinal(mctx, bTest, &siglen);
1550             EVP_MD_CTX_free(mctx);
1551             enlu = (int)tcs[t].ullLen;
1552             enlf = 0;
1553             l = siglen;
1554             break;
1555         }
1556         if((int)tcs[t].ullLen != enlu || 0 != enlf ||
1557            0 != memcmp(tcs[t].bOut, bTest, l)) {
1558             fflush(NULL);
1559             fprintf(stderr, "\nEngine test t=%d len=%llu "
1560                             "failed.\n", t, tcs[t].ullLen);
1561             if(!ignore) {
1562                 return 13;
1563             }
1564         } else {
1565             printf(".");
1566             fflush(NULL);
1567         }
1568     }
1569
1570     printf(" passed\n");
1571     fflush(NULL);
1572
1573     return EXIT_SUCCESS;
1574 }