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