2 * GOST R 34.11-2012 constants.
4 * Copyright (c) 2013 Cryptocom LTD.
5 * This file is distributed under the same license as OpenSSL.
7 * Author: Alexey Degtyarev <alexey@renatasystems.org>
12 static const union uint512_u buffer0 = {
13 {0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL}
16 #ifndef __GOST3411_BIG_ENDIAN__
18 static const union uint512_u buffer512 = {
19 {0x0000000000000200ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
24 static const union uint512_u buffer512 = {
25 {0x0002000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
30 #ifndef __GOST3411_BIG_ENDIAN__
32 static const union uint512_u C[12] = {
34 0xdd806559f2a64507ULL,
35 0x05767436cc744d23ULL,
36 0xa2422a08a460d315ULL,
37 0x4b7ce09192676901ULL,
38 0x714eb88d7585c4fcULL,
39 0x2f6a76432e45d016ULL,
40 0xebcb2f81c0657c1fULL,
41 0xb1085bda1ecadae9ULL}},
43 0xe679047021b19bb7ULL,
44 0x55dda21bd7cbcd56ULL,
45 0x5cb561c2db0aa7caULL,
46 0x9ab5176b12d69958ULL,
47 0x61d55e0f16b50131ULL,
48 0xf3feea720a232b98ULL,
49 0x4fe39d460f70b5d7ULL,
50 0x6fa3b58aa99d2f1aULL}},
52 0x991e96f50aba0ab2ULL,
53 0xc2b6f443867adb31ULL,
54 0xc1c93a376062db09ULL,
55 0xd3e20fe490359eb1ULL,
56 0xf2ea7514b1297b7bULL,
57 0x06f15e5f529c1f8bULL,
58 0x0a39fc286a3d8435ULL,
59 0xf574dcac2bce2fc7ULL}},
61 0x220cbebc84e3d12eULL,
62 0x3453eaa193e837f1ULL,
63 0xd8b71333935203beULL,
64 0xa9d72c82ed03d675ULL,
65 0x9d721cad685e353fULL,
66 0x488e857e335c3c7dULL,
67 0xf948e1a05d71e4ddULL,
68 0xef1fdfb3e81566d2ULL}},
70 0x601758fd7c6cfe57ULL,
71 0x7a56a27ea9ea63f5ULL,
72 0xdfff00b723271a16ULL,
73 0xbfcd1747253af5a3ULL,
74 0x359e35d7800fffbdULL,
75 0x7f151c1f1686104aULL,
76 0x9a3f410c6ca92363ULL,
77 0x4bea6bacad474799ULL}},
79 0xfa68407a46647d6eULL,
80 0xbf71c57236904f35ULL,
81 0x0af21f66c2bec6b6ULL,
82 0xcffaa6b71c9ab7b4ULL,
83 0x187f9ab49af08ec6ULL,
84 0x2d66c4f95142a46cULL,
85 0x6fa4c33b7a3039c0ULL,
86 0xae4faeae1d3ad3d9ULL}},
88 0x8886564d3a14d493ULL,
89 0x3517454ca23c4af3ULL,
90 0x06476983284a0504ULL,
91 0x0992abc52d822c37ULL,
92 0xd3473e33197a93c9ULL,
93 0x399ec6c7e6bf87c9ULL,
94 0x51ac86febf240954ULL,
95 0xf4c70e16eeaac5ecULL}},
97 0xa47f0dd4bf02e71eULL,
98 0x36acc2355951a8d9ULL,
99 0x69d18d2bd1a5c42fULL,
100 0xf4892bcb929b0690ULL,
101 0x89b4443b4ddbc49aULL,
102 0x4eb7f8719c36de1eULL,
103 0x03e7aa020c6e4141ULL,
104 0x9b1f5b424d93c9a7ULL}},
106 0x7261445183235adbULL,
107 0x0e38dc92cb1f2a60ULL,
108 0x7b2b8a9aa6079c54ULL,
109 0x800a440bdbb2ceb1ULL,
110 0x3cd955b7e00d0984ULL,
111 0x3a7d3a1b25894224ULL,
112 0x944c9ad8ec165fdeULL,
113 0x378f5a541631229bULL}},
115 0x74b4c7fb98459cedULL,
116 0x3698fad1153bb6c3ULL,
117 0x7a1e6c303b7652f4ULL,
118 0x9fe76702af69334bULL,
119 0x1fffe18a1b336103ULL,
120 0x8941e71cff8a78dbULL,
121 0x382ae548b2e4f3f3ULL,
122 0xabbedea680056f52ULL}},
124 0x6bcaa4cd81f32d1bULL,
125 0xdea2594ac06fd85dULL,
126 0xefbacd1d7d476e98ULL,
127 0x8a1d71efea48b9caULL,
128 0x2001802114846679ULL,
129 0xd8fa6bbbebab0761ULL,
130 0x3002c6cd635afe94ULL,
131 0x7bcd9ed0efc889fbULL}},
133 0x48bc924af11bd720ULL,
134 0xfaf417d5d9b21b99ULL,
135 0xe71da4aa88e12852ULL,
136 0x5d80ef9d1891cc86ULL,
137 0xf82012d430219f9bULL,
138 0xcda43c32bcdf1d77ULL,
139 0xd21380b00449b17aULL,
140 0x378ee767f11631baULL}}
144 static const union uint512_u C[12] = {
146 0x0745a6f2596580ddULL,
147 0x234d74cc36747605ULL,
148 0x15d360a4082a42a2ULL,
149 0x0169679291e07c4bULL,
150 0xfcc485758db84e71ULL,
151 0x16d0452e43766a2fULL,
152 0x1f7c65c0812fcbebULL,
153 0xe9daca1eda5b08b1ULL}},
155 0xb79bb121700479e6ULL,
156 0x56cdcbd71ba2dd55ULL,
157 0xcaa70adbc261b55cULL,
158 0x5899d6126b17b59aULL,
159 0x3101b5160f5ed561ULL,
160 0x982b230a72eafef3ULL,
161 0xd7b5700f469de34fULL,
162 0x1a2f9da98ab5a36fULL}},
164 0xb20aba0af5961e99ULL,
165 0x31db7a8643f4b6c2ULL,
166 0x09db6260373ac9c1ULL,
167 0xb19e3590e40fe2d3ULL,
168 0x7b7b29b11475eaf2ULL,
169 0x8b1f9c525f5ef106ULL,
170 0x35843d6a28fc390aULL,
171 0xc72fce2bacdc74f5ULL}},
173 0x2ed1e384bcbe0c22ULL,
174 0xf137e893a1ea5334ULL,
175 0xbe0352933313b7d8ULL,
176 0x75d603ed822cd7a9ULL,
177 0x3f355e68ad1c729dULL,
178 0x7d3c5c337e858e48ULL,
179 0xdde4715da0e148f9ULL,
180 0xd26615e8b3df1fefULL}},
182 0x57fe6c7cfd581760ULL,
183 0xf563eaa97ea2567aULL,
184 0x161a2723b700ffdfULL,
185 0xa3f53a254717cdbfULL,
186 0xbdff0f80d7359e35ULL,
187 0x4a1086161f1c157fULL,
188 0x6323a96c0c413f9aULL,
189 0x994747adac6bea4bULL}},
191 0x6e7d64467a4068faULL,
192 0x354f903672c571bfULL,
193 0xb6c6bec2661ff20aULL,
194 0xb4b79a1cb7a6facfULL,
195 0xc68ef09ab49a7f18ULL,
196 0x6ca44251f9c4662dULL,
197 0xc039307a3bc3a46fULL,
198 0xd9d33a1daeae4faeULL}},
200 0x93d4143a4d568688ULL,
201 0xf34a3ca24c451735ULL,
202 0x04054a2883694706ULL,
203 0x372c822dc5ab9209ULL,
204 0xc9937a19333e47d3ULL,
205 0xc987bfe6c7c69e39ULL,
206 0x540924bffe86ac51ULL,
207 0xecc5aaee160ec7f4ULL}},
209 0x1ee702bfd40d7fa4ULL,
210 0xd9a8515935c2ac36ULL,
211 0x2fc4a5d12b8dd169ULL,
212 0x90069b92cb2b89f4ULL,
213 0x9ac4db4d3b44b489ULL,
214 0x1ede369c71f8b74eULL,
215 0x41416e0c02aae703ULL,
216 0xa7c9934d425b1f9bULL}},
218 0xdb5a238351446172ULL,
219 0x602a1fcb92dc380eULL,
220 0x549c07a69a8a2b7bULL,
221 0xb1ceb2db0b440a80ULL,
222 0x84090de0b755d93cULL,
223 0x244289251b3a7d3aULL,
224 0xde5f16ecd89a4c94ULL,
225 0x9b223116545a8f37ULL}},
227 0xed9c4598fbc7b474ULL,
228 0xc3b63b15d1fa9836ULL,
229 0xf452763b306c1e7aULL,
230 0x4b3369af0267e79fULL,
231 0x0361331b8ae1ff1fULL,
232 0xdb788aff1ce74189ULL,
233 0xf3f3e4b248e52a38ULL,
234 0x526f0580a6debeabULL}},
236 0x1b2df381cda4ca6bULL,
237 0x5dd86fc04a59a2deULL,
238 0x986e477d1dcdbaefULL,
239 0xcab948eaef711d8aULL,
240 0x7966841421800120ULL,
241 0x6107abebbb6bfad8ULL,
242 0x94fe5a63cdc60230ULL,
243 0xfb89c8efd09ecd7bULL}},
245 0x20d71bf14a92bc48ULL,
246 0x991bb2d9d517f4faULL,
247 0x5228e188aaa41de7ULL,
248 0x86cc91189def805dULL,
249 0x9b9f2130d41220f8ULL,
250 0x771ddfbc323ca4cdULL,
251 0x7ab14904b08013d2ULL,
252 0xba3116f167e78e37ULL}}
256 #ifndef __GOST3411_BIG_ENDIAN__
257 static const unsigned long long A[64] = {
258 0x8e20faa72ba0b470ULL, 0x47107ddd9b505a38ULL, 0xad08b0e0c3282d1cULL,
259 0xd8045870ef14980eULL, 0x6c022c38f90a4c07ULL, 0x3601161cf205268dULL,
260 0x1b8e0b0e798c13c8ULL, 0x83478b07b2468764ULL, 0xa011d380818e8f40ULL,
261 0x5086e740ce47c920ULL, 0x2843fd2067adea10ULL, 0x14aff010bdd87508ULL,
262 0x0ad97808d06cb404ULL, 0x05e23c0468365a02ULL, 0x8c711e02341b2d01ULL,
263 0x46b60f011a83988eULL, 0x90dab52a387ae76fULL, 0x486dd4151c3dfdb9ULL,
264 0x24b86a840e90f0d2ULL, 0x125c354207487869ULL, 0x092e94218d243cbaULL,
265 0x8a174a9ec8121e5dULL, 0x4585254f64090fa0ULL, 0xaccc9ca9328a8950ULL,
266 0x9d4df05d5f661451ULL, 0xc0a878a0a1330aa6ULL, 0x60543c50de970553ULL,
267 0x302a1e286fc58ca7ULL, 0x18150f14b9ec46ddULL, 0x0c84890ad27623e0ULL,
268 0x0642ca05693b9f70ULL, 0x0321658cba93c138ULL, 0x86275df09ce8aaa8ULL,
269 0x439da0784e745554ULL, 0xafc0503c273aa42aULL, 0xd960281e9d1d5215ULL,
270 0xe230140fc0802984ULL, 0x71180a8960409a42ULL, 0xb60c05ca30204d21ULL,
271 0x5b068c651810a89eULL, 0x456c34887a3805b9ULL, 0xac361a443d1c8cd2ULL,
272 0x561b0d22900e4669ULL, 0x2b838811480723baULL, 0x9bcf4486248d9f5dULL,
273 0xc3e9224312c8c1a0ULL, 0xeffa11af0964ee50ULL, 0xf97d86d98a327728ULL,
274 0xe4fa2054a80b329cULL, 0x727d102a548b194eULL, 0x39b008152acb8227ULL,
275 0x9258048415eb419dULL, 0x492c024284fbaec0ULL, 0xaa16012142f35760ULL,
276 0x550b8e9e21f7a530ULL, 0xa48b474f9ef5dc18ULL, 0x70a6a56e2440598eULL,
277 0x3853dc371220a247ULL, 0x1ca76e95091051adULL, 0x0edd37c48a08a6d8ULL,
278 0x07e095624504536cULL, 0x8d70c431ac02a736ULL, 0xc83862965601dd1bULL,
279 0x641c314b2b8ee083ULL
282 static const unsigned long long A[64] = {
283 0x70b4a02ba7fa208eULL, 0x385a509bdd7d1047ULL, 0x1c2d28c3e0b008adULL,
284 0x0e9814ef705804d8ULL, 0x074c0af9382c026cULL, 0x8d2605f21c160136ULL,
285 0xc8138c790e0b8e1bULL, 0x648746b2078b4783ULL, 0x408f8e8180d311a0ULL,
286 0x20c947ce40e78650ULL, 0x10eaad6720fd4328ULL, 0x0875d8bd10f0af14ULL,
287 0x04b46cd00878d90aULL, 0x025a3668043ce205ULL, 0x012d1b34021e718cULL,
288 0x8e98831a010fb646ULL, 0x6fe77a382ab5da90ULL, 0xb9fd3d1c15d46d48ULL,
289 0xd2f0900e846ab824ULL, 0x6978480742355c12ULL, 0xba3c248d21942e09ULL,
290 0x5d1e12c89e4a178aULL, 0xa00f09644f258545ULL, 0x50898a32a99cccacULL,
291 0x5114665f5df04d9dULL, 0xa60a33a1a078a8c0ULL, 0x530597de503c5460ULL,
292 0xa78cc56f281e2a30ULL, 0xdd46ecb9140f1518ULL, 0xe02376d20a89840cULL,
293 0x709f3b6905ca4206ULL, 0x38c193ba8c652103ULL, 0xa8aae89cf05d2786ULL,
294 0x5455744e78a09d43ULL, 0x2aa43a273c50c0afULL, 0x15521d9d1e2860d9ULL,
295 0x842980c00f1430e2ULL, 0x429a4060890a1871ULL, 0x214d2030ca050cb6ULL,
296 0x9ea81018658c065bULL, 0xb905387a88346c45ULL, 0xd28c1c3d441a36acULL,
297 0x69460e90220d1b56ULL, 0xba2307481188832bULL, 0x5d9f8d248644cf9bULL,
298 0xa0c1c8124322e9c3ULL, 0x50ee6409af11faefULL, 0x2877328ad9867df9ULL,
299 0x9c320ba85420fae4ULL, 0x4e198b542a107d72ULL, 0x2782cb2a1508b039ULL,
300 0x9d41eb1584045892ULL, 0xc0aefb8442022c49ULL, 0x6057f342210116aaULL,
301 0x30a5f7219e8e0b55ULL, 0x18dcf59e4f478ba4ULL, 0x8e5940246ea5a670ULL,
302 0x47a2201237dc5338ULL, 0xad511009956ea71cULL, 0xd8a6088ac437dd0eULL,
303 0x6c5304456295e007ULL, 0x36a702ac31c4708dULL, 0x1bdd0156966238c8ULL,
304 0x83e08e2b4b311c64ULL
308 static const unsigned char Tau[64] = {
309 0, 8, 16, 24, 32, 40, 48, 56,
310 1, 9, 17, 25, 33, 41, 49, 57,
311 2, 10, 18, 26, 34, 42, 50, 58,
312 3, 11, 19, 27, 35, 43, 51, 59,
313 4, 12, 20, 28, 36, 44, 52, 60,
314 5, 13, 21, 29, 37, 45, 53, 61,
315 6, 14, 22, 30, 38, 46, 54, 62,
316 7, 15, 23, 31, 39, 47, 55, 63
319 static const unsigned char Pi[256] = {
320 252, 238, 221, 17, 207, 110, 49, 22,
321 251, 196, 250, 218, 35, 197, 4, 77,
322 233, 119, 240, 219, 147, 46, 153, 186,
323 23, 54, 241, 187, 20, 205, 95, 193,
324 249, 24, 101, 90, 226, 92, 239, 33,
325 129, 28, 60, 66, 139, 1, 142, 79,
326 5, 132, 2, 174, 227, 106, 143, 160,
327 6, 11, 237, 152, 127, 212, 211, 31,
328 235, 52, 44, 81, 234, 200, 72, 171,
329 242, 42, 104, 162, 253, 58, 206, 204,
330 181, 112, 14, 86, 8, 12, 118, 18,
331 191, 114, 19, 71, 156, 183, 93, 135,
332 21, 161, 150, 41, 16, 123, 154, 199,
333 243, 145, 120, 111, 157, 158, 178, 177,
334 50, 117, 25, 61, 255, 53, 138, 126,
335 109, 84, 198, 128, 195, 189, 13, 87,
336 223, 245, 36, 169, 62, 168, 67, 201,
337 215, 121, 214, 246, 124, 34, 185, 3,
338 224, 15, 236, 222, 122, 148, 176, 188,
339 220, 232, 40, 80, 78, 51, 10, 74,
340 167, 151, 96, 115, 30, 0, 98, 68,
341 26, 184, 56, 130, 100, 159, 38, 65,
342 173, 69, 70, 146, 39, 94, 85, 47,
343 140, 163, 165, 125, 105, 213, 149, 59,
344 7, 88, 179, 64, 134, 172, 29, 247,
345 48, 55, 107, 228, 136, 217, 231, 137,
346 225, 27, 131, 73, 76, 63, 248, 254,
347 141, 83, 170, 144, 202, 216, 133, 97,
348 32, 113, 103, 164, 45, 43, 9, 91,
349 203, 155, 37, 208, 190, 229, 108, 82,
350 89, 166, 116, 210, 230, 244, 180, 192,
351 209, 102, 175, 194, 57, 75, 99, 182