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