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