1 /* gost28147.c - GOST 28147-89 (Magma) cipher implementation
2  *
3  * based on Russian standard GOST 28147-89
4  * For English description, check RFC 5830.
5  * S-Boxes are expanded from the tables defined in RFC4357:
6  *   https://tools.ietf.org/html/rfc4357
7  *
8  * Copyright: 2015-2015 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
9  * Copyright: 2009-2012 Aleksey Kravchenko <rhash.admin@gmail.com>
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a
12  * copy of this software and associated documentation files (the
13  * "Software"), to deal in the Software without restriction, including
14  * without limitation the rights to use, copy, modify, merge, publish,
15  * distribute, sublicense, and/or sell copies of the Software, and to
16  * permit persons to whom the Software is furnished to do so, subject to
17  * the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included
20  * in all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29  */
30 
31 #if HAVE_CONFIG_H
32 #include "config.h"
33 #endif
34 
35 #ifndef HAVE_NETTLE_GOST28147_SET_KEY
36 
37 #include <gnutls_int.h>
38 
39 #include <string.h>
40 
41 #include <nettle/macros.h>
42 #include "nettle-write.h"
43 #include "gost28147.h"
44 #include <nettle/memxor.h>
45 
46 /* pre-initialized GOST lookup tables based on rotated S-Box */
47 const struct gost28147_param gost28147_param_test_3411 =
48 {
49   0,
50   {
51     /* 0 */
52     0x00072000, 0x00075000, 0x00074800, 0x00071000,
53     0x00076800, 0x00074000, 0x00070000, 0x00077000,
54     0x00073000, 0x00075800, 0x00070800, 0x00076000,
55     0x00073800, 0x00077800, 0x00072800, 0x00071800,
56     0x0005a000, 0x0005d000, 0x0005c800, 0x00059000,
57     0x0005e800, 0x0005c000, 0x00058000, 0x0005f000,
58     0x0005b000, 0x0005d800, 0x00058800, 0x0005e000,
59     0x0005b800, 0x0005f800, 0x0005a800, 0x00059800,
60     0x00022000, 0x00025000, 0x00024800, 0x00021000,
61     0x00026800, 0x00024000, 0x00020000, 0x00027000,
62     0x00023000, 0x00025800, 0x00020800, 0x00026000,
63     0x00023800, 0x00027800, 0x00022800, 0x00021800,
64     0x00062000, 0x00065000, 0x00064800, 0x00061000,
65     0x00066800, 0x00064000, 0x00060000, 0x00067000,
66     0x00063000, 0x00065800, 0x00060800, 0x00066000,
67     0x00063800, 0x00067800, 0x00062800, 0x00061800,
68     0x00032000, 0x00035000, 0x00034800, 0x00031000,
69     0x00036800, 0x00034000, 0x00030000, 0x00037000,
70     0x00033000, 0x00035800, 0x00030800, 0x00036000,
71     0x00033800, 0x00037800, 0x00032800, 0x00031800,
72     0x0006a000, 0x0006d000, 0x0006c800, 0x00069000,
73     0x0006e800, 0x0006c000, 0x00068000, 0x0006f000,
74     0x0006b000, 0x0006d800, 0x00068800, 0x0006e000,
75     0x0006b800, 0x0006f800, 0x0006a800, 0x00069800,
76     0x0007a000, 0x0007d000, 0x0007c800, 0x00079000,
77     0x0007e800, 0x0007c000, 0x00078000, 0x0007f000,
78     0x0007b000, 0x0007d800, 0x00078800, 0x0007e000,
79     0x0007b800, 0x0007f800, 0x0007a800, 0x00079800,
80     0x00052000, 0x00055000, 0x00054800, 0x00051000,
81     0x00056800, 0x00054000, 0x00050000, 0x00057000,
82     0x00053000, 0x00055800, 0x00050800, 0x00056000,
83     0x00053800, 0x00057800, 0x00052800, 0x00051800,
84     0x00012000, 0x00015000, 0x00014800, 0x00011000,
85     0x00016800, 0x00014000, 0x00010000, 0x00017000,
86     0x00013000, 0x00015800, 0x00010800, 0x00016000,
87     0x00013800, 0x00017800, 0x00012800, 0x00011800,
88     0x0001a000, 0x0001d000, 0x0001c800, 0x00019000,
89     0x0001e800, 0x0001c000, 0x00018000, 0x0001f000,
90     0x0001b000, 0x0001d800, 0x00018800, 0x0001e000,
91     0x0001b800, 0x0001f800, 0x0001a800, 0x00019800,
92     0x00042000, 0x00045000, 0x00044800, 0x00041000,
93     0x00046800, 0x00044000, 0x00040000, 0x00047000,
94     0x00043000, 0x00045800, 0x00040800, 0x00046000,
95     0x00043800, 0x00047800, 0x00042800, 0x00041800,
96     0x0000a000, 0x0000d000, 0x0000c800, 0x00009000,
97     0x0000e800, 0x0000c000, 0x00008000, 0x0000f000,
98     0x0000b000, 0x0000d800, 0x00008800, 0x0000e000,
99     0x0000b800, 0x0000f800, 0x0000a800, 0x00009800,
100     0x00002000, 0x00005000, 0x00004800, 0x00001000,
101     0x00006800, 0x00004000, 0x00000000, 0x00007000,
102     0x00003000, 0x00005800, 0x00000800, 0x00006000,
103     0x00003800, 0x00007800, 0x00002800, 0x00001800,
104     0x0003a000, 0x0003d000, 0x0003c800, 0x00039000,
105     0x0003e800, 0x0003c000, 0x00038000, 0x0003f000,
106     0x0003b000, 0x0003d800, 0x00038800, 0x0003e000,
107     0x0003b800, 0x0003f800, 0x0003a800, 0x00039800,
108     0x0002a000, 0x0002d000, 0x0002c800, 0x00029000,
109     0x0002e800, 0x0002c000, 0x00028000, 0x0002f000,
110     0x0002b000, 0x0002d800, 0x00028800, 0x0002e000,
111     0x0002b800, 0x0002f800, 0x0002a800, 0x00029800,
112     0x0004a000, 0x0004d000, 0x0004c800, 0x00049000,
113     0x0004e800, 0x0004c000, 0x00048000, 0x0004f000,
114     0x0004b000, 0x0004d800, 0x00048800, 0x0004e000,
115     0x0004b800, 0x0004f800, 0x0004a800, 0x00049800,
116     /* 1 */
117     0x03a80000, 0x03c00000, 0x03880000, 0x03e80000,
118     0x03d00000, 0x03980000, 0x03a00000, 0x03900000,
119     0x03f00000, 0x03f80000, 0x03e00000, 0x03b80000,
120     0x03b00000, 0x03800000, 0x03c80000, 0x03d80000,
121     0x06a80000, 0x06c00000, 0x06880000, 0x06e80000,
122     0x06d00000, 0x06980000, 0x06a00000, 0x06900000,
123     0x06f00000, 0x06f80000, 0x06e00000, 0x06b80000,
124     0x06b00000, 0x06800000, 0x06c80000, 0x06d80000,
125     0x05280000, 0x05400000, 0x05080000, 0x05680000,
126     0x05500000, 0x05180000, 0x05200000, 0x05100000,
127     0x05700000, 0x05780000, 0x05600000, 0x05380000,
128     0x05300000, 0x05000000, 0x05480000, 0x05580000,
129     0x00a80000, 0x00c00000, 0x00880000, 0x00e80000,
130     0x00d00000, 0x00980000, 0x00a00000, 0x00900000,
131     0x00f00000, 0x00f80000, 0x00e00000, 0x00b80000,
132     0x00b00000, 0x00800000, 0x00c80000, 0x00d80000,
133     0x00280000, 0x00400000, 0x00080000, 0x00680000,
134     0x00500000, 0x00180000, 0x00200000, 0x00100000,
135     0x00700000, 0x00780000, 0x00600000, 0x00380000,
136     0x00300000, 0x00000000, 0x00480000, 0x00580000,
137     0x04280000, 0x04400000, 0x04080000, 0x04680000,
138     0x04500000, 0x04180000, 0x04200000, 0x04100000,
139     0x04700000, 0x04780000, 0x04600000, 0x04380000,
140     0x04300000, 0x04000000, 0x04480000, 0x04580000,
141     0x04a80000, 0x04c00000, 0x04880000, 0x04e80000,
142     0x04d00000, 0x04980000, 0x04a00000, 0x04900000,
143     0x04f00000, 0x04f80000, 0x04e00000, 0x04b80000,
144     0x04b00000, 0x04800000, 0x04c80000, 0x04d80000,
145     0x07a80000, 0x07c00000, 0x07880000, 0x07e80000,
146     0x07d00000, 0x07980000, 0x07a00000, 0x07900000,
147     0x07f00000, 0x07f80000, 0x07e00000, 0x07b80000,
148     0x07b00000, 0x07800000, 0x07c80000, 0x07d80000,
149     0x07280000, 0x07400000, 0x07080000, 0x07680000,
150     0x07500000, 0x07180000, 0x07200000, 0x07100000,
151     0x07700000, 0x07780000, 0x07600000, 0x07380000,
152     0x07300000, 0x07000000, 0x07480000, 0x07580000,
153     0x02280000, 0x02400000, 0x02080000, 0x02680000,
154     0x02500000, 0x02180000, 0x02200000, 0x02100000,
155     0x02700000, 0x02780000, 0x02600000, 0x02380000,
156     0x02300000, 0x02000000, 0x02480000, 0x02580000,
157     0x03280000, 0x03400000, 0x03080000, 0x03680000,
158     0x03500000, 0x03180000, 0x03200000, 0x03100000,
159     0x03700000, 0x03780000, 0x03600000, 0x03380000,
160     0x03300000, 0x03000000, 0x03480000, 0x03580000,
161     0x06280000, 0x06400000, 0x06080000, 0x06680000,
162     0x06500000, 0x06180000, 0x06200000, 0x06100000,
163     0x06700000, 0x06780000, 0x06600000, 0x06380000,
164     0x06300000, 0x06000000, 0x06480000, 0x06580000,
165     0x05a80000, 0x05c00000, 0x05880000, 0x05e80000,
166     0x05d00000, 0x05980000, 0x05a00000, 0x05900000,
167     0x05f00000, 0x05f80000, 0x05e00000, 0x05b80000,
168     0x05b00000, 0x05800000, 0x05c80000, 0x05d80000,
169     0x01280000, 0x01400000, 0x01080000, 0x01680000,
170     0x01500000, 0x01180000, 0x01200000, 0x01100000,
171     0x01700000, 0x01780000, 0x01600000, 0x01380000,
172     0x01300000, 0x01000000, 0x01480000, 0x01580000,
173     0x02a80000, 0x02c00000, 0x02880000, 0x02e80000,
174     0x02d00000, 0x02980000, 0x02a00000, 0x02900000,
175     0x02f00000, 0x02f80000, 0x02e00000, 0x02b80000,
176     0x02b00000, 0x02800000, 0x02c80000, 0x02d80000,
177     0x01a80000, 0x01c00000, 0x01880000, 0x01e80000,
178     0x01d00000, 0x01980000, 0x01a00000, 0x01900000,
179     0x01f00000, 0x01f80000, 0x01e00000, 0x01b80000,
180     0x01b00000, 0x01800000, 0x01c80000, 0x01d80000,
181     /* 2 */
182     0x30000002, 0x60000002, 0x38000002, 0x08000002,
183     0x28000002, 0x78000002, 0x68000002, 0x40000002,
184     0x20000002, 0x50000002, 0x48000002, 0x70000002,
185     0x00000002, 0x18000002, 0x58000002, 0x10000002,
186     0xb0000005, 0xe0000005, 0xb8000005, 0x88000005,
187     0xa8000005, 0xf8000005, 0xe8000005, 0xc0000005,
188     0xa0000005, 0xd0000005, 0xc8000005, 0xf0000005,
189     0x80000005, 0x98000005, 0xd8000005, 0x90000005,
190     0x30000005, 0x60000005, 0x38000005, 0x08000005,
191     0x28000005, 0x78000005, 0x68000005, 0x40000005,
192     0x20000005, 0x50000005, 0x48000005, 0x70000005,
193     0x00000005, 0x18000005, 0x58000005, 0x10000005,
194     0x30000000, 0x60000000, 0x38000000, 0x08000000,
195     0x28000000, 0x78000000, 0x68000000, 0x40000000,
196     0x20000000, 0x50000000, 0x48000000, 0x70000000,
197     0x00000000, 0x18000000, 0x58000000, 0x10000000,
198     0xb0000003, 0xe0000003, 0xb8000003, 0x88000003,
199     0xa8000003, 0xf8000003, 0xe8000003, 0xc0000003,
200     0xa0000003, 0xd0000003, 0xc8000003, 0xf0000003,
201     0x80000003, 0x98000003, 0xd8000003, 0x90000003,
202     0x30000001, 0x60000001, 0x38000001, 0x08000001,
203     0x28000001, 0x78000001, 0x68000001, 0x40000001,
204     0x20000001, 0x50000001, 0x48000001, 0x70000001,
205     0x00000001, 0x18000001, 0x58000001, 0x10000001,
206     0xb0000000, 0xe0000000, 0xb8000000, 0x88000000,
207     0xa8000000, 0xf8000000, 0xe8000000, 0xc0000000,
208     0xa0000000, 0xd0000000, 0xc8000000, 0xf0000000,
209     0x80000000, 0x98000000, 0xd8000000, 0x90000000,
210     0xb0000006, 0xe0000006, 0xb8000006, 0x88000006,
211     0xa8000006, 0xf8000006, 0xe8000006, 0xc0000006,
212     0xa0000006, 0xd0000006, 0xc8000006, 0xf0000006,
213     0x80000006, 0x98000006, 0xd8000006, 0x90000006,
214     0xb0000001, 0xe0000001, 0xb8000001, 0x88000001,
215     0xa8000001, 0xf8000001, 0xe8000001, 0xc0000001,
216     0xa0000001, 0xd0000001, 0xc8000001, 0xf0000001,
217     0x80000001, 0x98000001, 0xd8000001, 0x90000001,
218     0x30000003, 0x60000003, 0x38000003, 0x08000003,
219     0x28000003, 0x78000003, 0x68000003, 0x40000003,
220     0x20000003, 0x50000003, 0x48000003, 0x70000003,
221     0x00000003, 0x18000003, 0x58000003, 0x10000003,
222     0x30000004, 0x60000004, 0x38000004, 0x08000004,
223     0x28000004, 0x78000004, 0x68000004, 0x40000004,
224     0x20000004, 0x50000004, 0x48000004, 0x70000004,
225     0x00000004, 0x18000004, 0x58000004, 0x10000004,
226     0xb0000002, 0xe0000002, 0xb8000002, 0x88000002,
227     0xa8000002, 0xf8000002, 0xe8000002, 0xc0000002,
228     0xa0000002, 0xd0000002, 0xc8000002, 0xf0000002,
229     0x80000002, 0x98000002, 0xd8000002, 0x90000002,
230     0xb0000004, 0xe0000004, 0xb8000004, 0x88000004,
231     0xa8000004, 0xf8000004, 0xe8000004, 0xc0000004,
232     0xa0000004, 0xd0000004, 0xc8000004, 0xf0000004,
233     0x80000004, 0x98000004, 0xd8000004, 0x90000004,
234     0x30000006, 0x60000006, 0x38000006, 0x08000006,
235     0x28000006, 0x78000006, 0x68000006, 0x40000006,
236     0x20000006, 0x50000006, 0x48000006, 0x70000006,
237     0x00000006, 0x18000006, 0x58000006, 0x10000006,
238     0xb0000007, 0xe0000007, 0xb8000007, 0x88000007,
239     0xa8000007, 0xf8000007, 0xe8000007, 0xc0000007,
240     0xa0000007, 0xd0000007, 0xc8000007, 0xf0000007,
241     0x80000007, 0x98000007, 0xd8000007, 0x90000007,
242     0x30000007, 0x60000007, 0x38000007, 0x08000007,
243     0x28000007, 0x78000007, 0x68000007, 0x40000007,
244     0x20000007, 0x50000007, 0x48000007, 0x70000007,
245     0x00000007, 0x18000007, 0x58000007, 0x10000007,
246     /* 3 */
247     0x000000e8, 0x000000d8, 0x000000a0, 0x00000088,
248     0x00000098, 0x000000f8, 0x000000a8, 0x000000c8,
249     0x00000080, 0x000000d0, 0x000000f0, 0x000000b8,
250     0x000000b0, 0x000000c0, 0x00000090, 0x000000e0,
251     0x000007e8, 0x000007d8, 0x000007a0, 0x00000788,
252     0x00000798, 0x000007f8, 0x000007a8, 0x000007c8,
253     0x00000780, 0x000007d0, 0x000007f0, 0x000007b8,
254     0x000007b0, 0x000007c0, 0x00000790, 0x000007e0,
255     0x000006e8, 0x000006d8, 0x000006a0, 0x00000688,
256     0x00000698, 0x000006f8, 0x000006a8, 0x000006c8,
257     0x00000680, 0x000006d0, 0x000006f0, 0x000006b8,
258     0x000006b0, 0x000006c0, 0x00000690, 0x000006e0,
259     0x00000068, 0x00000058, 0x00000020, 0x00000008,
260     0x00000018, 0x00000078, 0x00000028, 0x00000048,
261     0x00000000, 0x00000050, 0x00000070, 0x00000038,
262     0x00000030, 0x00000040, 0x00000010, 0x00000060,
263     0x000002e8, 0x000002d8, 0x000002a0, 0x00000288,
264     0x00000298, 0x000002f8, 0x000002a8, 0x000002c8,
265     0x00000280, 0x000002d0, 0x000002f0, 0x000002b8,
266     0x000002b0, 0x000002c0, 0x00000290, 0x000002e0,
267     0x000003e8, 0x000003d8, 0x000003a0, 0x00000388,
268     0x00000398, 0x000003f8, 0x000003a8, 0x000003c8,
269     0x00000380, 0x000003d0, 0x000003f0, 0x000003b8,
270     0x000003b0, 0x000003c0, 0x00000390, 0x000003e0,
271     0x00000568, 0x00000558, 0x00000520, 0x00000508,
272     0x00000518, 0x00000578, 0x00000528, 0x00000548,
273     0x00000500, 0x00000550, 0x00000570, 0x00000538,
274     0x00000530, 0x00000540, 0x00000510, 0x00000560,
275     0x00000268, 0x00000258, 0x00000220, 0x00000208,
276     0x00000218, 0x00000278, 0x00000228, 0x00000248,
277     0x00000200, 0x00000250, 0x00000270, 0x00000238,
278     0x00000230, 0x00000240, 0x00000210, 0x00000260,
279     0x000004e8, 0x000004d8, 0x000004a0, 0x00000488,
280     0x00000498, 0x000004f8, 0x000004a8, 0x000004c8,
281     0x00000480, 0x000004d0, 0x000004f0, 0x000004b8,
282     0x000004b0, 0x000004c0, 0x00000490, 0x000004e0,
283     0x00000168, 0x00000158, 0x00000120, 0x00000108,
284     0x00000118, 0x00000178, 0x00000128, 0x00000148,
285     0x00000100, 0x00000150, 0x00000170, 0x00000138,
286     0x00000130, 0x00000140, 0x00000110, 0x00000160,
287     0x000001e8, 0x000001d8, 0x000001a0, 0x00000188,
288     0x00000198, 0x000001f8, 0x000001a8, 0x000001c8,
289     0x00000180, 0x000001d0, 0x000001f0, 0x000001b8,
290     0x000001b0, 0x000001c0, 0x00000190, 0x000001e0,
291     0x00000768, 0x00000758, 0x00000720, 0x00000708,
292     0x00000718, 0x00000778, 0x00000728, 0x00000748,
293     0x00000700, 0x00000750, 0x00000770, 0x00000738,
294     0x00000730, 0x00000740, 0x00000710, 0x00000760,
295     0x00000368, 0x00000358, 0x00000320, 0x00000308,
296     0x00000318, 0x00000378, 0x00000328, 0x00000348,
297     0x00000300, 0x00000350, 0x00000370, 0x00000338,
298     0x00000330, 0x00000340, 0x00000310, 0x00000360,
299     0x000005e8, 0x000005d8, 0x000005a0, 0x00000588,
300     0x00000598, 0x000005f8, 0x000005a8, 0x000005c8,
301     0x00000580, 0x000005d0, 0x000005f0, 0x000005b8,
302     0x000005b0, 0x000005c0, 0x00000590, 0x000005e0,
303     0x00000468, 0x00000458, 0x00000420, 0x00000408,
304     0x00000418, 0x00000478, 0x00000428, 0x00000448,
305     0x00000400, 0x00000450, 0x00000470, 0x00000438,
306     0x00000430, 0x00000440, 0x00000410, 0x00000460,
307     0x00000668, 0x00000658, 0x00000620, 0x00000608,
308     0x00000618, 0x00000678, 0x00000628, 0x00000648,
309     0x00000600, 0x00000650, 0x00000670, 0x00000638,
310     0x00000630, 0x00000640, 0x00000610, 0x00000660,
311   }
312 };
313 
314 const struct gost28147_param gost28147_param_CryptoPro_3411 =
315 {
316   0,
317   {
318     /* 0 */
319     0x0002d000, 0x0002a000, 0x0002a800, 0x0002b000,
320     0x0002c000, 0x00028800, 0x00029800, 0x0002b800,
321     0x0002e800, 0x0002e000, 0x0002f000, 0x00028000,
322     0x0002c800, 0x00029000, 0x0002d800, 0x0002f800,
323     0x0007d000, 0x0007a000, 0x0007a800, 0x0007b000,
324     0x0007c000, 0x00078800, 0x00079800, 0x0007b800,
325     0x0007e800, 0x0007e000, 0x0007f000, 0x00078000,
326     0x0007c800, 0x00079000, 0x0007d800, 0x0007f800,
327     0x00025000, 0x00022000, 0x00022800, 0x00023000,
328     0x00024000, 0x00020800, 0x00021800, 0x00023800,
329     0x00026800, 0x00026000, 0x00027000, 0x00020000,
330     0x00024800, 0x00021000, 0x00025800, 0x00027800,
331     0x00005000, 0x00002000, 0x00002800, 0x00003000,
332     0x00004000, 0x00000800, 0x00001800, 0x00003800,
333     0x00006800, 0x00006000, 0x00007000, 0x00000000,
334     0x00004800, 0x00001000, 0x00005800, 0x00007800,
335     0x00015000, 0x00012000, 0x00012800, 0x00013000,
336     0x00014000, 0x00010800, 0x00011800, 0x00013800,
337     0x00016800, 0x00016000, 0x00017000, 0x00010000,
338     0x00014800, 0x00011000, 0x00015800, 0x00017800,
339     0x0006d000, 0x0006a000, 0x0006a800, 0x0006b000,
340     0x0006c000, 0x00068800, 0x00069800, 0x0006b800,
341     0x0006e800, 0x0006e000, 0x0006f000, 0x00068000,
342     0x0006c800, 0x00069000, 0x0006d800, 0x0006f800,
343     0x0005d000, 0x0005a000, 0x0005a800, 0x0005b000,
344     0x0005c000, 0x00058800, 0x00059800, 0x0005b800,
345     0x0005e800, 0x0005e000, 0x0005f000, 0x00058000,
346     0x0005c800, 0x00059000, 0x0005d800, 0x0005f800,
347     0x0004d000, 0x0004a000, 0x0004a800, 0x0004b000,
348     0x0004c000, 0x00048800, 0x00049800, 0x0004b800,
349     0x0004e800, 0x0004e000, 0x0004f000, 0x00048000,
350     0x0004c800, 0x00049000, 0x0004d800, 0x0004f800,
351     0x0000d000, 0x0000a000, 0x0000a800, 0x0000b000,
352     0x0000c000, 0x00008800, 0x00009800, 0x0000b800,
353     0x0000e800, 0x0000e000, 0x0000f000, 0x00008000,
354     0x0000c800, 0x00009000, 0x0000d800, 0x0000f800,
355     0x0003d000, 0x0003a000, 0x0003a800, 0x0003b000,
356     0x0003c000, 0x00038800, 0x00039800, 0x0003b800,
357     0x0003e800, 0x0003e000, 0x0003f000, 0x00038000,
358     0x0003c800, 0x00039000, 0x0003d800, 0x0003f800,
359     0x00035000, 0x00032000, 0x00032800, 0x00033000,
360     0x00034000, 0x00030800, 0x00031800, 0x00033800,
361     0x00036800, 0x00036000, 0x00037000, 0x00030000,
362     0x00034800, 0x00031000, 0x00035800, 0x00037800,
363     0x0001d000, 0x0001a000, 0x0001a800, 0x0001b000,
364     0x0001c000, 0x00018800, 0x00019800, 0x0001b800,
365     0x0001e800, 0x0001e000, 0x0001f000, 0x00018000,
366     0x0001c800, 0x00019000, 0x0001d800, 0x0001f800,
367     0x00065000, 0x00062000, 0x00062800, 0x00063000,
368     0x00064000, 0x00060800, 0x00061800, 0x00063800,
369     0x00066800, 0x00066000, 0x00067000, 0x00060000,
370     0x00064800, 0x00061000, 0x00065800, 0x00067800,
371     0x00075000, 0x00072000, 0x00072800, 0x00073000,
372     0x00074000, 0x00070800, 0x00071800, 0x00073800,
373     0x00076800, 0x00076000, 0x00077000, 0x00070000,
374     0x00074800, 0x00071000, 0x00075800, 0x00077800,
375     0x00055000, 0x00052000, 0x00052800, 0x00053000,
376     0x00054000, 0x00050800, 0x00051800, 0x00053800,
377     0x00056800, 0x00056000, 0x00057000, 0x00050000,
378     0x00054800, 0x00051000, 0x00055800, 0x00057800,
379     0x00045000, 0x00042000, 0x00042800, 0x00043000,
380     0x00044000, 0x00040800, 0x00041800, 0x00043800,
381     0x00046800, 0x00046000, 0x00047000, 0x00040000,
382     0x00044800, 0x00041000, 0x00045800, 0x00047800,
383     /* 1 */
384     0x02380000, 0x02780000, 0x02600000, 0x02700000,
385     0x02480000, 0x02200000, 0x02080000, 0x02000000,
386     0x02180000, 0x02580000, 0x02280000, 0x02100000,
387     0x02300000, 0x02500000, 0x02400000, 0x02680000,
388     0x05380000, 0x05780000, 0x05600000, 0x05700000,
389     0x05480000, 0x05200000, 0x05080000, 0x05000000,
390     0x05180000, 0x05580000, 0x05280000, 0x05100000,
391     0x05300000, 0x05500000, 0x05400000, 0x05680000,
392     0x03b80000, 0x03f80000, 0x03e00000, 0x03f00000,
393     0x03c80000, 0x03a00000, 0x03880000, 0x03800000,
394     0x03980000, 0x03d80000, 0x03a80000, 0x03900000,
395     0x03b00000, 0x03d00000, 0x03c00000, 0x03e80000,
396     0x06380000, 0x06780000, 0x06600000, 0x06700000,
397     0x06480000, 0x06200000, 0x06080000, 0x06000000,
398     0x06180000, 0x06580000, 0x06280000, 0x06100000,
399     0x06300000, 0x06500000, 0x06400000, 0x06680000,
400     0x00380000, 0x00780000, 0x00600000, 0x00700000,
401     0x00480000, 0x00200000, 0x00080000, 0x00000000,
402     0x00180000, 0x00580000, 0x00280000, 0x00100000,
403     0x00300000, 0x00500000, 0x00400000, 0x00680000,
404     0x07b80000, 0x07f80000, 0x07e00000, 0x07f00000,
405     0x07c80000, 0x07a00000, 0x07880000, 0x07800000,
406     0x07980000, 0x07d80000, 0x07a80000, 0x07900000,
407     0x07b00000, 0x07d00000, 0x07c00000, 0x07e80000,
408     0x01380000, 0x01780000, 0x01600000, 0x01700000,
409     0x01480000, 0x01200000, 0x01080000, 0x01000000,
410     0x01180000, 0x01580000, 0x01280000, 0x01100000,
411     0x01300000, 0x01500000, 0x01400000, 0x01680000,
412     0x04380000, 0x04780000, 0x04600000, 0x04700000,
413     0x04480000, 0x04200000, 0x04080000, 0x04000000,
414     0x04180000, 0x04580000, 0x04280000, 0x04100000,
415     0x04300000, 0x04500000, 0x04400000, 0x04680000,
416     0x07380000, 0x07780000, 0x07600000, 0x07700000,
417     0x07480000, 0x07200000, 0x07080000, 0x07000000,
418     0x07180000, 0x07580000, 0x07280000, 0x07100000,
419     0x07300000, 0x07500000, 0x07400000, 0x07680000,
420     0x00b80000, 0x00f80000, 0x00e00000, 0x00f00000,
421     0x00c80000, 0x00a00000, 0x00880000, 0x00800000,
422     0x00980000, 0x00d80000, 0x00a80000, 0x00900000,
423     0x00b00000, 0x00d00000, 0x00c00000, 0x00e80000,
424     0x03380000, 0x03780000, 0x03600000, 0x03700000,
425     0x03480000, 0x03200000, 0x03080000, 0x03000000,
426     0x03180000, 0x03580000, 0x03280000, 0x03100000,
427     0x03300000, 0x03500000, 0x03400000, 0x03680000,
428     0x02b80000, 0x02f80000, 0x02e00000, 0x02f00000,
429     0x02c80000, 0x02a00000, 0x02880000, 0x02800000,
430     0x02980000, 0x02d80000, 0x02a80000, 0x02900000,
431     0x02b00000, 0x02d00000, 0x02c00000, 0x02e80000,
432     0x06b80000, 0x06f80000, 0x06e00000, 0x06f00000,
433     0x06c80000, 0x06a00000, 0x06880000, 0x06800000,
434     0x06980000, 0x06d80000, 0x06a80000, 0x06900000,
435     0x06b00000, 0x06d00000, 0x06c00000, 0x06e80000,
436     0x05b80000, 0x05f80000, 0x05e00000, 0x05f00000,
437     0x05c80000, 0x05a00000, 0x05880000, 0x05800000,
438     0x05980000, 0x05d80000, 0x05a80000, 0x05900000,
439     0x05b00000, 0x05d00000, 0x05c00000, 0x05e80000,
440     0x04b80000, 0x04f80000, 0x04e00000, 0x04f00000,
441     0x04c80000, 0x04a00000, 0x04880000, 0x04800000,
442     0x04980000, 0x04d80000, 0x04a80000, 0x04900000,
443     0x04b00000, 0x04d00000, 0x04c00000, 0x04e80000,
444     0x01b80000, 0x01f80000, 0x01e00000, 0x01f00000,
445     0x01c80000, 0x01a00000, 0x01880000, 0x01800000,
446     0x01980000, 0x01d80000, 0x01a80000, 0x01900000,
447     0x01b00000, 0x01d00000, 0x01c00000, 0x01e80000,
448     /* 2 */
449     0xb8000003, 0xb0000003, 0xa0000003, 0xd8000003,
450     0xc8000003, 0xe0000003, 0x90000003, 0xd0000003,
451     0x88000003, 0xc0000003, 0x80000003, 0xf0000003,
452     0xf8000003, 0xe8000003, 0x98000003, 0xa8000003,
453     0x38000003, 0x30000003, 0x20000003, 0x58000003,
454     0x48000003, 0x60000003, 0x10000003, 0x50000003,
455     0x08000003, 0x40000003, 0x00000003, 0x70000003,
456     0x78000003, 0x68000003, 0x18000003, 0x28000003,
457     0x38000001, 0x30000001, 0x20000001, 0x58000001,
458     0x48000001, 0x60000001, 0x10000001, 0x50000001,
459     0x08000001, 0x40000001, 0x00000001, 0x70000001,
460     0x78000001, 0x68000001, 0x18000001, 0x28000001,
461     0x38000002, 0x30000002, 0x20000002, 0x58000002,
462     0x48000002, 0x60000002, 0x10000002, 0x50000002,
463     0x08000002, 0x40000002, 0x00000002, 0x70000002,
464     0x78000002, 0x68000002, 0x18000002, 0x28000002,
465     0xb8000006, 0xb0000006, 0xa0000006, 0xd8000006,
466     0xc8000006, 0xe0000006, 0x90000006, 0xd0000006,
467     0x88000006, 0xc0000006, 0x80000006, 0xf0000006,
468     0xf8000006, 0xe8000006, 0x98000006, 0xa8000006,
469     0xb8000004, 0xb0000004, 0xa0000004, 0xd8000004,
470     0xc8000004, 0xe0000004, 0x90000004, 0xd0000004,
471     0x88000004, 0xc0000004, 0x80000004, 0xf0000004,
472     0xf8000004, 0xe8000004, 0x98000004, 0xa8000004,
473     0xb8000007, 0xb0000007, 0xa0000007, 0xd8000007,
474     0xc8000007, 0xe0000007, 0x90000007, 0xd0000007,
475     0x88000007, 0xc0000007, 0x80000007, 0xf0000007,
476     0xf8000007, 0xe8000007, 0x98000007, 0xa8000007,
477     0x38000000, 0x30000000, 0x20000000, 0x58000000,
478     0x48000000, 0x60000000, 0x10000000, 0x50000000,
479     0x08000000, 0x40000000, 0x00000000, 0x70000000,
480     0x78000000, 0x68000000, 0x18000000, 0x28000000,
481     0x38000005, 0x30000005, 0x20000005, 0x58000005,
482     0x48000005, 0x60000005, 0x10000005, 0x50000005,
483     0x08000005, 0x40000005, 0x00000005, 0x70000005,
484     0x78000005, 0x68000005, 0x18000005, 0x28000005,
485     0xb8000000, 0xb0000000, 0xa0000000, 0xd8000000,
486     0xc8000000, 0xe0000000, 0x90000000, 0xd0000000,
487     0x88000000, 0xc0000000, 0x80000000, 0xf0000000,
488     0xf8000000, 0xe8000000, 0x98000000, 0xa8000000,
489     0xb8000002, 0xb0000002, 0xa0000002, 0xd8000002,
490     0xc8000002, 0xe0000002, 0x90000002, 0xd0000002,
491     0x88000002, 0xc0000002, 0x80000002, 0xf0000002,
492     0xf8000002, 0xe8000002, 0x98000002, 0xa8000002,
493     0xb8000005, 0xb0000005, 0xa0000005, 0xd8000005,
494     0xc8000005, 0xe0000005, 0x90000005, 0xd0000005,
495     0x88000005, 0xc0000005, 0x80000005, 0xf0000005,
496     0xf8000005, 0xe8000005, 0x98000005, 0xa8000005,
497     0x38000004, 0x30000004, 0x20000004, 0x58000004,
498     0x48000004, 0x60000004, 0x10000004, 0x50000004,
499     0x08000004, 0x40000004, 0x00000004, 0x70000004,
500     0x78000004, 0x68000004, 0x18000004, 0x28000004,
501     0x38000007, 0x30000007, 0x20000007, 0x58000007,
502     0x48000007, 0x60000007, 0x10000007, 0x50000007,
503     0x08000007, 0x40000007, 0x00000007, 0x70000007,
504     0x78000007, 0x68000007, 0x18000007, 0x28000007,
505     0x38000006, 0x30000006, 0x20000006, 0x58000006,
506     0x48000006, 0x60000006, 0x10000006, 0x50000006,
507     0x08000006, 0x40000006, 0x00000006, 0x70000006,
508     0x78000006, 0x68000006, 0x18000006, 0x28000006,
509     0xb8000001, 0xb0000001, 0xa0000001, 0xd8000001,
510     0xc8000001, 0xe0000001, 0x90000001, 0xd0000001,
511     0x88000001, 0xc0000001, 0x80000001, 0xf0000001,
512     0xf8000001, 0xe8000001, 0x98000001, 0xa8000001,
513     /* 3 */
514     0x000000e8, 0x000000f0, 0x000000a0, 0x00000088,
515     0x000000b8, 0x00000080, 0x000000a8, 0x000000d0,
516     0x00000098, 0x000000e0, 0x000000c0, 0x000000f8,
517     0x000000b0, 0x00000090, 0x000000c8, 0x000000d8,
518     0x000001e8, 0x000001f0, 0x000001a0, 0x00000188,
519     0x000001b8, 0x00000180, 0x000001a8, 0x000001d0,
520     0x00000198, 0x000001e0, 0x000001c0, 0x000001f8,
521     0x000001b0, 0x00000190, 0x000001c8, 0x000001d8,
522     0x00000568, 0x00000570, 0x00000520, 0x00000508,
523     0x00000538, 0x00000500, 0x00000528, 0x00000550,
524     0x00000518, 0x00000560, 0x00000540, 0x00000578,
525     0x00000530, 0x00000510, 0x00000548, 0x00000558,
526     0x000004e8, 0x000004f0, 0x000004a0, 0x00000488,
527     0x000004b8, 0x00000480, 0x000004a8, 0x000004d0,
528     0x00000498, 0x000004e0, 0x000004c0, 0x000004f8,
529     0x000004b0, 0x00000490, 0x000004c8, 0x000004d8,
530     0x000002e8, 0x000002f0, 0x000002a0, 0x00000288,
531     0x000002b8, 0x00000280, 0x000002a8, 0x000002d0,
532     0x00000298, 0x000002e0, 0x000002c0, 0x000002f8,
533     0x000002b0, 0x00000290, 0x000002c8, 0x000002d8,
534     0x000005e8, 0x000005f0, 0x000005a0, 0x00000588,
535     0x000005b8, 0x00000580, 0x000005a8, 0x000005d0,
536     0x00000598, 0x000005e0, 0x000005c0, 0x000005f8,
537     0x000005b0, 0x00000590, 0x000005c8, 0x000005d8,
538     0x00000268, 0x00000270, 0x00000220, 0x00000208,
539     0x00000238, 0x00000200, 0x00000228, 0x00000250,
540     0x00000218, 0x00000260, 0x00000240, 0x00000278,
541     0x00000230, 0x00000210, 0x00000248, 0x00000258,
542     0x000007e8, 0x000007f0, 0x000007a0, 0x00000788,
543     0x000007b8, 0x00000780, 0x000007a8, 0x000007d0,
544     0x00000798, 0x000007e0, 0x000007c0, 0x000007f8,
545     0x000007b0, 0x00000790, 0x000007c8, 0x000007d8,
546     0x00000468, 0x00000470, 0x00000420, 0x00000408,
547     0x00000438, 0x00000400, 0x00000428, 0x00000450,
548     0x00000418, 0x00000460, 0x00000440, 0x00000478,
549     0x00000430, 0x00000410, 0x00000448, 0x00000458,
550     0x00000368, 0x00000370, 0x00000320, 0x00000308,
551     0x00000338, 0x00000300, 0x00000328, 0x00000350,
552     0x00000318, 0x00000360, 0x00000340, 0x00000378,
553     0x00000330, 0x00000310, 0x00000348, 0x00000358,
554     0x000003e8, 0x000003f0, 0x000003a0, 0x00000388,
555     0x000003b8, 0x00000380, 0x000003a8, 0x000003d0,
556     0x00000398, 0x000003e0, 0x000003c0, 0x000003f8,
557     0x000003b0, 0x00000390, 0x000003c8, 0x000003d8,
558     0x00000768, 0x00000770, 0x00000720, 0x00000708,
559     0x00000738, 0x00000700, 0x00000728, 0x00000750,
560     0x00000718, 0x00000760, 0x00000740, 0x00000778,
561     0x00000730, 0x00000710, 0x00000748, 0x00000758,
562     0x000006e8, 0x000006f0, 0x000006a0, 0x00000688,
563     0x000006b8, 0x00000680, 0x000006a8, 0x000006d0,
564     0x00000698, 0x000006e0, 0x000006c0, 0x000006f8,
565     0x000006b0, 0x00000690, 0x000006c8, 0x000006d8,
566     0x00000068, 0x00000070, 0x00000020, 0x00000008,
567     0x00000038, 0x00000000, 0x00000028, 0x00000050,
568     0x00000018, 0x00000060, 0x00000040, 0x00000078,
569     0x00000030, 0x00000010, 0x00000048, 0x00000058,
570     0x00000168, 0x00000170, 0x00000120, 0x00000108,
571     0x00000138, 0x00000100, 0x00000128, 0x00000150,
572     0x00000118, 0x00000160, 0x00000140, 0x00000178,
573     0x00000130, 0x00000110, 0x00000148, 0x00000158,
574     0x00000668, 0x00000670, 0x00000620, 0x00000608,
575     0x00000638, 0x00000600, 0x00000628, 0x00000650,
576     0x00000618, 0x00000660, 0x00000640, 0x00000678,
577     0x00000630, 0x00000610, 0x00000648, 0x00000658,
578   }
579 };
580 
581 const struct gost28147_param gost28147_param_Test_89 =
582 {
583   0,
584   {
585     /* 0 */
586     0x00062000, 0x00061000, 0x00067800, 0x00062800,
587     0x00064800, 0x00060800, 0x00060000, 0x00064000,
588     0x00067000, 0x00061800, 0x00065800, 0x00066000,
589     0x00066800, 0x00063800, 0x00065000, 0x00063000,
590     0x0004a000, 0x00049000, 0x0004f800, 0x0004a800,
591     0x0004c800, 0x00048800, 0x00048000, 0x0004c000,
592     0x0004f000, 0x00049800, 0x0004d800, 0x0004e000,
593     0x0004e800, 0x0004b800, 0x0004d000, 0x0004b000,
594     0x0007a000, 0x00079000, 0x0007f800, 0x0007a800,
595     0x0007c800, 0x00078800, 0x00078000, 0x0007c000,
596     0x0007f000, 0x00079800, 0x0007d800, 0x0007e000,
597     0x0007e800, 0x0007b800, 0x0007d000, 0x0007b000,
598     0x00072000, 0x00071000, 0x00077800, 0x00072800,
599     0x00074800, 0x00070800, 0x00070000, 0x00074000,
600     0x00077000, 0x00071800, 0x00075800, 0x00076000,
601     0x00076800, 0x00073800, 0x00075000, 0x00073000,
602     0x00042000, 0x00041000, 0x00047800, 0x00042800,
603     0x00044800, 0x00040800, 0x00040000, 0x00044000,
604     0x00047000, 0x00041800, 0x00045800, 0x00046000,
605     0x00046800, 0x00043800, 0x00045000, 0x00043000,
606     0x0000a000, 0x00009000, 0x0000f800, 0x0000a800,
607     0x0000c800, 0x00008800, 0x00008000, 0x0000c000,
608     0x0000f000, 0x00009800, 0x0000d800, 0x0000e000,
609     0x0000e800, 0x0000b800, 0x0000d000, 0x0000b000,
610     0x0001a000, 0x00019000, 0x0001f800, 0x0001a800,
611     0x0001c800, 0x00018800, 0x00018000, 0x0001c000,
612     0x0001f000, 0x00019800, 0x0001d800, 0x0001e000,
613     0x0001e800, 0x0001b800, 0x0001d000, 0x0001b000,
614     0x00052000, 0x00051000, 0x00057800, 0x00052800,
615     0x00054800, 0x00050800, 0x00050000, 0x00054000,
616     0x00057000, 0x00051800, 0x00055800, 0x00056000,
617     0x00056800, 0x00053800, 0x00055000, 0x00053000,
618     0x00012000, 0x00011000, 0x00017800, 0x00012800,
619     0x00014800, 0x00010800, 0x00010000, 0x00014000,
620     0x00017000, 0x00011800, 0x00015800, 0x00016000,
621     0x00016800, 0x00013800, 0x00015000, 0x00013000,
622     0x0003a000, 0x00039000, 0x0003f800, 0x0003a800,
623     0x0003c800, 0x00038800, 0x00038000, 0x0003c000,
624     0x0003f000, 0x00039800, 0x0003d800, 0x0003e000,
625     0x0003e800, 0x0003b800, 0x0003d000, 0x0003b000,
626     0x00022000, 0x00021000, 0x00027800, 0x00022800,
627     0x00024800, 0x00020800, 0x00020000, 0x00024000,
628     0x00027000, 0x00021800, 0x00025800, 0x00026000,
629     0x00026800, 0x00023800, 0x00025000, 0x00023000,
630     0x0006a000, 0x00069000, 0x0006f800, 0x0006a800,
631     0x0006c800, 0x00068800, 0x00068000, 0x0006c000,
632     0x0006f000, 0x00069800, 0x0006d800, 0x0006e000,
633     0x0006e800, 0x0006b800, 0x0006d000, 0x0006b000,
634     0x00032000, 0x00031000, 0x00037800, 0x00032800,
635     0x00034800, 0x00030800, 0x00030000, 0x00034000,
636     0x00037000, 0x00031800, 0x00035800, 0x00036000,
637     0x00036800, 0x00033800, 0x00035000, 0x00033000,
638     0x00002000, 0x00001000, 0x00007800, 0x00002800,
639     0x00004800, 0x00000800, 0x00000000, 0x00004000,
640     0x00007000, 0x00001800, 0x00005800, 0x00006000,
641     0x00006800, 0x00003800, 0x00005000, 0x00003000,
642     0x0005a000, 0x00059000, 0x0005f800, 0x0005a800,
643     0x0005c800, 0x00058800, 0x00058000, 0x0005c000,
644     0x0005f000, 0x00059800, 0x0005d800, 0x0005e000,
645     0x0005e800, 0x0005b800, 0x0005d000, 0x0005b000,
646     0x0002a000, 0x00029000, 0x0002f800, 0x0002a800,
647     0x0002c800, 0x00028800, 0x00028000, 0x0002c000,
648     0x0002f000, 0x00029800, 0x0002d800, 0x0002e000,
649     0x0002e800, 0x0002b800, 0x0002d000, 0x0002b000,
650     /* 1 */
651     0x07680000, 0x07400000, 0x07700000, 0x07600000,
652     0x07380000, 0x07180000, 0x07480000, 0x07500000,
653     0x07080000, 0x07280000, 0x07100000, 0x07200000,
654     0x07300000, 0x07780000, 0x07000000, 0x07580000,
655     0x04e80000, 0x04c00000, 0x04f00000, 0x04e00000,
656     0x04b80000, 0x04980000, 0x04c80000, 0x04d00000,
657     0x04880000, 0x04a80000, 0x04900000, 0x04a00000,
658     0x04b00000, 0x04f80000, 0x04800000, 0x04d80000,
659     0x05e80000, 0x05c00000, 0x05f00000, 0x05e00000,
660     0x05b80000, 0x05980000, 0x05c80000, 0x05d00000,
661     0x05880000, 0x05a80000, 0x05900000, 0x05a00000,
662     0x05b00000, 0x05f80000, 0x05800000, 0x05d80000,
663     0x01680000, 0x01400000, 0x01700000, 0x01600000,
664     0x01380000, 0x01180000, 0x01480000, 0x01500000,
665     0x01080000, 0x01280000, 0x01100000, 0x01200000,
666     0x01300000, 0x01780000, 0x01000000, 0x01580000,
667     0x02e80000, 0x02c00000, 0x02f00000, 0x02e00000,
668     0x02b80000, 0x02980000, 0x02c80000, 0x02d00000,
669     0x02880000, 0x02a80000, 0x02900000, 0x02a00000,
670     0x02b00000, 0x02f80000, 0x02800000, 0x02d80000,
671     0x07e80000, 0x07c00000, 0x07f00000, 0x07e00000,
672     0x07b80000, 0x07980000, 0x07c80000, 0x07d00000,
673     0x07880000, 0x07a80000, 0x07900000, 0x07a00000,
674     0x07b00000, 0x07f80000, 0x07800000, 0x07d80000,
675     0x03e80000, 0x03c00000, 0x03f00000, 0x03e00000,
676     0x03b80000, 0x03980000, 0x03c80000, 0x03d00000,
677     0x03880000, 0x03a80000, 0x03900000, 0x03a00000,
678     0x03b00000, 0x03f80000, 0x03800000, 0x03d80000,
679     0x00e80000, 0x00c00000, 0x00f00000, 0x00e00000,
680     0x00b80000, 0x00980000, 0x00c80000, 0x00d00000,
681     0x00880000, 0x00a80000, 0x00900000, 0x00a00000,
682     0x00b00000, 0x00f80000, 0x00800000, 0x00d80000,
683     0x00680000, 0x00400000, 0x00700000, 0x00600000,
684     0x00380000, 0x00180000, 0x00480000, 0x00500000,
685     0x00080000, 0x00280000, 0x00100000, 0x00200000,
686     0x00300000, 0x00780000, 0x00000000, 0x00580000,
687     0x06e80000, 0x06c00000, 0x06f00000, 0x06e00000,
688     0x06b80000, 0x06980000, 0x06c80000, 0x06d00000,
689     0x06880000, 0x06a80000, 0x06900000, 0x06a00000,
690     0x06b00000, 0x06f80000, 0x06800000, 0x06d80000,
691     0x06680000, 0x06400000, 0x06700000, 0x06600000,
692     0x06380000, 0x06180000, 0x06480000, 0x06500000,
693     0x06080000, 0x06280000, 0x06100000, 0x06200000,
694     0x06300000, 0x06780000, 0x06000000, 0x06580000,
695     0x03680000, 0x03400000, 0x03700000, 0x03600000,
696     0x03380000, 0x03180000, 0x03480000, 0x03500000,
697     0x03080000, 0x03280000, 0x03100000, 0x03200000,
698     0x03300000, 0x03780000, 0x03000000, 0x03580000,
699     0x05680000, 0x05400000, 0x05700000, 0x05600000,
700     0x05380000, 0x05180000, 0x05480000, 0x05500000,
701     0x05080000, 0x05280000, 0x05100000, 0x05200000,
702     0x05300000, 0x05780000, 0x05000000, 0x05580000,
703     0x02680000, 0x02400000, 0x02700000, 0x02600000,
704     0x02380000, 0x02180000, 0x02480000, 0x02500000,
705     0x02080000, 0x02280000, 0x02100000, 0x02200000,
706     0x02300000, 0x02780000, 0x02000000, 0x02580000,
707     0x01e80000, 0x01c00000, 0x01f00000, 0x01e00000,
708     0x01b80000, 0x01980000, 0x01c80000, 0x01d00000,
709     0x01880000, 0x01a80000, 0x01900000, 0x01a00000,
710     0x01b00000, 0x01f80000, 0x01800000, 0x01d80000,
711     0x04680000, 0x04400000, 0x04700000, 0x04600000,
712     0x04380000, 0x04180000, 0x04480000, 0x04500000,
713     0x04080000, 0x04280000, 0x04100000, 0x04200000,
714     0x04300000, 0x04780000, 0x04000000, 0x04580000,
715     /* 2 */
716     0x18000004, 0x70000004, 0x28000004, 0x48000004,
717     0x30000004, 0x40000004, 0x00000004, 0x68000004,
718     0x50000004, 0x58000004, 0x38000004, 0x60000004,
719     0x10000004, 0x08000004, 0x78000004, 0x20000004,
720     0x98000007, 0xf0000007, 0xa8000007, 0xc8000007,
721     0xb0000007, 0xc0000007, 0x80000007, 0xe8000007,
722     0xd0000007, 0xd8000007, 0xb8000007, 0xe0000007,
723     0x90000007, 0x88000007, 0xf8000007, 0xa0000007,
724     0x18000003, 0x70000003, 0x28000003, 0x48000003,
725     0x30000003, 0x40000003, 0x00000003, 0x68000003,
726     0x50000003, 0x58000003, 0x38000003, 0x60000003,
727     0x10000003, 0x08000003, 0x78000003, 0x20000003,
728     0x98000005, 0xf0000005, 0xa8000005, 0xc8000005,
729     0xb0000005, 0xc0000005, 0x80000005, 0xe8000005,
730     0xd0000005, 0xd8000005, 0xb8000005, 0xe0000005,
731     0x90000005, 0x88000005, 0xf8000005, 0xa0000005,
732     0x98000000, 0xf0000000, 0xa8000000, 0xc8000000,
733     0xb0000000, 0xc0000000, 0x80000000, 0xe8000000,
734     0xd0000000, 0xd8000000, 0xb8000000, 0xe0000000,
735     0x90000000, 0x88000000, 0xf8000000, 0xa0000000,
736     0x98000004, 0xf0000004, 0xa8000004, 0xc8000004,
737     0xb0000004, 0xc0000004, 0x80000004, 0xe8000004,
738     0xd0000004, 0xd8000004, 0xb8000004, 0xe0000004,
739     0x90000004, 0x88000004, 0xf8000004, 0xa0000004,
740     0x18000006, 0x70000006, 0x28000006, 0x48000006,
741     0x30000006, 0x40000006, 0x00000006, 0x68000006,
742     0x50000006, 0x58000006, 0x38000006, 0x60000006,
743     0x10000006, 0x08000006, 0x78000006, 0x20000006,
744     0x98000002, 0xf0000002, 0xa8000002, 0xc8000002,
745     0xb0000002, 0xc0000002, 0x80000002, 0xe8000002,
746     0xd0000002, 0xd8000002, 0xb8000002, 0xe0000002,
747     0x90000002, 0x88000002, 0xf8000002, 0xa0000002,
748     0x98000006, 0xf0000006, 0xa8000006, 0xc8000006,
749     0xb0000006, 0xc0000006, 0x80000006, 0xe8000006,
750     0xd0000006, 0xd8000006, 0xb8000006, 0xe0000006,
751     0x90000006, 0x88000006, 0xf8000006, 0xa0000006,
752     0x98000001, 0xf0000001, 0xa8000001, 0xc8000001,
753     0xb0000001, 0xc0000001, 0x80000001, 0xe8000001,
754     0xd0000001, 0xd8000001, 0xb8000001, 0xe0000001,
755     0x90000001, 0x88000001, 0xf8000001, 0xa0000001,
756     0x98000003, 0xf0000003, 0xa8000003, 0xc8000003,
757     0xb0000003, 0xc0000003, 0x80000003, 0xe8000003,
758     0xd0000003, 0xd8000003, 0xb8000003, 0xe0000003,
759     0x90000003, 0x88000003, 0xf8000003, 0xa0000003,
760     0x18000005, 0x70000005, 0x28000005, 0x48000005,
761     0x30000005, 0x40000005, 0x00000005, 0x68000005,
762     0x50000005, 0x58000005, 0x38000005, 0x60000005,
763     0x10000005, 0x08000005, 0x78000005, 0x20000005,
764     0x18000000, 0x70000000, 0x28000000, 0x48000000,
765     0x30000000, 0x40000000, 0x00000000, 0x68000000,
766     0x50000000, 0x58000000, 0x38000000, 0x60000000,
767     0x10000000, 0x08000000, 0x78000000, 0x20000000,
768     0x18000007, 0x70000007, 0x28000007, 0x48000007,
769     0x30000007, 0x40000007, 0x00000007, 0x68000007,
770     0x50000007, 0x58000007, 0x38000007, 0x60000007,
771     0x10000007, 0x08000007, 0x78000007, 0x20000007,
772     0x18000001, 0x70000001, 0x28000001, 0x48000001,
773     0x30000001, 0x40000001, 0x00000001, 0x68000001,
774     0x50000001, 0x58000001, 0x38000001, 0x60000001,
775     0x10000001, 0x08000001, 0x78000001, 0x20000001,
776     0x18000002, 0x70000002, 0x28000002, 0x48000002,
777     0x30000002, 0x40000002, 0x00000002, 0x68000002,
778     0x50000002, 0x58000002, 0x38000002, 0x60000002,
779     0x10000002, 0x08000002, 0x78000002, 0x20000002,
780     /* 3 */
781     0x00000648, 0x00000658, 0x00000660, 0x00000600,
782     0x00000618, 0x00000630, 0x00000638, 0x00000628,
783     0x00000620, 0x00000640, 0x00000670, 0x00000678,
784     0x00000608, 0x00000650, 0x00000610, 0x00000668,
785     0x00000348, 0x00000358, 0x00000360, 0x00000300,
786     0x00000318, 0x00000330, 0x00000338, 0x00000328,
787     0x00000320, 0x00000340, 0x00000370, 0x00000378,
788     0x00000308, 0x00000350, 0x00000310, 0x00000368,
789     0x000002c8, 0x000002d8, 0x000002e0, 0x00000280,
790     0x00000298, 0x000002b0, 0x000002b8, 0x000002a8,
791     0x000002a0, 0x000002c0, 0x000002f0, 0x000002f8,
792     0x00000288, 0x000002d0, 0x00000290, 0x000002e8,
793     0x00000148, 0x00000158, 0x00000160, 0x00000100,
794     0x00000118, 0x00000130, 0x00000138, 0x00000128,
795     0x00000120, 0x00000140, 0x00000170, 0x00000178,
796     0x00000108, 0x00000150, 0x00000110, 0x00000168,
797     0x000005c8, 0x000005d8, 0x000005e0, 0x00000580,
798     0x00000598, 0x000005b0, 0x000005b8, 0x000005a8,
799     0x000005a0, 0x000005c0, 0x000005f0, 0x000005f8,
800     0x00000588, 0x000005d0, 0x00000590, 0x000005e8,
801     0x00000048, 0x00000058, 0x00000060, 0x00000000,
802     0x00000018, 0x00000030, 0x00000038, 0x00000028,
803     0x00000020, 0x00000040, 0x00000070, 0x00000078,
804     0x00000008, 0x00000050, 0x00000010, 0x00000068,
805     0x000004c8, 0x000004d8, 0x000004e0, 0x00000480,
806     0x00000498, 0x000004b0, 0x000004b8, 0x000004a8,
807     0x000004a0, 0x000004c0, 0x000004f0, 0x000004f8,
808     0x00000488, 0x000004d0, 0x00000490, 0x000004e8,
809     0x000006c8, 0x000006d8, 0x000006e0, 0x00000680,
810     0x00000698, 0x000006b0, 0x000006b8, 0x000006a8,
811     0x000006a0, 0x000006c0, 0x000006f0, 0x000006f8,
812     0x00000688, 0x000006d0, 0x00000690, 0x000006e8,
813     0x000001c8, 0x000001d8, 0x000001e0, 0x00000180,
814     0x00000198, 0x000001b0, 0x000001b8, 0x000001a8,
815     0x000001a0, 0x000001c0, 0x000001f0, 0x000001f8,
816     0x00000188, 0x000001d0, 0x00000190, 0x000001e8,
817     0x00000748, 0x00000758, 0x00000760, 0x00000700,
818     0x00000718, 0x00000730, 0x00000738, 0x00000728,
819     0x00000720, 0x00000740, 0x00000770, 0x00000778,
820     0x00000708, 0x00000750, 0x00000710, 0x00000768,
821     0x000003c8, 0x000003d8, 0x000003e0, 0x00000380,
822     0x00000398, 0x000003b0, 0x000003b8, 0x000003a8,
823     0x000003a0, 0x000003c0, 0x000003f0, 0x000003f8,
824     0x00000388, 0x000003d0, 0x00000390, 0x000003e8,
825     0x00000548, 0x00000558, 0x00000560, 0x00000500,
826     0x00000518, 0x00000530, 0x00000538, 0x00000528,
827     0x00000520, 0x00000540, 0x00000570, 0x00000578,
828     0x00000508, 0x00000550, 0x00000510, 0x00000568,
829     0x000007c8, 0x000007d8, 0x000007e0, 0x00000780,
830     0x00000798, 0x000007b0, 0x000007b8, 0x000007a8,
831     0x000007a0, 0x000007c0, 0x000007f0, 0x000007f8,
832     0x00000788, 0x000007d0, 0x00000790, 0x000007e8,
833     0x00000248, 0x00000258, 0x00000260, 0x00000200,
834     0x00000218, 0x00000230, 0x00000238, 0x00000228,
835     0x00000220, 0x00000240, 0x00000270, 0x00000278,
836     0x00000208, 0x00000250, 0x00000210, 0x00000268,
837     0x000000c8, 0x000000d8, 0x000000e0, 0x00000080,
838     0x00000098, 0x000000b0, 0x000000b8, 0x000000a8,
839     0x000000a0, 0x000000c0, 0x000000f0, 0x000000f8,
840     0x00000088, 0x000000d0, 0x00000090, 0x000000e8,
841     0x00000448, 0x00000458, 0x00000460, 0x00000400,
842     0x00000418, 0x00000430, 0x00000438, 0x00000428,
843     0x00000420, 0x00000440, 0x00000470, 0x00000478,
844     0x00000408, 0x00000450, 0x00000410, 0x00000468,
845   }
846 };
847 
848 const struct gost28147_param gost28147_param_CryptoPro_A =
849 {
850   1,
851   {
852     /* 0 */
853     0x0001c800, 0x0001b000, 0x00019800, 0x00019000,
854     0x0001c000, 0x0001d800, 0x00018800, 0x0001b800,
855     0x0001d000, 0x0001a000, 0x0001f000, 0x0001f800,
856     0x0001e000, 0x00018000, 0x0001e800, 0x0001a800,
857     0x0003c800, 0x0003b000, 0x00039800, 0x00039000,
858     0x0003c000, 0x0003d800, 0x00038800, 0x0003b800,
859     0x0003d000, 0x0003a000, 0x0003f000, 0x0003f800,
860     0x0003e000, 0x00038000, 0x0003e800, 0x0003a800,
861     0x00074800, 0x00073000, 0x00071800, 0x00071000,
862     0x00074000, 0x00075800, 0x00070800, 0x00073800,
863     0x00075000, 0x00072000, 0x00077000, 0x00077800,
864     0x00076000, 0x00070000, 0x00076800, 0x00072800,
865     0x0004c800, 0x0004b000, 0x00049800, 0x00049000,
866     0x0004c000, 0x0004d800, 0x00048800, 0x0004b800,
867     0x0004d000, 0x0004a000, 0x0004f000, 0x0004f800,
868     0x0004e000, 0x00048000, 0x0004e800, 0x0004a800,
869     0x00044800, 0x00043000, 0x00041800, 0x00041000,
870     0x00044000, 0x00045800, 0x00040800, 0x00043800,
871     0x00045000, 0x00042000, 0x00047000, 0x00047800,
872     0x00046000, 0x00040000, 0x00046800, 0x00042800,
873     0x00054800, 0x00053000, 0x00051800, 0x00051000,
874     0x00054000, 0x00055800, 0x00050800, 0x00053800,
875     0x00055000, 0x00052000, 0x00057000, 0x00057800,
876     0x00056000, 0x00050000, 0x00056800, 0x00052800,
877     0x0007c800, 0x0007b000, 0x00079800, 0x00079000,
878     0x0007c000, 0x0007d800, 0x00078800, 0x0007b800,
879     0x0007d000, 0x0007a000, 0x0007f000, 0x0007f800,
880     0x0007e000, 0x00078000, 0x0007e800, 0x0007a800,
881     0x00004800, 0x00003000, 0x00001800, 0x00001000,
882     0x00004000, 0x00005800, 0x00000800, 0x00003800,
883     0x00005000, 0x00002000, 0x00007000, 0x00007800,
884     0x00006000, 0x00000000, 0x00006800, 0x00002800,
885     0x0002c800, 0x0002b000, 0x00029800, 0x00029000,
886     0x0002c000, 0x0002d800, 0x00028800, 0x0002b800,
887     0x0002d000, 0x0002a000, 0x0002f000, 0x0002f800,
888     0x0002e000, 0x00028000, 0x0002e800, 0x0002a800,
889     0x00014800, 0x00013000, 0x00011800, 0x00011000,
890     0x00014000, 0x00015800, 0x00010800, 0x00013800,
891     0x00015000, 0x00012000, 0x00017000, 0x00017800,
892     0x00016000, 0x00010000, 0x00016800, 0x00012800,
893     0x00034800, 0x00033000, 0x00031800, 0x00031000,
894     0x00034000, 0x00035800, 0x00030800, 0x00033800,
895     0x00035000, 0x00032000, 0x00037000, 0x00037800,
896     0x00036000, 0x00030000, 0x00036800, 0x00032800,
897     0x00064800, 0x00063000, 0x00061800, 0x00061000,
898     0x00064000, 0x00065800, 0x00060800, 0x00063800,
899     0x00065000, 0x00062000, 0x00067000, 0x00067800,
900     0x00066000, 0x00060000, 0x00066800, 0x00062800,
901     0x0005c800, 0x0005b000, 0x00059800, 0x00059000,
902     0x0005c000, 0x0005d800, 0x00058800, 0x0005b800,
903     0x0005d000, 0x0005a000, 0x0005f000, 0x0005f800,
904     0x0005e000, 0x00058000, 0x0005e800, 0x0005a800,
905     0x00024800, 0x00023000, 0x00021800, 0x00021000,
906     0x00024000, 0x00025800, 0x00020800, 0x00023800,
907     0x00025000, 0x00022000, 0x00027000, 0x00027800,
908     0x00026000, 0x00020000, 0x00026800, 0x00022800,
909     0x0006c800, 0x0006b000, 0x00069800, 0x00069000,
910     0x0006c000, 0x0006d800, 0x00068800, 0x0006b800,
911     0x0006d000, 0x0006a000, 0x0006f000, 0x0006f800,
912     0x0006e000, 0x00068000, 0x0006e800, 0x0006a800,
913     0x0000c800, 0x0000b000, 0x00009800, 0x00009000,
914     0x0000c000, 0x0000d800, 0x00008800, 0x0000b800,
915     0x0000d000, 0x0000a000, 0x0000f000, 0x0000f800,
916     0x0000e000, 0x00008000, 0x0000e800, 0x0000a800,
917     /* 1 */
918     0x07700000, 0x07200000, 0x07300000, 0x07100000,
919     0x07580000, 0x07180000, 0x07680000, 0x07400000,
920     0x07600000, 0x07780000, 0x07280000, 0x07500000,
921     0x07000000, 0x07380000, 0x07080000, 0x07480000,
922     0x03f00000, 0x03a00000, 0x03b00000, 0x03900000,
923     0x03d80000, 0x03980000, 0x03e80000, 0x03c00000,
924     0x03e00000, 0x03f80000, 0x03a80000, 0x03d00000,
925     0x03800000, 0x03b80000, 0x03880000, 0x03c80000,
926     0x05700000, 0x05200000, 0x05300000, 0x05100000,
927     0x05580000, 0x05180000, 0x05680000, 0x05400000,
928     0x05600000, 0x05780000, 0x05280000, 0x05500000,
929     0x05000000, 0x05380000, 0x05080000, 0x05480000,
930     0x06700000, 0x06200000, 0x06300000, 0x06100000,
931     0x06580000, 0x06180000, 0x06680000, 0x06400000,
932     0x06600000, 0x06780000, 0x06280000, 0x06500000,
933     0x06000000, 0x06380000, 0x06080000, 0x06480000,
934     0x06f00000, 0x06a00000, 0x06b00000, 0x06900000,
935     0x06d80000, 0x06980000, 0x06e80000, 0x06c00000,
936     0x06e00000, 0x06f80000, 0x06a80000, 0x06d00000,
937     0x06800000, 0x06b80000, 0x06880000, 0x06c80000,
938     0x00f00000, 0x00a00000, 0x00b00000, 0x00900000,
939     0x00d80000, 0x00980000, 0x00e80000, 0x00c00000,
940     0x00e00000, 0x00f80000, 0x00a80000, 0x00d00000,
941     0x00800000, 0x00b80000, 0x00880000, 0x00c80000,
942     0x01f00000, 0x01a00000, 0x01b00000, 0x01900000,
943     0x01d80000, 0x01980000, 0x01e80000, 0x01c00000,
944     0x01e00000, 0x01f80000, 0x01a80000, 0x01d00000,
945     0x01800000, 0x01b80000, 0x01880000, 0x01c80000,
946     0x04f00000, 0x04a00000, 0x04b00000, 0x04900000,
947     0x04d80000, 0x04980000, 0x04e80000, 0x04c00000,
948     0x04e00000, 0x04f80000, 0x04a80000, 0x04d00000,
949     0x04800000, 0x04b80000, 0x04880000, 0x04c80000,
950     0x00700000, 0x00200000, 0x00300000, 0x00100000,
951     0x00580000, 0x00180000, 0x00680000, 0x00400000,
952     0x00600000, 0x00780000, 0x00280000, 0x00500000,
953     0x00000000, 0x00380000, 0x00080000, 0x00480000,
954     0x01700000, 0x01200000, 0x01300000, 0x01100000,
955     0x01580000, 0x01180000, 0x01680000, 0x01400000,
956     0x01600000, 0x01780000, 0x01280000, 0x01500000,
957     0x01000000, 0x01380000, 0x01080000, 0x01480000,
958     0x05f00000, 0x05a00000, 0x05b00000, 0x05900000,
959     0x05d80000, 0x05980000, 0x05e80000, 0x05c00000,
960     0x05e00000, 0x05f80000, 0x05a80000, 0x05d00000,
961     0x05800000, 0x05b80000, 0x05880000, 0x05c80000,
962     0x02700000, 0x02200000, 0x02300000, 0x02100000,
963     0x02580000, 0x02180000, 0x02680000, 0x02400000,
964     0x02600000, 0x02780000, 0x02280000, 0x02500000,
965     0x02000000, 0x02380000, 0x02080000, 0x02480000,
966     0x07f00000, 0x07a00000, 0x07b00000, 0x07900000,
967     0x07d80000, 0x07980000, 0x07e80000, 0x07c00000,
968     0x07e00000, 0x07f80000, 0x07a80000, 0x07d00000,
969     0x07800000, 0x07b80000, 0x07880000, 0x07c80000,
970     0x04700000, 0x04200000, 0x04300000, 0x04100000,
971     0x04580000, 0x04180000, 0x04680000, 0x04400000,
972     0x04600000, 0x04780000, 0x04280000, 0x04500000,
973     0x04000000, 0x04380000, 0x04080000, 0x04480000,
974     0x02f00000, 0x02a00000, 0x02b00000, 0x02900000,
975     0x02d80000, 0x02980000, 0x02e80000, 0x02c00000,
976     0x02e00000, 0x02f80000, 0x02a80000, 0x02d00000,
977     0x02800000, 0x02b80000, 0x02880000, 0x02c80000,
978     0x03700000, 0x03200000, 0x03300000, 0x03100000,
979     0x03580000, 0x03180000, 0x03680000, 0x03400000,
980     0x03600000, 0x03780000, 0x03280000, 0x03500000,
981     0x03000000, 0x03380000, 0x03080000, 0x03480000,
982     /* 2 */
983     0xd8000001, 0xa8000001, 0x88000001, 0xc8000001,
984     0xc0000001, 0xe8000001, 0xf8000001, 0x80000001,
985     0xf0000001, 0xa0000001, 0x90000001, 0x98000001,
986     0xe0000001, 0xb8000001, 0xd0000001, 0xb0000001,
987     0x58000005, 0x28000005, 0x08000005, 0x48000005,
988     0x40000005, 0x68000005, 0x78000005, 0x00000005,
989     0x70000005, 0x20000005, 0x10000005, 0x18000005,
990     0x60000005, 0x38000005, 0x50000005, 0x30000005,
991     0xd8000006, 0xa8000006, 0x88000006, 0xc8000006,
992     0xc0000006, 0xe8000006, 0xf8000006, 0x80000006,
993     0xf0000006, 0xa0000006, 0x90000006, 0x98000006,
994     0xe0000006, 0xb8000006, 0xd0000006, 0xb0000006,
995     0x58000006, 0x28000006, 0x08000006, 0x48000006,
996     0x40000006, 0x68000006, 0x78000006, 0x00000006,
997     0x70000006, 0x20000006, 0x10000006, 0x18000006,
998     0x60000006, 0x38000006, 0x50000006, 0x30000006,
999     0xd8000000, 0xa8000000, 0x88000000, 0xc8000000,
1000     0xc0000000, 0xe8000000, 0xf8000000, 0x80000000,
1001     0xf0000000, 0xa0000000, 0x90000000, 0x98000000,
1002     0xe0000000, 0xb8000000, 0xd0000000, 0xb0000000,
1003     0x58000001, 0x28000001, 0x08000001, 0x48000001,
1004     0x40000001, 0x68000001, 0x78000001, 0x00000001,
1005     0x70000001, 0x20000001, 0x10000001, 0x18000001,
1006     0x60000001, 0x38000001, 0x50000001, 0x30000001,
1007     0x58000000, 0x28000000, 0x08000000, 0x48000000,
1008     0x40000000, 0x68000000, 0x78000000, 0x00000000,
1009     0x70000000, 0x20000000, 0x10000000, 0x18000000,
1010     0x60000000, 0x38000000, 0x50000000, 0x30000000,
1011     0xd8000005, 0xa8000005, 0x88000005, 0xc8000005,
1012     0xc0000005, 0xe8000005, 0xf8000005, 0x80000005,
1013     0xf0000005, 0xa0000005, 0x90000005, 0x98000005,
1014     0xe0000005, 0xb8000005, 0xd0000005, 0xb0000005,
1015     0xd8000003, 0xa8000003, 0x88000003, 0xc8000003,
1016     0xc0000003, 0xe8000003, 0xf8000003, 0x80000003,
1017     0xf0000003, 0xa0000003, 0x90000003, 0x98000003,
1018     0xe0000003, 0xb8000003, 0xd0000003, 0xb0000003,
1019     0xd8000002, 0xa8000002, 0x88000002, 0xc8000002,
1020     0xc0000002, 0xe8000002, 0xf8000002, 0x80000002,
1021     0xf0000002, 0xa0000002, 0x90000002, 0x98000002,
1022     0xe0000002, 0xb8000002, 0xd0000002, 0xb0000002,
1023     0xd8000004, 0xa8000004, 0x88000004, 0xc8000004,
1024     0xc0000004, 0xe8000004, 0xf8000004, 0x80000004,
1025     0xf0000004, 0xa0000004, 0x90000004, 0x98000004,
1026     0xe0000004, 0xb8000004, 0xd0000004, 0xb0000004,
1027     0x58000002, 0x28000002, 0x08000002, 0x48000002,
1028     0x40000002, 0x68000002, 0x78000002, 0x00000002,
1029     0x70000002, 0x20000002, 0x10000002, 0x18000002,
1030     0x60000002, 0x38000002, 0x50000002, 0x30000002,
1031     0x58000004, 0x28000004, 0x08000004, 0x48000004,
1032     0x40000004, 0x68000004, 0x78000004, 0x00000004,
1033     0x70000004, 0x20000004, 0x10000004, 0x18000004,
1034     0x60000004, 0x38000004, 0x50000004, 0x30000004,
1035     0xd8000007, 0xa8000007, 0x88000007, 0xc8000007,
1036     0xc0000007, 0xe8000007, 0xf8000007, 0x80000007,
1037     0xf0000007, 0xa0000007, 0x90000007, 0x98000007,
1038     0xe0000007, 0xb8000007, 0xd0000007, 0xb0000007,
1039     0x58000007, 0x28000007, 0x08000007, 0x48000007,
1040     0x40000007, 0x68000007, 0x78000007, 0x00000007,
1041     0x70000007, 0x20000007, 0x10000007, 0x18000007,
1042     0x60000007, 0x38000007, 0x50000007, 0x30000007,
1043     0x58000003, 0x28000003, 0x08000003, 0x48000003,
1044     0x40000003, 0x68000003, 0x78000003, 0x00000003,
1045     0x70000003, 0x20000003, 0x10000003, 0x18000003,
1046     0x60000003, 0x38000003, 0x50000003, 0x30000003,
1047     /* 3 */
1048     0x00000588, 0x000005e8, 0x00000590, 0x000005c8,
1049     0x000005b8, 0x000005d0, 0x000005b0, 0x00000580,
1050     0x000005c0, 0x000005e0, 0x000005a0, 0x000005a8,
1051     0x000005f8, 0x00000598, 0x000005d8, 0x000005f0,
1052     0x00000508, 0x00000568, 0x00000510, 0x00000548,
1053     0x00000538, 0x00000550, 0x00000530, 0x00000500,
1054     0x00000540, 0x00000560, 0x00000520, 0x00000528,
1055     0x00000578, 0x00000518, 0x00000558, 0x00000570,
1056     0x00000788, 0x000007e8, 0x00000790, 0x000007c8,
1057     0x000007b8, 0x000007d0, 0x000007b0, 0x00000780,
1058     0x000007c0, 0x000007e0, 0x000007a0, 0x000007a8,
1059     0x000007f8, 0x00000798, 0x000007d8, 0x000007f0,
1060     0x00000288, 0x000002e8, 0x00000290, 0x000002c8,
1061     0x000002b8, 0x000002d0, 0x000002b0, 0x00000280,
1062     0x000002c0, 0x000002e0, 0x000002a0, 0x000002a8,
1063     0x000002f8, 0x00000298, 0x000002d8, 0x000002f0,
1064     0x00000008, 0x00000068, 0x00000010, 0x00000048,
1065     0x00000038, 0x00000050, 0x00000030, 0x00000000,
1066     0x00000040, 0x00000060, 0x00000020, 0x00000028,
1067     0x00000078, 0x00000018, 0x00000058, 0x00000070,
1068     0x00000608, 0x00000668, 0x00000610, 0x00000648,
1069     0x00000638, 0x00000650, 0x00000630, 0x00000600,
1070     0x00000640, 0x00000660, 0x00000620, 0x00000628,
1071     0x00000678, 0x00000618, 0x00000658, 0x00000670,
1072     0x00000708, 0x00000768, 0x00000710, 0x00000748,
1073     0x00000738, 0x00000750, 0x00000730, 0x00000700,
1074     0x00000740, 0x00000760, 0x00000720, 0x00000728,
1075     0x00000778, 0x00000718, 0x00000758, 0x00000770,
1076     0x00000408, 0x00000468, 0x00000410, 0x00000448,
1077     0x00000438, 0x00000450, 0x00000430, 0x00000400,
1078     0x00000440, 0x00000460, 0x00000420, 0x00000428,
1079     0x00000478, 0x00000418, 0x00000458, 0x00000470,
1080     0x00000308, 0x00000368, 0x00000310, 0x00000348,
1081     0x00000338, 0x00000350, 0x00000330, 0x00000300,
1082     0x00000340, 0x00000360, 0x00000320, 0x00000328,
1083     0x00000378, 0x00000318, 0x00000358, 0x00000370,
1084     0x00000108, 0x00000168, 0x00000110, 0x00000148,
1085     0x00000138, 0x00000150, 0x00000130, 0x00000100,
1086     0x00000140, 0x00000160, 0x00000120, 0x00000128,
1087     0x00000178, 0x00000118, 0x00000158, 0x00000170,
1088     0x00000188, 0x000001e8, 0x00000190, 0x000001c8,
1089     0x000001b8, 0x000001d0, 0x000001b0, 0x00000180,
1090     0x000001c0, 0x000001e0, 0x000001a0, 0x000001a8,
1091     0x000001f8, 0x00000198, 0x000001d8, 0x000001f0,
1092     0x00000488, 0x000004e8, 0x00000490, 0x000004c8,
1093     0x000004b8, 0x000004d0, 0x000004b0, 0x00000480,
1094     0x000004c0, 0x000004e0, 0x000004a0, 0x000004a8,
1095     0x000004f8, 0x00000498, 0x000004d8, 0x000004f0,
1096     0x00000088, 0x000000e8, 0x00000090, 0x000000c8,
1097     0x000000b8, 0x000000d0, 0x000000b0, 0x00000080,
1098     0x000000c0, 0x000000e0, 0x000000a0, 0x000000a8,
1099     0x000000f8, 0x00000098, 0x000000d8, 0x000000f0,
1100     0x00000388, 0x000003e8, 0x00000390, 0x000003c8,
1101     0x000003b8, 0x000003d0, 0x000003b0, 0x00000380,
1102     0x000003c0, 0x000003e0, 0x000003a0, 0x000003a8,
1103     0x000003f8, 0x00000398, 0x000003d8, 0x000003f0,
1104     0x00000688, 0x000006e8, 0x00000690, 0x000006c8,
1105     0x000006b8, 0x000006d0, 0x000006b0, 0x00000680,
1106     0x000006c0, 0x000006e0, 0x000006a0, 0x000006a8,
1107     0x000006f8, 0x00000698, 0x000006d8, 0x000006f0,
1108     0x00000208, 0x00000268, 0x00000210, 0x00000248,
1109     0x00000238, 0x00000250, 0x00000230, 0x00000200,
1110     0x00000240, 0x00000260, 0x00000220, 0x00000228,
1111     0x00000278, 0x00000218, 0x00000258, 0x00000270,
1112   }
1113 };
1114 
1115 const struct gost28147_param gost28147_param_CryptoPro_B =
1116 {
1117   1,
1118   {
1119     /* 0 */
1120     0x00004000, 0x00002000, 0x00005800, 0x00000800,
1121     0x00001800, 0x00002800, 0x00000000, 0x00004800,
1122     0x00001000, 0x00007000, 0x00005000, 0x00006000,
1123     0x00006800, 0x00003000, 0x00003800, 0x00007800,
1124     0x0000c000, 0x0000a000, 0x0000d800, 0x00008800,
1125     0x00009800, 0x0000a800, 0x00008000, 0x0000c800,
1126     0x00009000, 0x0000f000, 0x0000d000, 0x0000e000,
1127     0x0000e800, 0x0000b000, 0x0000b800, 0x0000f800,
1128     0x00014000, 0x00012000, 0x00015800, 0x00010800,
1129     0x00011800, 0x00012800, 0x00010000, 0x00014800,
1130     0x00011000, 0x00017000, 0x00015000, 0x00016000,
1131     0x00016800, 0x00013000, 0x00013800, 0x00017800,
1132     0x00054000, 0x00052000, 0x00055800, 0x00050800,
1133     0x00051800, 0x00052800, 0x00050000, 0x00054800,
1134     0x00051000, 0x00057000, 0x00055000, 0x00056000,
1135     0x00056800, 0x00053000, 0x00053800, 0x00057800,
1136     0x00024000, 0x00022000, 0x00025800, 0x00020800,
1137     0x00021800, 0x00022800, 0x00020000, 0x00024800,
1138     0x00021000, 0x00027000, 0x00025000, 0x00026000,
1139     0x00026800, 0x00023000, 0x00023800, 0x00027800,
1140     0x0006c000, 0x0006a000, 0x0006d800, 0x00068800,
1141     0x00069800, 0x0006a800, 0x00068000, 0x0006c800,
1142     0x00069000, 0x0006f000, 0x0006d000, 0x0006e000,
1143     0x0006e800, 0x0006b000, 0x0006b800, 0x0006f800,
1144     0x0002c000, 0x0002a000, 0x0002d800, 0x00028800,
1145     0x00029800, 0x0002a800, 0x00028000, 0x0002c800,
1146     0x00029000, 0x0002f000, 0x0002d000, 0x0002e000,
1147     0x0002e800, 0x0002b000, 0x0002b800, 0x0002f800,
1148     0x00064000, 0x00062000, 0x00065800, 0x00060800,
1149     0x00061800, 0x00062800, 0x00060000, 0x00064800,
1150     0x00061000, 0x00067000, 0x00065000, 0x00066000,
1151     0x00066800, 0x00063000, 0x00063800, 0x00067800,
1152     0x0004c000, 0x0004a000, 0x0004d800, 0x00048800,
1153     0x00049800, 0x0004a800, 0x00048000, 0x0004c800,
1154     0x00049000, 0x0004f000, 0x0004d000, 0x0004e000,
1155     0x0004e800, 0x0004b000, 0x0004b800, 0x0004f800,
1156     0x0003c000, 0x0003a000, 0x0003d800, 0x00038800,
1157     0x00039800, 0x0003a800, 0x00038000, 0x0003c800,
1158     0x00039000, 0x0003f000, 0x0003d000, 0x0003e000,
1159     0x0003e800, 0x0003b000, 0x0003b800, 0x0003f800,
1160     0x0001c000, 0x0001a000, 0x0001d800, 0x00018800,
1161     0x00019800, 0x0001a800, 0x00018000, 0x0001c800,
1162     0x00019000, 0x0001f000, 0x0001d000, 0x0001e000,
1163     0x0001e800, 0x0001b000, 0x0001b800, 0x0001f800,
1164     0x0007c000, 0x0007a000, 0x0007d800, 0x00078800,
1165     0x00079800, 0x0007a800, 0x00078000, 0x0007c800,
1166     0x00079000, 0x0007f000, 0x0007d000, 0x0007e000,
1167     0x0007e800, 0x0007b000, 0x0007b800, 0x0007f800,
1168     0x0005c000, 0x0005a000, 0x0005d800, 0x00058800,
1169     0x00059800, 0x0005a800, 0x00058000, 0x0005c800,
1170     0x00059000, 0x0005f000, 0x0005d000, 0x0005e000,
1171     0x0005e800, 0x0005b000, 0x0005b800, 0x0005f800,
1172     0x00044000, 0x00042000, 0x00045800, 0x00040800,
1173     0x00041800, 0x00042800, 0x00040000, 0x00044800,
1174     0x00041000, 0x00047000, 0x00045000, 0x00046000,
1175     0x00046800, 0x00043000, 0x00043800, 0x00047800,
1176     0x00034000, 0x00032000, 0x00035800, 0x00030800,
1177     0x00031800, 0x00032800, 0x00030000, 0x00034800,
1178     0x00031000, 0x00037000, 0x00035000, 0x00036000,
1179     0x00036800, 0x00033000, 0x00033800, 0x00037800,
1180     0x00074000, 0x00072000, 0x00075800, 0x00070800,
1181     0x00071800, 0x00072800, 0x00070000, 0x00074800,
1182     0x00071000, 0x00077000, 0x00075000, 0x00076000,
1183     0x00076800, 0x00073000, 0x00073800, 0x00077800,
1184     /* 1 */
1185     0x03f00000, 0x03e00000, 0x03800000, 0x03d00000,
1186     0x03c80000, 0x03900000, 0x03e80000, 0x03d80000,
1187     0x03b80000, 0x03a80000, 0x03c00000, 0x03f80000,
1188     0x03980000, 0x03b00000, 0x03880000, 0x03a00000,
1189     0x02f00000, 0x02e00000, 0x02800000, 0x02d00000,
1190     0x02c80000, 0x02900000, 0x02e80000, 0x02d80000,
1191     0x02b80000, 0x02a80000, 0x02c00000, 0x02f80000,
1192     0x02980000, 0x02b00000, 0x02880000, 0x02a00000,
1193     0x00700000, 0x00600000, 0x00000000, 0x00500000,
1194     0x00480000, 0x00100000, 0x00680000, 0x00580000,
1195     0x00380000, 0x00280000, 0x00400000, 0x00780000,
1196     0x00180000, 0x00300000, 0x00080000, 0x00200000,
1197     0x06f00000, 0x06e00000, 0x06800000, 0x06d00000,
1198     0x06c80000, 0x06900000, 0x06e80000, 0x06d80000,
1199     0x06b80000, 0x06a80000, 0x06c00000, 0x06f80000,
1200     0x06980000, 0x06b00000, 0x06880000, 0x06a00000,
1201     0x05f00000, 0x05e00000, 0x05800000, 0x05d00000,
1202     0x05c80000, 0x05900000, 0x05e80000, 0x05d80000,
1203     0x05b80000, 0x05a80000, 0x05c00000, 0x05f80000,
1204     0x05980000, 0x05b00000, 0x05880000, 0x05a00000,
1205     0x03700000, 0x03600000, 0x03000000, 0x03500000,
1206     0x03480000, 0x03100000, 0x03680000, 0x03580000,
1207     0x03380000, 0x03280000, 0x03400000, 0x03780000,
1208     0x03180000, 0x03300000, 0x03080000, 0x03200000,
1209     0x00f00000, 0x00e00000, 0x00800000, 0x00d00000,
1210     0x00c80000, 0x00900000, 0x00e80000, 0x00d80000,
1211     0x00b80000, 0x00a80000, 0x00c00000, 0x00f80000,
1212     0x00980000, 0x00b00000, 0x00880000, 0x00a00000,
1213     0x01700000, 0x01600000, 0x01000000, 0x01500000,
1214     0x01480000, 0x01100000, 0x01680000, 0x01580000,
1215     0x01380000, 0x01280000, 0x01400000, 0x01780000,
1216     0x01180000, 0x01300000, 0x01080000, 0x01200000,
1217     0x01f00000, 0x01e00000, 0x01800000, 0x01d00000,
1218     0x01c80000, 0x01900000, 0x01e80000, 0x01d80000,
1219     0x01b80000, 0x01a80000, 0x01c00000, 0x01f80000,
1220     0x01980000, 0x01b00000, 0x01880000, 0x01a00000,
1221     0x05700000, 0x05600000, 0x05000000, 0x05500000,
1222     0x05480000, 0x05100000, 0x05680000, 0x05580000,
1223     0x05380000, 0x05280000, 0x05400000, 0x05780000,
1224     0x05180000, 0x05300000, 0x05080000, 0x05200000,
1225     0x06700000, 0x06600000, 0x06000000, 0x06500000,
1226     0x06480000, 0x06100000, 0x06680000, 0x06580000,
1227     0x06380000, 0x06280000, 0x06400000, 0x06780000,
1228     0x06180000, 0x06300000, 0x06080000, 0x06200000,
1229     0x07f00000, 0x07e00000, 0x07800000, 0x07d00000,
1230     0x07c80000, 0x07900000, 0x07e80000, 0x07d80000,
1231     0x07b80000, 0x07a80000, 0x07c00000, 0x07f80000,
1232     0x07980000, 0x07b00000, 0x07880000, 0x07a00000,
1233     0x02700000, 0x02600000, 0x02000000, 0x02500000,
1234     0x02480000, 0x02100000, 0x02680000, 0x02580000,
1235     0x02380000, 0x02280000, 0x02400000, 0x02780000,
1236     0x02180000, 0x02300000, 0x02080000, 0x02200000,
1237     0x07700000, 0x07600000, 0x07000000, 0x07500000,
1238     0x07480000, 0x07100000, 0x07680000, 0x07580000,
1239     0x07380000, 0x07280000, 0x07400000, 0x07780000,
1240     0x07180000, 0x07300000, 0x07080000, 0x07200000,
1241     0x04f00000, 0x04e00000, 0x04800000, 0x04d00000,
1242     0x04c80000, 0x04900000, 0x04e80000, 0x04d80000,
1243     0x04b80000, 0x04a80000, 0x04c00000, 0x04f80000,
1244     0x04980000, 0x04b00000, 0x04880000, 0x04a00000,
1245     0x04700000, 0x04600000, 0x04000000, 0x04500000,
1246     0x04480000, 0x04100000, 0x04680000, 0x04580000,
1247     0x04380000, 0x04280000, 0x04400000, 0x04780000,
1248     0x04180000, 0x04300000, 0x04080000, 0x04200000,
1249     /* 2 */
1250     0x10000004, 0x38000004, 0x60000004, 0x78000004,
1251     0x48000004, 0x28000004, 0x50000004, 0x58000004,
1252     0x08000004, 0x20000004, 0x00000004, 0x68000004,
1253     0x30000004, 0x40000004, 0x70000004, 0x18000004,
1254     0x90000001, 0xb8000001, 0xe0000001, 0xf8000001,
1255     0xc8000001, 0xa8000001, 0xd0000001, 0xd8000001,
1256     0x88000001, 0xa0000001, 0x80000001, 0xe8000001,
1257     0xb0000001, 0xc0000001, 0xf0000001, 0x98000001,
1258     0x10000001, 0x38000001, 0x60000001, 0x78000001,
1259     0x48000001, 0x28000001, 0x50000001, 0x58000001,
1260     0x08000001, 0x20000001, 0x00000001, 0x68000001,
1261     0x30000001, 0x40000001, 0x70000001, 0x18000001,
1262     0x10000003, 0x38000003, 0x60000003, 0x78000003,
1263     0x48000003, 0x28000003, 0x50000003, 0x58000003,
1264     0x08000003, 0x20000003, 0x00000003, 0x68000003,
1265     0x30000003, 0x40000003, 0x70000003, 0x18000003,
1266     0x10000002, 0x38000002, 0x60000002, 0x78000002,
1267     0x48000002, 0x28000002, 0x50000002, 0x58000002,
1268     0x08000002, 0x20000002, 0x00000002, 0x68000002,
1269     0x30000002, 0x40000002, 0x70000002, 0x18000002,
1270     0x90000006, 0xb8000006, 0xe0000006, 0xf8000006,
1271     0xc8000006, 0xa8000006, 0xd0000006, 0xd8000006,
1272     0x88000006, 0xa0000006, 0x80000006, 0xe8000006,
1273     0xb0000006, 0xc0000006, 0xf0000006, 0x98000006,
1274     0x10000007, 0x38000007, 0x60000007, 0x78000007,
1275     0x48000007, 0x28000007, 0x50000007, 0x58000007,
1276     0x08000007, 0x20000007, 0x00000007, 0x68000007,
1277     0x30000007, 0x40000007, 0x70000007, 0x18000007,
1278     0x90000005, 0xb8000005, 0xe0000005, 0xf8000005,
1279     0xc8000005, 0xa8000005, 0xd0000005, 0xd8000005,
1280     0x88000005, 0xa0000005, 0x80000005, 0xe8000005,
1281     0xb0000005, 0xc0000005, 0xf0000005, 0x98000005,
1282     0x10000006, 0x38000006, 0x60000006, 0x78000006,
1283     0x48000006, 0x28000006, 0x50000006, 0x58000006,
1284     0x08000006, 0x20000006, 0x00000006, 0x68000006,
1285     0x30000006, 0x40000006, 0x70000006, 0x18000006,
1286     0x90000000, 0xb8000000, 0xe0000000, 0xf8000000,
1287     0xc8000000, 0xa8000000, 0xd0000000, 0xd8000000,
1288     0x88000000, 0xa0000000, 0x80000000, 0xe8000000,
1289     0xb0000000, 0xc0000000, 0xf0000000, 0x98000000,
1290     0x90000003, 0xb8000003, 0xe0000003, 0xf8000003,
1291     0xc8000003, 0xa8000003, 0xd0000003, 0xd8000003,
1292     0x88000003, 0xa0000003, 0x80000003, 0xe8000003,
1293     0xb0000003, 0xc0000003, 0xf0000003, 0x98000003,
1294     0x90000007, 0xb8000007, 0xe0000007, 0xf8000007,
1295     0xc8000007, 0xa8000007, 0xd0000007, 0xd8000007,
1296     0x88000007, 0xa0000007, 0x80000007, 0xe8000007,
1297     0xb0000007, 0xc0000007, 0xf0000007, 0x98000007,
1298     0x10000005, 0x38000005, 0x60000005, 0x78000005,
1299     0x48000005, 0x28000005, 0x50000005, 0x58000005,
1300     0x08000005, 0x20000005, 0x00000005, 0x68000005,
1301     0x30000005, 0x40000005, 0x70000005, 0x18000005,
1302     0x10000000, 0x38000000, 0x60000000, 0x78000000,
1303     0x48000000, 0x28000000, 0x50000000, 0x58000000,
1304     0x08000000, 0x20000000, 0x00000000, 0x68000000,
1305     0x30000000, 0x40000000, 0x70000000, 0x18000000,
1306     0x90000004, 0xb8000004, 0xe0000004, 0xf8000004,
1307     0xc8000004, 0xa8000004, 0xd0000004, 0xd8000004,
1308     0x88000004, 0xa0000004, 0x80000004, 0xe8000004,
1309     0xb0000004, 0xc0000004, 0xf0000004, 0x98000004,
1310     0x90000002, 0xb8000002, 0xe0000002, 0xf8000002,
1311     0xc8000002, 0xa8000002, 0xd0000002, 0xd8000002,
1312     0x88000002, 0xa0000002, 0x80000002, 0xe8000002,
1313     0xb0000002, 0xc0000002, 0xf0000002, 0x98000002,
1314     /* 3 */
1315     0x00000028, 0x00000010, 0x00000050, 0x00000058,
1316     0x00000048, 0x00000008, 0x00000060, 0x00000018,
1317     0x00000038, 0x00000020, 0x00000068, 0x00000000,
1318     0x00000030, 0x00000078, 0x00000040, 0x00000070,
1319     0x00000228, 0x00000210, 0x00000250, 0x00000258,
1320     0x00000248, 0x00000208, 0x00000260, 0x00000218,
1321     0x00000238, 0x00000220, 0x00000268, 0x00000200,
1322     0x00000230, 0x00000278, 0x00000240, 0x00000270,
1323     0x000005a8, 0x00000590, 0x000005d0, 0x000005d8,
1324     0x000005c8, 0x00000588, 0x000005e0, 0x00000598,
1325     0x000005b8, 0x000005a0, 0x000005e8, 0x00000580,
1326     0x000005b0, 0x000005f8, 0x000005c0, 0x000005f0,
1327     0x00000728, 0x00000710, 0x00000750, 0x00000758,
1328     0x00000748, 0x00000708, 0x00000760, 0x00000718,
1329     0x00000738, 0x00000720, 0x00000768, 0x00000700,
1330     0x00000730, 0x00000778, 0x00000740, 0x00000770,
1331     0x00000428, 0x00000410, 0x00000450, 0x00000458,
1332     0x00000448, 0x00000408, 0x00000460, 0x00000418,
1333     0x00000438, 0x00000420, 0x00000468, 0x00000400,
1334     0x00000430, 0x00000478, 0x00000440, 0x00000470,
1335     0x000001a8, 0x00000190, 0x000001d0, 0x000001d8,
1336     0x000001c8, 0x00000188, 0x000001e0, 0x00000198,
1337     0x000001b8, 0x000001a0, 0x000001e8, 0x00000180,
1338     0x000001b0, 0x000001f8, 0x000001c0, 0x000001f0,
1339     0x000003a8, 0x00000390, 0x000003d0, 0x000003d8,
1340     0x000003c8, 0x00000388, 0x000003e0, 0x00000398,
1341     0x000003b8, 0x000003a0, 0x000003e8, 0x00000380,
1342     0x000003b0, 0x000003f8, 0x000003c0, 0x000003f0,
1343     0x000000a8, 0x00000090, 0x000000d0, 0x000000d8,
1344     0x000000c8, 0x00000088, 0x000000e0, 0x00000098,
1345     0x000000b8, 0x000000a0, 0x000000e8, 0x00000080,
1346     0x000000b0, 0x000000f8, 0x000000c0, 0x000000f0,
1347     0x00000528, 0x00000510, 0x00000550, 0x00000558,
1348     0x00000548, 0x00000508, 0x00000560, 0x00000518,
1349     0x00000538, 0x00000520, 0x00000568, 0x00000500,
1350     0x00000530, 0x00000578, 0x00000540, 0x00000570,
1351     0x00000128, 0x00000110, 0x00000150, 0x00000158,
1352     0x00000148, 0x00000108, 0x00000160, 0x00000118,
1353     0x00000138, 0x00000120, 0x00000168, 0x00000100,
1354     0x00000130, 0x00000178, 0x00000140, 0x00000170,
1355     0x000004a8, 0x00000490, 0x000004d0, 0x000004d8,
1356     0x000004c8, 0x00000488, 0x000004e0, 0x00000498,
1357     0x000004b8, 0x000004a0, 0x000004e8, 0x00000480,
1358     0x000004b0, 0x000004f8, 0x000004c0, 0x000004f0,
1359     0x00000328, 0x00000310, 0x00000350, 0x00000358,
1360     0x00000348, 0x00000308, 0x00000360, 0x00000318,
1361     0x00000338, 0x00000320, 0x00000368, 0x00000300,
1362     0x00000330, 0x00000378, 0x00000340, 0x00000370,
1363     0x000007a8, 0x00000790, 0x000007d0, 0x000007d8,
1364     0x000007c8, 0x00000788, 0x000007e0, 0x00000798,
1365     0x000007b8, 0x000007a0, 0x000007e8, 0x00000780,
1366     0x000007b0, 0x000007f8, 0x000007c0, 0x000007f0,
1367     0x000006a8, 0x00000690, 0x000006d0, 0x000006d8,
1368     0x000006c8, 0x00000688, 0x000006e0, 0x00000698,
1369     0x000006b8, 0x000006a0, 0x000006e8, 0x00000680,
1370     0x000006b0, 0x000006f8, 0x000006c0, 0x000006f0,
1371     0x000002a8, 0x00000290, 0x000002d0, 0x000002d8,
1372     0x000002c8, 0x00000288, 0x000002e0, 0x00000298,
1373     0x000002b8, 0x000002a0, 0x000002e8, 0x00000280,
1374     0x000002b0, 0x000002f8, 0x000002c0, 0x000002f0,
1375     0x00000628, 0x00000610, 0x00000650, 0x00000658,
1376     0x00000648, 0x00000608, 0x00000660, 0x00000618,
1377     0x00000638, 0x00000620, 0x00000668, 0x00000600,
1378     0x00000630, 0x00000678, 0x00000640, 0x00000670,
1379   }
1380 };
1381 
1382 const struct gost28147_param gost28147_param_CryptoPro_C =
1383 {
1384   1,
1385   {
1386     /* 0 */
1387     0x00000800, 0x00005800, 0x00006000, 0x00001000,
1388     0x00004800, 0x00006800, 0x00000000, 0x00007800,
1389     0x00002000, 0x00002800, 0x00004000, 0x00007000,
1390     0x00005000, 0x00003800, 0x00003000, 0x00001800,
1391     0x00008800, 0x0000d800, 0x0000e000, 0x00009000,
1392     0x0000c800, 0x0000e800, 0x00008000, 0x0000f800,
1393     0x0000a000, 0x0000a800, 0x0000c000, 0x0000f000,
1394     0x0000d000, 0x0000b800, 0x0000b000, 0x00009800,
1395     0x00038800, 0x0003d800, 0x0003e000, 0x00039000,
1396     0x0003c800, 0x0003e800, 0x00038000, 0x0003f800,
1397     0x0003a000, 0x0003a800, 0x0003c000, 0x0003f000,
1398     0x0003d000, 0x0003b800, 0x0003b000, 0x00039800,
1399     0x00068800, 0x0006d800, 0x0006e000, 0x00069000,
1400     0x0006c800, 0x0006e800, 0x00068000, 0x0006f800,
1401     0x0006a000, 0x0006a800, 0x0006c000, 0x0006f000,
1402     0x0006d000, 0x0006b800, 0x0006b000, 0x00069800,
1403     0x00058800, 0x0005d800, 0x0005e000, 0x00059000,
1404     0x0005c800, 0x0005e800, 0x00058000, 0x0005f800,
1405     0x0005a000, 0x0005a800, 0x0005c000, 0x0005f000,
1406     0x0005d000, 0x0005b800, 0x0005b000, 0x00059800,
1407     0x00020800, 0x00025800, 0x00026000, 0x00021000,
1408     0x00024800, 0x00026800, 0x00020000, 0x00027800,
1409     0x00022000, 0x00022800, 0x00024000, 0x00027000,
1410     0x00025000, 0x00023800, 0x00023000, 0x00021800,
1411     0x00028800, 0x0002d800, 0x0002e000, 0x00029000,
1412     0x0002c800, 0x0002e800, 0x00028000, 0x0002f800,
1413     0x0002a000, 0x0002a800, 0x0002c000, 0x0002f000,
1414     0x0002d000, 0x0002b800, 0x0002b000, 0x00029800,
1415     0x00010800, 0x00015800, 0x00016000, 0x00011000,
1416     0x00014800, 0x00016800, 0x00010000, 0x00017800,
1417     0x00012000, 0x00012800, 0x00014000, 0x00017000,
1418     0x00015000, 0x00013800, 0x00013000, 0x00011800,
1419     0x00040800, 0x00045800, 0x00046000, 0x00041000,
1420     0x00044800, 0x00046800, 0x00040000, 0x00047800,
1421     0x00042000, 0x00042800, 0x00044000, 0x00047000,
1422     0x00045000, 0x00043800, 0x00043000, 0x00041800,
1423     0x00070800, 0x00075800, 0x00076000, 0x00071000,
1424     0x00074800, 0x00076800, 0x00070000, 0x00077800,
1425     0x00072000, 0x00072800, 0x00074000, 0x00077000,
1426     0x00075000, 0x00073800, 0x00073000, 0x00071800,
1427     0x00078800, 0x0007d800, 0x0007e000, 0x00079000,
1428     0x0007c800, 0x0007e800, 0x00078000, 0x0007f800,
1429     0x0007a000, 0x0007a800, 0x0007c000, 0x0007f000,
1430     0x0007d000, 0x0007b800, 0x0007b000, 0x00079800,
1431     0x00060800, 0x00065800, 0x00066000, 0x00061000,
1432     0x00064800, 0x00066800, 0x00060000, 0x00067800,
1433     0x00062000, 0x00062800, 0x00064000, 0x00067000,
1434     0x00065000, 0x00063800, 0x00063000, 0x00061800,
1435     0x00048800, 0x0004d800, 0x0004e000, 0x00049000,
1436     0x0004c800, 0x0004e800, 0x00048000, 0x0004f800,
1437     0x0004a000, 0x0004a800, 0x0004c000, 0x0004f000,
1438     0x0004d000, 0x0004b800, 0x0004b000, 0x00049800,
1439     0x00050800, 0x00055800, 0x00056000, 0x00051000,
1440     0x00054800, 0x00056800, 0x00050000, 0x00057800,
1441     0x00052000, 0x00052800, 0x00054000, 0x00057000,
1442     0x00055000, 0x00053800, 0x00053000, 0x00051800,
1443     0x00030800, 0x00035800, 0x00036000, 0x00031000,
1444     0x00034800, 0x00036800, 0x00030000, 0x00037800,
1445     0x00032000, 0x00032800, 0x00034000, 0x00037000,
1446     0x00035000, 0x00033800, 0x00033000, 0x00031800,
1447     0x00018800, 0x0001d800, 0x0001e000, 0x00019000,
1448     0x0001c800, 0x0001e800, 0x00018000, 0x0001f800,
1449     0x0001a000, 0x0001a800, 0x0001c000, 0x0001f000,
1450     0x0001d000, 0x0001b800, 0x0001b000, 0x00019800,
1451     /* 1 */
1452     0x01c00000, 0x01900000, 0x01a80000, 0x01800000,
1453     0x01a00000, 0x01c80000, 0x01f80000, 0x01d00000,
1454     0x01980000, 0x01b80000, 0x01e00000, 0x01e80000,
1455     0x01b00000, 0x01f00000, 0x01880000, 0x01d80000,
1456     0x03400000, 0x03100000, 0x03280000, 0x03000000,
1457     0x03200000, 0x03480000, 0x03780000, 0x03500000,
1458     0x03180000, 0x03380000, 0x03600000, 0x03680000,
1459     0x03300000, 0x03700000, 0x03080000, 0x03580000,
1460     0x00400000, 0x00100000, 0x00280000, 0x00000000,
1461     0x00200000, 0x00480000, 0x00780000, 0x00500000,
1462     0x00180000, 0x00380000, 0x00600000, 0x00680000,
1463     0x00300000, 0x00700000, 0x00080000, 0x00580000,
1464     0x00c00000, 0x00900000, 0x00a80000, 0x00800000,
1465     0x00a00000, 0x00c80000, 0x00f80000, 0x00d00000,
1466     0x00980000, 0x00b80000, 0x00e00000, 0x00e80000,
1467     0x00b00000, 0x00f00000, 0x00880000, 0x00d80000,
1468     0x02c00000, 0x02900000, 0x02a80000, 0x02800000,
1469     0x02a00000, 0x02c80000, 0x02f80000, 0x02d00000,
1470     0x02980000, 0x02b80000, 0x02e00000, 0x02e80000,
1471     0x02b00000, 0x02f00000, 0x02880000, 0x02d80000,
1472     0x06c00000, 0x06900000, 0x06a80000, 0x06800000,
1473     0x06a00000, 0x06c80000, 0x06f80000, 0x06d00000,
1474     0x06980000, 0x06b80000, 0x06e00000, 0x06e80000,
1475     0x06b00000, 0x06f00000, 0x06880000, 0x06d80000,
1476     0x05400000, 0x05100000, 0x05280000, 0x05000000,
1477     0x05200000, 0x05480000, 0x05780000, 0x05500000,
1478     0x05180000, 0x05380000, 0x05600000, 0x05680000,
1479     0x05300000, 0x05700000, 0x05080000, 0x05580000,
1480     0x04400000, 0x04100000, 0x04280000, 0x04000000,
1481     0x04200000, 0x04480000, 0x04780000, 0x04500000,
1482     0x04180000, 0x04380000, 0x04600000, 0x04680000,
1483     0x04300000, 0x04700000, 0x04080000, 0x04580000,
1484     0x05c00000, 0x05900000, 0x05a80000, 0x05800000,
1485     0x05a00000, 0x05c80000, 0x05f80000, 0x05d00000,
1486     0x05980000, 0x05b80000, 0x05e00000, 0x05e80000,
1487     0x05b00000, 0x05f00000, 0x05880000, 0x05d80000,
1488     0x01400000, 0x01100000, 0x01280000, 0x01000000,
1489     0x01200000, 0x01480000, 0x01780000, 0x01500000,
1490     0x01180000, 0x01380000, 0x01600000, 0x01680000,
1491     0x01300000, 0x01700000, 0x01080000, 0x01580000,
1492     0x04c00000, 0x04900000, 0x04a80000, 0x04800000,
1493     0x04a00000, 0x04c80000, 0x04f80000, 0x04d00000,
1494     0x04980000, 0x04b80000, 0x04e00000, 0x04e80000,
1495     0x04b00000, 0x04f00000, 0x04880000, 0x04d80000,
1496     0x03c00000, 0x03900000, 0x03a80000, 0x03800000,
1497     0x03a00000, 0x03c80000, 0x03f80000, 0x03d00000,
1498     0x03980000, 0x03b80000, 0x03e00000, 0x03e80000,
1499     0x03b00000, 0x03f00000, 0x03880000, 0x03d80000,
1500     0x07400000, 0x07100000, 0x07280000, 0x07000000,
1501     0x07200000, 0x07480000, 0x07780000, 0x07500000,
1502     0x07180000, 0x07380000, 0x07600000, 0x07680000,
1503     0x07300000, 0x07700000, 0x07080000, 0x07580000,
1504     0x07c00000, 0x07900000, 0x07a80000, 0x07800000,
1505     0x07a00000, 0x07c80000, 0x07f80000, 0x07d00000,
1506     0x07980000, 0x07b80000, 0x07e00000, 0x07e80000,
1507     0x07b00000, 0x07f00000, 0x07880000, 0x07d80000,
1508     0x06400000, 0x06100000, 0x06280000, 0x06000000,
1509     0x06200000, 0x06480000, 0x06780000, 0x06500000,
1510     0x06180000, 0x06380000, 0x06600000, 0x06680000,
1511     0x06300000, 0x06700000, 0x06080000, 0x06580000,
1512     0x02400000, 0x02100000, 0x02280000, 0x02000000,
1513     0x02200000, 0x02480000, 0x02780000, 0x02500000,
1514     0x02180000, 0x02380000, 0x02600000, 0x02680000,
1515     0x02300000, 0x02700000, 0x02080000, 0x02580000,
1516     /* 2 */
1517     0x40000006, 0x68000006, 0x58000006, 0x00000006,
1518     0x20000006, 0x28000006, 0x08000006, 0x10000006,
1519     0x48000006, 0x18000006, 0x60000006, 0x70000006,
1520     0x30000006, 0x78000006, 0x50000006, 0x38000006,
1521     0xc0000004, 0xe8000004, 0xd8000004, 0x80000004,
1522     0xa0000004, 0xa8000004, 0x88000004, 0x90000004,
1523     0xc8000004, 0x98000004, 0xe0000004, 0xf0000004,
1524     0xb0000004, 0xf8000004, 0xd0000004, 0xb8000004,
1525     0xc0000005, 0xe8000005, 0xd8000005, 0x80000005,
1526     0xa0000005, 0xa8000005, 0x88000005, 0x90000005,
1527     0xc8000005, 0x98000005, 0xe0000005, 0xf0000005,
1528     0xb0000005, 0xf8000005, 0xd0000005, 0xb8000005,
1529     0xc0000000, 0xe8000000, 0xd8000000, 0x80000000,
1530     0xa0000000, 0xa8000000, 0x88000000, 0x90000000,
1531     0xc8000000, 0x98000000, 0xe0000000, 0xf0000000,
1532     0xb0000000, 0xf8000000, 0xd0000000, 0xb8000000,
1533     0x40000004, 0x68000004, 0x58000004, 0x00000004,
1534     0x20000004, 0x28000004, 0x08000004, 0x10000004,
1535     0x48000004, 0x18000004, 0x60000004, 0x70000004,
1536     0x30000004, 0x78000004, 0x50000004, 0x38000004,
1537     0x40000007, 0x68000007, 0x58000007, 0x00000007,
1538     0x20000007, 0x28000007, 0x08000007, 0x10000007,
1539     0x48000007, 0x18000007, 0x60000007, 0x70000007,
1540     0x30000007, 0x78000007, 0x50000007, 0x38000007,
1541     0x40000001, 0x68000001, 0x58000001, 0x00000001,
1542     0x20000001, 0x28000001, 0x08000001, 0x10000001,
1543     0x48000001, 0x18000001, 0x60000001, 0x70000001,
1544     0x30000001, 0x78000001, 0x50000001, 0x38000001,
1545     0x40000002, 0x68000002, 0x58000002, 0x00000002,
1546     0x20000002, 0x28000002, 0x08000002, 0x10000002,
1547     0x48000002, 0x18000002, 0x60000002, 0x70000002,
1548     0x30000002, 0x78000002, 0x50000002, 0x38000002,
1549     0xc0000003, 0xe8000003, 0xd8000003, 0x80000003,
1550     0xa0000003, 0xa8000003, 0x88000003, 0x90000003,
1551     0xc8000003, 0x98000003, 0xe0000003, 0xf0000003,
1552     0xb0000003, 0xf8000003, 0xd0000003, 0xb8000003,
1553     0xc0000001, 0xe8000001, 0xd8000001, 0x80000001,
1554     0xa0000001, 0xa8000001, 0x88000001, 0x90000001,
1555     0xc8000001, 0x98000001, 0xe0000001, 0xf0000001,
1556     0xb0000001, 0xf8000001, 0xd0000001, 0xb8000001,
1557     0x40000003, 0x68000003, 0x58000003, 0x00000003,
1558     0x20000003, 0x28000003, 0x08000003, 0x10000003,
1559     0x48000003, 0x18000003, 0x60000003, 0x70000003,
1560     0x30000003, 0x78000003, 0x50000003, 0x38000003,
1561     0xc0000002, 0xe8000002, 0xd8000002, 0x80000002,
1562     0xa0000002, 0xa8000002, 0x88000002, 0x90000002,
1563     0xc8000002, 0x98000002, 0xe0000002, 0xf0000002,
1564     0xb0000002, 0xf8000002, 0xd0000002, 0xb8000002,
1565     0x40000005, 0x68000005, 0x58000005, 0x00000005,
1566     0x20000005, 0x28000005, 0x08000005, 0x10000005,
1567     0x48000005, 0x18000005, 0x60000005, 0x70000005,
1568     0x30000005, 0x78000005, 0x50000005, 0x38000005,
1569     0x40000000, 0x68000000, 0x58000000, 0x00000000,
1570     0x20000000, 0x28000000, 0x08000000, 0x10000000,
1571     0x48000000, 0x18000000, 0x60000000, 0x70000000,
1572     0x30000000, 0x78000000, 0x50000000, 0x38000000,
1573     0xc0000007, 0xe8000007, 0xd8000007, 0x80000007,
1574     0xa0000007, 0xa8000007, 0x88000007, 0x90000007,
1575     0xc8000007, 0x98000007, 0xe0000007, 0xf0000007,
1576     0xb0000007, 0xf8000007, 0xd0000007, 0xb8000007,
1577     0xc0000006, 0xe8000006, 0xd8000006, 0x80000006,
1578     0xa0000006, 0xa8000006, 0x88000006, 0x90000006,
1579     0xc8000006, 0x98000006, 0xe0000006, 0xf0000006,
1580     0xb0000006, 0xf8000006, 0xd0000006, 0xb8000006,
1581     /* 3 */
1582     0x000003d0, 0x000003c8, 0x000003b0, 0x000003c0,
1583     0x000003e8, 0x000003f0, 0x00000390, 0x00000380,
1584     0x000003f8, 0x00000398, 0x000003a8, 0x000003d8,
1585     0x000003a0, 0x00000388, 0x000003e0, 0x000003b8,
1586     0x00000250, 0x00000248, 0x00000230, 0x00000240,
1587     0x00000268, 0x00000270, 0x00000210, 0x00000200,
1588     0x00000278, 0x00000218, 0x00000228, 0x00000258,
1589     0x00000220, 0x00000208, 0x00000260, 0x00000238,
1590     0x00000050, 0x00000048, 0x00000030, 0x00000040,
1591     0x00000068, 0x00000070, 0x00000010, 0x00000000,
1592     0x00000078, 0x00000018, 0x00000028, 0x00000058,
1593     0x00000020, 0x00000008, 0x00000060, 0x00000038,
1594     0x000002d0, 0x000002c8, 0x000002b0, 0x000002c0,
1595     0x000002e8, 0x000002f0, 0x00000290, 0x00000280,
1596     0x000002f8, 0x00000298, 0x000002a8, 0x000002d8,
1597     0x000002a0, 0x00000288, 0x000002e0, 0x000002b8,
1598     0x00000550, 0x00000548, 0x00000530, 0x00000540,
1599     0x00000568, 0x00000570, 0x00000510, 0x00000500,
1600     0x00000578, 0x00000518, 0x00000528, 0x00000558,
1601     0x00000520, 0x00000508, 0x00000560, 0x00000538,
1602     0x00000150, 0x00000148, 0x00000130, 0x00000140,
1603     0x00000168, 0x00000170, 0x00000110, 0x00000100,
1604     0x00000178, 0x00000118, 0x00000128, 0x00000158,
1605     0x00000120, 0x00000108, 0x00000160, 0x00000138,
1606     0x000007d0, 0x000007c8, 0x000007b0, 0x000007c0,
1607     0x000007e8, 0x000007f0, 0x00000790, 0x00000780,
1608     0x000007f8, 0x00000798, 0x000007a8, 0x000007d8,
1609     0x000007a0, 0x00000788, 0x000007e0, 0x000007b8,
1610     0x00000750, 0x00000748, 0x00000730, 0x00000740,
1611     0x00000768, 0x00000770, 0x00000710, 0x00000700,
1612     0x00000778, 0x00000718, 0x00000728, 0x00000758,
1613     0x00000720, 0x00000708, 0x00000760, 0x00000738,
1614     0x00000650, 0x00000648, 0x00000630, 0x00000640,
1615     0x00000668, 0x00000670, 0x00000610, 0x00000600,
1616     0x00000678, 0x00000618, 0x00000628, 0x00000658,
1617     0x00000620, 0x00000608, 0x00000660, 0x00000638,
1618     0x00000350, 0x00000348, 0x00000330, 0x00000340,
1619     0x00000368, 0x00000370, 0x00000310, 0x00000300,
1620     0x00000378, 0x00000318, 0x00000328, 0x00000358,
1621     0x00000320, 0x00000308, 0x00000360, 0x00000338,
1622     0x000000d0, 0x000000c8, 0x000000b0, 0x000000c0,
1623     0x000000e8, 0x000000f0, 0x00000090, 0x00000080,
1624     0x000000f8, 0x00000098, 0x000000a8, 0x000000d8,
1625     0x000000a0, 0x00000088, 0x000000e0, 0x000000b8,
1626     0x000005d0, 0x000005c8, 0x000005b0, 0x000005c0,
1627     0x000005e8, 0x000005f0, 0x00000590, 0x00000580,
1628     0x000005f8, 0x00000598, 0x000005a8, 0x000005d8,
1629     0x000005a0, 0x00000588, 0x000005e0, 0x000005b8,
1630     0x000006d0, 0x000006c8, 0x000006b0, 0x000006c0,
1631     0x000006e8, 0x000006f0, 0x00000690, 0x00000680,
1632     0x000006f8, 0x00000698, 0x000006a8, 0x000006d8,
1633     0x000006a0, 0x00000688, 0x000006e0, 0x000006b8,
1634     0x000004d0, 0x000004c8, 0x000004b0, 0x000004c0,
1635     0x000004e8, 0x000004f0, 0x00000490, 0x00000480,
1636     0x000004f8, 0x00000498, 0x000004a8, 0x000004d8,
1637     0x000004a0, 0x00000488, 0x000004e0, 0x000004b8,
1638     0x000001d0, 0x000001c8, 0x000001b0, 0x000001c0,
1639     0x000001e8, 0x000001f0, 0x00000190, 0x00000180,
1640     0x000001f8, 0x00000198, 0x000001a8, 0x000001d8,
1641     0x000001a0, 0x00000188, 0x000001e0, 0x000001b8,
1642     0x00000450, 0x00000448, 0x00000430, 0x00000440,
1643     0x00000468, 0x00000470, 0x00000410, 0x00000400,
1644     0x00000478, 0x00000418, 0x00000428, 0x00000458,
1645     0x00000420, 0x00000408, 0x00000460, 0x00000438,
1646   }
1647 };
1648 
1649 const struct gost28147_param gost28147_param_CryptoPro_D =
1650 {
1651   1,
1652   {
1653     /* 0 */
1654     0x0005f800, 0x0005e000, 0x00059000, 0x0005d000,
1655     0x0005b000, 0x0005a000, 0x0005a800, 0x00058000,
1656     0x0005b800, 0x0005c800, 0x0005f000, 0x0005e800,
1657     0x00058800, 0x0005d800, 0x0005c000, 0x00059800,
1658     0x00037800, 0x00036000, 0x00031000, 0x00035000,
1659     0x00033000, 0x00032000, 0x00032800, 0x00030000,
1660     0x00033800, 0x00034800, 0x00037000, 0x00036800,
1661     0x00030800, 0x00035800, 0x00034000, 0x00031800,
1662     0x0001f800, 0x0001e000, 0x00019000, 0x0001d000,
1663     0x0001b000, 0x0001a000, 0x0001a800, 0x00018000,
1664     0x0001b800, 0x0001c800, 0x0001f000, 0x0001e800,
1665     0x00018800, 0x0001d800, 0x0001c000, 0x00019800,
1666     0x00027800, 0x00026000, 0x00021000, 0x00025000,
1667     0x00023000, 0x00022000, 0x00022800, 0x00020000,
1668     0x00023800, 0x00024800, 0x00027000, 0x00026800,
1669     0x00020800, 0x00025800, 0x00024000, 0x00021800,
1670     0x00067800, 0x00066000, 0x00061000, 0x00065000,
1671     0x00063000, 0x00062000, 0x00062800, 0x00060000,
1672     0x00063800, 0x00064800, 0x00067000, 0x00066800,
1673     0x00060800, 0x00065800, 0x00064000, 0x00061800,
1674     0x0007f800, 0x0007e000, 0x00079000, 0x0007d000,
1675     0x0007b000, 0x0007a000, 0x0007a800, 0x00078000,
1676     0x0007b800, 0x0007c800, 0x0007f000, 0x0007e800,
1677     0x00078800, 0x0007d800, 0x0007c000, 0x00079800,
1678     0x00077800, 0x00076000, 0x00071000, 0x00075000,
1679     0x00073000, 0x00072000, 0x00072800, 0x00070000,
1680     0x00073800, 0x00074800, 0x00077000, 0x00076800,
1681     0x00070800, 0x00075800, 0x00074000, 0x00071800,
1682     0x00017800, 0x00016000, 0x00011000, 0x00015000,
1683     0x00013000, 0x00012000, 0x00012800, 0x00010000,
1684     0x00013800, 0x00014800, 0x00017000, 0x00016800,
1685     0x00010800, 0x00015800, 0x00014000, 0x00011800,
1686     0x0003f800, 0x0003e000, 0x00039000, 0x0003d000,
1687     0x0003b000, 0x0003a000, 0x0003a800, 0x00038000,
1688     0x0003b800, 0x0003c800, 0x0003f000, 0x0003e800,
1689     0x00038800, 0x0003d800, 0x0003c000, 0x00039800,
1690     0x0006f800, 0x0006e000, 0x00069000, 0x0006d000,
1691     0x0006b000, 0x0006a000, 0x0006a800, 0x00068000,
1692     0x0006b800, 0x0006c800, 0x0006f000, 0x0006e800,
1693     0x00068800, 0x0006d800, 0x0006c000, 0x00069800,
1694     0x00047800, 0x00046000, 0x00041000, 0x00045000,
1695     0x00043000, 0x00042000, 0x00042800, 0x00040000,
1696     0x00043800, 0x00044800, 0x00047000, 0x00046800,
1697     0x00040800, 0x00045800, 0x00044000, 0x00041800,
1698     0x00007800, 0x00006000, 0x00001000, 0x00005000,
1699     0x00003000, 0x00002000, 0x00002800, 0x00000000,
1700     0x00003800, 0x00004800, 0x00007000, 0x00006800,
1701     0x00000800, 0x00005800, 0x00004000, 0x00001800,
1702     0x0002f800, 0x0002e000, 0x00029000, 0x0002d000,
1703     0x0002b000, 0x0002a000, 0x0002a800, 0x00028000,
1704     0x0002b800, 0x0002c800, 0x0002f000, 0x0002e800,
1705     0x00028800, 0x0002d800, 0x0002c000, 0x00029800,
1706     0x00057800, 0x00056000, 0x00051000, 0x00055000,
1707     0x00053000, 0x00052000, 0x00052800, 0x00050000,
1708     0x00053800, 0x00054800, 0x00057000, 0x00056800,
1709     0x00050800, 0x00055800, 0x00054000, 0x00051800,
1710     0x0004f800, 0x0004e000, 0x00049000, 0x0004d000,
1711     0x0004b000, 0x0004a000, 0x0004a800, 0x00048000,
1712     0x0004b800, 0x0004c800, 0x0004f000, 0x0004e800,
1713     0x00048800, 0x0004d800, 0x0004c000, 0x00049800,
1714     0x0000f800, 0x0000e000, 0x00009000, 0x0000d000,
1715     0x0000b000, 0x0000a000, 0x0000a800, 0x00008000,
1716     0x0000b800, 0x0000c800, 0x0000f000, 0x0000e800,
1717     0x00008800, 0x0000d800, 0x0000c000, 0x00009800,
1718     /* 1 */
1719     0x00880000, 0x00e00000, 0x00d80000, 0x00800000,
1720     0x00f80000, 0x00f00000, 0x00b00000, 0x00a80000,
1721     0x00d00000, 0x00e80000, 0x00a00000, 0x00c00000,
1722     0x00c80000, 0x00980000, 0x00b80000, 0x00900000,
1723     0x02880000, 0x02e00000, 0x02d80000, 0x02800000,
1724     0x02f80000, 0x02f00000, 0x02b00000, 0x02a80000,
1725     0x02d00000, 0x02e80000, 0x02a00000, 0x02c00000,
1726     0x02c80000, 0x02980000, 0x02b80000, 0x02900000,
1727     0x07080000, 0x07600000, 0x07580000, 0x07000000,
1728     0x07780000, 0x07700000, 0x07300000, 0x07280000,
1729     0x07500000, 0x07680000, 0x07200000, 0x07400000,
1730     0x07480000, 0x07180000, 0x07380000, 0x07100000,
1731     0x06080000, 0x06600000, 0x06580000, 0x06000000,
1732     0x06780000, 0x06700000, 0x06300000, 0x06280000,
1733     0x06500000, 0x06680000, 0x06200000, 0x06400000,
1734     0x06480000, 0x06180000, 0x06380000, 0x06100000,
1735     0x05080000, 0x05600000, 0x05580000, 0x05000000,
1736     0x05780000, 0x05700000, 0x05300000, 0x05280000,
1737     0x05500000, 0x05680000, 0x05200000, 0x05400000,
1738     0x05480000, 0x05180000, 0x05380000, 0x05100000,
1739     0x03880000, 0x03e00000, 0x03d80000, 0x03800000,
1740     0x03f80000, 0x03f00000, 0x03b00000, 0x03a80000,
1741     0x03d00000, 0x03e80000, 0x03a00000, 0x03c00000,
1742     0x03c80000, 0x03980000, 0x03b80000, 0x03900000,
1743     0x00080000, 0x00600000, 0x00580000, 0x00000000,
1744     0x00780000, 0x00700000, 0x00300000, 0x00280000,
1745     0x00500000, 0x00680000, 0x00200000, 0x00400000,
1746     0x00480000, 0x00180000, 0x00380000, 0x00100000,
1747     0x06880000, 0x06e00000, 0x06d80000, 0x06800000,
1748     0x06f80000, 0x06f00000, 0x06b00000, 0x06a80000,
1749     0x06d00000, 0x06e80000, 0x06a00000, 0x06c00000,
1750     0x06c80000, 0x06980000, 0x06b80000, 0x06900000,
1751     0x03080000, 0x03600000, 0x03580000, 0x03000000,
1752     0x03780000, 0x03700000, 0x03300000, 0x03280000,
1753     0x03500000, 0x03680000, 0x03200000, 0x03400000,
1754     0x03480000, 0x03180000, 0x03380000, 0x03100000,
1755     0x01080000, 0x01600000, 0x01580000, 0x01000000,
1756     0x01780000, 0x01700000, 0x01300000, 0x01280000,
1757     0x01500000, 0x01680000, 0x01200000, 0x01400000,
1758     0x01480000, 0x01180000, 0x01380000, 0x01100000,
1759     0x05880000, 0x05e00000, 0x05d80000, 0x05800000,
1760     0x05f80000, 0x05f00000, 0x05b00000, 0x05a80000,
1761     0x05d00000, 0x05e80000, 0x05a00000, 0x05c00000,
1762     0x05c80000, 0x05980000, 0x05b80000, 0x05900000,
1763     0x02080000, 0x02600000, 0x02580000, 0x02000000,
1764     0x02780000, 0x02700000, 0x02300000, 0x02280000,
1765     0x02500000, 0x02680000, 0x02200000, 0x02400000,
1766     0x02480000, 0x02180000, 0x02380000, 0x02100000,
1767     0x04880000, 0x04e00000, 0x04d80000, 0x04800000,
1768     0x04f80000, 0x04f00000, 0x04b00000, 0x04a80000,
1769     0x04d00000, 0x04e80000, 0x04a00000, 0x04c00000,
1770     0x04c80000, 0x04980000, 0x04b80000, 0x04900000,
1771     0x01880000, 0x01e00000, 0x01d80000, 0x01800000,
1772     0x01f80000, 0x01f00000, 0x01b00000, 0x01a80000,
1773     0x01d00000, 0x01e80000, 0x01a00000, 0x01c00000,
1774     0x01c80000, 0x01980000, 0x01b80000, 0x01900000,
1775     0x07880000, 0x07e00000, 0x07d80000, 0x07800000,
1776     0x07f80000, 0x07f00000, 0x07b00000, 0x07a80000,
1777     0x07d00000, 0x07e80000, 0x07a00000, 0x07c00000,
1778     0x07c80000, 0x07980000, 0x07b80000, 0x07900000,
1779     0x04080000, 0x04600000, 0x04580000, 0x04000000,
1780     0x04780000, 0x04700000, 0x04300000, 0x04280000,
1781     0x04500000, 0x04680000, 0x04200000, 0x04400000,
1782     0x04480000, 0x04180000, 0x04380000, 0x04100000,
1783     /* 2 */
1784     0x00000004, 0x60000004, 0x40000004, 0x48000004,
1785     0x68000004, 0x10000004, 0x50000004, 0x58000004,
1786     0x38000004, 0x18000004, 0x30000004, 0x28000004,
1787     0x20000004, 0x70000004, 0x78000004, 0x08000004,
1788     0x00000000, 0x60000000, 0x40000000, 0x48000000,
1789     0x68000000, 0x10000000, 0x50000000, 0x58000000,
1790     0x38000000, 0x18000000, 0x30000000, 0x28000000,
1791     0x20000000, 0x70000000, 0x78000000, 0x08000000,
1792     0x80000007, 0xe0000007, 0xc0000007, 0xc8000007,
1793     0xe8000007, 0x90000007, 0xd0000007, 0xd8000007,
1794     0xb8000007, 0x98000007, 0xb0000007, 0xa8000007,
1795     0xa0000007, 0xf0000007, 0xf8000007, 0x88000007,
1796     0x80000001, 0xe0000001, 0xc0000001, 0xc8000001,
1797     0xe8000001, 0x90000001, 0xd0000001, 0xd8000001,
1798     0xb8000001, 0x98000001, 0xb0000001, 0xa8000001,
1799     0xa0000001, 0xf0000001, 0xf8000001, 0x88000001,
1800     0x00000001, 0x60000001, 0x40000001, 0x48000001,
1801     0x68000001, 0x10000001, 0x50000001, 0x58000001,
1802     0x38000001, 0x18000001, 0x30000001, 0x28000001,
1803     0x20000001, 0x70000001, 0x78000001, 0x08000001,
1804     0x80000002, 0xe0000002, 0xc0000002, 0xc8000002,
1805     0xe8000002, 0x90000002, 0xd0000002, 0xd8000002,
1806     0xb8000002, 0x98000002, 0xb0000002, 0xa8000002,
1807     0xa0000002, 0xf0000002, 0xf8000002, 0x88000002,
1808     0x00000007, 0x60000007, 0x40000007, 0x48000007,
1809     0x68000007, 0x10000007, 0x50000007, 0x58000007,
1810     0x38000007, 0x18000007, 0x30000007, 0x28000007,
1811     0x20000007, 0x70000007, 0x78000007, 0x08000007,
1812     0x80000005, 0xe0000005, 0xc0000005, 0xc8000005,
1813     0xe8000005, 0x90000005, 0xd0000005, 0xd8000005,
1814     0xb8000005, 0x98000005, 0xb0000005, 0xa8000005,
1815     0xa0000005, 0xf0000005, 0xf8000005, 0x88000005,
1816     0x80000000, 0xe0000000, 0xc0000000, 0xc8000000,
1817     0xe8000000, 0x90000000, 0xd0000000, 0xd8000000,
1818     0xb8000000, 0x98000000, 0xb0000000, 0xa8000000,
1819     0xa0000000, 0xf0000000, 0xf8000000, 0x88000000,
1820     0x00000005, 0x60000005, 0x40000005, 0x48000005,
1821     0x68000005, 0x10000005, 0x50000005, 0x58000005,
1822     0x38000005, 0x18000005, 0x30000005, 0x28000005,
1823     0x20000005, 0x70000005, 0x78000005, 0x08000005,
1824     0x00000002, 0x60000002, 0x40000002, 0x48000002,
1825     0x68000002, 0x10000002, 0x50000002, 0x58000002,
1826     0x38000002, 0x18000002, 0x30000002, 0x28000002,
1827     0x20000002, 0x70000002, 0x78000002, 0x08000002,
1828     0x80000003, 0xe0000003, 0xc0000003, 0xc8000003,
1829     0xe8000003, 0x90000003, 0xd0000003, 0xd8000003,
1830     0xb8000003, 0x98000003, 0xb0000003, 0xa8000003,
1831     0xa0000003, 0xf0000003, 0xf8000003, 0x88000003,
1832     0x00000006, 0x60000006, 0x40000006, 0x48000006,
1833     0x68000006, 0x10000006, 0x50000006, 0x58000006,
1834     0x38000006, 0x18000006, 0x30000006, 0x28000006,
1835     0x20000006, 0x70000006, 0x78000006, 0x08000006,
1836     0x80000004, 0xe0000004, 0xc0000004, 0xc8000004,
1837     0xe8000004, 0x90000004, 0xd0000004, 0xd8000004,
1838     0xb8000004, 0x98000004, 0xb0000004, 0xa8000004,
1839     0xa0000004, 0xf0000004, 0xf8000004, 0x88000004,
1840     0x80000006, 0xe0000006, 0xc0000006, 0xc8000006,
1841     0xe8000006, 0x90000006, 0xd0000006, 0xd8000006,
1842     0xb8000006, 0x98000006, 0xb0000006, 0xa8000006,
1843     0xa0000006, 0xf0000006, 0xf8000006, 0x88000006,
1844     0x00000003, 0x60000003, 0x40000003, 0x48000003,
1845     0x68000003, 0x10000003, 0x50000003, 0x58000003,
1846     0x38000003, 0x18000003, 0x30000003, 0x28000003,
1847     0x20000003, 0x70000003, 0x78000003, 0x08000003,
1848     /* 3 */
1849     0x00000098, 0x00000080, 0x000000b0, 0x000000f8,
1850     0x00000088, 0x000000f0, 0x000000c8, 0x00000090,
1851     0x000000e8, 0x000000c0, 0x000000e0, 0x000000a0,
1852     0x000000d8, 0x000000d0, 0x000000a8, 0x000000b8,
1853     0x00000518, 0x00000500, 0x00000530, 0x00000578,
1854     0x00000508, 0x00000570, 0x00000548, 0x00000510,
1855     0x00000568, 0x00000540, 0x00000560, 0x00000520,
1856     0x00000558, 0x00000550, 0x00000528, 0x00000538,
1857     0x00000318, 0x00000300, 0x00000330, 0x00000378,
1858     0x00000308, 0x00000370, 0x00000348, 0x00000310,
1859     0x00000368, 0x00000340, 0x00000360, 0x00000320,
1860     0x00000358, 0x00000350, 0x00000328, 0x00000338,
1861     0x00000418, 0x00000400, 0x00000430, 0x00000478,
1862     0x00000408, 0x00000470, 0x00000448, 0x00000410,
1863     0x00000468, 0x00000440, 0x00000460, 0x00000420,
1864     0x00000458, 0x00000450, 0x00000428, 0x00000438,
1865     0x00000798, 0x00000780, 0x000007b0, 0x000007f8,
1866     0x00000788, 0x000007f0, 0x000007c8, 0x00000790,
1867     0x000007e8, 0x000007c0, 0x000007e0, 0x000007a0,
1868     0x000007d8, 0x000007d0, 0x000007a8, 0x000007b8,
1869     0x00000598, 0x00000580, 0x000005b0, 0x000005f8,
1870     0x00000588, 0x000005f0, 0x000005c8, 0x00000590,
1871     0x000005e8, 0x000005c0, 0x000005e0, 0x000005a0,
1872     0x000005d8, 0x000005d0, 0x000005a8, 0x000005b8,
1873     0x00000018, 0x00000000, 0x00000030, 0x00000078,
1874     0x00000008, 0x00000070, 0x00000048, 0x00000010,
1875     0x00000068, 0x00000040, 0x00000060, 0x00000020,
1876     0x00000058, 0x00000050, 0x00000028, 0x00000038,
1877     0x00000218, 0x00000200, 0x00000230, 0x00000278,
1878     0x00000208, 0x00000270, 0x00000248, 0x00000210,
1879     0x00000268, 0x00000240, 0x00000260, 0x00000220,
1880     0x00000258, 0x00000250, 0x00000228, 0x00000238,
1881     0x00000618, 0x00000600, 0x00000630, 0x00000678,
1882     0x00000608, 0x00000670, 0x00000648, 0x00000610,
1883     0x00000668, 0x00000640, 0x00000660, 0x00000620,
1884     0x00000658, 0x00000650, 0x00000628, 0x00000638,
1885     0x00000198, 0x00000180, 0x000001b0, 0x000001f8,
1886     0x00000188, 0x000001f0, 0x000001c8, 0x00000190,
1887     0x000001e8, 0x000001c0, 0x000001e0, 0x000001a0,
1888     0x000001d8, 0x000001d0, 0x000001a8, 0x000001b8,
1889     0x00000298, 0x00000280, 0x000002b0, 0x000002f8,
1890     0x00000288, 0x000002f0, 0x000002c8, 0x00000290,
1891     0x000002e8, 0x000002c0, 0x000002e0, 0x000002a0,
1892     0x000002d8, 0x000002d0, 0x000002a8, 0x000002b8,
1893     0x00000498, 0x00000480, 0x000004b0, 0x000004f8,
1894     0x00000488, 0x000004f0, 0x000004c8, 0x00000490,
1895     0x000004e8, 0x000004c0, 0x000004e0, 0x000004a0,
1896     0x000004d8, 0x000004d0, 0x000004a8, 0x000004b8,
1897     0x00000398, 0x00000380, 0x000003b0, 0x000003f8,
1898     0x00000388, 0x000003f0, 0x000003c8, 0x00000390,
1899     0x000003e8, 0x000003c0, 0x000003e0, 0x000003a0,
1900     0x000003d8, 0x000003d0, 0x000003a8, 0x000003b8,
1901     0x00000698, 0x00000680, 0x000006b0, 0x000006f8,
1902     0x00000688, 0x000006f0, 0x000006c8, 0x00000690,
1903     0x000006e8, 0x000006c0, 0x000006e0, 0x000006a0,
1904     0x000006d8, 0x000006d0, 0x000006a8, 0x000006b8,
1905     0x00000118, 0x00000100, 0x00000130, 0x00000178,
1906     0x00000108, 0x00000170, 0x00000148, 0x00000110,
1907     0x00000168, 0x00000140, 0x00000160, 0x00000120,
1908     0x00000158, 0x00000150, 0x00000128, 0x00000138,
1909     0x00000718, 0x00000700, 0x00000730, 0x00000778,
1910     0x00000708, 0x00000770, 0x00000748, 0x00000710,
1911     0x00000768, 0x00000740, 0x00000760, 0x00000720,
1912     0x00000758, 0x00000750, 0x00000728, 0x00000738,
1913   }
1914 };
1915 
1916 const struct gost28147_param gost28147_param_TC26_Z =
1917 {
1918   1,
1919   {
1920     /* 0 */
1921     0x00036000, 0x00032000, 0x00033000, 0x00031000,
1922     0x00035000, 0x00032800, 0x00035800, 0x00034800,
1923     0x00037000, 0x00034000, 0x00036800, 0x00033800,
1924     0x00030000, 0x00031800, 0x00037800, 0x00030800,
1925     0x00046000, 0x00042000, 0x00043000, 0x00041000,
1926     0x00045000, 0x00042800, 0x00045800, 0x00044800,
1927     0x00047000, 0x00044000, 0x00046800, 0x00043800,
1928     0x00040000, 0x00041800, 0x00047800, 0x00040800,
1929     0x00016000, 0x00012000, 0x00013000, 0x00011000,
1930     0x00015000, 0x00012800, 0x00015800, 0x00014800,
1931     0x00017000, 0x00014000, 0x00016800, 0x00013800,
1932     0x00010000, 0x00011800, 0x00017800, 0x00010800,
1933     0x0001e000, 0x0001a000, 0x0001b000, 0x00019000,
1934     0x0001d000, 0x0001a800, 0x0001d800, 0x0001c800,
1935     0x0001f000, 0x0001c000, 0x0001e800, 0x0001b800,
1936     0x00018000, 0x00019800, 0x0001f800, 0x00018800,
1937     0x0004e000, 0x0004a000, 0x0004b000, 0x00049000,
1938     0x0004d000, 0x0004a800, 0x0004d800, 0x0004c800,
1939     0x0004f000, 0x0004c000, 0x0004e800, 0x0004b800,
1940     0x00048000, 0x00049800, 0x0004f800, 0x00048800,
1941     0x00056000, 0x00052000, 0x00053000, 0x00051000,
1942     0x00055000, 0x00052800, 0x00055800, 0x00054800,
1943     0x00057000, 0x00054000, 0x00056800, 0x00053800,
1944     0x00050000, 0x00051800, 0x00057800, 0x00050800,
1945     0x0002e000, 0x0002a000, 0x0002b000, 0x00029000,
1946     0x0002d000, 0x0002a800, 0x0002d800, 0x0002c800,
1947     0x0002f000, 0x0002c000, 0x0002e800, 0x0002b800,
1948     0x00028000, 0x00029800, 0x0002f800, 0x00028800,
1949     0x00066000, 0x00062000, 0x00063000, 0x00061000,
1950     0x00065000, 0x00062800, 0x00065800, 0x00064800,
1951     0x00067000, 0x00064000, 0x00066800, 0x00063800,
1952     0x00060000, 0x00061800, 0x00067800, 0x00060800,
1953     0x0000e000, 0x0000a000, 0x0000b000, 0x00009000,
1954     0x0000d000, 0x0000a800, 0x0000d800, 0x0000c800,
1955     0x0000f000, 0x0000c000, 0x0000e800, 0x0000b800,
1956     0x00008000, 0x00009800, 0x0000f800, 0x00008800,
1957     0x00076000, 0x00072000, 0x00073000, 0x00071000,
1958     0x00075000, 0x00072800, 0x00075800, 0x00074800,
1959     0x00077000, 0x00074000, 0x00076800, 0x00073800,
1960     0x00070000, 0x00071800, 0x00077800, 0x00070800,
1961     0x00026000, 0x00022000, 0x00023000, 0x00021000,
1962     0x00025000, 0x00022800, 0x00025800, 0x00024800,
1963     0x00027000, 0x00024000, 0x00026800, 0x00023800,
1964     0x00020000, 0x00021800, 0x00027800, 0x00020800,
1965     0x0003e000, 0x0003a000, 0x0003b000, 0x00039000,
1966     0x0003d000, 0x0003a800, 0x0003d800, 0x0003c800,
1967     0x0003f000, 0x0003c000, 0x0003e800, 0x0003b800,
1968     0x00038000, 0x00039800, 0x0003f800, 0x00038800,
1969     0x0005e000, 0x0005a000, 0x0005b000, 0x00059000,
1970     0x0005d000, 0x0005a800, 0x0005d800, 0x0005c800,
1971     0x0005f000, 0x0005c000, 0x0005e800, 0x0005b800,
1972     0x00058000, 0x00059800, 0x0005f800, 0x00058800,
1973     0x0006e000, 0x0006a000, 0x0006b000, 0x00069000,
1974     0x0006d000, 0x0006a800, 0x0006d800, 0x0006c800,
1975     0x0006f000, 0x0006c000, 0x0006e800, 0x0006b800,
1976     0x00068000, 0x00069800, 0x0006f800, 0x00068800,
1977     0x00006000, 0x00002000, 0x00003000, 0x00001000,
1978     0x00005000, 0x00002800, 0x00005800, 0x00004800,
1979     0x00007000, 0x00004000, 0x00006800, 0x00003800,
1980     0x00000000, 0x00001800, 0x00007800, 0x00000800,
1981     0x0007e000, 0x0007a000, 0x0007b000, 0x00079000,
1982     0x0007d000, 0x0007a800, 0x0007d800, 0x0007c800,
1983     0x0007f000, 0x0007c000, 0x0007e800, 0x0007b800,
1984     0x00078000, 0x00079800, 0x0007f800, 0x00078800,
1985     /* 1 */
1986     0x06580000, 0x06180000, 0x06280000, 0x06400000,
1987     0x06100000, 0x06780000, 0x06500000, 0x06680000,
1988     0x06700000, 0x06080000, 0x06380000, 0x06200000,
1989     0x06600000, 0x06480000, 0x06300000, 0x06000000,
1990     0x04580000, 0x04180000, 0x04280000, 0x04400000,
1991     0x04100000, 0x04780000, 0x04500000, 0x04680000,
1992     0x04700000, 0x04080000, 0x04380000, 0x04200000,
1993     0x04600000, 0x04480000, 0x04300000, 0x04000000,
1994     0x01580000, 0x01180000, 0x01280000, 0x01400000,
1995     0x01100000, 0x01780000, 0x01500000, 0x01680000,
1996     0x01700000, 0x01080000, 0x01380000, 0x01200000,
1997     0x01600000, 0x01480000, 0x01300000, 0x01000000,
1998     0x00d80000, 0x00980000, 0x00a80000, 0x00c00000,
1999     0x00900000, 0x00f80000, 0x00d00000, 0x00e80000,
2000     0x00f00000, 0x00880000, 0x00b80000, 0x00a00000,
2001     0x00e00000, 0x00c80000, 0x00b00000, 0x00800000,
2002     0x06d80000, 0x06980000, 0x06a80000, 0x06c00000,
2003     0x06900000, 0x06f80000, 0x06d00000, 0x06e80000,
2004     0x06f00000, 0x06880000, 0x06b80000, 0x06a00000,
2005     0x06e00000, 0x06c80000, 0x06b00000, 0x06800000,
2006     0x02580000, 0x02180000, 0x02280000, 0x02400000,
2007     0x02100000, 0x02780000, 0x02500000, 0x02680000,
2008     0x02700000, 0x02080000, 0x02380000, 0x02200000,
2009     0x02600000, 0x02480000, 0x02300000, 0x02000000,
2010     0x07d80000, 0x07980000, 0x07a80000, 0x07c00000,
2011     0x07900000, 0x07f80000, 0x07d00000, 0x07e80000,
2012     0x07f00000, 0x07880000, 0x07b80000, 0x07a00000,
2013     0x07e00000, 0x07c80000, 0x07b00000, 0x07800000,
2014     0x03580000, 0x03180000, 0x03280000, 0x03400000,
2015     0x03100000, 0x03780000, 0x03500000, 0x03680000,
2016     0x03700000, 0x03080000, 0x03380000, 0x03200000,
2017     0x03600000, 0x03480000, 0x03300000, 0x03000000,
2018     0x03d80000, 0x03980000, 0x03a80000, 0x03c00000,
2019     0x03900000, 0x03f80000, 0x03d00000, 0x03e80000,
2020     0x03f00000, 0x03880000, 0x03b80000, 0x03a00000,
2021     0x03e00000, 0x03c80000, 0x03b00000, 0x03800000,
2022     0x00580000, 0x00180000, 0x00280000, 0x00400000,
2023     0x00100000, 0x00780000, 0x00500000, 0x00680000,
2024     0x00700000, 0x00080000, 0x00380000, 0x00200000,
2025     0x00600000, 0x00480000, 0x00300000, 0x00000000,
2026     0x05580000, 0x05180000, 0x05280000, 0x05400000,
2027     0x05100000, 0x05780000, 0x05500000, 0x05680000,
2028     0x05700000, 0x05080000, 0x05380000, 0x05200000,
2029     0x05600000, 0x05480000, 0x05300000, 0x05000000,
2030     0x02d80000, 0x02980000, 0x02a80000, 0x02c00000,
2031     0x02900000, 0x02f80000, 0x02d00000, 0x02e80000,
2032     0x02f00000, 0x02880000, 0x02b80000, 0x02a00000,
2033     0x02e00000, 0x02c80000, 0x02b00000, 0x02800000,
2034     0x01d80000, 0x01980000, 0x01a80000, 0x01c00000,
2035     0x01900000, 0x01f80000, 0x01d00000, 0x01e80000,
2036     0x01f00000, 0x01880000, 0x01b80000, 0x01a00000,
2037     0x01e00000, 0x01c80000, 0x01b00000, 0x01800000,
2038     0x07580000, 0x07180000, 0x07280000, 0x07400000,
2039     0x07100000, 0x07780000, 0x07500000, 0x07680000,
2040     0x07700000, 0x07080000, 0x07380000, 0x07200000,
2041     0x07600000, 0x07480000, 0x07300000, 0x07000000,
2042     0x04d80000, 0x04980000, 0x04a80000, 0x04c00000,
2043     0x04900000, 0x04f80000, 0x04d00000, 0x04e80000,
2044     0x04f00000, 0x04880000, 0x04b80000, 0x04a00000,
2045     0x04e00000, 0x04c80000, 0x04b00000, 0x04800000,
2046     0x05d80000, 0x05980000, 0x05a80000, 0x05c00000,
2047     0x05900000, 0x05f80000, 0x05d00000, 0x05e80000,
2048     0x05f00000, 0x05880000, 0x05b80000, 0x05a00000,
2049     0x05e00000, 0x05c80000, 0x05b00000, 0x05800000,
2050     /* 2 */
2051     0xb8000002, 0xf8000002, 0xa8000002, 0xd0000002,
2052     0xc0000002, 0x88000002, 0xb0000002, 0xe8000002,
2053     0x80000002, 0xc8000002, 0x98000002, 0xf0000002,
2054     0xd8000002, 0xa0000002, 0x90000002, 0xe0000002,
2055     0xb8000006, 0xf8000006, 0xa8000006, 0xd0000006,
2056     0xc0000006, 0x88000006, 0xb0000006, 0xe8000006,
2057     0x80000006, 0xc8000006, 0x98000006, 0xf0000006,
2058     0xd8000006, 0xa0000006, 0x90000006, 0xe0000006,
2059     0xb8000007, 0xf8000007, 0xa8000007, 0xd0000007,
2060     0xc0000007, 0x88000007, 0xb0000007, 0xe8000007,
2061     0x80000007, 0xc8000007, 0x98000007, 0xf0000007,
2062     0xd8000007, 0xa0000007, 0x90000007, 0xe0000007,
2063     0x38000003, 0x78000003, 0x28000003, 0x50000003,
2064     0x40000003, 0x08000003, 0x30000003, 0x68000003,
2065     0x00000003, 0x48000003, 0x18000003, 0x70000003,
2066     0x58000003, 0x20000003, 0x10000003, 0x60000003,
2067     0xb8000004, 0xf8000004, 0xa8000004, 0xd0000004,
2068     0xc0000004, 0x88000004, 0xb0000004, 0xe8000004,
2069     0x80000004, 0xc8000004, 0x98000004, 0xf0000004,
2070     0xd8000004, 0xa0000004, 0x90000004, 0xe0000004,
2071     0x38000001, 0x78000001, 0x28000001, 0x50000001,
2072     0x40000001, 0x08000001, 0x30000001, 0x68000001,
2073     0x00000001, 0x48000001, 0x18000001, 0x70000001,
2074     0x58000001, 0x20000001, 0x10000001, 0x60000001,
2075     0x38000006, 0x78000006, 0x28000006, 0x50000006,
2076     0x40000006, 0x08000006, 0x30000006, 0x68000006,
2077     0x00000006, 0x48000006, 0x18000006, 0x70000006,
2078     0x58000006, 0x20000006, 0x10000006, 0x60000006,
2079     0x38000005, 0x78000005, 0x28000005, 0x50000005,
2080     0x40000005, 0x08000005, 0x30000005, 0x68000005,
2081     0x00000005, 0x48000005, 0x18000005, 0x70000005,
2082     0x58000005, 0x20000005, 0x10000005, 0x60000005,
2083     0xb8000005, 0xf8000005, 0xa8000005, 0xd0000005,
2084     0xc0000005, 0x88000005, 0xb0000005, 0xe8000005,
2085     0x80000005, 0xc8000005, 0x98000005, 0xf0000005,
2086     0xd8000005, 0xa0000005, 0x90000005, 0xe0000005,
2087     0xb8000003, 0xf8000003, 0xa8000003, 0xd0000003,
2088     0xc0000003, 0x88000003, 0xb0000003, 0xe8000003,
2089     0x80000003, 0xc8000003, 0x98000003, 0xf0000003,
2090     0xd8000003, 0xa0000003, 0x90000003, 0xe0000003,
2091     0x38000004, 0x78000004, 0x28000004, 0x50000004,
2092     0x40000004, 0x08000004, 0x30000004, 0x68000004,
2093     0x00000004, 0x48000004, 0x18000004, 0x70000004,
2094     0x58000004, 0x20000004, 0x10000004, 0x60000004,
2095     0xb8000000, 0xf8000000, 0xa8000000, 0xd0000000,
2096     0xc0000000, 0x88000000, 0xb0000000, 0xe8000000,
2097     0x80000000, 0xc8000000, 0x98000000, 0xf0000000,
2098     0xd8000000, 0xa0000000, 0x90000000, 0xe0000000,
2099     0x38000002, 0x78000002, 0x28000002, 0x50000002,
2100     0x40000002, 0x08000002, 0x30000002, 0x68000002,
2101     0x00000002, 0x48000002, 0x18000002, 0x70000002,
2102     0x58000002, 0x20000002, 0x10000002, 0x60000002,
2103     0xb8000001, 0xf8000001, 0xa8000001, 0xd0000001,
2104     0xc0000001, 0x88000001, 0xb0000001, 0xe8000001,
2105     0x80000001, 0xc8000001, 0x98000001, 0xf0000001,
2106     0xd8000001, 0xa0000001, 0x90000001, 0xe0000001,
2107     0x38000007, 0x78000007, 0x28000007, 0x50000007,
2108     0x40000007, 0x08000007, 0x30000007, 0x68000007,
2109     0x00000007, 0x48000007, 0x18000007, 0x70000007,
2110     0x58000007, 0x20000007, 0x10000007, 0x60000007,
2111     0x38000000, 0x78000000, 0x28000000, 0x50000000,
2112     0x40000000, 0x08000000, 0x30000000, 0x68000000,
2113     0x00000000, 0x48000000, 0x18000000, 0x70000000,
2114     0x58000000, 0x20000000, 0x10000000, 0x60000000,
2115     /* 3 */
2116     0x000000c0, 0x000000f0, 0x00000090, 0x000000a8,
2117     0x000000b0, 0x000000c8, 0x00000088, 0x000000e0,
2118     0x000000f8, 0x000000a0, 0x000000d8, 0x00000080,
2119     0x000000e8, 0x000000d0, 0x00000098, 0x000000b8,
2120     0x000003c0, 0x000003f0, 0x00000390, 0x000003a8,
2121     0x000003b0, 0x000003c8, 0x00000388, 0x000003e0,
2122     0x000003f8, 0x000003a0, 0x000003d8, 0x00000380,
2123     0x000003e8, 0x000003d0, 0x00000398, 0x000003b8,
2124     0x00000740, 0x00000770, 0x00000710, 0x00000728,
2125     0x00000730, 0x00000748, 0x00000708, 0x00000760,
2126     0x00000778, 0x00000720, 0x00000758, 0x00000700,
2127     0x00000768, 0x00000750, 0x00000718, 0x00000738,
2128     0x000006c0, 0x000006f0, 0x00000690, 0x000006a8,
2129     0x000006b0, 0x000006c8, 0x00000688, 0x000006e0,
2130     0x000006f8, 0x000006a0, 0x000006d8, 0x00000680,
2131     0x000006e8, 0x000006d0, 0x00000698, 0x000006b8,
2132     0x00000040, 0x00000070, 0x00000010, 0x00000028,
2133     0x00000030, 0x00000048, 0x00000008, 0x00000060,
2134     0x00000078, 0x00000020, 0x00000058, 0x00000000,
2135     0x00000068, 0x00000050, 0x00000018, 0x00000038,
2136     0x000002c0, 0x000002f0, 0x00000290, 0x000002a8,
2137     0x000002b0, 0x000002c8, 0x00000288, 0x000002e0,
2138     0x000002f8, 0x000002a0, 0x000002d8, 0x00000280,
2139     0x000002e8, 0x000002d0, 0x00000298, 0x000002b8,
2140     0x00000440, 0x00000470, 0x00000410, 0x00000428,
2141     0x00000430, 0x00000448, 0x00000408, 0x00000460,
2142     0x00000478, 0x00000420, 0x00000458, 0x00000400,
2143     0x00000468, 0x00000450, 0x00000418, 0x00000438,
2144     0x000001c0, 0x000001f0, 0x00000190, 0x000001a8,
2145     0x000001b0, 0x000001c8, 0x00000188, 0x000001e0,
2146     0x000001f8, 0x000001a0, 0x000001d8, 0x00000180,
2147     0x000001e8, 0x000001d0, 0x00000198, 0x000001b8,
2148     0x00000240, 0x00000270, 0x00000210, 0x00000228,
2149     0x00000230, 0x00000248, 0x00000208, 0x00000260,
2150     0x00000278, 0x00000220, 0x00000258, 0x00000200,
2151     0x00000268, 0x00000250, 0x00000218, 0x00000238,
2152     0x000007c0, 0x000007f0, 0x00000790, 0x000007a8,
2153     0x000007b0, 0x000007c8, 0x00000788, 0x000007e0,
2154     0x000007f8, 0x000007a0, 0x000007d8, 0x00000780,
2155     0x000007e8, 0x000007d0, 0x00000798, 0x000007b8,
2156     0x00000540, 0x00000570, 0x00000510, 0x00000528,
2157     0x00000530, 0x00000548, 0x00000508, 0x00000560,
2158     0x00000578, 0x00000520, 0x00000558, 0x00000500,
2159     0x00000568, 0x00000550, 0x00000518, 0x00000538,
2160     0x00000340, 0x00000370, 0x00000310, 0x00000328,
2161     0x00000330, 0x00000348, 0x00000308, 0x00000360,
2162     0x00000378, 0x00000320, 0x00000358, 0x00000300,
2163     0x00000368, 0x00000350, 0x00000318, 0x00000338,
2164     0x000004c0, 0x000004f0, 0x00000490, 0x000004a8,
2165     0x000004b0, 0x000004c8, 0x00000488, 0x000004e0,
2166     0x000004f8, 0x000004a0, 0x000004d8, 0x00000480,
2167     0x000004e8, 0x000004d0, 0x00000498, 0x000004b8,
2168     0x00000640, 0x00000670, 0x00000610, 0x00000628,
2169     0x00000630, 0x00000648, 0x00000608, 0x00000660,
2170     0x00000678, 0x00000620, 0x00000658, 0x00000600,
2171     0x00000668, 0x00000650, 0x00000618, 0x00000638,
2172     0x000005c0, 0x000005f0, 0x00000590, 0x000005a8,
2173     0x000005b0, 0x000005c8, 0x00000588, 0x000005e0,
2174     0x000005f8, 0x000005a0, 0x000005d8, 0x00000580,
2175     0x000005e8, 0x000005d0, 0x00000598, 0x000005b8,
2176     0x00000140, 0x00000170, 0x00000110, 0x00000128,
2177     0x00000130, 0x00000148, 0x00000108, 0x00000160,
2178     0x00000178, 0x00000120, 0x00000158, 0x00000100,
2179     0x00000168, 0x00000150, 0x00000118, 0x00000138,
2180   }
2181 };
2182 
2183 /*
2184  *  A macro that performs a full encryption round of GOST 28147-89.
2185  *  Temporary variables tmp assumed and variables r and l for left and right
2186  *  blocks.
2187  */
2188 #define GOST_ENCRYPT_ROUND(key1, key2, sbox) \
2189   tmp = (key1) + r; \
2190   l ^= (sbox)[0*256 + (tmp & 0xff)] ^ (sbox)[1*256 + ((tmp >> 8) & 0xff)] ^ \
2191     (sbox)[2*256 + ((tmp >> 16) & 0xff)] ^ (sbox)[3*256 + (tmp >> 24)]; \
2192   tmp = (key2) + l; \
2193   r ^= (sbox)[0*256 + (tmp & 0xff)] ^ (sbox)[1*256 + ((tmp >> 8) & 0xff)] ^ \
2194     (sbox)[2*256 + ((tmp >> 16) & 0xff)] ^ (sbox)[3*256 + (tmp >> 24)];
2195 
2196 /* encrypt a block with the given key */
gost28147_encrypt_simple(const uint32_t * key,const uint32_t * sbox,const uint32_t * in,uint32_t * out)2197 void gost28147_encrypt_simple (const uint32_t *key, const uint32_t *sbox,
2198                                const uint32_t *in, uint32_t *out)
2199 {
2200   uint32_t l, r, tmp;
2201 
2202   r = in[0], l = in[1];
2203   GOST_ENCRYPT_ROUND(key[0], key[1], sbox)
2204   GOST_ENCRYPT_ROUND(key[2], key[3], sbox)
2205   GOST_ENCRYPT_ROUND(key[4], key[5], sbox)
2206   GOST_ENCRYPT_ROUND(key[6], key[7], sbox)
2207   GOST_ENCRYPT_ROUND(key[0], key[1], sbox)
2208   GOST_ENCRYPT_ROUND(key[2], key[3], sbox)
2209   GOST_ENCRYPT_ROUND(key[4], key[5], sbox)
2210   GOST_ENCRYPT_ROUND(key[6], key[7], sbox)
2211   GOST_ENCRYPT_ROUND(key[0], key[1], sbox)
2212   GOST_ENCRYPT_ROUND(key[2], key[3], sbox)
2213   GOST_ENCRYPT_ROUND(key[4], key[5], sbox)
2214   GOST_ENCRYPT_ROUND(key[6], key[7], sbox)
2215   GOST_ENCRYPT_ROUND(key[7], key[6], sbox)
2216   GOST_ENCRYPT_ROUND(key[5], key[4], sbox)
2217   GOST_ENCRYPT_ROUND(key[3], key[2], sbox)
2218   GOST_ENCRYPT_ROUND(key[1], key[0], sbox)
2219   *out = l, *(out + 1) = r;
2220 }
2221 
gost28147_decrypt_simple(const uint32_t * key,const uint32_t * sbox,const uint32_t * in,uint32_t * out)2222 static void gost28147_decrypt_simple (const uint32_t *key, const uint32_t *sbox,
2223                                       const uint32_t *in, uint32_t *out)
2224 {
2225   uint32_t l, r, tmp;
2226 
2227   r = in[0], l = in[1];
2228   GOST_ENCRYPT_ROUND(key[0], key[1], sbox)
2229   GOST_ENCRYPT_ROUND(key[2], key[3], sbox)
2230   GOST_ENCRYPT_ROUND(key[4], key[5], sbox)
2231   GOST_ENCRYPT_ROUND(key[6], key[7], sbox)
2232   GOST_ENCRYPT_ROUND(key[7], key[6], sbox)
2233   GOST_ENCRYPT_ROUND(key[5], key[4], sbox)
2234   GOST_ENCRYPT_ROUND(key[3], key[2], sbox)
2235   GOST_ENCRYPT_ROUND(key[1], key[0], sbox)
2236   GOST_ENCRYPT_ROUND(key[7], key[6], sbox)
2237   GOST_ENCRYPT_ROUND(key[5], key[4], sbox)
2238   GOST_ENCRYPT_ROUND(key[3], key[2], sbox)
2239   GOST_ENCRYPT_ROUND(key[1], key[0], sbox)
2240   GOST_ENCRYPT_ROUND(key[7], key[6], sbox)
2241   GOST_ENCRYPT_ROUND(key[5], key[4], sbox)
2242   GOST_ENCRYPT_ROUND(key[3], key[2], sbox)
2243   GOST_ENCRYPT_ROUND(key[1], key[0], sbox)
2244   *out = l, *(out + 1) = r;
2245 }
2246 
gost28147_imit_simple(const uint32_t * key,const uint32_t * sbox,const uint32_t * in,uint32_t * out)2247 static void gost28147_imit_simple (const uint32_t *key, const uint32_t *sbox,
2248                                    const uint32_t *in, uint32_t *out)
2249 {
2250   uint32_t l, r, tmp;
2251 
2252   r = in[0], l = in[1];
2253   GOST_ENCRYPT_ROUND(key[0], key[1], sbox)
2254   GOST_ENCRYPT_ROUND(key[2], key[3], sbox)
2255   GOST_ENCRYPT_ROUND(key[4], key[5], sbox)
2256   GOST_ENCRYPT_ROUND(key[6], key[7], sbox)
2257   GOST_ENCRYPT_ROUND(key[0], key[1], sbox)
2258   GOST_ENCRYPT_ROUND(key[2], key[3], sbox)
2259   GOST_ENCRYPT_ROUND(key[4], key[5], sbox)
2260   GOST_ENCRYPT_ROUND(key[6], key[7], sbox)
2261   *out = r, *(out + 1) = l;
2262 }
2263 
2264 static const uint32_t gost28147_key_mesh_cryptopro_data[GOST28147_KEY_SIZE / 4] = {
2265   0x22720069, 0x2304c964,
2266   0x96db3a8d, 0xc42ae946,
2267   0x94acfe18, 0x1207ed00,
2268   0xc2dc86c0, 0x2ba94cef,
2269 };
2270 
gost28147_key_mesh_cryptopro(struct gost28147_ctx * ctx)2271 static void gost28147_key_mesh_cryptopro(struct gost28147_ctx *ctx)
2272 {
2273   uint32_t newkey[GOST28147_KEY_SIZE/4];
2274 
2275   gost28147_decrypt_simple(ctx->key, ctx->sbox,
2276 			   &gost28147_key_mesh_cryptopro_data[0],
2277 			   &newkey[0]);
2278 
2279   gost28147_decrypt_simple(ctx->key, ctx->sbox,
2280 			   &gost28147_key_mesh_cryptopro_data[2],
2281 			   &newkey[2]);
2282 
2283   gost28147_decrypt_simple(ctx->key, ctx->sbox,
2284 			   &gost28147_key_mesh_cryptopro_data[4],
2285 			   &newkey[4]);
2286 
2287   gost28147_decrypt_simple(ctx->key, ctx->sbox,
2288 			   &gost28147_key_mesh_cryptopro_data[6],
2289 			   &newkey[6]);
2290 
2291   memcpy(ctx->key, newkey, sizeof(newkey));
2292   ctx->key_count = 0;
2293 }
2294 
2295 void
gost28147_set_key(struct gost28147_ctx * ctx,const uint8_t * key)2296 gost28147_set_key(struct gost28147_ctx *ctx, const uint8_t *key)
2297 {
2298   unsigned i;
2299 
2300   assert(key);
2301   for (i = 0; i < 8; i++, key += 4)
2302     ctx->key[i] = LE_READ_UINT32(key);
2303   ctx->key_count = 0;
2304 }
2305 
2306 void
gost28147_set_param(struct gost28147_ctx * ctx,const struct gost28147_param * param)2307 gost28147_set_param(struct gost28147_ctx *ctx, const struct gost28147_param *param)
2308 {
2309   assert(param);
2310   ctx->sbox = param->sbox;
2311   ctx->key_meshing = param->key_meshing;
2312 }
2313 
2314 void
gost28147_encrypt(const struct gost28147_ctx * ctx,size_t length,uint8_t * dst,const uint8_t * src)2315 gost28147_encrypt(const struct gost28147_ctx *ctx,
2316 		  size_t length, uint8_t *dst,
2317 		  const uint8_t *src)
2318 {
2319   uint32_t block[2];
2320 
2321   assert(!(length % GOST28147_BLOCK_SIZE));
2322 
2323   while (length)
2324     {
2325       block[0] = LE_READ_UINT32(src); src += 4;
2326       block[1] = LE_READ_UINT32(src); src += 4;
2327       gost28147_encrypt_simple(ctx->key, ctx->sbox, block, block);
2328       LE_WRITE_UINT32(dst, block[0]); dst += 4;
2329       LE_WRITE_UINT32(dst, block[1]); dst += 4;
2330       length -= GOST28147_BLOCK_SIZE;
2331     }
2332 }
2333 
2334 void
gost28147_decrypt(const struct gost28147_ctx * ctx,size_t length,uint8_t * dst,const uint8_t * src)2335 gost28147_decrypt(const struct gost28147_ctx *ctx,
2336 		  size_t length, uint8_t *dst,
2337 		  const uint8_t *src)
2338 {
2339   uint32_t block[2];
2340 
2341   assert(!(length % GOST28147_BLOCK_SIZE));
2342 
2343   while (length)
2344     {
2345       block[0] = LE_READ_UINT32(src); src += 4;
2346       block[1] = LE_READ_UINT32(src); src += 4;
2347       gost28147_decrypt_simple(ctx->key, ctx->sbox, block, block);
2348       LE_WRITE_UINT32(dst, block[0]); dst += 4;
2349       LE_WRITE_UINT32(dst, block[1]); dst += 4;
2350       length -= GOST28147_BLOCK_SIZE;
2351     }
2352 }
2353 
2354 void
gost28147_encrypt_for_cfb(struct gost28147_ctx * ctx,size_t length,uint8_t * dst,const uint8_t * src)2355 gost28147_encrypt_for_cfb(struct gost28147_ctx *ctx,
2356 			  size_t length, uint8_t *dst,
2357 			  const uint8_t *src)
2358 {
2359   uint32_t block[2];
2360 
2361   assert(!(length % GOST28147_BLOCK_SIZE));
2362 
2363   while (length)
2364     {
2365       block[0] = LE_READ_UINT32(src); src += 4;
2366       block[1] = LE_READ_UINT32(src); src += 4;
2367       if (ctx->key_meshing && ctx->key_count == 1024)
2368 	{
2369 	  gost28147_key_mesh_cryptopro(ctx);
2370 	  gost28147_encrypt_simple(ctx->key, ctx->sbox, block, block);
2371 	  ctx->key_count = 0;
2372 	}
2373       gost28147_encrypt_simple(ctx->key, ctx->sbox, block, block);
2374       LE_WRITE_UINT32(dst, block[0]); dst += 4;
2375       LE_WRITE_UINT32(dst, block[1]); dst += 4;
2376       length -= GOST28147_BLOCK_SIZE;
2377       ctx->key_count += GOST28147_BLOCK_SIZE;
2378     }
2379 }
2380 
2381 static void
gost28147_cnt_next_iv(struct gost28147_cnt_ctx * ctx,uint8_t * out)2382 gost28147_cnt_next_iv(struct gost28147_cnt_ctx *ctx,
2383 		      uint8_t *out)
2384 {
2385   uint32_t block[2];
2386   uint32_t temp;
2387 
2388   if (ctx->ctx.key_meshing && ctx->ctx.key_count == 1024)
2389     {
2390       gost28147_key_mesh_cryptopro(&ctx->ctx);
2391       gost28147_encrypt_simple(ctx->ctx.key, ctx->ctx.sbox, ctx->iv, ctx->iv);
2392       ctx->ctx.key_count = 0;
2393     }
2394 
2395   ctx->iv[0] += 0x01010101;
2396   temp = ctx->iv[1] + 0x01010104;
2397   if (temp < ctx->iv[1])
2398     ctx->iv[1] = temp + 1; /* Overflow */
2399   else
2400     ctx->iv[1] = temp;
2401 
2402   gost28147_encrypt_simple(ctx->ctx.key, ctx->ctx.sbox, ctx->iv, block);
2403 
2404   LE_WRITE_UINT32(out + 0, block[0]);
2405   LE_WRITE_UINT32(out + 4, block[1]);
2406 
2407   ctx->ctx.key_count += GOST28147_BLOCK_SIZE;
2408 }
2409 
2410 void
gost28147_cnt_init(struct gost28147_cnt_ctx * ctx,const uint8_t * key,const struct gost28147_param * param)2411 gost28147_cnt_init(struct gost28147_cnt_ctx *ctx,
2412 		   const uint8_t *key,
2413 		   const struct gost28147_param *param)
2414 {
2415   gost28147_set_param(&ctx->ctx, param);
2416   gost28147_set_key(&ctx->ctx, key);
2417   ctx->bytes = 0;
2418 }
2419 
2420 void
gost28147_cnt_set_iv(struct gost28147_cnt_ctx * ctx,const uint8_t * iv)2421 gost28147_cnt_set_iv(struct gost28147_cnt_ctx *ctx,
2422 		     const uint8_t *iv)
2423 {
2424   uint32_t block[2];
2425 
2426   block[0] = LE_READ_UINT32(iv + 0);
2427   block[1] = LE_READ_UINT32(iv + 4);
2428 
2429   gost28147_encrypt_simple(ctx->ctx.key, ctx->ctx.sbox, block, ctx->iv);
2430 }
2431 
2432 void
gost28147_cnt_crypt(struct gost28147_cnt_ctx * ctx,size_t length,uint8_t * dst,const uint8_t * src)2433 gost28147_cnt_crypt(struct gost28147_cnt_ctx *ctx,
2434 		    size_t length, uint8_t *dst,
2435 		    const uint8_t *src)
2436 {
2437   size_t block_size = GOST28147_BLOCK_SIZE;
2438 
2439   if (ctx->bytes)
2440     {
2441       size_t part = ctx->bytes < length ? ctx->bytes : length;
2442       memxor3(dst, src, ctx->buffer + block_size - ctx->bytes, part);
2443       dst += part;
2444       src += part;
2445       length -= part;
2446       ctx->bytes -= part;
2447       ctx->bytes %= block_size;
2448     }
2449   while (length >= block_size)
2450     {
2451       gost28147_cnt_next_iv(ctx, ctx->buffer);
2452       memxor3(dst, src, ctx->buffer, block_size);
2453       length -= block_size;
2454       src += block_size;
2455       dst += block_size;
2456     }
2457 
2458   if (length != 0)
2459     {
2460       gost28147_cnt_next_iv(ctx, ctx->buffer);
2461       memxor3(dst, src, ctx->buffer, length);
2462       ctx->bytes = block_size - length;
2463     }
2464 }
2465 
2466 static void
_gost28147_imit_reinit(struct gost28147_imit_ctx * ctx)2467 _gost28147_imit_reinit(struct gost28147_imit_ctx *ctx)
2468 {
2469   ctx->state[0] = 0;
2470   ctx->state[1] = 0;
2471   ctx->index = 0;
2472   ctx->count = 0;
2473 }
2474 
2475 void
gost28147_imit_set_key(struct gost28147_imit_ctx * ctx,size_t length,const uint8_t * key)2476 gost28147_imit_set_key(struct gost28147_imit_ctx *ctx,
2477 		       size_t length,
2478 		       const uint8_t *key)
2479 {
2480   assert(length == GOST28147_IMIT_KEY_SIZE);
2481   assert(key);
2482 
2483   _gost28147_imit_reinit(ctx);
2484   gost28147_set_key(&ctx->cctx, key);
2485 }
2486 
2487 void
gost28147_imit_set_nonce(struct gost28147_imit_ctx * ctx,const uint8_t * nonce)2488 gost28147_imit_set_nonce(struct gost28147_imit_ctx *ctx, const uint8_t *nonce)
2489 {
2490 	ctx->state[0] = LE_READ_UINT32(nonce + 0);
2491 	ctx->state[1] = LE_READ_UINT32(nonce + 4);
2492 }
2493 
2494 void
gost28147_imit_set_param(struct gost28147_imit_ctx * ctx,const struct gost28147_param * param)2495 gost28147_imit_set_param(struct gost28147_imit_ctx *ctx,
2496 			 const struct gost28147_param *param)
2497 {
2498   assert(param);
2499   gost28147_set_param(&ctx->cctx, param);
2500 }
2501 
2502 static void
gost28147_imit_compress(struct gost28147_imit_ctx * ctx,const uint8_t * data)2503 gost28147_imit_compress(struct gost28147_imit_ctx *ctx,
2504 			const uint8_t *data)
2505 {
2506   uint32_t block[2];
2507 
2508   if (ctx->cctx.key_meshing && ctx->cctx.key_count == 1024)
2509     gost28147_key_mesh_cryptopro(&ctx->cctx);
2510 
2511   block[0] = LE_READ_UINT32(data + 0) ^ ctx->state[0];
2512   block[1] = LE_READ_UINT32(data + 4) ^ ctx->state[1];
2513   gost28147_imit_simple(ctx->cctx.key, ctx->cctx.sbox, block, ctx->state);
2514   ctx->cctx.key_count += 8;
2515 }
2516 
2517 void
gost28147_imit_update(struct gost28147_imit_ctx * ctx,size_t length,const uint8_t * data)2518 gost28147_imit_update(struct gost28147_imit_ctx *ctx,
2519 		      size_t length,
2520 		      const uint8_t *data)
2521 {
2522   MD_UPDATE(ctx, length, data, gost28147_imit_compress, ctx->count++);
2523 }
2524 
2525 void
gost28147_imit_digest(struct gost28147_imit_ctx * ctx,size_t length,uint8_t * digest)2526 gost28147_imit_digest(struct gost28147_imit_ctx *ctx,
2527 		      size_t length,
2528 		      uint8_t *digest)
2529 {
2530   assert(length <= GOST28147_IMIT_DIGEST_SIZE);
2531   const uint8_t zero[GOST28147_IMIT_BLOCK_SIZE] = { 0 };
2532 
2533   if (ctx->index)
2534     {
2535       assert(ctx->index < GOST28147_IMIT_BLOCK_SIZE);
2536       gost28147_imit_update(ctx, GOST28147_IMIT_BLOCK_SIZE - ctx->index, zero);
2537     }
2538 
2539   if (ctx->count == 1)
2540     {
2541       gost28147_imit_update(ctx, GOST28147_IMIT_BLOCK_SIZE, zero);
2542     }
2543 
2544   _nettle_write_le32(length, digest, ctx->state);
2545   _gost28147_imit_reinit(ctx);
2546 }
2547 #endif
2548