]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - gosthash2012_const.h
Initial commit providing GOST 2012 algorithms.
[openssl-gost/engine.git] / gosthash2012_const.h
1 /*
2  * GOST R 34.11-2012 constants.
3  *
4  * Copyright (c) 2013 Cryptocom LTD.
5  * This file is distributed under the same license as OpenSSL.
6  *
7  * Author: Alexey Degtyarev <alexey@renatasystems.org>
8  *
9  */
10
11 ALIGN(16)
12 static const union uint512_u buffer0 = {
13     {0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL}
14 };
15
16 #ifndef __GOST3411_BIG_ENDIAN__
17 ALIGN(16)
18 static const union uint512_u buffer512 = {
19     {0x0000000000000200ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
20      0x0ULL}
21 };
22 #else
23 ALIGN(16)
24 static const union uint512_u buffer512 = {
25     {0x0002000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL,
26      0x0ULL}
27 };
28 #endif
29
30 #ifndef __GOST3411_BIG_ENDIAN__
31 ALIGN(16)
32 static const union uint512_u C[12] = {
33     {{
34       0xdd806559f2a64507ULL,
35       0x05767436cc744d23ULL,
36       0xa2422a08a460d315ULL,
37       0x4b7ce09192676901ULL,
38       0x714eb88d7585c4fcULL,
39       0x2f6a76432e45d016ULL,
40       0xebcb2f81c0657c1fULL,
41       0xb1085bda1ecadae9ULL}},
42     {{
43       0xe679047021b19bb7ULL,
44       0x55dda21bd7cbcd56ULL,
45       0x5cb561c2db0aa7caULL,
46       0x9ab5176b12d69958ULL,
47       0x61d55e0f16b50131ULL,
48       0xf3feea720a232b98ULL,
49       0x4fe39d460f70b5d7ULL,
50       0x6fa3b58aa99d2f1aULL}},
51     {{
52       0x991e96f50aba0ab2ULL,
53       0xc2b6f443867adb31ULL,
54       0xc1c93a376062db09ULL,
55       0xd3e20fe490359eb1ULL,
56       0xf2ea7514b1297b7bULL,
57       0x06f15e5f529c1f8bULL,
58       0x0a39fc286a3d8435ULL,
59       0xf574dcac2bce2fc7ULL}},
60     {{
61       0x220cbebc84e3d12eULL,
62       0x3453eaa193e837f1ULL,
63       0xd8b71333935203beULL,
64       0xa9d72c82ed03d675ULL,
65       0x9d721cad685e353fULL,
66       0x488e857e335c3c7dULL,
67       0xf948e1a05d71e4ddULL,
68       0xef1fdfb3e81566d2ULL}},
69     {{
70       0x601758fd7c6cfe57ULL,
71       0x7a56a27ea9ea63f5ULL,
72       0xdfff00b723271a16ULL,
73       0xbfcd1747253af5a3ULL,
74       0x359e35d7800fffbdULL,
75       0x7f151c1f1686104aULL,
76       0x9a3f410c6ca92363ULL,
77       0x4bea6bacad474799ULL}},
78     {{
79       0xfa68407a46647d6eULL,
80       0xbf71c57236904f35ULL,
81       0x0af21f66c2bec6b6ULL,
82       0xcffaa6b71c9ab7b4ULL,
83       0x187f9ab49af08ec6ULL,
84       0x2d66c4f95142a46cULL,
85       0x6fa4c33b7a3039c0ULL,
86       0xae4faeae1d3ad3d9ULL}},
87     {{
88       0x8886564d3a14d493ULL,
89       0x3517454ca23c4af3ULL,
90       0x06476983284a0504ULL,
91       0x0992abc52d822c37ULL,
92       0xd3473e33197a93c9ULL,
93       0x399ec6c7e6bf87c9ULL,
94       0x51ac86febf240954ULL,
95       0xf4c70e16eeaac5ecULL}},
96     {{
97       0xa47f0dd4bf02e71eULL,
98       0x36acc2355951a8d9ULL,
99       0x69d18d2bd1a5c42fULL,
100       0xf4892bcb929b0690ULL,
101       0x89b4443b4ddbc49aULL,
102       0x4eb7f8719c36de1eULL,
103       0x03e7aa020c6e4141ULL,
104       0x9b1f5b424d93c9a7ULL}},
105     {{
106       0x7261445183235adbULL,
107       0x0e38dc92cb1f2a60ULL,
108       0x7b2b8a9aa6079c54ULL,
109       0x800a440bdbb2ceb1ULL,
110       0x3cd955b7e00d0984ULL,
111       0x3a7d3a1b25894224ULL,
112       0x944c9ad8ec165fdeULL,
113       0x378f5a541631229bULL}},
114     {{
115       0x74b4c7fb98459cedULL,
116       0x3698fad1153bb6c3ULL,
117       0x7a1e6c303b7652f4ULL,
118       0x9fe76702af69334bULL,
119       0x1fffe18a1b336103ULL,
120       0x8941e71cff8a78dbULL,
121       0x382ae548b2e4f3f3ULL,
122       0xabbedea680056f52ULL}},
123     {{
124       0x6bcaa4cd81f32d1bULL,
125       0xdea2594ac06fd85dULL,
126       0xefbacd1d7d476e98ULL,
127       0x8a1d71efea48b9caULL,
128       0x2001802114846679ULL,
129       0xd8fa6bbbebab0761ULL,
130       0x3002c6cd635afe94ULL,
131       0x7bcd9ed0efc889fbULL}},
132     {{
133       0x48bc924af11bd720ULL,
134       0xfaf417d5d9b21b99ULL,
135       0xe71da4aa88e12852ULL,
136       0x5d80ef9d1891cc86ULL,
137       0xf82012d430219f9bULL,
138       0xcda43c32bcdf1d77ULL,
139       0xd21380b00449b17aULL,
140       0x378ee767f11631baULL}}
141 };
142 #else
143 ALIGN(16)
144 static const union uint512_u C[12] = {
145     {{
146       0x0745a6f2596580ddULL,
147       0x234d74cc36747605ULL,
148       0x15d360a4082a42a2ULL,
149       0x0169679291e07c4bULL,
150       0xfcc485758db84e71ULL,
151       0x16d0452e43766a2fULL,
152       0x1f7c65c0812fcbebULL,
153       0xe9daca1eda5b08b1ULL}},
154     {{
155       0xb79bb121700479e6ULL,
156       0x56cdcbd71ba2dd55ULL,
157       0xcaa70adbc261b55cULL,
158       0x5899d6126b17b59aULL,
159       0x3101b5160f5ed561ULL,
160       0x982b230a72eafef3ULL,
161       0xd7b5700f469de34fULL,
162       0x1a2f9da98ab5a36fULL}},
163     {{
164       0xb20aba0af5961e99ULL,
165       0x31db7a8643f4b6c2ULL,
166       0x09db6260373ac9c1ULL,
167       0xb19e3590e40fe2d3ULL,
168       0x7b7b29b11475eaf2ULL,
169       0x8b1f9c525f5ef106ULL,
170       0x35843d6a28fc390aULL,
171       0xc72fce2bacdc74f5ULL}},
172     {{
173       0x2ed1e384bcbe0c22ULL,
174       0xf137e893a1ea5334ULL,
175       0xbe0352933313b7d8ULL,
176       0x75d603ed822cd7a9ULL,
177       0x3f355e68ad1c729dULL,
178       0x7d3c5c337e858e48ULL,
179       0xdde4715da0e148f9ULL,
180       0xd26615e8b3df1fefULL}},
181     {{
182       0x57fe6c7cfd581760ULL,
183       0xf563eaa97ea2567aULL,
184       0x161a2723b700ffdfULL,
185       0xa3f53a254717cdbfULL,
186       0xbdff0f80d7359e35ULL,
187       0x4a1086161f1c157fULL,
188       0x6323a96c0c413f9aULL,
189       0x994747adac6bea4bULL}},
190     {{
191       0x6e7d64467a4068faULL,
192       0x354f903672c571bfULL,
193       0xb6c6bec2661ff20aULL,
194       0xb4b79a1cb7a6facfULL,
195       0xc68ef09ab49a7f18ULL,
196       0x6ca44251f9c4662dULL,
197       0xc039307a3bc3a46fULL,
198       0xd9d33a1daeae4faeULL}},
199     {{
200       0x93d4143a4d568688ULL,
201       0xf34a3ca24c451735ULL,
202       0x04054a2883694706ULL,
203       0x372c822dc5ab9209ULL,
204       0xc9937a19333e47d3ULL,
205       0xc987bfe6c7c69e39ULL,
206       0x540924bffe86ac51ULL,
207       0xecc5aaee160ec7f4ULL}},
208     {{
209       0x1ee702bfd40d7fa4ULL,
210       0xd9a8515935c2ac36ULL,
211       0x2fc4a5d12b8dd169ULL,
212       0x90069b92cb2b89f4ULL,
213       0x9ac4db4d3b44b489ULL,
214       0x1ede369c71f8b74eULL,
215       0x41416e0c02aae703ULL,
216       0xa7c9934d425b1f9bULL}},
217     {{
218       0xdb5a238351446172ULL,
219       0x602a1fcb92dc380eULL,
220       0x549c07a69a8a2b7bULL,
221       0xb1ceb2db0b440a80ULL,
222       0x84090de0b755d93cULL,
223       0x244289251b3a7d3aULL,
224       0xde5f16ecd89a4c94ULL,
225       0x9b223116545a8f37ULL}},
226     {{
227       0xed9c4598fbc7b474ULL,
228       0xc3b63b15d1fa9836ULL,
229       0xf452763b306c1e7aULL,
230       0x4b3369af0267e79fULL,
231       0x0361331b8ae1ff1fULL,
232       0xdb788aff1ce74189ULL,
233       0xf3f3e4b248e52a38ULL,
234       0x526f0580a6debeabULL}},
235     {{
236       0x1b2df381cda4ca6bULL,
237       0x5dd86fc04a59a2deULL,
238       0x986e477d1dcdbaefULL,
239       0xcab948eaef711d8aULL,
240       0x7966841421800120ULL,
241       0x6107abebbb6bfad8ULL,
242       0x94fe5a63cdc60230ULL,
243       0xfb89c8efd09ecd7bULL}},
244     {{
245       0x20d71bf14a92bc48ULL,
246       0x991bb2d9d517f4faULL,
247       0x5228e188aaa41de7ULL,
248       0x86cc91189def805dULL,
249       0x9b9f2130d41220f8ULL,
250       0x771ddfbc323ca4cdULL,
251       0x7ab14904b08013d2ULL,
252       0xba3116f167e78e37ULL}}
253 };
254 #endif
255
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
280 };
281 #else
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
305 };
306 #endif
307
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
317 };
318
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
352 };