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