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