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