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