Run util/openssl-format-source -v -c .
[openssl.git] / engines / ccgost / 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      * Internal function test on GostR3411_94_TestParamSet
1255      */
1256 # if 0 && defined(OPENSSL_NO_DYNAMIC_ENGINE)
1257     {
1258         gost_ctx ctx;
1259
1260         for (t = 0; t < sizeof(tcs) / sizeof(tcs[0]); t++) {
1261             const gost_subst_block *pSubst = NULL;
1262
1263             if (1024 < tcs[t].ullLen) {
1264                 /* Key meshing check by engine tests */
1265                 continue;
1266             }
1267             memset(bTest, 0xc3, sizeof(bTest));
1268             if (0 == strcmp(tcs[t].szParamSet,
1269                             "id-GostR3410-94-TestParamSet")) {
1270                 pSubst = &GostR3411_94_TestParamSet;
1271             } else if (0 == strcmp(tcs[t].szParamSet,
1272                                    "id-Gost28147-89-CryptoPro-A-ParamSet")) {
1273                 pSubst = &Gost28147_CryptoProParamSetA;
1274             } else if (0 == strcmp(tcs[t].szParamSet,
1275                                    "id-Gost28147-89-CryptoPro-B-ParamSet")) {
1276                 pSubst = &Gost28147_CryptoProParamSetB;
1277             } else if (0 == strcmp(tcs[t].szParamSet,
1278                                    "id-Gost28147-89-CryptoPro-C-ParamSet")) {
1279                 pSubst = &Gost28147_CryptoProParamSetC;
1280             } else if (0 == strcmp(tcs[t].szParamSet,
1281                                    "id-Gost28147-89-CryptoPro-D-ParamSet")) {
1282                 pSubst = &Gost28147_CryptoProParamSetD;
1283             }
1284             gost_init(&ctx, pSubst);
1285             gost_key(&ctx, tcs[t].bRawKey);
1286             switch (tcs[t].gMode) {
1287             case G89_ECB:
1288                 gost_enc(&ctx, tcs[t].bIn, bTest,
1289                          (int)((tcs[t].ullLen + G89_BLOCK_LEN - 1) /
1290                                G89_BLOCK_LEN));
1291                 l = (size_t)tcs[t].ullLen;
1292                 break;
1293             case G89_CFB:
1294                 gost_enc_cfb(&ctx, tcs[t].bIV, tcs[t].bIn,
1295                              bTest,
1296                              (int)((tcs[t].ullLen + G89_BLOCK_LEN - 1) /
1297                                    G89_BLOCK_LEN));
1298                 l = (size_t)tcs[t].ullLen;
1299                 break;
1300             case G89_CNT:
1301                 /*
1302                  * GOST 28147-89 cipher CNT mode check by engine tests
1303                  */
1304                 continue;
1305             case G89_IMIT:
1306                 gost_mac(&ctx, 32, tcs[t].bIn,
1307                          (unsigned int)tcs[t].ullLen, bTest);
1308                 gost_mac_iv(&ctx, 32, tcs[t].bIV, tcs[t].bIn,
1309                             (unsigned int)tcs[t].ullLen, bTest1);
1310                 if (0 != memcmp(bTest, bTest1, 4)) {
1311                     fflush(NULL);
1312                     fprintf(stderr, "\nInternal test t=%d len=" FMT64
1313                             " failed (gost_mac_iv).\n", t, tcs[t].ullLen);
1314                     if (!ignore) {
1315                         return 2;
1316                     }
1317                 }
1318                 l = 4;
1319                 break;
1320             }
1321             gost_destroy(&ctx);
1322
1323             if (0 != memcmp(tcs[t].bOut, bTest, l)) {
1324                 fflush(NULL);
1325                 fprintf(stderr, "\nInternal test t=%d len=" FMT64
1326                         " failed.\n", t, tcs[t].ullLen);
1327                 if (!ignore) {
1328                     return 3;
1329                 }
1330             } else {
1331                 printf(",");
1332                 fflush(NULL);
1333             }
1334         }
1335     }
1336 # endif
1337
1338     /*
1339      * ccgost engine test on GostR3411_94_CryptoProParamSet
1340      */
1341     ERR_load_crypto_strings();
1342     ENGINE_load_builtin_engines();
1343     OPENSSL_load_builtin_modules();
1344
1345     bpConf = BIO_new_mem_buf(sConf, -1);
1346     if (!NCONF_load_bio(pConfig, bpConf, &lErrLine)) {
1347         fflush(NULL);
1348         fprintf(stderr, "NCONF_load_bio: ErrLine=%ld: %s\n",
1349                 lErrLine, ERR_error_string(ERR_get_error(), NULL));
1350         return 4;
1351     }
1352     BIO_free(bpConf);
1353
1354     if (!CONF_modules_load(pConfig, NULL, 0)) {
1355         fflush(NULL);
1356         fprintf(stderr, "CONF_modules_load: %s\n",
1357                 ERR_error_string(ERR_get_error(), NULL));
1358         return 5;
1359     }
1360
1361     /* Test load engine */
1362     if (NULL == (impl = ENGINE_by_id(CCGOST_ID))) {
1363         fflush(NULL);
1364         fprintf(stderr, "Can't load engine id \"" CCGOST_ID "\"\n");
1365         if (!ignore) {
1366             return 6;
1367         }
1368     }
1369     if (NULL == (md_gost94 = EVP_get_digestbyname(SN_id_GostR3411_94))) {
1370         fflush(NULL);
1371         fprintf(stderr, "\"" SN_id_GostR3411_94 "\" - not found\n");
1372         if (!ignore) {
1373             return 7;
1374         }
1375     }
1376     if (NULL == (cp_g89cfb = EVP_get_cipherbyname(SN_id_Gost28147_89))) {
1377         fflush(NULL);
1378         fprintf(stderr, "\"" SN_id_Gost28147_89 "\" - not found\n");
1379         if (!ignore) {
1380             return 8;
1381         }
1382     }
1383     if (NULL == (cp_g89cnt = EVP_get_cipherbyname(SN_gost89_cnt))) {
1384         fflush(NULL);
1385         fprintf(stderr, "\"" SN_gost89_cnt "\" - not found\n");
1386         if (!ignore) {
1387             return 9;
1388         }
1389     }
1390     if (NULL == (md_g89imit = EVP_get_digestbyname(SN_id_Gost28147_89_MAC))) {
1391         fflush(NULL);
1392         fprintf(stderr, "\"" SN_id_Gost28147_89_MAC "\" - not found\n");
1393         if (!ignore) {
1394             return 10;
1395         }
1396     }
1397
1398     /* Test cases */
1399     for (t = 0; t < sizeof(tcs) / sizeof(tcs[0]); t++) {
1400         if (NULL == tcs[t].szDerive) {
1401             continue;
1402         }
1403         memset(bDerive, 0x3c, sizeof(bDerive));
1404         mdl = sizeof(bDerive);
1405         EVP_Digest(tcs[t].szDerive, strlen(tcs[t].szDerive),
1406                    bDerive, &mdl, md_gost94, impl);
1407         if (0 != memcmp(tcs[t].bRawKey, bDerive, mdl)) {
1408             fflush(NULL);
1409             fprintf(stderr, "Engine test t=%d " "derive key error.\n", t);
1410             if (!ignore) {
1411                 return 12;
1412             }
1413         }
1414         if (ullMaxLen < tcs[t].ullLen) {
1415             continue;
1416         }
1417         memset(bTest, 0xa5, sizeof(bTest));
1418         memset(bTest1, 0x5a, sizeof(bTest1));
1419         if (!ENGINE_ctrl_cmd_string(impl,
1420                                     "CRYPT_PARAMS", tcs[t].szParamSet, 0)) {
1421             fflush(NULL);
1422             fprintf(stderr, "ENGINE_ctrl_cmd_string: %s\n",
1423                     ERR_error_string(ERR_get_error(), NULL));
1424             return 11;
1425         }
1426         switch (tcs[t].gMode) {
1427         case G89_ECB:
1428             /* OpenSSL/ccgost not implemented GOST 28147-89 ECB */
1429             continue;
1430         case G89_CFB:
1431             ctype = cp_g89cfb;
1432             goto engine_cipher_check;
1433         case G89_CNT:
1434             if (0 != strcmp("id-Gost28147-89-CryptoPro-A-ParamSet",
1435                             tcs[t].szParamSet)) {
1436                 /*
1437                  * ccgost engine can't change S-Box for gost-cnt
1438                  */
1439                 continue;
1440             }
1441             ctype = cp_g89cnt;
1442  engine_cipher_check:
1443             EVP_CIPHER_CTX_init(&ectx);
1444             EVP_EncryptInit_ex(&ectx, ctype, impl, bDerive, tcs[t].bIV);
1445             if (G89_MAX_TC_LEN >= tcs[t].ullLen) {
1446                 enlu = sizeof(bTest);
1447                 EVP_EncryptUpdate(&ectx, bTest, &enlu,
1448                                   tcs[t].bIn, (int)tcs[t].ullLen);
1449                 l = (size_t)tcs[t].ullLen;
1450             } else {
1451                 for (ullLeft = tcs[t].ullLen;
1452                      ullLeft >= sizeof(bZB); ullLeft -= sizeof(bZB)) {
1453                     printf("B");
1454                     fflush(NULL);
1455                     enlu = sizeof(bTS);
1456                     EVP_EncryptUpdate(&ectx, bTS, &enlu, bZB, sizeof(bZB));
1457                 }
1458                 printf("b" FMT64 "/" FMT64, ullLeft, tcs[t].ullLen);
1459                 fflush(NULL);
1460                 EVP_EncryptUpdate(&ectx, bTS, &enlu, bZB, (int)ullLeft);
1461                 memcpy(bTest, &bTS[enlu - 16], 16);
1462                 enlu = (int)tcs[t].ullLen;
1463                 l = 16;
1464             }
1465             enlf = sizeof(bTest1);
1466             EVP_EncryptFinal_ex(&ectx, bTest1, &enlf);
1467             EVP_CIPHER_CTX_cleanup(&ectx);
1468             break;
1469         case G89_IMIT:
1470             if (0 != strcmp("id-Gost28147-89-CryptoPro-A-ParamSet",
1471                             tcs[t].szParamSet)) {
1472                 /*
1473                  * ccgost engine can't change S-Box for gost-mac
1474                  */
1475                 continue;
1476             }
1477             EVP_MD_CTX_init(&mctx);
1478             mac_key = EVP_PKEY_new_mac_key(NID_id_Gost28147_89_MAC, NULL,
1479                                            bDerive, mdl);
1480             EVP_DigestSignInit(&mctx, NULL, md_g89imit, impl, mac_key);
1481             if (G89_MAX_TC_LEN >= tcs[t].ullLen) {
1482                 EVP_DigestSignUpdate(&mctx, tcs[t].bIn,
1483                                      (unsigned int)tcs[t].ullLen);
1484             } else {
1485                 for (ullLeft = tcs[t].ullLen;
1486                      ullLeft >= sizeof(bZB); ullLeft -= sizeof(bZB)) {
1487                     printf("B");
1488                     fflush(NULL);
1489                     EVP_DigestSignUpdate(&mctx, bZB, sizeof(bZB));
1490                 }
1491                 printf("b" FMT64 "/" FMT64, ullLeft, tcs[t].ullLen);
1492                 fflush(NULL);
1493                 EVP_DigestSignUpdate(&mctx, bZB, (unsigned int)ullLeft);
1494             }
1495             siglen = 4;
1496             OPENSSL_assert(EVP_DigestSignFinal(&mctx, bTest, &siglen));
1497             EVP_MD_CTX_cleanup(&mctx);
1498             enlu = (int)tcs[t].ullLen;
1499             enlf = 0;
1500             l = siglen;
1501             break;
1502         }
1503         if ((int)tcs[t].ullLen != enlu || 0 != enlf ||
1504             0 != memcmp(tcs[t].bOut, bTest, l)) {
1505             fflush(NULL);
1506             fprintf(stderr, "\nEngine test t=%d len=" FMT64
1507                     " failed.\n", t, tcs[t].ullLen);
1508             if (!ignore) {
1509                 return 13;
1510             }
1511         } else {
1512             printf(".");
1513             fflush(NULL);
1514         }
1515     }
1516
1517     printf(" passed\n");
1518     fflush(NULL);
1519
1520     return EXIT_SUCCESS;
1521 }
1522 #endif