/src/libgcrypt/cipher/whirlpool.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* whirlpool.c - Whirlpool hashing algorithm |
2 | | * Copyright (C) 2005 Free Software Foundation, Inc. |
3 | | * |
4 | | * This file is part of Libgcrypt. |
5 | | * |
6 | | * Libgcrypt is free software; you can redistribute it and/or modify |
7 | | * it under the terms of the GNU Lesser General Public License as |
8 | | * published by the Free Software Foundation; either version 2.1 of |
9 | | * the License, or (at your option) any later version. |
10 | | * |
11 | | * Libgcrypt is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | | * GNU Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with this program; if not, see <http://www.gnu.org/licenses/>. |
18 | | */ |
19 | | |
20 | | /* This is an implementation of the Whirlpool hashing algorithm, which |
21 | | has been developed by Vincent Rijmen and Paulo S. L. M. Barreto; |
22 | | it's homepage is located at: |
23 | | http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html |
24 | | |
25 | | The S-Boxes and the structure of the main transformation function, |
26 | | which implements an optimized version of the algorithm, is taken |
27 | | from the reference implementation available from |
28 | | http://www.larc.usp.br/~pbarreto/whirlpool.zip |
29 | | */ |
30 | | |
31 | | #include <config.h> |
32 | | #include <stdio.h> |
33 | | #include <stdlib.h> |
34 | | #include <string.h> |
35 | | |
36 | | #include "types.h" |
37 | | #include "g10lib.h" |
38 | | #include "cipher.h" |
39 | | |
40 | | #include "bufhelp.h" |
41 | | #include "hash-common.h" |
42 | | |
43 | | /* USE_AMD64_ASM indicates whether to use AMD64 assembly code. */ |
44 | | #undef USE_AMD64_ASM |
45 | | #if defined(__x86_64__) && (defined(HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS) || \ |
46 | | defined(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS)) |
47 | | # define USE_AMD64_ASM 1 |
48 | | #endif |
49 | | |
50 | | |
51 | | |
52 | | /* Size of a whirlpool block (in bytes). */ |
53 | 0 | #define BLOCK_SIZE 64 |
54 | | |
55 | | /* Number of rounds. */ |
56 | | #define R 10 |
57 | | |
58 | | |
59 | | |
60 | | /* Types. */ |
61 | | typedef u64 whirlpool_block_t[BLOCK_SIZE / 8]; |
62 | | |
63 | | typedef struct { |
64 | | gcry_md_block_ctx_t bctx; |
65 | | whirlpool_block_t hash_state; |
66 | | int use_bugemu; |
67 | | struct { |
68 | | size_t count; |
69 | | unsigned char length[32]; |
70 | | } bugemu; |
71 | | } whirlpool_context_t; |
72 | | |
73 | | |
74 | | |
75 | | /* Macros. */ |
76 | | |
77 | | /* Convert the the buffer BUFFER into a block BLOCK, using I as |
78 | | counter. */ |
79 | | #define buffer_to_block(buffer, block, i) \ |
80 | | for (i = 0; i < 8; i++) \ |
81 | | (block)[i] = buf_get_be64((buffer) + i * 8); |
82 | | |
83 | | /* Convert the block BLOCK into a buffer BUFFER, using I as |
84 | | counter. */ |
85 | | #define block_to_buffer(buffer, block, i) \ |
86 | 0 | for (i = 0; i < 8; i++) \ |
87 | 0 | buf_put_be64((buffer) + i * 8, (block)[i]); |
88 | | |
89 | | /* Copy the block BLOCK_SRC to BLOCK_DST, using I as counter. */ |
90 | | #define block_copy(block_dst, block_src, i) \ |
91 | | for (i = 0; i < 8; i++) \ |
92 | | block_dst[i] = block_src[i]; |
93 | | |
94 | | /* XOR the block BLOCK_SRC into BLOCK_DST, using I as counter. */ |
95 | | #define block_xor(block_dst, block_src, i) \ |
96 | | for (i = 0; i < 8; i++) \ |
97 | | block_dst[i] ^= block_src[i]; |
98 | | |
99 | | |
100 | | |
101 | | |
102 | | struct whirlpool_tables_s { |
103 | | u64 RC[R]; |
104 | | u64 C[8][256]; |
105 | | }; |
106 | | |
107 | | static const struct whirlpool_tables_s tab = |
108 | | { |
109 | | /* Round constants. */ |
110 | | { |
111 | | U64_C (0x1823c6e887b8014f), |
112 | | U64_C (0x36a6d2f5796f9152), |
113 | | U64_C (0x60bc9b8ea30c7b35), |
114 | | U64_C (0x1de0d7c22e4bfe57), |
115 | | U64_C (0x157737e59ff04ada), |
116 | | U64_C (0x58c9290ab1a06b85), |
117 | | U64_C (0xbd5d10f4cb3e0567), |
118 | | U64_C (0xe427418ba77d95d8), |
119 | | U64_C (0xfbee7c66dd17479e), |
120 | | U64_C (0xca2dbf07ad5a8333), |
121 | | }, |
122 | | /* Main lookup boxes. */ |
123 | | { { |
124 | | U64_C (0x18186018c07830d8), U64_C (0x23238c2305af4626), |
125 | | U64_C (0xc6c63fc67ef991b8), U64_C (0xe8e887e8136fcdfb), |
126 | | U64_C (0x878726874ca113cb), U64_C (0xb8b8dab8a9626d11), |
127 | | U64_C (0x0101040108050209), U64_C (0x4f4f214f426e9e0d), |
128 | | U64_C (0x3636d836adee6c9b), U64_C (0xa6a6a2a6590451ff), |
129 | | U64_C (0xd2d26fd2debdb90c), U64_C (0xf5f5f3f5fb06f70e), |
130 | | U64_C (0x7979f979ef80f296), U64_C (0x6f6fa16f5fcede30), |
131 | | U64_C (0x91917e91fcef3f6d), U64_C (0x52525552aa07a4f8), |
132 | | U64_C (0x60609d6027fdc047), U64_C (0xbcbccabc89766535), |
133 | | U64_C (0x9b9b569baccd2b37), U64_C (0x8e8e028e048c018a), |
134 | | U64_C (0xa3a3b6a371155bd2), U64_C (0x0c0c300c603c186c), |
135 | | U64_C (0x7b7bf17bff8af684), U64_C (0x3535d435b5e16a80), |
136 | | U64_C (0x1d1d741de8693af5), U64_C (0xe0e0a7e05347ddb3), |
137 | | U64_C (0xd7d77bd7f6acb321), U64_C (0xc2c22fc25eed999c), |
138 | | U64_C (0x2e2eb82e6d965c43), U64_C (0x4b4b314b627a9629), |
139 | | U64_C (0xfefedffea321e15d), U64_C (0x575741578216aed5), |
140 | | U64_C (0x15155415a8412abd), U64_C (0x7777c1779fb6eee8), |
141 | | U64_C (0x3737dc37a5eb6e92), U64_C (0xe5e5b3e57b56d79e), |
142 | | U64_C (0x9f9f469f8cd92313), U64_C (0xf0f0e7f0d317fd23), |
143 | | U64_C (0x4a4a354a6a7f9420), U64_C (0xdada4fda9e95a944), |
144 | | U64_C (0x58587d58fa25b0a2), U64_C (0xc9c903c906ca8fcf), |
145 | | U64_C (0x2929a429558d527c), U64_C (0x0a0a280a5022145a), |
146 | | U64_C (0xb1b1feb1e14f7f50), U64_C (0xa0a0baa0691a5dc9), |
147 | | U64_C (0x6b6bb16b7fdad614), U64_C (0x85852e855cab17d9), |
148 | | U64_C (0xbdbdcebd8173673c), U64_C (0x5d5d695dd234ba8f), |
149 | | U64_C (0x1010401080502090), U64_C (0xf4f4f7f4f303f507), |
150 | | U64_C (0xcbcb0bcb16c08bdd), U64_C (0x3e3ef83eedc67cd3), |
151 | | U64_C (0x0505140528110a2d), U64_C (0x676781671fe6ce78), |
152 | | U64_C (0xe4e4b7e47353d597), U64_C (0x27279c2725bb4e02), |
153 | | U64_C (0x4141194132588273), U64_C (0x8b8b168b2c9d0ba7), |
154 | | U64_C (0xa7a7a6a7510153f6), U64_C (0x7d7de97dcf94fab2), |
155 | | U64_C (0x95956e95dcfb3749), U64_C (0xd8d847d88e9fad56), |
156 | | U64_C (0xfbfbcbfb8b30eb70), U64_C (0xeeee9fee2371c1cd), |
157 | | U64_C (0x7c7ced7cc791f8bb), U64_C (0x6666856617e3cc71), |
158 | | U64_C (0xdddd53dda68ea77b), U64_C (0x17175c17b84b2eaf), |
159 | | U64_C (0x4747014702468e45), U64_C (0x9e9e429e84dc211a), |
160 | | U64_C (0xcaca0fca1ec589d4), U64_C (0x2d2db42d75995a58), |
161 | | U64_C (0xbfbfc6bf9179632e), U64_C (0x07071c07381b0e3f), |
162 | | U64_C (0xadad8ead012347ac), U64_C (0x5a5a755aea2fb4b0), |
163 | | U64_C (0x838336836cb51bef), U64_C (0x3333cc3385ff66b6), |
164 | | U64_C (0x636391633ff2c65c), U64_C (0x02020802100a0412), |
165 | | U64_C (0xaaaa92aa39384993), U64_C (0x7171d971afa8e2de), |
166 | | U64_C (0xc8c807c80ecf8dc6), U64_C (0x19196419c87d32d1), |
167 | | U64_C (0x494939497270923b), U64_C (0xd9d943d9869aaf5f), |
168 | | U64_C (0xf2f2eff2c31df931), U64_C (0xe3e3abe34b48dba8), |
169 | | U64_C (0x5b5b715be22ab6b9), U64_C (0x88881a8834920dbc), |
170 | | U64_C (0x9a9a529aa4c8293e), U64_C (0x262698262dbe4c0b), |
171 | | U64_C (0x3232c8328dfa64bf), U64_C (0xb0b0fab0e94a7d59), |
172 | | U64_C (0xe9e983e91b6acff2), U64_C (0x0f0f3c0f78331e77), |
173 | | U64_C (0xd5d573d5e6a6b733), U64_C (0x80803a8074ba1df4), |
174 | | U64_C (0xbebec2be997c6127), U64_C (0xcdcd13cd26de87eb), |
175 | | U64_C (0x3434d034bde46889), U64_C (0x48483d487a759032), |
176 | | U64_C (0xffffdbffab24e354), U64_C (0x7a7af57af78ff48d), |
177 | | U64_C (0x90907a90f4ea3d64), U64_C (0x5f5f615fc23ebe9d), |
178 | | U64_C (0x202080201da0403d), U64_C (0x6868bd6867d5d00f), |
179 | | U64_C (0x1a1a681ad07234ca), U64_C (0xaeae82ae192c41b7), |
180 | | U64_C (0xb4b4eab4c95e757d), U64_C (0x54544d549a19a8ce), |
181 | | U64_C (0x93937693ece53b7f), U64_C (0x222288220daa442f), |
182 | | U64_C (0x64648d6407e9c863), U64_C (0xf1f1e3f1db12ff2a), |
183 | | U64_C (0x7373d173bfa2e6cc), U64_C (0x12124812905a2482), |
184 | | U64_C (0x40401d403a5d807a), U64_C (0x0808200840281048), |
185 | | U64_C (0xc3c32bc356e89b95), U64_C (0xecec97ec337bc5df), |
186 | | U64_C (0xdbdb4bdb9690ab4d), U64_C (0xa1a1bea1611f5fc0), |
187 | | U64_C (0x8d8d0e8d1c830791), U64_C (0x3d3df43df5c97ac8), |
188 | | U64_C (0x97976697ccf1335b), U64_C (0x0000000000000000), |
189 | | U64_C (0xcfcf1bcf36d483f9), U64_C (0x2b2bac2b4587566e), |
190 | | U64_C (0x7676c57697b3ece1), U64_C (0x8282328264b019e6), |
191 | | U64_C (0xd6d67fd6fea9b128), U64_C (0x1b1b6c1bd87736c3), |
192 | | U64_C (0xb5b5eeb5c15b7774), U64_C (0xafaf86af112943be), |
193 | | U64_C (0x6a6ab56a77dfd41d), U64_C (0x50505d50ba0da0ea), |
194 | | U64_C (0x45450945124c8a57), U64_C (0xf3f3ebf3cb18fb38), |
195 | | U64_C (0x3030c0309df060ad), U64_C (0xefef9bef2b74c3c4), |
196 | | U64_C (0x3f3ffc3fe5c37eda), U64_C (0x55554955921caac7), |
197 | | U64_C (0xa2a2b2a2791059db), U64_C (0xeaea8fea0365c9e9), |
198 | | U64_C (0x656589650fecca6a), U64_C (0xbabad2bab9686903), |
199 | | U64_C (0x2f2fbc2f65935e4a), U64_C (0xc0c027c04ee79d8e), |
200 | | U64_C (0xdede5fdebe81a160), U64_C (0x1c1c701ce06c38fc), |
201 | | U64_C (0xfdfdd3fdbb2ee746), U64_C (0x4d4d294d52649a1f), |
202 | | U64_C (0x92927292e4e03976), U64_C (0x7575c9758fbceafa), |
203 | | U64_C (0x06061806301e0c36), U64_C (0x8a8a128a249809ae), |
204 | | U64_C (0xb2b2f2b2f940794b), U64_C (0xe6e6bfe66359d185), |
205 | | U64_C (0x0e0e380e70361c7e), U64_C (0x1f1f7c1ff8633ee7), |
206 | | U64_C (0x6262956237f7c455), U64_C (0xd4d477d4eea3b53a), |
207 | | U64_C (0xa8a89aa829324d81), U64_C (0x96966296c4f43152), |
208 | | U64_C (0xf9f9c3f99b3aef62), U64_C (0xc5c533c566f697a3), |
209 | | U64_C (0x2525942535b14a10), U64_C (0x59597959f220b2ab), |
210 | | U64_C (0x84842a8454ae15d0), U64_C (0x7272d572b7a7e4c5), |
211 | | U64_C (0x3939e439d5dd72ec), U64_C (0x4c4c2d4c5a619816), |
212 | | U64_C (0x5e5e655eca3bbc94), U64_C (0x7878fd78e785f09f), |
213 | | U64_C (0x3838e038ddd870e5), U64_C (0x8c8c0a8c14860598), |
214 | | U64_C (0xd1d163d1c6b2bf17), U64_C (0xa5a5aea5410b57e4), |
215 | | U64_C (0xe2e2afe2434dd9a1), U64_C (0x616199612ff8c24e), |
216 | | U64_C (0xb3b3f6b3f1457b42), U64_C (0x2121842115a54234), |
217 | | U64_C (0x9c9c4a9c94d62508), U64_C (0x1e1e781ef0663cee), |
218 | | U64_C (0x4343114322528661), U64_C (0xc7c73bc776fc93b1), |
219 | | U64_C (0xfcfcd7fcb32be54f), U64_C (0x0404100420140824), |
220 | | U64_C (0x51515951b208a2e3), U64_C (0x99995e99bcc72f25), |
221 | | U64_C (0x6d6da96d4fc4da22), U64_C (0x0d0d340d68391a65), |
222 | | U64_C (0xfafacffa8335e979), U64_C (0xdfdf5bdfb684a369), |
223 | | U64_C (0x7e7ee57ed79bfca9), U64_C (0x242490243db44819), |
224 | | U64_C (0x3b3bec3bc5d776fe), U64_C (0xabab96ab313d4b9a), |
225 | | U64_C (0xcece1fce3ed181f0), U64_C (0x1111441188552299), |
226 | | U64_C (0x8f8f068f0c890383), U64_C (0x4e4e254e4a6b9c04), |
227 | | U64_C (0xb7b7e6b7d1517366), U64_C (0xebeb8beb0b60cbe0), |
228 | | U64_C (0x3c3cf03cfdcc78c1), U64_C (0x81813e817cbf1ffd), |
229 | | U64_C (0x94946a94d4fe3540), U64_C (0xf7f7fbf7eb0cf31c), |
230 | | U64_C (0xb9b9deb9a1676f18), U64_C (0x13134c13985f268b), |
231 | | U64_C (0x2c2cb02c7d9c5851), U64_C (0xd3d36bd3d6b8bb05), |
232 | | U64_C (0xe7e7bbe76b5cd38c), U64_C (0x6e6ea56e57cbdc39), |
233 | | U64_C (0xc4c437c46ef395aa), U64_C (0x03030c03180f061b), |
234 | | U64_C (0x565645568a13acdc), U64_C (0x44440d441a49885e), |
235 | | U64_C (0x7f7fe17fdf9efea0), U64_C (0xa9a99ea921374f88), |
236 | | U64_C (0x2a2aa82a4d825467), U64_C (0xbbbbd6bbb16d6b0a), |
237 | | U64_C (0xc1c123c146e29f87), U64_C (0x53535153a202a6f1), |
238 | | U64_C (0xdcdc57dcae8ba572), U64_C (0x0b0b2c0b58271653), |
239 | | U64_C (0x9d9d4e9d9cd32701), U64_C (0x6c6cad6c47c1d82b), |
240 | | U64_C (0x3131c43195f562a4), U64_C (0x7474cd7487b9e8f3), |
241 | | U64_C (0xf6f6fff6e309f115), U64_C (0x464605460a438c4c), |
242 | | U64_C (0xacac8aac092645a5), U64_C (0x89891e893c970fb5), |
243 | | U64_C (0x14145014a04428b4), U64_C (0xe1e1a3e15b42dfba), |
244 | | U64_C (0x16165816b04e2ca6), U64_C (0x3a3ae83acdd274f7), |
245 | | U64_C (0x6969b9696fd0d206), U64_C (0x09092409482d1241), |
246 | | U64_C (0x7070dd70a7ade0d7), U64_C (0xb6b6e2b6d954716f), |
247 | | U64_C (0xd0d067d0ceb7bd1e), U64_C (0xeded93ed3b7ec7d6), |
248 | | U64_C (0xcccc17cc2edb85e2), U64_C (0x424215422a578468), |
249 | | U64_C (0x98985a98b4c22d2c), U64_C (0xa4a4aaa4490e55ed), |
250 | | U64_C (0x2828a0285d885075), U64_C (0x5c5c6d5cda31b886), |
251 | | U64_C (0xf8f8c7f8933fed6b), U64_C (0x8686228644a411c2), |
252 | | }, { |
253 | | U64_C (0xd818186018c07830), U64_C (0x2623238c2305af46), |
254 | | U64_C (0xb8c6c63fc67ef991), U64_C (0xfbe8e887e8136fcd), |
255 | | U64_C (0xcb878726874ca113), U64_C (0x11b8b8dab8a9626d), |
256 | | U64_C (0x0901010401080502), U64_C (0x0d4f4f214f426e9e), |
257 | | U64_C (0x9b3636d836adee6c), U64_C (0xffa6a6a2a6590451), |
258 | | U64_C (0x0cd2d26fd2debdb9), U64_C (0x0ef5f5f3f5fb06f7), |
259 | | U64_C (0x967979f979ef80f2), U64_C (0x306f6fa16f5fcede), |
260 | | U64_C (0x6d91917e91fcef3f), U64_C (0xf852525552aa07a4), |
261 | | U64_C (0x4760609d6027fdc0), U64_C (0x35bcbccabc897665), |
262 | | U64_C (0x379b9b569baccd2b), U64_C (0x8a8e8e028e048c01), |
263 | | U64_C (0xd2a3a3b6a371155b), U64_C (0x6c0c0c300c603c18), |
264 | | U64_C (0x847b7bf17bff8af6), U64_C (0x803535d435b5e16a), |
265 | | U64_C (0xf51d1d741de8693a), U64_C (0xb3e0e0a7e05347dd), |
266 | | U64_C (0x21d7d77bd7f6acb3), U64_C (0x9cc2c22fc25eed99), |
267 | | U64_C (0x432e2eb82e6d965c), U64_C (0x294b4b314b627a96), |
268 | | U64_C (0x5dfefedffea321e1), U64_C (0xd5575741578216ae), |
269 | | U64_C (0xbd15155415a8412a), U64_C (0xe87777c1779fb6ee), |
270 | | U64_C (0x923737dc37a5eb6e), U64_C (0x9ee5e5b3e57b56d7), |
271 | | U64_C (0x139f9f469f8cd923), U64_C (0x23f0f0e7f0d317fd), |
272 | | U64_C (0x204a4a354a6a7f94), U64_C (0x44dada4fda9e95a9), |
273 | | U64_C (0xa258587d58fa25b0), U64_C (0xcfc9c903c906ca8f), |
274 | | U64_C (0x7c2929a429558d52), U64_C (0x5a0a0a280a502214), |
275 | | U64_C (0x50b1b1feb1e14f7f), U64_C (0xc9a0a0baa0691a5d), |
276 | | U64_C (0x146b6bb16b7fdad6), U64_C (0xd985852e855cab17), |
277 | | U64_C (0x3cbdbdcebd817367), U64_C (0x8f5d5d695dd234ba), |
278 | | U64_C (0x9010104010805020), U64_C (0x07f4f4f7f4f303f5), |
279 | | U64_C (0xddcbcb0bcb16c08b), U64_C (0xd33e3ef83eedc67c), |
280 | | U64_C (0x2d0505140528110a), U64_C (0x78676781671fe6ce), |
281 | | U64_C (0x97e4e4b7e47353d5), U64_C (0x0227279c2725bb4e), |
282 | | U64_C (0x7341411941325882), U64_C (0xa78b8b168b2c9d0b), |
283 | | U64_C (0xf6a7a7a6a7510153), U64_C (0xb27d7de97dcf94fa), |
284 | | U64_C (0x4995956e95dcfb37), U64_C (0x56d8d847d88e9fad), |
285 | | U64_C (0x70fbfbcbfb8b30eb), U64_C (0xcdeeee9fee2371c1), |
286 | | U64_C (0xbb7c7ced7cc791f8), U64_C (0x716666856617e3cc), |
287 | | U64_C (0x7bdddd53dda68ea7), U64_C (0xaf17175c17b84b2e), |
288 | | U64_C (0x454747014702468e), U64_C (0x1a9e9e429e84dc21), |
289 | | U64_C (0xd4caca0fca1ec589), U64_C (0x582d2db42d75995a), |
290 | | U64_C (0x2ebfbfc6bf917963), U64_C (0x3f07071c07381b0e), |
291 | | U64_C (0xacadad8ead012347), U64_C (0xb05a5a755aea2fb4), |
292 | | U64_C (0xef838336836cb51b), U64_C (0xb63333cc3385ff66), |
293 | | U64_C (0x5c636391633ff2c6), U64_C (0x1202020802100a04), |
294 | | U64_C (0x93aaaa92aa393849), U64_C (0xde7171d971afa8e2), |
295 | | U64_C (0xc6c8c807c80ecf8d), U64_C (0xd119196419c87d32), |
296 | | U64_C (0x3b49493949727092), U64_C (0x5fd9d943d9869aaf), |
297 | | U64_C (0x31f2f2eff2c31df9), U64_C (0xa8e3e3abe34b48db), |
298 | | U64_C (0xb95b5b715be22ab6), U64_C (0xbc88881a8834920d), |
299 | | U64_C (0x3e9a9a529aa4c829), U64_C (0x0b262698262dbe4c), |
300 | | U64_C (0xbf3232c8328dfa64), U64_C (0x59b0b0fab0e94a7d), |
301 | | U64_C (0xf2e9e983e91b6acf), U64_C (0x770f0f3c0f78331e), |
302 | | U64_C (0x33d5d573d5e6a6b7), U64_C (0xf480803a8074ba1d), |
303 | | U64_C (0x27bebec2be997c61), U64_C (0xebcdcd13cd26de87), |
304 | | U64_C (0x893434d034bde468), U64_C (0x3248483d487a7590), |
305 | | U64_C (0x54ffffdbffab24e3), U64_C (0x8d7a7af57af78ff4), |
306 | | U64_C (0x6490907a90f4ea3d), U64_C (0x9d5f5f615fc23ebe), |
307 | | U64_C (0x3d202080201da040), U64_C (0x0f6868bd6867d5d0), |
308 | | U64_C (0xca1a1a681ad07234), U64_C (0xb7aeae82ae192c41), |
309 | | U64_C (0x7db4b4eab4c95e75), U64_C (0xce54544d549a19a8), |
310 | | U64_C (0x7f93937693ece53b), U64_C (0x2f222288220daa44), |
311 | | U64_C (0x6364648d6407e9c8), U64_C (0x2af1f1e3f1db12ff), |
312 | | U64_C (0xcc7373d173bfa2e6), U64_C (0x8212124812905a24), |
313 | | U64_C (0x7a40401d403a5d80), U64_C (0x4808082008402810), |
314 | | U64_C (0x95c3c32bc356e89b), U64_C (0xdfecec97ec337bc5), |
315 | | U64_C (0x4ddbdb4bdb9690ab), U64_C (0xc0a1a1bea1611f5f), |
316 | | U64_C (0x918d8d0e8d1c8307), U64_C (0xc83d3df43df5c97a), |
317 | | U64_C (0x5b97976697ccf133), U64_C (0x0000000000000000), |
318 | | U64_C (0xf9cfcf1bcf36d483), U64_C (0x6e2b2bac2b458756), |
319 | | U64_C (0xe17676c57697b3ec), U64_C (0xe68282328264b019), |
320 | | U64_C (0x28d6d67fd6fea9b1), U64_C (0xc31b1b6c1bd87736), |
321 | | U64_C (0x74b5b5eeb5c15b77), U64_C (0xbeafaf86af112943), |
322 | | U64_C (0x1d6a6ab56a77dfd4), U64_C (0xea50505d50ba0da0), |
323 | | U64_C (0x5745450945124c8a), U64_C (0x38f3f3ebf3cb18fb), |
324 | | U64_C (0xad3030c0309df060), U64_C (0xc4efef9bef2b74c3), |
325 | | U64_C (0xda3f3ffc3fe5c37e), U64_C (0xc755554955921caa), |
326 | | U64_C (0xdba2a2b2a2791059), U64_C (0xe9eaea8fea0365c9), |
327 | | U64_C (0x6a656589650fecca), U64_C (0x03babad2bab96869), |
328 | | U64_C (0x4a2f2fbc2f65935e), U64_C (0x8ec0c027c04ee79d), |
329 | | U64_C (0x60dede5fdebe81a1), U64_C (0xfc1c1c701ce06c38), |
330 | | U64_C (0x46fdfdd3fdbb2ee7), U64_C (0x1f4d4d294d52649a), |
331 | | U64_C (0x7692927292e4e039), U64_C (0xfa7575c9758fbcea), |
332 | | U64_C (0x3606061806301e0c), U64_C (0xae8a8a128a249809), |
333 | | U64_C (0x4bb2b2f2b2f94079), U64_C (0x85e6e6bfe66359d1), |
334 | | U64_C (0x7e0e0e380e70361c), U64_C (0xe71f1f7c1ff8633e), |
335 | | U64_C (0x556262956237f7c4), U64_C (0x3ad4d477d4eea3b5), |
336 | | U64_C (0x81a8a89aa829324d), U64_C (0x5296966296c4f431), |
337 | | U64_C (0x62f9f9c3f99b3aef), U64_C (0xa3c5c533c566f697), |
338 | | U64_C (0x102525942535b14a), U64_C (0xab59597959f220b2), |
339 | | U64_C (0xd084842a8454ae15), U64_C (0xc57272d572b7a7e4), |
340 | | U64_C (0xec3939e439d5dd72), U64_C (0x164c4c2d4c5a6198), |
341 | | U64_C (0x945e5e655eca3bbc), U64_C (0x9f7878fd78e785f0), |
342 | | U64_C (0xe53838e038ddd870), U64_C (0x988c8c0a8c148605), |
343 | | U64_C (0x17d1d163d1c6b2bf), U64_C (0xe4a5a5aea5410b57), |
344 | | U64_C (0xa1e2e2afe2434dd9), U64_C (0x4e616199612ff8c2), |
345 | | U64_C (0x42b3b3f6b3f1457b), U64_C (0x342121842115a542), |
346 | | U64_C (0x089c9c4a9c94d625), U64_C (0xee1e1e781ef0663c), |
347 | | U64_C (0x6143431143225286), U64_C (0xb1c7c73bc776fc93), |
348 | | U64_C (0x4ffcfcd7fcb32be5), U64_C (0x2404041004201408), |
349 | | U64_C (0xe351515951b208a2), U64_C (0x2599995e99bcc72f), |
350 | | U64_C (0x226d6da96d4fc4da), U64_C (0x650d0d340d68391a), |
351 | | U64_C (0x79fafacffa8335e9), U64_C (0x69dfdf5bdfb684a3), |
352 | | U64_C (0xa97e7ee57ed79bfc), U64_C (0x19242490243db448), |
353 | | U64_C (0xfe3b3bec3bc5d776), U64_C (0x9aabab96ab313d4b), |
354 | | U64_C (0xf0cece1fce3ed181), U64_C (0x9911114411885522), |
355 | | U64_C (0x838f8f068f0c8903), U64_C (0x044e4e254e4a6b9c), |
356 | | U64_C (0x66b7b7e6b7d15173), U64_C (0xe0ebeb8beb0b60cb), |
357 | | U64_C (0xc13c3cf03cfdcc78), U64_C (0xfd81813e817cbf1f), |
358 | | U64_C (0x4094946a94d4fe35), U64_C (0x1cf7f7fbf7eb0cf3), |
359 | | U64_C (0x18b9b9deb9a1676f), U64_C (0x8b13134c13985f26), |
360 | | U64_C (0x512c2cb02c7d9c58), U64_C (0x05d3d36bd3d6b8bb), |
361 | | U64_C (0x8ce7e7bbe76b5cd3), U64_C (0x396e6ea56e57cbdc), |
362 | | U64_C (0xaac4c437c46ef395), U64_C (0x1b03030c03180f06), |
363 | | U64_C (0xdc565645568a13ac), U64_C (0x5e44440d441a4988), |
364 | | U64_C (0xa07f7fe17fdf9efe), U64_C (0x88a9a99ea921374f), |
365 | | U64_C (0x672a2aa82a4d8254), U64_C (0x0abbbbd6bbb16d6b), |
366 | | U64_C (0x87c1c123c146e29f), U64_C (0xf153535153a202a6), |
367 | | U64_C (0x72dcdc57dcae8ba5), U64_C (0x530b0b2c0b582716), |
368 | | U64_C (0x019d9d4e9d9cd327), U64_C (0x2b6c6cad6c47c1d8), |
369 | | U64_C (0xa43131c43195f562), U64_C (0xf37474cd7487b9e8), |
370 | | U64_C (0x15f6f6fff6e309f1), U64_C (0x4c464605460a438c), |
371 | | U64_C (0xa5acac8aac092645), U64_C (0xb589891e893c970f), |
372 | | U64_C (0xb414145014a04428), U64_C (0xbae1e1a3e15b42df), |
373 | | U64_C (0xa616165816b04e2c), U64_C (0xf73a3ae83acdd274), |
374 | | U64_C (0x066969b9696fd0d2), U64_C (0x4109092409482d12), |
375 | | U64_C (0xd77070dd70a7ade0), U64_C (0x6fb6b6e2b6d95471), |
376 | | U64_C (0x1ed0d067d0ceb7bd), U64_C (0xd6eded93ed3b7ec7), |
377 | | U64_C (0xe2cccc17cc2edb85), U64_C (0x68424215422a5784), |
378 | | U64_C (0x2c98985a98b4c22d), U64_C (0xeda4a4aaa4490e55), |
379 | | U64_C (0x752828a0285d8850), U64_C (0x865c5c6d5cda31b8), |
380 | | U64_C (0x6bf8f8c7f8933fed), U64_C (0xc28686228644a411), |
381 | | }, { |
382 | | U64_C (0x30d818186018c078), U64_C (0x462623238c2305af), |
383 | | U64_C (0x91b8c6c63fc67ef9), U64_C (0xcdfbe8e887e8136f), |
384 | | U64_C (0x13cb878726874ca1), U64_C (0x6d11b8b8dab8a962), |
385 | | U64_C (0x0209010104010805), U64_C (0x9e0d4f4f214f426e), |
386 | | U64_C (0x6c9b3636d836adee), U64_C (0x51ffa6a6a2a65904), |
387 | | U64_C (0xb90cd2d26fd2debd), U64_C (0xf70ef5f5f3f5fb06), |
388 | | U64_C (0xf2967979f979ef80), U64_C (0xde306f6fa16f5fce), |
389 | | U64_C (0x3f6d91917e91fcef), U64_C (0xa4f852525552aa07), |
390 | | U64_C (0xc04760609d6027fd), U64_C (0x6535bcbccabc8976), |
391 | | U64_C (0x2b379b9b569baccd), U64_C (0x018a8e8e028e048c), |
392 | | U64_C (0x5bd2a3a3b6a37115), U64_C (0x186c0c0c300c603c), |
393 | | U64_C (0xf6847b7bf17bff8a), U64_C (0x6a803535d435b5e1), |
394 | | U64_C (0x3af51d1d741de869), U64_C (0xddb3e0e0a7e05347), |
395 | | U64_C (0xb321d7d77bd7f6ac), U64_C (0x999cc2c22fc25eed), |
396 | | U64_C (0x5c432e2eb82e6d96), U64_C (0x96294b4b314b627a), |
397 | | U64_C (0xe15dfefedffea321), U64_C (0xaed5575741578216), |
398 | | U64_C (0x2abd15155415a841), U64_C (0xeee87777c1779fb6), |
399 | | U64_C (0x6e923737dc37a5eb), U64_C (0xd79ee5e5b3e57b56), |
400 | | U64_C (0x23139f9f469f8cd9), U64_C (0xfd23f0f0e7f0d317), |
401 | | U64_C (0x94204a4a354a6a7f), U64_C (0xa944dada4fda9e95), |
402 | | U64_C (0xb0a258587d58fa25), U64_C (0x8fcfc9c903c906ca), |
403 | | U64_C (0x527c2929a429558d), U64_C (0x145a0a0a280a5022), |
404 | | U64_C (0x7f50b1b1feb1e14f), U64_C (0x5dc9a0a0baa0691a), |
405 | | U64_C (0xd6146b6bb16b7fda), U64_C (0x17d985852e855cab), |
406 | | U64_C (0x673cbdbdcebd8173), U64_C (0xba8f5d5d695dd234), |
407 | | U64_C (0x2090101040108050), U64_C (0xf507f4f4f7f4f303), |
408 | | U64_C (0x8bddcbcb0bcb16c0), U64_C (0x7cd33e3ef83eedc6), |
409 | | U64_C (0x0a2d050514052811), U64_C (0xce78676781671fe6), |
410 | | U64_C (0xd597e4e4b7e47353), U64_C (0x4e0227279c2725bb), |
411 | | U64_C (0x8273414119413258), U64_C (0x0ba78b8b168b2c9d), |
412 | | U64_C (0x53f6a7a7a6a75101), U64_C (0xfab27d7de97dcf94), |
413 | | U64_C (0x374995956e95dcfb), U64_C (0xad56d8d847d88e9f), |
414 | | U64_C (0xeb70fbfbcbfb8b30), U64_C (0xc1cdeeee9fee2371), |
415 | | U64_C (0xf8bb7c7ced7cc791), U64_C (0xcc716666856617e3), |
416 | | U64_C (0xa77bdddd53dda68e), U64_C (0x2eaf17175c17b84b), |
417 | | U64_C (0x8e45474701470246), U64_C (0x211a9e9e429e84dc), |
418 | | U64_C (0x89d4caca0fca1ec5), U64_C (0x5a582d2db42d7599), |
419 | | U64_C (0x632ebfbfc6bf9179), U64_C (0x0e3f07071c07381b), |
420 | | U64_C (0x47acadad8ead0123), U64_C (0xb4b05a5a755aea2f), |
421 | | U64_C (0x1bef838336836cb5), U64_C (0x66b63333cc3385ff), |
422 | | U64_C (0xc65c636391633ff2), U64_C (0x041202020802100a), |
423 | | U64_C (0x4993aaaa92aa3938), U64_C (0xe2de7171d971afa8), |
424 | | U64_C (0x8dc6c8c807c80ecf), U64_C (0x32d119196419c87d), |
425 | | U64_C (0x923b494939497270), U64_C (0xaf5fd9d943d9869a), |
426 | | U64_C (0xf931f2f2eff2c31d), U64_C (0xdba8e3e3abe34b48), |
427 | | U64_C (0xb6b95b5b715be22a), U64_C (0x0dbc88881a883492), |
428 | | U64_C (0x293e9a9a529aa4c8), U64_C (0x4c0b262698262dbe), |
429 | | U64_C (0x64bf3232c8328dfa), U64_C (0x7d59b0b0fab0e94a), |
430 | | U64_C (0xcff2e9e983e91b6a), U64_C (0x1e770f0f3c0f7833), |
431 | | U64_C (0xb733d5d573d5e6a6), U64_C (0x1df480803a8074ba), |
432 | | U64_C (0x6127bebec2be997c), U64_C (0x87ebcdcd13cd26de), |
433 | | U64_C (0x68893434d034bde4), U64_C (0x903248483d487a75), |
434 | | U64_C (0xe354ffffdbffab24), U64_C (0xf48d7a7af57af78f), |
435 | | U64_C (0x3d6490907a90f4ea), U64_C (0xbe9d5f5f615fc23e), |
436 | | U64_C (0x403d202080201da0), U64_C (0xd00f6868bd6867d5), |
437 | | U64_C (0x34ca1a1a681ad072), U64_C (0x41b7aeae82ae192c), |
438 | | U64_C (0x757db4b4eab4c95e), U64_C (0xa8ce54544d549a19), |
439 | | U64_C (0x3b7f93937693ece5), U64_C (0x442f222288220daa), |
440 | | U64_C (0xc86364648d6407e9), U64_C (0xff2af1f1e3f1db12), |
441 | | U64_C (0xe6cc7373d173bfa2), U64_C (0x248212124812905a), |
442 | | U64_C (0x807a40401d403a5d), U64_C (0x1048080820084028), |
443 | | U64_C (0x9b95c3c32bc356e8), U64_C (0xc5dfecec97ec337b), |
444 | | U64_C (0xab4ddbdb4bdb9690), U64_C (0x5fc0a1a1bea1611f), |
445 | | U64_C (0x07918d8d0e8d1c83), U64_C (0x7ac83d3df43df5c9), |
446 | | U64_C (0x335b97976697ccf1), U64_C (0x0000000000000000), |
447 | | U64_C (0x83f9cfcf1bcf36d4), U64_C (0x566e2b2bac2b4587), |
448 | | U64_C (0xece17676c57697b3), U64_C (0x19e68282328264b0), |
449 | | U64_C (0xb128d6d67fd6fea9), U64_C (0x36c31b1b6c1bd877), |
450 | | U64_C (0x7774b5b5eeb5c15b), U64_C (0x43beafaf86af1129), |
451 | | U64_C (0xd41d6a6ab56a77df), U64_C (0xa0ea50505d50ba0d), |
452 | | U64_C (0x8a5745450945124c), U64_C (0xfb38f3f3ebf3cb18), |
453 | | U64_C (0x60ad3030c0309df0), U64_C (0xc3c4efef9bef2b74), |
454 | | U64_C (0x7eda3f3ffc3fe5c3), U64_C (0xaac755554955921c), |
455 | | U64_C (0x59dba2a2b2a27910), U64_C (0xc9e9eaea8fea0365), |
456 | | U64_C (0xca6a656589650fec), U64_C (0x6903babad2bab968), |
457 | | U64_C (0x5e4a2f2fbc2f6593), U64_C (0x9d8ec0c027c04ee7), |
458 | | U64_C (0xa160dede5fdebe81), U64_C (0x38fc1c1c701ce06c), |
459 | | U64_C (0xe746fdfdd3fdbb2e), U64_C (0x9a1f4d4d294d5264), |
460 | | U64_C (0x397692927292e4e0), U64_C (0xeafa7575c9758fbc), |
461 | | U64_C (0x0c3606061806301e), U64_C (0x09ae8a8a128a2498), |
462 | | U64_C (0x794bb2b2f2b2f940), U64_C (0xd185e6e6bfe66359), |
463 | | U64_C (0x1c7e0e0e380e7036), U64_C (0x3ee71f1f7c1ff863), |
464 | | U64_C (0xc4556262956237f7), U64_C (0xb53ad4d477d4eea3), |
465 | | U64_C (0x4d81a8a89aa82932), U64_C (0x315296966296c4f4), |
466 | | U64_C (0xef62f9f9c3f99b3a), U64_C (0x97a3c5c533c566f6), |
467 | | U64_C (0x4a102525942535b1), U64_C (0xb2ab59597959f220), |
468 | | U64_C (0x15d084842a8454ae), U64_C (0xe4c57272d572b7a7), |
469 | | U64_C (0x72ec3939e439d5dd), U64_C (0x98164c4c2d4c5a61), |
470 | | U64_C (0xbc945e5e655eca3b), U64_C (0xf09f7878fd78e785), |
471 | | U64_C (0x70e53838e038ddd8), U64_C (0x05988c8c0a8c1486), |
472 | | U64_C (0xbf17d1d163d1c6b2), U64_C (0x57e4a5a5aea5410b), |
473 | | U64_C (0xd9a1e2e2afe2434d), U64_C (0xc24e616199612ff8), |
474 | | U64_C (0x7b42b3b3f6b3f145), U64_C (0x42342121842115a5), |
475 | | U64_C (0x25089c9c4a9c94d6), U64_C (0x3cee1e1e781ef066), |
476 | | U64_C (0x8661434311432252), U64_C (0x93b1c7c73bc776fc), |
477 | | U64_C (0xe54ffcfcd7fcb32b), U64_C (0x0824040410042014), |
478 | | U64_C (0xa2e351515951b208), U64_C (0x2f2599995e99bcc7), |
479 | | U64_C (0xda226d6da96d4fc4), U64_C (0x1a650d0d340d6839), |
480 | | U64_C (0xe979fafacffa8335), U64_C (0xa369dfdf5bdfb684), |
481 | | U64_C (0xfca97e7ee57ed79b), U64_C (0x4819242490243db4), |
482 | | U64_C (0x76fe3b3bec3bc5d7), U64_C (0x4b9aabab96ab313d), |
483 | | U64_C (0x81f0cece1fce3ed1), U64_C (0x2299111144118855), |
484 | | U64_C (0x03838f8f068f0c89), U64_C (0x9c044e4e254e4a6b), |
485 | | U64_C (0x7366b7b7e6b7d151), U64_C (0xcbe0ebeb8beb0b60), |
486 | | U64_C (0x78c13c3cf03cfdcc), U64_C (0x1ffd81813e817cbf), |
487 | | U64_C (0x354094946a94d4fe), U64_C (0xf31cf7f7fbf7eb0c), |
488 | | U64_C (0x6f18b9b9deb9a167), U64_C (0x268b13134c13985f), |
489 | | U64_C (0x58512c2cb02c7d9c), U64_C (0xbb05d3d36bd3d6b8), |
490 | | U64_C (0xd38ce7e7bbe76b5c), U64_C (0xdc396e6ea56e57cb), |
491 | | U64_C (0x95aac4c437c46ef3), U64_C (0x061b03030c03180f), |
492 | | U64_C (0xacdc565645568a13), U64_C (0x885e44440d441a49), |
493 | | U64_C (0xfea07f7fe17fdf9e), U64_C (0x4f88a9a99ea92137), |
494 | | U64_C (0x54672a2aa82a4d82), U64_C (0x6b0abbbbd6bbb16d), |
495 | | U64_C (0x9f87c1c123c146e2), U64_C (0xa6f153535153a202), |
496 | | U64_C (0xa572dcdc57dcae8b), U64_C (0x16530b0b2c0b5827), |
497 | | U64_C (0x27019d9d4e9d9cd3), U64_C (0xd82b6c6cad6c47c1), |
498 | | U64_C (0x62a43131c43195f5), U64_C (0xe8f37474cd7487b9), |
499 | | U64_C (0xf115f6f6fff6e309), U64_C (0x8c4c464605460a43), |
500 | | U64_C (0x45a5acac8aac0926), U64_C (0x0fb589891e893c97), |
501 | | U64_C (0x28b414145014a044), U64_C (0xdfbae1e1a3e15b42), |
502 | | U64_C (0x2ca616165816b04e), U64_C (0x74f73a3ae83acdd2), |
503 | | U64_C (0xd2066969b9696fd0), U64_C (0x124109092409482d), |
504 | | U64_C (0xe0d77070dd70a7ad), U64_C (0x716fb6b6e2b6d954), |
505 | | U64_C (0xbd1ed0d067d0ceb7), U64_C (0xc7d6eded93ed3b7e), |
506 | | U64_C (0x85e2cccc17cc2edb), U64_C (0x8468424215422a57), |
507 | | U64_C (0x2d2c98985a98b4c2), U64_C (0x55eda4a4aaa4490e), |
508 | | U64_C (0x50752828a0285d88), U64_C (0xb8865c5c6d5cda31), |
509 | | U64_C (0xed6bf8f8c7f8933f), U64_C (0x11c28686228644a4), |
510 | | }, { |
511 | | U64_C (0x7830d818186018c0), U64_C (0xaf462623238c2305), |
512 | | U64_C (0xf991b8c6c63fc67e), U64_C (0x6fcdfbe8e887e813), |
513 | | U64_C (0xa113cb878726874c), U64_C (0x626d11b8b8dab8a9), |
514 | | U64_C (0x0502090101040108), U64_C (0x6e9e0d4f4f214f42), |
515 | | U64_C (0xee6c9b3636d836ad), U64_C (0x0451ffa6a6a2a659), |
516 | | U64_C (0xbdb90cd2d26fd2de), U64_C (0x06f70ef5f5f3f5fb), |
517 | | U64_C (0x80f2967979f979ef), U64_C (0xcede306f6fa16f5f), |
518 | | U64_C (0xef3f6d91917e91fc), U64_C (0x07a4f852525552aa), |
519 | | U64_C (0xfdc04760609d6027), U64_C (0x766535bcbccabc89), |
520 | | U64_C (0xcd2b379b9b569bac), U64_C (0x8c018a8e8e028e04), |
521 | | U64_C (0x155bd2a3a3b6a371), U64_C (0x3c186c0c0c300c60), |
522 | | U64_C (0x8af6847b7bf17bff), U64_C (0xe16a803535d435b5), |
523 | | U64_C (0x693af51d1d741de8), U64_C (0x47ddb3e0e0a7e053), |
524 | | U64_C (0xacb321d7d77bd7f6), U64_C (0xed999cc2c22fc25e), |
525 | | U64_C (0x965c432e2eb82e6d), U64_C (0x7a96294b4b314b62), |
526 | | U64_C (0x21e15dfefedffea3), U64_C (0x16aed55757415782), |
527 | | U64_C (0x412abd15155415a8), U64_C (0xb6eee87777c1779f), |
528 | | U64_C (0xeb6e923737dc37a5), U64_C (0x56d79ee5e5b3e57b), |
529 | | U64_C (0xd923139f9f469f8c), U64_C (0x17fd23f0f0e7f0d3), |
530 | | U64_C (0x7f94204a4a354a6a), U64_C (0x95a944dada4fda9e), |
531 | | U64_C (0x25b0a258587d58fa), U64_C (0xca8fcfc9c903c906), |
532 | | U64_C (0x8d527c2929a42955), U64_C (0x22145a0a0a280a50), |
533 | | U64_C (0x4f7f50b1b1feb1e1), U64_C (0x1a5dc9a0a0baa069), |
534 | | U64_C (0xdad6146b6bb16b7f), U64_C (0xab17d985852e855c), |
535 | | U64_C (0x73673cbdbdcebd81), U64_C (0x34ba8f5d5d695dd2), |
536 | | U64_C (0x5020901010401080), U64_C (0x03f507f4f4f7f4f3), |
537 | | U64_C (0xc08bddcbcb0bcb16), U64_C (0xc67cd33e3ef83eed), |
538 | | U64_C (0x110a2d0505140528), U64_C (0xe6ce78676781671f), |
539 | | U64_C (0x53d597e4e4b7e473), U64_C (0xbb4e0227279c2725), |
540 | | U64_C (0x5882734141194132), U64_C (0x9d0ba78b8b168b2c), |
541 | | U64_C (0x0153f6a7a7a6a751), U64_C (0x94fab27d7de97dcf), |
542 | | U64_C (0xfb374995956e95dc), U64_C (0x9fad56d8d847d88e), |
543 | | U64_C (0x30eb70fbfbcbfb8b), U64_C (0x71c1cdeeee9fee23), |
544 | | U64_C (0x91f8bb7c7ced7cc7), U64_C (0xe3cc716666856617), |
545 | | U64_C (0x8ea77bdddd53dda6), U64_C (0x4b2eaf17175c17b8), |
546 | | U64_C (0x468e454747014702), U64_C (0xdc211a9e9e429e84), |
547 | | U64_C (0xc589d4caca0fca1e), U64_C (0x995a582d2db42d75), |
548 | | U64_C (0x79632ebfbfc6bf91), U64_C (0x1b0e3f07071c0738), |
549 | | U64_C (0x2347acadad8ead01), U64_C (0x2fb4b05a5a755aea), |
550 | | U64_C (0xb51bef838336836c), U64_C (0xff66b63333cc3385), |
551 | | U64_C (0xf2c65c636391633f), U64_C (0x0a04120202080210), |
552 | | U64_C (0x384993aaaa92aa39), U64_C (0xa8e2de7171d971af), |
553 | | U64_C (0xcf8dc6c8c807c80e), U64_C (0x7d32d119196419c8), |
554 | | U64_C (0x70923b4949394972), U64_C (0x9aaf5fd9d943d986), |
555 | | U64_C (0x1df931f2f2eff2c3), U64_C (0x48dba8e3e3abe34b), |
556 | | U64_C (0x2ab6b95b5b715be2), U64_C (0x920dbc88881a8834), |
557 | | U64_C (0xc8293e9a9a529aa4), U64_C (0xbe4c0b262698262d), |
558 | | U64_C (0xfa64bf3232c8328d), U64_C (0x4a7d59b0b0fab0e9), |
559 | | U64_C (0x6acff2e9e983e91b), U64_C (0x331e770f0f3c0f78), |
560 | | U64_C (0xa6b733d5d573d5e6), U64_C (0xba1df480803a8074), |
561 | | U64_C (0x7c6127bebec2be99), U64_C (0xde87ebcdcd13cd26), |
562 | | U64_C (0xe468893434d034bd), U64_C (0x75903248483d487a), |
563 | | U64_C (0x24e354ffffdbffab), U64_C (0x8ff48d7a7af57af7), |
564 | | U64_C (0xea3d6490907a90f4), U64_C (0x3ebe9d5f5f615fc2), |
565 | | U64_C (0xa0403d202080201d), U64_C (0xd5d00f6868bd6867), |
566 | | U64_C (0x7234ca1a1a681ad0), U64_C (0x2c41b7aeae82ae19), |
567 | | U64_C (0x5e757db4b4eab4c9), U64_C (0x19a8ce54544d549a), |
568 | | U64_C (0xe53b7f93937693ec), U64_C (0xaa442f222288220d), |
569 | | U64_C (0xe9c86364648d6407), U64_C (0x12ff2af1f1e3f1db), |
570 | | U64_C (0xa2e6cc7373d173bf), U64_C (0x5a24821212481290), |
571 | | U64_C (0x5d807a40401d403a), U64_C (0x2810480808200840), |
572 | | U64_C (0xe89b95c3c32bc356), U64_C (0x7bc5dfecec97ec33), |
573 | | U64_C (0x90ab4ddbdb4bdb96), U64_C (0x1f5fc0a1a1bea161), |
574 | | U64_C (0x8307918d8d0e8d1c), U64_C (0xc97ac83d3df43df5), |
575 | | U64_C (0xf1335b97976697cc), U64_C (0x0000000000000000), |
576 | | U64_C (0xd483f9cfcf1bcf36), U64_C (0x87566e2b2bac2b45), |
577 | | U64_C (0xb3ece17676c57697), U64_C (0xb019e68282328264), |
578 | | U64_C (0xa9b128d6d67fd6fe), U64_C (0x7736c31b1b6c1bd8), |
579 | | U64_C (0x5b7774b5b5eeb5c1), U64_C (0x2943beafaf86af11), |
580 | | U64_C (0xdfd41d6a6ab56a77), U64_C (0x0da0ea50505d50ba), |
581 | | U64_C (0x4c8a574545094512), U64_C (0x18fb38f3f3ebf3cb), |
582 | | U64_C (0xf060ad3030c0309d), U64_C (0x74c3c4efef9bef2b), |
583 | | U64_C (0xc37eda3f3ffc3fe5), U64_C (0x1caac75555495592), |
584 | | U64_C (0x1059dba2a2b2a279), U64_C (0x65c9e9eaea8fea03), |
585 | | U64_C (0xecca6a656589650f), U64_C (0x686903babad2bab9), |
586 | | U64_C (0x935e4a2f2fbc2f65), U64_C (0xe79d8ec0c027c04e), |
587 | | U64_C (0x81a160dede5fdebe), U64_C (0x6c38fc1c1c701ce0), |
588 | | U64_C (0x2ee746fdfdd3fdbb), U64_C (0x649a1f4d4d294d52), |
589 | | U64_C (0xe0397692927292e4), U64_C (0xbceafa7575c9758f), |
590 | | U64_C (0x1e0c360606180630), U64_C (0x9809ae8a8a128a24), |
591 | | U64_C (0x40794bb2b2f2b2f9), U64_C (0x59d185e6e6bfe663), |
592 | | U64_C (0x361c7e0e0e380e70), U64_C (0x633ee71f1f7c1ff8), |
593 | | U64_C (0xf7c4556262956237), U64_C (0xa3b53ad4d477d4ee), |
594 | | U64_C (0x324d81a8a89aa829), U64_C (0xf4315296966296c4), |
595 | | U64_C (0x3aef62f9f9c3f99b), U64_C (0xf697a3c5c533c566), |
596 | | U64_C (0xb14a102525942535), U64_C (0x20b2ab59597959f2), |
597 | | U64_C (0xae15d084842a8454), U64_C (0xa7e4c57272d572b7), |
598 | | U64_C (0xdd72ec3939e439d5), U64_C (0x6198164c4c2d4c5a), |
599 | | U64_C (0x3bbc945e5e655eca), U64_C (0x85f09f7878fd78e7), |
600 | | U64_C (0xd870e53838e038dd), U64_C (0x8605988c8c0a8c14), |
601 | | U64_C (0xb2bf17d1d163d1c6), U64_C (0x0b57e4a5a5aea541), |
602 | | U64_C (0x4dd9a1e2e2afe243), U64_C (0xf8c24e616199612f), |
603 | | U64_C (0x457b42b3b3f6b3f1), U64_C (0xa542342121842115), |
604 | | U64_C (0xd625089c9c4a9c94), U64_C (0x663cee1e1e781ef0), |
605 | | U64_C (0x5286614343114322), U64_C (0xfc93b1c7c73bc776), |
606 | | U64_C (0x2be54ffcfcd7fcb3), U64_C (0x1408240404100420), |
607 | | U64_C (0x08a2e351515951b2), U64_C (0xc72f2599995e99bc), |
608 | | U64_C (0xc4da226d6da96d4f), U64_C (0x391a650d0d340d68), |
609 | | U64_C (0x35e979fafacffa83), U64_C (0x84a369dfdf5bdfb6), |
610 | | U64_C (0x9bfca97e7ee57ed7), U64_C (0xb44819242490243d), |
611 | | U64_C (0xd776fe3b3bec3bc5), U64_C (0x3d4b9aabab96ab31), |
612 | | U64_C (0xd181f0cece1fce3e), U64_C (0x5522991111441188), |
613 | | U64_C (0x8903838f8f068f0c), U64_C (0x6b9c044e4e254e4a), |
614 | | U64_C (0x517366b7b7e6b7d1), U64_C (0x60cbe0ebeb8beb0b), |
615 | | U64_C (0xcc78c13c3cf03cfd), U64_C (0xbf1ffd81813e817c), |
616 | | U64_C (0xfe354094946a94d4), U64_C (0x0cf31cf7f7fbf7eb), |
617 | | U64_C (0x676f18b9b9deb9a1), U64_C (0x5f268b13134c1398), |
618 | | U64_C (0x9c58512c2cb02c7d), U64_C (0xb8bb05d3d36bd3d6), |
619 | | U64_C (0x5cd38ce7e7bbe76b), U64_C (0xcbdc396e6ea56e57), |
620 | | U64_C (0xf395aac4c437c46e), U64_C (0x0f061b03030c0318), |
621 | | U64_C (0x13acdc565645568a), U64_C (0x49885e44440d441a), |
622 | | U64_C (0x9efea07f7fe17fdf), U64_C (0x374f88a9a99ea921), |
623 | | U64_C (0x8254672a2aa82a4d), U64_C (0x6d6b0abbbbd6bbb1), |
624 | | U64_C (0xe29f87c1c123c146), U64_C (0x02a6f153535153a2), |
625 | | U64_C (0x8ba572dcdc57dcae), U64_C (0x2716530b0b2c0b58), |
626 | | U64_C (0xd327019d9d4e9d9c), U64_C (0xc1d82b6c6cad6c47), |
627 | | U64_C (0xf562a43131c43195), U64_C (0xb9e8f37474cd7487), |
628 | | U64_C (0x09f115f6f6fff6e3), U64_C (0x438c4c464605460a), |
629 | | U64_C (0x2645a5acac8aac09), U64_C (0x970fb589891e893c), |
630 | | U64_C (0x4428b414145014a0), U64_C (0x42dfbae1e1a3e15b), |
631 | | U64_C (0x4e2ca616165816b0), U64_C (0xd274f73a3ae83acd), |
632 | | U64_C (0xd0d2066969b9696f), U64_C (0x2d12410909240948), |
633 | | U64_C (0xade0d77070dd70a7), U64_C (0x54716fb6b6e2b6d9), |
634 | | U64_C (0xb7bd1ed0d067d0ce), U64_C (0x7ec7d6eded93ed3b), |
635 | | U64_C (0xdb85e2cccc17cc2e), U64_C (0x578468424215422a), |
636 | | U64_C (0xc22d2c98985a98b4), U64_C (0x0e55eda4a4aaa449), |
637 | | U64_C (0x8850752828a0285d), U64_C (0x31b8865c5c6d5cda), |
638 | | U64_C (0x3fed6bf8f8c7f893), U64_C (0xa411c28686228644), |
639 | | }, { |
640 | | U64_C (0xc07830d818186018), U64_C (0x05af462623238c23), |
641 | | U64_C (0x7ef991b8c6c63fc6), U64_C (0x136fcdfbe8e887e8), |
642 | | U64_C (0x4ca113cb87872687), U64_C (0xa9626d11b8b8dab8), |
643 | | U64_C (0x0805020901010401), U64_C (0x426e9e0d4f4f214f), |
644 | | U64_C (0xadee6c9b3636d836), U64_C (0x590451ffa6a6a2a6), |
645 | | U64_C (0xdebdb90cd2d26fd2), U64_C (0xfb06f70ef5f5f3f5), |
646 | | U64_C (0xef80f2967979f979), U64_C (0x5fcede306f6fa16f), |
647 | | U64_C (0xfcef3f6d91917e91), U64_C (0xaa07a4f852525552), |
648 | | U64_C (0x27fdc04760609d60), U64_C (0x89766535bcbccabc), |
649 | | U64_C (0xaccd2b379b9b569b), U64_C (0x048c018a8e8e028e), |
650 | | U64_C (0x71155bd2a3a3b6a3), U64_C (0x603c186c0c0c300c), |
651 | | U64_C (0xff8af6847b7bf17b), U64_C (0xb5e16a803535d435), |
652 | | U64_C (0xe8693af51d1d741d), U64_C (0x5347ddb3e0e0a7e0), |
653 | | U64_C (0xf6acb321d7d77bd7), U64_C (0x5eed999cc2c22fc2), |
654 | | U64_C (0x6d965c432e2eb82e), U64_C (0x627a96294b4b314b), |
655 | | U64_C (0xa321e15dfefedffe), U64_C (0x8216aed557574157), |
656 | | U64_C (0xa8412abd15155415), U64_C (0x9fb6eee87777c177), |
657 | | U64_C (0xa5eb6e923737dc37), U64_C (0x7b56d79ee5e5b3e5), |
658 | | U64_C (0x8cd923139f9f469f), U64_C (0xd317fd23f0f0e7f0), |
659 | | U64_C (0x6a7f94204a4a354a), U64_C (0x9e95a944dada4fda), |
660 | | U64_C (0xfa25b0a258587d58), U64_C (0x06ca8fcfc9c903c9), |
661 | | U64_C (0x558d527c2929a429), U64_C (0x5022145a0a0a280a), |
662 | | U64_C (0xe14f7f50b1b1feb1), U64_C (0x691a5dc9a0a0baa0), |
663 | | U64_C (0x7fdad6146b6bb16b), U64_C (0x5cab17d985852e85), |
664 | | U64_C (0x8173673cbdbdcebd), U64_C (0xd234ba8f5d5d695d), |
665 | | U64_C (0x8050209010104010), U64_C (0xf303f507f4f4f7f4), |
666 | | U64_C (0x16c08bddcbcb0bcb), U64_C (0xedc67cd33e3ef83e), |
667 | | U64_C (0x28110a2d05051405), U64_C (0x1fe6ce7867678167), |
668 | | U64_C (0x7353d597e4e4b7e4), U64_C (0x25bb4e0227279c27), |
669 | | U64_C (0x3258827341411941), U64_C (0x2c9d0ba78b8b168b), |
670 | | U64_C (0x510153f6a7a7a6a7), U64_C (0xcf94fab27d7de97d), |
671 | | U64_C (0xdcfb374995956e95), U64_C (0x8e9fad56d8d847d8), |
672 | | U64_C (0x8b30eb70fbfbcbfb), U64_C (0x2371c1cdeeee9fee), |
673 | | U64_C (0xc791f8bb7c7ced7c), U64_C (0x17e3cc7166668566), |
674 | | U64_C (0xa68ea77bdddd53dd), U64_C (0xb84b2eaf17175c17), |
675 | | U64_C (0x02468e4547470147), U64_C (0x84dc211a9e9e429e), |
676 | | U64_C (0x1ec589d4caca0fca), U64_C (0x75995a582d2db42d), |
677 | | U64_C (0x9179632ebfbfc6bf), U64_C (0x381b0e3f07071c07), |
678 | | U64_C (0x012347acadad8ead), U64_C (0xea2fb4b05a5a755a), |
679 | | U64_C (0x6cb51bef83833683), U64_C (0x85ff66b63333cc33), |
680 | | U64_C (0x3ff2c65c63639163), U64_C (0x100a041202020802), |
681 | | U64_C (0x39384993aaaa92aa), U64_C (0xafa8e2de7171d971), |
682 | | U64_C (0x0ecf8dc6c8c807c8), U64_C (0xc87d32d119196419), |
683 | | U64_C (0x7270923b49493949), U64_C (0x869aaf5fd9d943d9), |
684 | | U64_C (0xc31df931f2f2eff2), U64_C (0x4b48dba8e3e3abe3), |
685 | | U64_C (0xe22ab6b95b5b715b), U64_C (0x34920dbc88881a88), |
686 | | U64_C (0xa4c8293e9a9a529a), U64_C (0x2dbe4c0b26269826), |
687 | | U64_C (0x8dfa64bf3232c832), U64_C (0xe94a7d59b0b0fab0), |
688 | | U64_C (0x1b6acff2e9e983e9), U64_C (0x78331e770f0f3c0f), |
689 | | U64_C (0xe6a6b733d5d573d5), U64_C (0x74ba1df480803a80), |
690 | | U64_C (0x997c6127bebec2be), U64_C (0x26de87ebcdcd13cd), |
691 | | U64_C (0xbde468893434d034), U64_C (0x7a75903248483d48), |
692 | | U64_C (0xab24e354ffffdbff), U64_C (0xf78ff48d7a7af57a), |
693 | | U64_C (0xf4ea3d6490907a90), U64_C (0xc23ebe9d5f5f615f), |
694 | | U64_C (0x1da0403d20208020), U64_C (0x67d5d00f6868bd68), |
695 | | U64_C (0xd07234ca1a1a681a), U64_C (0x192c41b7aeae82ae), |
696 | | U64_C (0xc95e757db4b4eab4), U64_C (0x9a19a8ce54544d54), |
697 | | U64_C (0xece53b7f93937693), U64_C (0x0daa442f22228822), |
698 | | U64_C (0x07e9c86364648d64), U64_C (0xdb12ff2af1f1e3f1), |
699 | | U64_C (0xbfa2e6cc7373d173), U64_C (0x905a248212124812), |
700 | | U64_C (0x3a5d807a40401d40), U64_C (0x4028104808082008), |
701 | | U64_C (0x56e89b95c3c32bc3), U64_C (0x337bc5dfecec97ec), |
702 | | U64_C (0x9690ab4ddbdb4bdb), U64_C (0x611f5fc0a1a1bea1), |
703 | | U64_C (0x1c8307918d8d0e8d), U64_C (0xf5c97ac83d3df43d), |
704 | | U64_C (0xccf1335b97976697), U64_C (0x0000000000000000), |
705 | | U64_C (0x36d483f9cfcf1bcf), U64_C (0x4587566e2b2bac2b), |
706 | | U64_C (0x97b3ece17676c576), U64_C (0x64b019e682823282), |
707 | | U64_C (0xfea9b128d6d67fd6), U64_C (0xd87736c31b1b6c1b), |
708 | | U64_C (0xc15b7774b5b5eeb5), U64_C (0x112943beafaf86af), |
709 | | U64_C (0x77dfd41d6a6ab56a), U64_C (0xba0da0ea50505d50), |
710 | | U64_C (0x124c8a5745450945), U64_C (0xcb18fb38f3f3ebf3), |
711 | | U64_C (0x9df060ad3030c030), U64_C (0x2b74c3c4efef9bef), |
712 | | U64_C (0xe5c37eda3f3ffc3f), U64_C (0x921caac755554955), |
713 | | U64_C (0x791059dba2a2b2a2), U64_C (0x0365c9e9eaea8fea), |
714 | | U64_C (0x0fecca6a65658965), U64_C (0xb9686903babad2ba), |
715 | | U64_C (0x65935e4a2f2fbc2f), U64_C (0x4ee79d8ec0c027c0), |
716 | | U64_C (0xbe81a160dede5fde), U64_C (0xe06c38fc1c1c701c), |
717 | | U64_C (0xbb2ee746fdfdd3fd), U64_C (0x52649a1f4d4d294d), |
718 | | U64_C (0xe4e0397692927292), U64_C (0x8fbceafa7575c975), |
719 | | U64_C (0x301e0c3606061806), U64_C (0x249809ae8a8a128a), |
720 | | U64_C (0xf940794bb2b2f2b2), U64_C (0x6359d185e6e6bfe6), |
721 | | U64_C (0x70361c7e0e0e380e), U64_C (0xf8633ee71f1f7c1f), |
722 | | U64_C (0x37f7c45562629562), U64_C (0xeea3b53ad4d477d4), |
723 | | U64_C (0x29324d81a8a89aa8), U64_C (0xc4f4315296966296), |
724 | | U64_C (0x9b3aef62f9f9c3f9), U64_C (0x66f697a3c5c533c5), |
725 | | U64_C (0x35b14a1025259425), U64_C (0xf220b2ab59597959), |
726 | | U64_C (0x54ae15d084842a84), U64_C (0xb7a7e4c57272d572), |
727 | | U64_C (0xd5dd72ec3939e439), U64_C (0x5a6198164c4c2d4c), |
728 | | U64_C (0xca3bbc945e5e655e), U64_C (0xe785f09f7878fd78), |
729 | | U64_C (0xddd870e53838e038), U64_C (0x148605988c8c0a8c), |
730 | | U64_C (0xc6b2bf17d1d163d1), U64_C (0x410b57e4a5a5aea5), |
731 | | U64_C (0x434dd9a1e2e2afe2), U64_C (0x2ff8c24e61619961), |
732 | | U64_C (0xf1457b42b3b3f6b3), U64_C (0x15a5423421218421), |
733 | | U64_C (0x94d625089c9c4a9c), U64_C (0xf0663cee1e1e781e), |
734 | | U64_C (0x2252866143431143), U64_C (0x76fc93b1c7c73bc7), |
735 | | U64_C (0xb32be54ffcfcd7fc), U64_C (0x2014082404041004), |
736 | | U64_C (0xb208a2e351515951), U64_C (0xbcc72f2599995e99), |
737 | | U64_C (0x4fc4da226d6da96d), U64_C (0x68391a650d0d340d), |
738 | | U64_C (0x8335e979fafacffa), U64_C (0xb684a369dfdf5bdf), |
739 | | U64_C (0xd79bfca97e7ee57e), U64_C (0x3db4481924249024), |
740 | | U64_C (0xc5d776fe3b3bec3b), U64_C (0x313d4b9aabab96ab), |
741 | | U64_C (0x3ed181f0cece1fce), U64_C (0x8855229911114411), |
742 | | U64_C (0x0c8903838f8f068f), U64_C (0x4a6b9c044e4e254e), |
743 | | U64_C (0xd1517366b7b7e6b7), U64_C (0x0b60cbe0ebeb8beb), |
744 | | U64_C (0xfdcc78c13c3cf03c), U64_C (0x7cbf1ffd81813e81), |
745 | | U64_C (0xd4fe354094946a94), U64_C (0xeb0cf31cf7f7fbf7), |
746 | | U64_C (0xa1676f18b9b9deb9), U64_C (0x985f268b13134c13), |
747 | | U64_C (0x7d9c58512c2cb02c), U64_C (0xd6b8bb05d3d36bd3), |
748 | | U64_C (0x6b5cd38ce7e7bbe7), U64_C (0x57cbdc396e6ea56e), |
749 | | U64_C (0x6ef395aac4c437c4), U64_C (0x180f061b03030c03), |
750 | | U64_C (0x8a13acdc56564556), U64_C (0x1a49885e44440d44), |
751 | | U64_C (0xdf9efea07f7fe17f), U64_C (0x21374f88a9a99ea9), |
752 | | U64_C (0x4d8254672a2aa82a), U64_C (0xb16d6b0abbbbd6bb), |
753 | | U64_C (0x46e29f87c1c123c1), U64_C (0xa202a6f153535153), |
754 | | U64_C (0xae8ba572dcdc57dc), U64_C (0x582716530b0b2c0b), |
755 | | U64_C (0x9cd327019d9d4e9d), U64_C (0x47c1d82b6c6cad6c), |
756 | | U64_C (0x95f562a43131c431), U64_C (0x87b9e8f37474cd74), |
757 | | U64_C (0xe309f115f6f6fff6), U64_C (0x0a438c4c46460546), |
758 | | U64_C (0x092645a5acac8aac), U64_C (0x3c970fb589891e89), |
759 | | U64_C (0xa04428b414145014), U64_C (0x5b42dfbae1e1a3e1), |
760 | | U64_C (0xb04e2ca616165816), U64_C (0xcdd274f73a3ae83a), |
761 | | U64_C (0x6fd0d2066969b969), U64_C (0x482d124109092409), |
762 | | U64_C (0xa7ade0d77070dd70), U64_C (0xd954716fb6b6e2b6), |
763 | | U64_C (0xceb7bd1ed0d067d0), U64_C (0x3b7ec7d6eded93ed), |
764 | | U64_C (0x2edb85e2cccc17cc), U64_C (0x2a57846842421542), |
765 | | U64_C (0xb4c22d2c98985a98), U64_C (0x490e55eda4a4aaa4), |
766 | | U64_C (0x5d8850752828a028), U64_C (0xda31b8865c5c6d5c), |
767 | | U64_C (0x933fed6bf8f8c7f8), U64_C (0x44a411c286862286), |
768 | | }, { |
769 | | U64_C (0x18c07830d8181860), U64_C (0x2305af462623238c), |
770 | | U64_C (0xc67ef991b8c6c63f), U64_C (0xe8136fcdfbe8e887), |
771 | | U64_C (0x874ca113cb878726), U64_C (0xb8a9626d11b8b8da), |
772 | | U64_C (0x0108050209010104), U64_C (0x4f426e9e0d4f4f21), |
773 | | U64_C (0x36adee6c9b3636d8), U64_C (0xa6590451ffa6a6a2), |
774 | | U64_C (0xd2debdb90cd2d26f), U64_C (0xf5fb06f70ef5f5f3), |
775 | | U64_C (0x79ef80f2967979f9), U64_C (0x6f5fcede306f6fa1), |
776 | | U64_C (0x91fcef3f6d91917e), U64_C (0x52aa07a4f8525255), |
777 | | U64_C (0x6027fdc04760609d), U64_C (0xbc89766535bcbcca), |
778 | | U64_C (0x9baccd2b379b9b56), U64_C (0x8e048c018a8e8e02), |
779 | | U64_C (0xa371155bd2a3a3b6), U64_C (0x0c603c186c0c0c30), |
780 | | U64_C (0x7bff8af6847b7bf1), U64_C (0x35b5e16a803535d4), |
781 | | U64_C (0x1de8693af51d1d74), U64_C (0xe05347ddb3e0e0a7), |
782 | | U64_C (0xd7f6acb321d7d77b), U64_C (0xc25eed999cc2c22f), |
783 | | U64_C (0x2e6d965c432e2eb8), U64_C (0x4b627a96294b4b31), |
784 | | U64_C (0xfea321e15dfefedf), U64_C (0x578216aed5575741), |
785 | | U64_C (0x15a8412abd151554), U64_C (0x779fb6eee87777c1), |
786 | | U64_C (0x37a5eb6e923737dc), U64_C (0xe57b56d79ee5e5b3), |
787 | | U64_C (0x9f8cd923139f9f46), U64_C (0xf0d317fd23f0f0e7), |
788 | | U64_C (0x4a6a7f94204a4a35), U64_C (0xda9e95a944dada4f), |
789 | | U64_C (0x58fa25b0a258587d), U64_C (0xc906ca8fcfc9c903), |
790 | | U64_C (0x29558d527c2929a4), U64_C (0x0a5022145a0a0a28), |
791 | | U64_C (0xb1e14f7f50b1b1fe), U64_C (0xa0691a5dc9a0a0ba), |
792 | | U64_C (0x6b7fdad6146b6bb1), U64_C (0x855cab17d985852e), |
793 | | U64_C (0xbd8173673cbdbdce), U64_C (0x5dd234ba8f5d5d69), |
794 | | U64_C (0x1080502090101040), U64_C (0xf4f303f507f4f4f7), |
795 | | U64_C (0xcb16c08bddcbcb0b), U64_C (0x3eedc67cd33e3ef8), |
796 | | U64_C (0x0528110a2d050514), U64_C (0x671fe6ce78676781), |
797 | | U64_C (0xe47353d597e4e4b7), U64_C (0x2725bb4e0227279c), |
798 | | U64_C (0x4132588273414119), U64_C (0x8b2c9d0ba78b8b16), |
799 | | U64_C (0xa7510153f6a7a7a6), U64_C (0x7dcf94fab27d7de9), |
800 | | U64_C (0x95dcfb374995956e), U64_C (0xd88e9fad56d8d847), |
801 | | U64_C (0xfb8b30eb70fbfbcb), U64_C (0xee2371c1cdeeee9f), |
802 | | U64_C (0x7cc791f8bb7c7ced), U64_C (0x6617e3cc71666685), |
803 | | U64_C (0xdda68ea77bdddd53), U64_C (0x17b84b2eaf17175c), |
804 | | U64_C (0x4702468e45474701), U64_C (0x9e84dc211a9e9e42), |
805 | | U64_C (0xca1ec589d4caca0f), U64_C (0x2d75995a582d2db4), |
806 | | U64_C (0xbf9179632ebfbfc6), U64_C (0x07381b0e3f07071c), |
807 | | U64_C (0xad012347acadad8e), U64_C (0x5aea2fb4b05a5a75), |
808 | | U64_C (0x836cb51bef838336), U64_C (0x3385ff66b63333cc), |
809 | | U64_C (0x633ff2c65c636391), U64_C (0x02100a0412020208), |
810 | | U64_C (0xaa39384993aaaa92), U64_C (0x71afa8e2de7171d9), |
811 | | U64_C (0xc80ecf8dc6c8c807), U64_C (0x19c87d32d1191964), |
812 | | U64_C (0x497270923b494939), U64_C (0xd9869aaf5fd9d943), |
813 | | U64_C (0xf2c31df931f2f2ef), U64_C (0xe34b48dba8e3e3ab), |
814 | | U64_C (0x5be22ab6b95b5b71), U64_C (0x8834920dbc88881a), |
815 | | U64_C (0x9aa4c8293e9a9a52), U64_C (0x262dbe4c0b262698), |
816 | | U64_C (0x328dfa64bf3232c8), U64_C (0xb0e94a7d59b0b0fa), |
817 | | U64_C (0xe91b6acff2e9e983), U64_C (0x0f78331e770f0f3c), |
818 | | U64_C (0xd5e6a6b733d5d573), U64_C (0x8074ba1df480803a), |
819 | | U64_C (0xbe997c6127bebec2), U64_C (0xcd26de87ebcdcd13), |
820 | | U64_C (0x34bde468893434d0), U64_C (0x487a75903248483d), |
821 | | U64_C (0xffab24e354ffffdb), U64_C (0x7af78ff48d7a7af5), |
822 | | U64_C (0x90f4ea3d6490907a), U64_C (0x5fc23ebe9d5f5f61), |
823 | | U64_C (0x201da0403d202080), U64_C (0x6867d5d00f6868bd), |
824 | | U64_C (0x1ad07234ca1a1a68), U64_C (0xae192c41b7aeae82), |
825 | | U64_C (0xb4c95e757db4b4ea), U64_C (0x549a19a8ce54544d), |
826 | | U64_C (0x93ece53b7f939376), U64_C (0x220daa442f222288), |
827 | | U64_C (0x6407e9c86364648d), U64_C (0xf1db12ff2af1f1e3), |
828 | | U64_C (0x73bfa2e6cc7373d1), U64_C (0x12905a2482121248), |
829 | | U64_C (0x403a5d807a40401d), U64_C (0x0840281048080820), |
830 | | U64_C (0xc356e89b95c3c32b), U64_C (0xec337bc5dfecec97), |
831 | | U64_C (0xdb9690ab4ddbdb4b), U64_C (0xa1611f5fc0a1a1be), |
832 | | U64_C (0x8d1c8307918d8d0e), U64_C (0x3df5c97ac83d3df4), |
833 | | U64_C (0x97ccf1335b979766), U64_C (0x0000000000000000), |
834 | | U64_C (0xcf36d483f9cfcf1b), U64_C (0x2b4587566e2b2bac), |
835 | | U64_C (0x7697b3ece17676c5), U64_C (0x8264b019e6828232), |
836 | | U64_C (0xd6fea9b128d6d67f), U64_C (0x1bd87736c31b1b6c), |
837 | | U64_C (0xb5c15b7774b5b5ee), U64_C (0xaf112943beafaf86), |
838 | | U64_C (0x6a77dfd41d6a6ab5), U64_C (0x50ba0da0ea50505d), |
839 | | U64_C (0x45124c8a57454509), U64_C (0xf3cb18fb38f3f3eb), |
840 | | U64_C (0x309df060ad3030c0), U64_C (0xef2b74c3c4efef9b), |
841 | | U64_C (0x3fe5c37eda3f3ffc), U64_C (0x55921caac7555549), |
842 | | U64_C (0xa2791059dba2a2b2), U64_C (0xea0365c9e9eaea8f), |
843 | | U64_C (0x650fecca6a656589), U64_C (0xbab9686903babad2), |
844 | | U64_C (0x2f65935e4a2f2fbc), U64_C (0xc04ee79d8ec0c027), |
845 | | U64_C (0xdebe81a160dede5f), U64_C (0x1ce06c38fc1c1c70), |
846 | | U64_C (0xfdbb2ee746fdfdd3), U64_C (0x4d52649a1f4d4d29), |
847 | | U64_C (0x92e4e03976929272), U64_C (0x758fbceafa7575c9), |
848 | | U64_C (0x06301e0c36060618), U64_C (0x8a249809ae8a8a12), |
849 | | U64_C (0xb2f940794bb2b2f2), U64_C (0xe66359d185e6e6bf), |
850 | | U64_C (0x0e70361c7e0e0e38), U64_C (0x1ff8633ee71f1f7c), |
851 | | U64_C (0x6237f7c455626295), U64_C (0xd4eea3b53ad4d477), |
852 | | U64_C (0xa829324d81a8a89a), U64_C (0x96c4f43152969662), |
853 | | U64_C (0xf99b3aef62f9f9c3), U64_C (0xc566f697a3c5c533), |
854 | | U64_C (0x2535b14a10252594), U64_C (0x59f220b2ab595979), |
855 | | U64_C (0x8454ae15d084842a), U64_C (0x72b7a7e4c57272d5), |
856 | | U64_C (0x39d5dd72ec3939e4), U64_C (0x4c5a6198164c4c2d), |
857 | | U64_C (0x5eca3bbc945e5e65), U64_C (0x78e785f09f7878fd), |
858 | | U64_C (0x38ddd870e53838e0), U64_C (0x8c148605988c8c0a), |
859 | | U64_C (0xd1c6b2bf17d1d163), U64_C (0xa5410b57e4a5a5ae), |
860 | | U64_C (0xe2434dd9a1e2e2af), U64_C (0x612ff8c24e616199), |
861 | | U64_C (0xb3f1457b42b3b3f6), U64_C (0x2115a54234212184), |
862 | | U64_C (0x9c94d625089c9c4a), U64_C (0x1ef0663cee1e1e78), |
863 | | U64_C (0x4322528661434311), U64_C (0xc776fc93b1c7c73b), |
864 | | U64_C (0xfcb32be54ffcfcd7), U64_C (0x0420140824040410), |
865 | | U64_C (0x51b208a2e3515159), U64_C (0x99bcc72f2599995e), |
866 | | U64_C (0x6d4fc4da226d6da9), U64_C (0x0d68391a650d0d34), |
867 | | U64_C (0xfa8335e979fafacf), U64_C (0xdfb684a369dfdf5b), |
868 | | U64_C (0x7ed79bfca97e7ee5), U64_C (0x243db44819242490), |
869 | | U64_C (0x3bc5d776fe3b3bec), U64_C (0xab313d4b9aabab96), |
870 | | U64_C (0xce3ed181f0cece1f), U64_C (0x1188552299111144), |
871 | | U64_C (0x8f0c8903838f8f06), U64_C (0x4e4a6b9c044e4e25), |
872 | | U64_C (0xb7d1517366b7b7e6), U64_C (0xeb0b60cbe0ebeb8b), |
873 | | U64_C (0x3cfdcc78c13c3cf0), U64_C (0x817cbf1ffd81813e), |
874 | | U64_C (0x94d4fe354094946a), U64_C (0xf7eb0cf31cf7f7fb), |
875 | | U64_C (0xb9a1676f18b9b9de), U64_C (0x13985f268b13134c), |
876 | | U64_C (0x2c7d9c58512c2cb0), U64_C (0xd3d6b8bb05d3d36b), |
877 | | U64_C (0xe76b5cd38ce7e7bb), U64_C (0x6e57cbdc396e6ea5), |
878 | | U64_C (0xc46ef395aac4c437), U64_C (0x03180f061b03030c), |
879 | | U64_C (0x568a13acdc565645), U64_C (0x441a49885e44440d), |
880 | | U64_C (0x7fdf9efea07f7fe1), U64_C (0xa921374f88a9a99e), |
881 | | U64_C (0x2a4d8254672a2aa8), U64_C (0xbbb16d6b0abbbbd6), |
882 | | U64_C (0xc146e29f87c1c123), U64_C (0x53a202a6f1535351), |
883 | | U64_C (0xdcae8ba572dcdc57), U64_C (0x0b582716530b0b2c), |
884 | | U64_C (0x9d9cd327019d9d4e), U64_C (0x6c47c1d82b6c6cad), |
885 | | U64_C (0x3195f562a43131c4), U64_C (0x7487b9e8f37474cd), |
886 | | U64_C (0xf6e309f115f6f6ff), U64_C (0x460a438c4c464605), |
887 | | U64_C (0xac092645a5acac8a), U64_C (0x893c970fb589891e), |
888 | | U64_C (0x14a04428b4141450), U64_C (0xe15b42dfbae1e1a3), |
889 | | U64_C (0x16b04e2ca6161658), U64_C (0x3acdd274f73a3ae8), |
890 | | U64_C (0x696fd0d2066969b9), U64_C (0x09482d1241090924), |
891 | | U64_C (0x70a7ade0d77070dd), U64_C (0xb6d954716fb6b6e2), |
892 | | U64_C (0xd0ceb7bd1ed0d067), U64_C (0xed3b7ec7d6eded93), |
893 | | U64_C (0xcc2edb85e2cccc17), U64_C (0x422a578468424215), |
894 | | U64_C (0x98b4c22d2c98985a), U64_C (0xa4490e55eda4a4aa), |
895 | | U64_C (0x285d8850752828a0), U64_C (0x5cda31b8865c5c6d), |
896 | | U64_C (0xf8933fed6bf8f8c7), U64_C (0x8644a411c2868622), |
897 | | }, { |
898 | | U64_C (0x6018c07830d81818), U64_C (0x8c2305af46262323), |
899 | | U64_C (0x3fc67ef991b8c6c6), U64_C (0x87e8136fcdfbe8e8), |
900 | | U64_C (0x26874ca113cb8787), U64_C (0xdab8a9626d11b8b8), |
901 | | U64_C (0x0401080502090101), U64_C (0x214f426e9e0d4f4f), |
902 | | U64_C (0xd836adee6c9b3636), U64_C (0xa2a6590451ffa6a6), |
903 | | U64_C (0x6fd2debdb90cd2d2), U64_C (0xf3f5fb06f70ef5f5), |
904 | | U64_C (0xf979ef80f2967979), U64_C (0xa16f5fcede306f6f), |
905 | | U64_C (0x7e91fcef3f6d9191), U64_C (0x5552aa07a4f85252), |
906 | | U64_C (0x9d6027fdc0476060), U64_C (0xcabc89766535bcbc), |
907 | | U64_C (0x569baccd2b379b9b), U64_C (0x028e048c018a8e8e), |
908 | | U64_C (0xb6a371155bd2a3a3), U64_C (0x300c603c186c0c0c), |
909 | | U64_C (0xf17bff8af6847b7b), U64_C (0xd435b5e16a803535), |
910 | | U64_C (0x741de8693af51d1d), U64_C (0xa7e05347ddb3e0e0), |
911 | | U64_C (0x7bd7f6acb321d7d7), U64_C (0x2fc25eed999cc2c2), |
912 | | U64_C (0xb82e6d965c432e2e), U64_C (0x314b627a96294b4b), |
913 | | U64_C (0xdffea321e15dfefe), U64_C (0x41578216aed55757), |
914 | | U64_C (0x5415a8412abd1515), U64_C (0xc1779fb6eee87777), |
915 | | U64_C (0xdc37a5eb6e923737), U64_C (0xb3e57b56d79ee5e5), |
916 | | U64_C (0x469f8cd923139f9f), U64_C (0xe7f0d317fd23f0f0), |
917 | | U64_C (0x354a6a7f94204a4a), U64_C (0x4fda9e95a944dada), |
918 | | U64_C (0x7d58fa25b0a25858), U64_C (0x03c906ca8fcfc9c9), |
919 | | U64_C (0xa429558d527c2929), U64_C (0x280a5022145a0a0a), |
920 | | U64_C (0xfeb1e14f7f50b1b1), U64_C (0xbaa0691a5dc9a0a0), |
921 | | U64_C (0xb16b7fdad6146b6b), U64_C (0x2e855cab17d98585), |
922 | | U64_C (0xcebd8173673cbdbd), U64_C (0x695dd234ba8f5d5d), |
923 | | U64_C (0x4010805020901010), U64_C (0xf7f4f303f507f4f4), |
924 | | U64_C (0x0bcb16c08bddcbcb), U64_C (0xf83eedc67cd33e3e), |
925 | | U64_C (0x140528110a2d0505), U64_C (0x81671fe6ce786767), |
926 | | U64_C (0xb7e47353d597e4e4), U64_C (0x9c2725bb4e022727), |
927 | | U64_C (0x1941325882734141), U64_C (0x168b2c9d0ba78b8b), |
928 | | U64_C (0xa6a7510153f6a7a7), U64_C (0xe97dcf94fab27d7d), |
929 | | U64_C (0x6e95dcfb37499595), U64_C (0x47d88e9fad56d8d8), |
930 | | U64_C (0xcbfb8b30eb70fbfb), U64_C (0x9fee2371c1cdeeee), |
931 | | U64_C (0xed7cc791f8bb7c7c), U64_C (0x856617e3cc716666), |
932 | | U64_C (0x53dda68ea77bdddd), U64_C (0x5c17b84b2eaf1717), |
933 | | U64_C (0x014702468e454747), U64_C (0x429e84dc211a9e9e), |
934 | | U64_C (0x0fca1ec589d4caca), U64_C (0xb42d75995a582d2d), |
935 | | U64_C (0xc6bf9179632ebfbf), U64_C (0x1c07381b0e3f0707), |
936 | | U64_C (0x8ead012347acadad), U64_C (0x755aea2fb4b05a5a), |
937 | | U64_C (0x36836cb51bef8383), U64_C (0xcc3385ff66b63333), |
938 | | U64_C (0x91633ff2c65c6363), U64_C (0x0802100a04120202), |
939 | | U64_C (0x92aa39384993aaaa), U64_C (0xd971afa8e2de7171), |
940 | | U64_C (0x07c80ecf8dc6c8c8), U64_C (0x6419c87d32d11919), |
941 | | U64_C (0x39497270923b4949), U64_C (0x43d9869aaf5fd9d9), |
942 | | U64_C (0xeff2c31df931f2f2), U64_C (0xabe34b48dba8e3e3), |
943 | | U64_C (0x715be22ab6b95b5b), U64_C (0x1a8834920dbc8888), |
944 | | U64_C (0x529aa4c8293e9a9a), U64_C (0x98262dbe4c0b2626), |
945 | | U64_C (0xc8328dfa64bf3232), U64_C (0xfab0e94a7d59b0b0), |
946 | | U64_C (0x83e91b6acff2e9e9), U64_C (0x3c0f78331e770f0f), |
947 | | U64_C (0x73d5e6a6b733d5d5), U64_C (0x3a8074ba1df48080), |
948 | | U64_C (0xc2be997c6127bebe), U64_C (0x13cd26de87ebcdcd), |
949 | | U64_C (0xd034bde468893434), U64_C (0x3d487a7590324848), |
950 | | U64_C (0xdbffab24e354ffff), U64_C (0xf57af78ff48d7a7a), |
951 | | U64_C (0x7a90f4ea3d649090), U64_C (0x615fc23ebe9d5f5f), |
952 | | U64_C (0x80201da0403d2020), U64_C (0xbd6867d5d00f6868), |
953 | | U64_C (0x681ad07234ca1a1a), U64_C (0x82ae192c41b7aeae), |
954 | | U64_C (0xeab4c95e757db4b4), U64_C (0x4d549a19a8ce5454), |
955 | | U64_C (0x7693ece53b7f9393), U64_C (0x88220daa442f2222), |
956 | | U64_C (0x8d6407e9c8636464), U64_C (0xe3f1db12ff2af1f1), |
957 | | U64_C (0xd173bfa2e6cc7373), U64_C (0x4812905a24821212), |
958 | | U64_C (0x1d403a5d807a4040), U64_C (0x2008402810480808), |
959 | | U64_C (0x2bc356e89b95c3c3), U64_C (0x97ec337bc5dfecec), |
960 | | U64_C (0x4bdb9690ab4ddbdb), U64_C (0xbea1611f5fc0a1a1), |
961 | | U64_C (0x0e8d1c8307918d8d), U64_C (0xf43df5c97ac83d3d), |
962 | | U64_C (0x6697ccf1335b9797), U64_C (0x0000000000000000), |
963 | | U64_C (0x1bcf36d483f9cfcf), U64_C (0xac2b4587566e2b2b), |
964 | | U64_C (0xc57697b3ece17676), U64_C (0x328264b019e68282), |
965 | | U64_C (0x7fd6fea9b128d6d6), U64_C (0x6c1bd87736c31b1b), |
966 | | U64_C (0xeeb5c15b7774b5b5), U64_C (0x86af112943beafaf), |
967 | | U64_C (0xb56a77dfd41d6a6a), U64_C (0x5d50ba0da0ea5050), |
968 | | U64_C (0x0945124c8a574545), U64_C (0xebf3cb18fb38f3f3), |
969 | | U64_C (0xc0309df060ad3030), U64_C (0x9bef2b74c3c4efef), |
970 | | U64_C (0xfc3fe5c37eda3f3f), U64_C (0x4955921caac75555), |
971 | | U64_C (0xb2a2791059dba2a2), U64_C (0x8fea0365c9e9eaea), |
972 | | U64_C (0x89650fecca6a6565), U64_C (0xd2bab9686903baba), |
973 | | U64_C (0xbc2f65935e4a2f2f), U64_C (0x27c04ee79d8ec0c0), |
974 | | U64_C (0x5fdebe81a160dede), U64_C (0x701ce06c38fc1c1c), |
975 | | U64_C (0xd3fdbb2ee746fdfd), U64_C (0x294d52649a1f4d4d), |
976 | | U64_C (0x7292e4e039769292), U64_C (0xc9758fbceafa7575), |
977 | | U64_C (0x1806301e0c360606), U64_C (0x128a249809ae8a8a), |
978 | | U64_C (0xf2b2f940794bb2b2), U64_C (0xbfe66359d185e6e6), |
979 | | U64_C (0x380e70361c7e0e0e), U64_C (0x7c1ff8633ee71f1f), |
980 | | U64_C (0x956237f7c4556262), U64_C (0x77d4eea3b53ad4d4), |
981 | | U64_C (0x9aa829324d81a8a8), U64_C (0x6296c4f431529696), |
982 | | U64_C (0xc3f99b3aef62f9f9), U64_C (0x33c566f697a3c5c5), |
983 | | U64_C (0x942535b14a102525), U64_C (0x7959f220b2ab5959), |
984 | | U64_C (0x2a8454ae15d08484), U64_C (0xd572b7a7e4c57272), |
985 | | U64_C (0xe439d5dd72ec3939), U64_C (0x2d4c5a6198164c4c), |
986 | | U64_C (0x655eca3bbc945e5e), U64_C (0xfd78e785f09f7878), |
987 | | U64_C (0xe038ddd870e53838), U64_C (0x0a8c148605988c8c), |
988 | | U64_C (0x63d1c6b2bf17d1d1), U64_C (0xaea5410b57e4a5a5), |
989 | | U64_C (0xafe2434dd9a1e2e2), U64_C (0x99612ff8c24e6161), |
990 | | U64_C (0xf6b3f1457b42b3b3), U64_C (0x842115a542342121), |
991 | | U64_C (0x4a9c94d625089c9c), U64_C (0x781ef0663cee1e1e), |
992 | | U64_C (0x1143225286614343), U64_C (0x3bc776fc93b1c7c7), |
993 | | U64_C (0xd7fcb32be54ffcfc), U64_C (0x1004201408240404), |
994 | | U64_C (0x5951b208a2e35151), U64_C (0x5e99bcc72f259999), |
995 | | U64_C (0xa96d4fc4da226d6d), U64_C (0x340d68391a650d0d), |
996 | | U64_C (0xcffa8335e979fafa), U64_C (0x5bdfb684a369dfdf), |
997 | | U64_C (0xe57ed79bfca97e7e), U64_C (0x90243db448192424), |
998 | | U64_C (0xec3bc5d776fe3b3b), U64_C (0x96ab313d4b9aabab), |
999 | | U64_C (0x1fce3ed181f0cece), U64_C (0x4411885522991111), |
1000 | | U64_C (0x068f0c8903838f8f), U64_C (0x254e4a6b9c044e4e), |
1001 | | U64_C (0xe6b7d1517366b7b7), U64_C (0x8beb0b60cbe0ebeb), |
1002 | | U64_C (0xf03cfdcc78c13c3c), U64_C (0x3e817cbf1ffd8181), |
1003 | | U64_C (0x6a94d4fe35409494), U64_C (0xfbf7eb0cf31cf7f7), |
1004 | | U64_C (0xdeb9a1676f18b9b9), U64_C (0x4c13985f268b1313), |
1005 | | U64_C (0xb02c7d9c58512c2c), U64_C (0x6bd3d6b8bb05d3d3), |
1006 | | U64_C (0xbbe76b5cd38ce7e7), U64_C (0xa56e57cbdc396e6e), |
1007 | | U64_C (0x37c46ef395aac4c4), U64_C (0x0c03180f061b0303), |
1008 | | U64_C (0x45568a13acdc5656), U64_C (0x0d441a49885e4444), |
1009 | | U64_C (0xe17fdf9efea07f7f), U64_C (0x9ea921374f88a9a9), |
1010 | | U64_C (0xa82a4d8254672a2a), U64_C (0xd6bbb16d6b0abbbb), |
1011 | | U64_C (0x23c146e29f87c1c1), U64_C (0x5153a202a6f15353), |
1012 | | U64_C (0x57dcae8ba572dcdc), U64_C (0x2c0b582716530b0b), |
1013 | | U64_C (0x4e9d9cd327019d9d), U64_C (0xad6c47c1d82b6c6c), |
1014 | | U64_C (0xc43195f562a43131), U64_C (0xcd7487b9e8f37474), |
1015 | | U64_C (0xfff6e309f115f6f6), U64_C (0x05460a438c4c4646), |
1016 | | U64_C (0x8aac092645a5acac), U64_C (0x1e893c970fb58989), |
1017 | | U64_C (0x5014a04428b41414), U64_C (0xa3e15b42dfbae1e1), |
1018 | | U64_C (0x5816b04e2ca61616), U64_C (0xe83acdd274f73a3a), |
1019 | | U64_C (0xb9696fd0d2066969), U64_C (0x2409482d12410909), |
1020 | | U64_C (0xdd70a7ade0d77070), U64_C (0xe2b6d954716fb6b6), |
1021 | | U64_C (0x67d0ceb7bd1ed0d0), U64_C (0x93ed3b7ec7d6eded), |
1022 | | U64_C (0x17cc2edb85e2cccc), U64_C (0x15422a5784684242), |
1023 | | U64_C (0x5a98b4c22d2c9898), U64_C (0xaaa4490e55eda4a4), |
1024 | | U64_C (0xa0285d8850752828), U64_C (0x6d5cda31b8865c5c), |
1025 | | U64_C (0xc7f8933fed6bf8f8), U64_C (0x228644a411c28686), |
1026 | | }, { |
1027 | | U64_C (0x186018c07830d818), U64_C (0x238c2305af462623), |
1028 | | U64_C (0xc63fc67ef991b8c6), U64_C (0xe887e8136fcdfbe8), |
1029 | | U64_C (0x8726874ca113cb87), U64_C (0xb8dab8a9626d11b8), |
1030 | | U64_C (0x0104010805020901), U64_C (0x4f214f426e9e0d4f), |
1031 | | U64_C (0x36d836adee6c9b36), U64_C (0xa6a2a6590451ffa6), |
1032 | | U64_C (0xd26fd2debdb90cd2), U64_C (0xf5f3f5fb06f70ef5), |
1033 | | U64_C (0x79f979ef80f29679), U64_C (0x6fa16f5fcede306f), |
1034 | | U64_C (0x917e91fcef3f6d91), U64_C (0x525552aa07a4f852), |
1035 | | U64_C (0x609d6027fdc04760), U64_C (0xbccabc89766535bc), |
1036 | | U64_C (0x9b569baccd2b379b), U64_C (0x8e028e048c018a8e), |
1037 | | U64_C (0xa3b6a371155bd2a3), U64_C (0x0c300c603c186c0c), |
1038 | | U64_C (0x7bf17bff8af6847b), U64_C (0x35d435b5e16a8035), |
1039 | | U64_C (0x1d741de8693af51d), U64_C (0xe0a7e05347ddb3e0), |
1040 | | U64_C (0xd77bd7f6acb321d7), U64_C (0xc22fc25eed999cc2), |
1041 | | U64_C (0x2eb82e6d965c432e), U64_C (0x4b314b627a96294b), |
1042 | | U64_C (0xfedffea321e15dfe), U64_C (0x5741578216aed557), |
1043 | | U64_C (0x155415a8412abd15), U64_C (0x77c1779fb6eee877), |
1044 | | U64_C (0x37dc37a5eb6e9237), U64_C (0xe5b3e57b56d79ee5), |
1045 | | U64_C (0x9f469f8cd923139f), U64_C (0xf0e7f0d317fd23f0), |
1046 | | U64_C (0x4a354a6a7f94204a), U64_C (0xda4fda9e95a944da), |
1047 | | U64_C (0x587d58fa25b0a258), U64_C (0xc903c906ca8fcfc9), |
1048 | | U64_C (0x29a429558d527c29), U64_C (0x0a280a5022145a0a), |
1049 | | U64_C (0xb1feb1e14f7f50b1), U64_C (0xa0baa0691a5dc9a0), |
1050 | | U64_C (0x6bb16b7fdad6146b), U64_C (0x852e855cab17d985), |
1051 | | U64_C (0xbdcebd8173673cbd), U64_C (0x5d695dd234ba8f5d), |
1052 | | U64_C (0x1040108050209010), U64_C (0xf4f7f4f303f507f4), |
1053 | | U64_C (0xcb0bcb16c08bddcb), U64_C (0x3ef83eedc67cd33e), |
1054 | | U64_C (0x05140528110a2d05), U64_C (0x6781671fe6ce7867), |
1055 | | U64_C (0xe4b7e47353d597e4), U64_C (0x279c2725bb4e0227), |
1056 | | U64_C (0x4119413258827341), U64_C (0x8b168b2c9d0ba78b), |
1057 | | U64_C (0xa7a6a7510153f6a7), U64_C (0x7de97dcf94fab27d), |
1058 | | U64_C (0x956e95dcfb374995), U64_C (0xd847d88e9fad56d8), |
1059 | | U64_C (0xfbcbfb8b30eb70fb), U64_C (0xee9fee2371c1cdee), |
1060 | | U64_C (0x7ced7cc791f8bb7c), U64_C (0x66856617e3cc7166), |
1061 | | U64_C (0xdd53dda68ea77bdd), U64_C (0x175c17b84b2eaf17), |
1062 | | U64_C (0x47014702468e4547), U64_C (0x9e429e84dc211a9e), |
1063 | | U64_C (0xca0fca1ec589d4ca), U64_C (0x2db42d75995a582d), |
1064 | | U64_C (0xbfc6bf9179632ebf), U64_C (0x071c07381b0e3f07), |
1065 | | U64_C (0xad8ead012347acad), U64_C (0x5a755aea2fb4b05a), |
1066 | | U64_C (0x8336836cb51bef83), U64_C (0x33cc3385ff66b633), |
1067 | | U64_C (0x6391633ff2c65c63), U64_C (0x020802100a041202), |
1068 | | U64_C (0xaa92aa39384993aa), U64_C (0x71d971afa8e2de71), |
1069 | | U64_C (0xc807c80ecf8dc6c8), U64_C (0x196419c87d32d119), |
1070 | | U64_C (0x4939497270923b49), U64_C (0xd943d9869aaf5fd9), |
1071 | | U64_C (0xf2eff2c31df931f2), U64_C (0xe3abe34b48dba8e3), |
1072 | | U64_C (0x5b715be22ab6b95b), U64_C (0x881a8834920dbc88), |
1073 | | U64_C (0x9a529aa4c8293e9a), U64_C (0x2698262dbe4c0b26), |
1074 | | U64_C (0x32c8328dfa64bf32), U64_C (0xb0fab0e94a7d59b0), |
1075 | | U64_C (0xe983e91b6acff2e9), U64_C (0x0f3c0f78331e770f), |
1076 | | U64_C (0xd573d5e6a6b733d5), U64_C (0x803a8074ba1df480), |
1077 | | U64_C (0xbec2be997c6127be), U64_C (0xcd13cd26de87ebcd), |
1078 | | U64_C (0x34d034bde4688934), U64_C (0x483d487a75903248), |
1079 | | U64_C (0xffdbffab24e354ff), U64_C (0x7af57af78ff48d7a), |
1080 | | U64_C (0x907a90f4ea3d6490), U64_C (0x5f615fc23ebe9d5f), |
1081 | | U64_C (0x2080201da0403d20), U64_C (0x68bd6867d5d00f68), |
1082 | | U64_C (0x1a681ad07234ca1a), U64_C (0xae82ae192c41b7ae), |
1083 | | U64_C (0xb4eab4c95e757db4), U64_C (0x544d549a19a8ce54), |
1084 | | U64_C (0x937693ece53b7f93), U64_C (0x2288220daa442f22), |
1085 | | U64_C (0x648d6407e9c86364), U64_C (0xf1e3f1db12ff2af1), |
1086 | | U64_C (0x73d173bfa2e6cc73), U64_C (0x124812905a248212), |
1087 | | U64_C (0x401d403a5d807a40), U64_C (0x0820084028104808), |
1088 | | U64_C (0xc32bc356e89b95c3), U64_C (0xec97ec337bc5dfec), |
1089 | | U64_C (0xdb4bdb9690ab4ddb), U64_C (0xa1bea1611f5fc0a1), |
1090 | | U64_C (0x8d0e8d1c8307918d), U64_C (0x3df43df5c97ac83d), |
1091 | | U64_C (0x976697ccf1335b97), U64_C (0x0000000000000000), |
1092 | | U64_C (0xcf1bcf36d483f9cf), U64_C (0x2bac2b4587566e2b), |
1093 | | U64_C (0x76c57697b3ece176), U64_C (0x82328264b019e682), |
1094 | | U64_C (0xd67fd6fea9b128d6), U64_C (0x1b6c1bd87736c31b), |
1095 | | U64_C (0xb5eeb5c15b7774b5), U64_C (0xaf86af112943beaf), |
1096 | | U64_C (0x6ab56a77dfd41d6a), U64_C (0x505d50ba0da0ea50), |
1097 | | U64_C (0x450945124c8a5745), U64_C (0xf3ebf3cb18fb38f3), |
1098 | | U64_C (0x30c0309df060ad30), U64_C (0xef9bef2b74c3c4ef), |
1099 | | U64_C (0x3ffc3fe5c37eda3f), U64_C (0x554955921caac755), |
1100 | | U64_C (0xa2b2a2791059dba2), U64_C (0xea8fea0365c9e9ea), |
1101 | | U64_C (0x6589650fecca6a65), U64_C (0xbad2bab9686903ba), |
1102 | | U64_C (0x2fbc2f65935e4a2f), U64_C (0xc027c04ee79d8ec0), |
1103 | | U64_C (0xde5fdebe81a160de), U64_C (0x1c701ce06c38fc1c), |
1104 | | U64_C (0xfdd3fdbb2ee746fd), U64_C (0x4d294d52649a1f4d), |
1105 | | U64_C (0x927292e4e0397692), U64_C (0x75c9758fbceafa75), |
1106 | | U64_C (0x061806301e0c3606), U64_C (0x8a128a249809ae8a), |
1107 | | U64_C (0xb2f2b2f940794bb2), U64_C (0xe6bfe66359d185e6), |
1108 | | U64_C (0x0e380e70361c7e0e), U64_C (0x1f7c1ff8633ee71f), |
1109 | | U64_C (0x62956237f7c45562), U64_C (0xd477d4eea3b53ad4), |
1110 | | U64_C (0xa89aa829324d81a8), U64_C (0x966296c4f4315296), |
1111 | | U64_C (0xf9c3f99b3aef62f9), U64_C (0xc533c566f697a3c5), |
1112 | | U64_C (0x25942535b14a1025), U64_C (0x597959f220b2ab59), |
1113 | | U64_C (0x842a8454ae15d084), U64_C (0x72d572b7a7e4c572), |
1114 | | U64_C (0x39e439d5dd72ec39), U64_C (0x4c2d4c5a6198164c), |
1115 | | U64_C (0x5e655eca3bbc945e), U64_C (0x78fd78e785f09f78), |
1116 | | U64_C (0x38e038ddd870e538), U64_C (0x8c0a8c148605988c), |
1117 | | U64_C (0xd163d1c6b2bf17d1), U64_C (0xa5aea5410b57e4a5), |
1118 | | U64_C (0xe2afe2434dd9a1e2), U64_C (0x6199612ff8c24e61), |
1119 | | U64_C (0xb3f6b3f1457b42b3), U64_C (0x21842115a5423421), |
1120 | | U64_C (0x9c4a9c94d625089c), U64_C (0x1e781ef0663cee1e), |
1121 | | U64_C (0x4311432252866143), U64_C (0xc73bc776fc93b1c7), |
1122 | | U64_C (0xfcd7fcb32be54ffc), U64_C (0x0410042014082404), |
1123 | | U64_C (0x515951b208a2e351), U64_C (0x995e99bcc72f2599), |
1124 | | U64_C (0x6da96d4fc4da226d), U64_C (0x0d340d68391a650d), |
1125 | | U64_C (0xfacffa8335e979fa), U64_C (0xdf5bdfb684a369df), |
1126 | | U64_C (0x7ee57ed79bfca97e), U64_C (0x2490243db4481924), |
1127 | | U64_C (0x3bec3bc5d776fe3b), U64_C (0xab96ab313d4b9aab), |
1128 | | U64_C (0xce1fce3ed181f0ce), U64_C (0x1144118855229911), |
1129 | | U64_C (0x8f068f0c8903838f), U64_C (0x4e254e4a6b9c044e), |
1130 | | U64_C (0xb7e6b7d1517366b7), U64_C (0xeb8beb0b60cbe0eb), |
1131 | | U64_C (0x3cf03cfdcc78c13c), U64_C (0x813e817cbf1ffd81), |
1132 | | U64_C (0x946a94d4fe354094), U64_C (0xf7fbf7eb0cf31cf7), |
1133 | | U64_C (0xb9deb9a1676f18b9), U64_C (0x134c13985f268b13), |
1134 | | U64_C (0x2cb02c7d9c58512c), U64_C (0xd36bd3d6b8bb05d3), |
1135 | | U64_C (0xe7bbe76b5cd38ce7), U64_C (0x6ea56e57cbdc396e), |
1136 | | U64_C (0xc437c46ef395aac4), U64_C (0x030c03180f061b03), |
1137 | | U64_C (0x5645568a13acdc56), U64_C (0x440d441a49885e44), |
1138 | | U64_C (0x7fe17fdf9efea07f), U64_C (0xa99ea921374f88a9), |
1139 | | U64_C (0x2aa82a4d8254672a), U64_C (0xbbd6bbb16d6b0abb), |
1140 | | U64_C (0xc123c146e29f87c1), U64_C (0x535153a202a6f153), |
1141 | | U64_C (0xdc57dcae8ba572dc), U64_C (0x0b2c0b582716530b), |
1142 | | U64_C (0x9d4e9d9cd327019d), U64_C (0x6cad6c47c1d82b6c), |
1143 | | U64_C (0x31c43195f562a431), U64_C (0x74cd7487b9e8f374), |
1144 | | U64_C (0xf6fff6e309f115f6), U64_C (0x4605460a438c4c46), |
1145 | | U64_C (0xac8aac092645a5ac), U64_C (0x891e893c970fb589), |
1146 | | U64_C (0x145014a04428b414), U64_C (0xe1a3e15b42dfbae1), |
1147 | | U64_C (0x165816b04e2ca616), U64_C (0x3ae83acdd274f73a), |
1148 | | U64_C (0x69b9696fd0d20669), U64_C (0x092409482d124109), |
1149 | | U64_C (0x70dd70a7ade0d770), U64_C (0xb6e2b6d954716fb6), |
1150 | | U64_C (0xd067d0ceb7bd1ed0), U64_C (0xed93ed3b7ec7d6ed), |
1151 | | U64_C (0xcc17cc2edb85e2cc), U64_C (0x4215422a57846842), |
1152 | | U64_C (0x985a98b4c22d2c98), U64_C (0xa4aaa4490e55eda4), |
1153 | | U64_C (0x28a0285d88507528), U64_C (0x5c6d5cda31b8865c), |
1154 | | U64_C (0xf8c7f8933fed6bf8), U64_C (0x86228644a411c286), |
1155 | | } } |
1156 | | }; |
1157 | | #define C tab.C |
1158 | | #define C0 C[0] |
1159 | | #define C1 C[1] |
1160 | | #define C2 C[2] |
1161 | | #define C3 C[3] |
1162 | | #define C4 C[4] |
1163 | | #define C5 C[5] |
1164 | | #define C6 C[6] |
1165 | | #define C7 C[7] |
1166 | | #define rc tab.RC |
1167 | | |
1168 | | |
1169 | | |
1170 | | static unsigned int |
1171 | | whirlpool_transform (void *ctx, const unsigned char *data, size_t nblks); |
1172 | | |
1173 | | |
1174 | | |
1175 | | static void |
1176 | | whirlpool_init (void *ctx, unsigned int flags) |
1177 | 0 | { |
1178 | 0 | whirlpool_context_t *context = ctx; |
1179 | |
|
1180 | 0 | memset (context, 0, sizeof (*context)); |
1181 | |
|
1182 | 0 | context->bctx.blocksize_shift = _gcry_ctz(BLOCK_SIZE); |
1183 | 0 | context->bctx.bwrite = whirlpool_transform; |
1184 | 0 | if ((flags & GCRY_MD_FLAG_BUGEMU1)) |
1185 | 0 | { |
1186 | 0 | memset (&context->bugemu, 0, sizeof context->bugemu); |
1187 | 0 | context->use_bugemu = 1; |
1188 | 0 | } |
1189 | 0 | else |
1190 | 0 | context->use_bugemu = 0; |
1191 | 0 | } |
1192 | | |
1193 | | |
1194 | | #ifdef USE_AMD64_ASM |
1195 | | |
1196 | | #ifdef HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS |
1197 | | # define ASM_FUNC_ABI __attribute__((sysv_abi)) |
1198 | | # define ASM_EXTRA_STACK (10 * 16) |
1199 | | #else |
1200 | | # define ASM_FUNC_ABI |
1201 | 0 | # define ASM_EXTRA_STACK 0 |
1202 | | #endif |
1203 | | |
1204 | | extern unsigned int |
1205 | | _gcry_whirlpool_transform_amd64(u64 *state, const unsigned char *data, |
1206 | | size_t nblks, const struct whirlpool_tables_s *tables) ASM_FUNC_ABI; |
1207 | | |
1208 | | static unsigned int |
1209 | | whirlpool_transform (void *ctx, const unsigned char *data, size_t nblks) |
1210 | 0 | { |
1211 | 0 | whirlpool_context_t *context = ctx; |
1212 | |
|
1213 | 0 | return _gcry_whirlpool_transform_amd64( |
1214 | 0 | context->hash_state, data, nblks, &tab) + ASM_EXTRA_STACK; |
1215 | 0 | } |
1216 | | |
1217 | | #else /* USE_AMD64_ASM */ |
1218 | | |
1219 | | /* |
1220 | | * Transform block. |
1221 | | */ |
1222 | | static unsigned int |
1223 | | whirlpool_transform_blk (void *ctx, const unsigned char *data) |
1224 | | { |
1225 | | whirlpool_context_t *context = ctx; |
1226 | | whirlpool_block_t data_block; |
1227 | | whirlpool_block_t key; |
1228 | | whirlpool_block_t state; |
1229 | | whirlpool_block_t block; |
1230 | | unsigned int r; |
1231 | | unsigned int i; |
1232 | | |
1233 | | buffer_to_block (data, data_block, i); |
1234 | | block_copy (key, context->hash_state, i); |
1235 | | block_copy (state, context->hash_state, i); |
1236 | | block_xor (state, data_block, i); |
1237 | | |
1238 | | for (r = 0; r < R; r++) |
1239 | | { |
1240 | | /* Compute round key K^r. */ |
1241 | | |
1242 | | block[0] = (C0[(key[0] >> 56) & 0xFF] ^ C1[(key[7] >> 48) & 0xFF] ^ |
1243 | | C2[(key[6] >> 40) & 0xFF] ^ C3[(key[5] >> 32) & 0xFF] ^ |
1244 | | C4[(key[4] >> 24) & 0xFF] ^ C5[(key[3] >> 16) & 0xFF] ^ |
1245 | | C6[(key[2] >> 8) & 0xFF] ^ C7[(key[1] >> 0) & 0xFF] ^ rc[r]); |
1246 | | block[1] = (C0[(key[1] >> 56) & 0xFF] ^ C1[(key[0] >> 48) & 0xFF] ^ |
1247 | | C2[(key[7] >> 40) & 0xFF] ^ C3[(key[6] >> 32) & 0xFF] ^ |
1248 | | C4[(key[5] >> 24) & 0xFF] ^ C5[(key[4] >> 16) & 0xFF] ^ |
1249 | | C6[(key[3] >> 8) & 0xFF] ^ C7[(key[2] >> 0) & 0xFF]); |
1250 | | block[2] = (C0[(key[2] >> 56) & 0xFF] ^ C1[(key[1] >> 48) & 0xFF] ^ |
1251 | | C2[(key[0] >> 40) & 0xFF] ^ C3[(key[7] >> 32) & 0xFF] ^ |
1252 | | C4[(key[6] >> 24) & 0xFF] ^ C5[(key[5] >> 16) & 0xFF] ^ |
1253 | | C6[(key[4] >> 8) & 0xFF] ^ C7[(key[3] >> 0) & 0xFF]); |
1254 | | block[3] = (C0[(key[3] >> 56) & 0xFF] ^ C1[(key[2] >> 48) & 0xFF] ^ |
1255 | | C2[(key[1] >> 40) & 0xFF] ^ C3[(key[0] >> 32) & 0xFF] ^ |
1256 | | C4[(key[7] >> 24) & 0xFF] ^ C5[(key[6] >> 16) & 0xFF] ^ |
1257 | | C6[(key[5] >> 8) & 0xFF] ^ C7[(key[4] >> 0) & 0xFF]); |
1258 | | block[4] = (C0[(key[4] >> 56) & 0xFF] ^ C1[(key[3] >> 48) & 0xFF] ^ |
1259 | | C2[(key[2] >> 40) & 0xFF] ^ C3[(key[1] >> 32) & 0xFF] ^ |
1260 | | C4[(key[0] >> 24) & 0xFF] ^ C5[(key[7] >> 16) & 0xFF] ^ |
1261 | | C6[(key[6] >> 8) & 0xFF] ^ C7[(key[5] >> 0) & 0xFF]); |
1262 | | block[5] = (C0[(key[5] >> 56) & 0xFF] ^ C1[(key[4] >> 48) & 0xFF] ^ |
1263 | | C2[(key[3] >> 40) & 0xFF] ^ C3[(key[2] >> 32) & 0xFF] ^ |
1264 | | C4[(key[1] >> 24) & 0xFF] ^ C5[(key[0] >> 16) & 0xFF] ^ |
1265 | | C6[(key[7] >> 8) & 0xFF] ^ C7[(key[6] >> 0) & 0xFF]); |
1266 | | block[6] = (C0[(key[6] >> 56) & 0xFF] ^ C1[(key[5] >> 48) & 0xFF] ^ |
1267 | | C2[(key[4] >> 40) & 0xFF] ^ C3[(key[3] >> 32) & 0xFF] ^ |
1268 | | C4[(key[2] >> 24) & 0xFF] ^ C5[(key[1] >> 16) & 0xFF] ^ |
1269 | | C6[(key[0] >> 8) & 0xFF] ^ C7[(key[7] >> 0) & 0xFF]); |
1270 | | block[7] = (C0[(key[7] >> 56) & 0xFF] ^ C1[(key[6] >> 48) & 0xFF] ^ |
1271 | | C2[(key[5] >> 40) & 0xFF] ^ C3[(key[4] >> 32) & 0xFF] ^ |
1272 | | C4[(key[3] >> 24) & 0xFF] ^ C5[(key[2] >> 16) & 0xFF] ^ |
1273 | | C6[(key[1] >> 8) & 0xFF] ^ C7[(key[0] >> 0) & 0xFF]); |
1274 | | block_copy (key, block, i); |
1275 | | |
1276 | | /* Apply r-th round transformation. */ |
1277 | | |
1278 | | block[0] = (C0[(state[0] >> 56) & 0xFF] ^ C1[(state[7] >> 48) & 0xFF] ^ |
1279 | | C2[(state[6] >> 40) & 0xFF] ^ C3[(state[5] >> 32) & 0xFF] ^ |
1280 | | C4[(state[4] >> 24) & 0xFF] ^ C5[(state[3] >> 16) & 0xFF] ^ |
1281 | | C6[(state[2] >> 8) & 0xFF] ^ C7[(state[1] >> 0) & 0xFF] ^ key[0]); |
1282 | | block[1] = (C0[(state[1] >> 56) & 0xFF] ^ C1[(state[0] >> 48) & 0xFF] ^ |
1283 | | C2[(state[7] >> 40) & 0xFF] ^ C3[(state[6] >> 32) & 0xFF] ^ |
1284 | | C4[(state[5] >> 24) & 0xFF] ^ C5[(state[4] >> 16) & 0xFF] ^ |
1285 | | C6[(state[3] >> 8) & 0xFF] ^ C7[(state[2] >> 0) & 0xFF] ^ key[1]); |
1286 | | block[2] = (C0[(state[2] >> 56) & 0xFF] ^ C1[(state[1] >> 48) & 0xFF] ^ |
1287 | | C2[(state[0] >> 40) & 0xFF] ^ C3[(state[7] >> 32) & 0xFF] ^ |
1288 | | C4[(state[6] >> 24) & 0xFF] ^ C5[(state[5] >> 16) & 0xFF] ^ |
1289 | | C6[(state[4] >> 8) & 0xFF] ^ C7[(state[3] >> 0) & 0xFF] ^ key[2]); |
1290 | | block[3] = (C0[(state[3] >> 56) & 0xFF] ^ C1[(state[2] >> 48) & 0xFF] ^ |
1291 | | C2[(state[1] >> 40) & 0xFF] ^ C3[(state[0] >> 32) & 0xFF] ^ |
1292 | | C4[(state[7] >> 24) & 0xFF] ^ C5[(state[6] >> 16) & 0xFF] ^ |
1293 | | C6[(state[5] >> 8) & 0xFF] ^ C7[(state[4] >> 0) & 0xFF] ^ key[3]); |
1294 | | block[4] = (C0[(state[4] >> 56) & 0xFF] ^ C1[(state[3] >> 48) & 0xFF] ^ |
1295 | | C2[(state[2] >> 40) & 0xFF] ^ C3[(state[1] >> 32) & 0xFF] ^ |
1296 | | C4[(state[0] >> 24) & 0xFF] ^ C5[(state[7] >> 16) & 0xFF] ^ |
1297 | | C6[(state[6] >> 8) & 0xFF] ^ C7[(state[5] >> 0) & 0xFF] ^ key[4]); |
1298 | | block[5] = (C0[(state[5] >> 56) & 0xFF] ^ C1[(state[4] >> 48) & 0xFF] ^ |
1299 | | C2[(state[3] >> 40) & 0xFF] ^ C3[(state[2] >> 32) & 0xFF] ^ |
1300 | | C4[(state[1] >> 24) & 0xFF] ^ C5[(state[0] >> 16) & 0xFF] ^ |
1301 | | C6[(state[7] >> 8) & 0xFF] ^ C7[(state[6] >> 0) & 0xFF] ^ key[5]); |
1302 | | block[6] = (C0[(state[6] >> 56) & 0xFF] ^ C1[(state[5] >> 48) & 0xFF] ^ |
1303 | | C2[(state[4] >> 40) & 0xFF] ^ C3[(state[3] >> 32) & 0xFF] ^ |
1304 | | C4[(state[2] >> 24) & 0xFF] ^ C5[(state[1] >> 16) & 0xFF] ^ |
1305 | | C6[(state[0] >> 8) & 0xFF] ^ C7[(state[7] >> 0) & 0xFF] ^ key[6]); |
1306 | | block[7] = (C0[(state[7] >> 56) & 0xFF] ^ C1[(state[6] >> 48) & 0xFF] ^ |
1307 | | C2[(state[5] >> 40) & 0xFF] ^ C3[(state[4] >> 32) & 0xFF] ^ |
1308 | | C4[(state[3] >> 24) & 0xFF] ^ C5[(state[2] >> 16) & 0xFF] ^ |
1309 | | C6[(state[1] >> 8) & 0xFF] ^ C7[(state[0] >> 0) & 0xFF] ^ key[7]); |
1310 | | block_copy (state, block, i); |
1311 | | } |
1312 | | |
1313 | | /* Compression. */ |
1314 | | |
1315 | | block_xor (context->hash_state, data_block, i); |
1316 | | block_xor (context->hash_state, state, i); |
1317 | | |
1318 | | return /*burn_stack*/ 4 * sizeof(whirlpool_block_t) + 2 * sizeof(int) + |
1319 | | 4 * sizeof(void*); |
1320 | | } |
1321 | | |
1322 | | static unsigned int |
1323 | | whirlpool_transform ( void *c, const unsigned char *data, size_t nblks ) |
1324 | | { |
1325 | | unsigned int burn; |
1326 | | |
1327 | | do |
1328 | | { |
1329 | | burn = whirlpool_transform_blk (c, data); |
1330 | | data += BLOCK_SIZE; |
1331 | | } |
1332 | | while (--nblks); |
1333 | | |
1334 | | return burn; |
1335 | | } |
1336 | | |
1337 | | #endif /* !USE_AMD64_ASM */ |
1338 | | |
1339 | | |
1340 | | /* Bug compatibility Whirlpool version. */ |
1341 | | static void |
1342 | | whirlpool_add_bugemu (whirlpool_context_t *context, |
1343 | | const void *buffer_arg, size_t buffer_n) |
1344 | 0 | { |
1345 | 0 | const unsigned char *buffer = buffer_arg; |
1346 | 0 | u64 buffer_size; |
1347 | 0 | unsigned int carry; |
1348 | 0 | unsigned int i; |
1349 | |
|
1350 | 0 | buffer_size = buffer_n; |
1351 | |
|
1352 | 0 | if (context->bugemu.count == BLOCK_SIZE) |
1353 | 0 | { |
1354 | | /* Flush the buffer. */ |
1355 | 0 | whirlpool_transform (context, context->bctx.buf, 1); |
1356 | 0 | context->bugemu.count = 0; |
1357 | 0 | } |
1358 | 0 | if (! buffer) |
1359 | 0 | return; /* Nothing to add. */ |
1360 | | |
1361 | 0 | if (context->bugemu.count) |
1362 | 0 | { |
1363 | 0 | while (buffer_n && (context->bugemu.count < BLOCK_SIZE)) |
1364 | 0 | { |
1365 | 0 | context->bctx.buf[context->bugemu.count++] = *buffer++; |
1366 | 0 | buffer_n--; |
1367 | 0 | } |
1368 | 0 | whirlpool_add_bugemu (context, NULL, 0); |
1369 | 0 | if (!buffer_n) |
1370 | 0 | return; /* Done. This is the bug we emulate. */ |
1371 | 0 | } |
1372 | | |
1373 | 0 | while (buffer_n >= BLOCK_SIZE) |
1374 | 0 | { |
1375 | 0 | whirlpool_transform (context, buffer, 1); |
1376 | 0 | context->bugemu.count = 0; |
1377 | 0 | buffer_n -= BLOCK_SIZE; |
1378 | 0 | buffer += BLOCK_SIZE; |
1379 | 0 | } |
1380 | 0 | while (buffer_n && (context->bugemu.count < BLOCK_SIZE)) |
1381 | 0 | { |
1382 | 0 | context->bctx.buf[context->bugemu.count++] = *buffer++; |
1383 | 0 | buffer_n--; |
1384 | 0 | } |
1385 | | |
1386 | | /* Update bit counter. */ |
1387 | 0 | carry = 0; |
1388 | 0 | buffer_size <<= 3; |
1389 | 0 | for (i = 1; i <= 32; i++) |
1390 | 0 | { |
1391 | 0 | if (! (buffer_size || carry)) |
1392 | 0 | break; |
1393 | | |
1394 | 0 | carry += context->bugemu.length[32 - i] + (buffer_size & 0xFF); |
1395 | 0 | context->bugemu.length[32 - i] = carry; |
1396 | 0 | buffer_size >>= 8; |
1397 | 0 | carry >>= 8; |
1398 | 0 | } |
1399 | 0 | gcry_assert (! (buffer_size || carry)); |
1400 | 0 | } |
1401 | | |
1402 | | |
1403 | | /* Bug compatibility Whirlpool version. */ |
1404 | | static void |
1405 | | whirlpool_final_bugemu (void *ctx) |
1406 | 0 | { |
1407 | 0 | whirlpool_context_t *context = ctx; |
1408 | 0 | unsigned int i; |
1409 | | |
1410 | | /* Flush. */ |
1411 | 0 | whirlpool_add_bugemu (context, NULL, 0); |
1412 | | |
1413 | | /* Pad. */ |
1414 | 0 | context->bctx.buf[context->bugemu.count++] = 0x80; |
1415 | |
|
1416 | 0 | if (context->bugemu.count > 32) |
1417 | 0 | { |
1418 | | /* An extra block is necessary. */ |
1419 | 0 | while (context->bugemu.count < 64) |
1420 | 0 | context->bctx.buf[context->bugemu.count++] = 0; |
1421 | 0 | whirlpool_add_bugemu (context, NULL, 0); |
1422 | 0 | } |
1423 | 0 | while (context->bugemu.count < 32) |
1424 | 0 | context->bctx.buf[context->bugemu.count++] = 0; |
1425 | | |
1426 | | /* Add length of message. */ |
1427 | 0 | memcpy (context->bctx.buf + context->bugemu.count, |
1428 | 0 | context->bugemu.length, 32); |
1429 | 0 | context->bugemu.count += 32; |
1430 | 0 | whirlpool_add_bugemu (context, NULL, 0); |
1431 | |
|
1432 | 0 | block_to_buffer (context->bctx.buf, context->hash_state, i); |
1433 | 0 | } |
1434 | | |
1435 | | |
1436 | | static void |
1437 | | whirlpool_write (void *ctx, const void *buffer, size_t buffer_n) |
1438 | 0 | { |
1439 | 0 | whirlpool_context_t *context = ctx; |
1440 | |
|
1441 | 0 | if (context->use_bugemu) |
1442 | 0 | { |
1443 | 0 | whirlpool_add_bugemu (context, buffer, buffer_n); |
1444 | 0 | } |
1445 | 0 | else |
1446 | 0 | { |
1447 | 0 | u64 old_nblocks = context->bctx.nblocks; |
1448 | |
|
1449 | 0 | _gcry_md_block_write (context, buffer, buffer_n); |
1450 | |
|
1451 | 0 | gcry_assert (old_nblocks <= context->bctx.nblocks); |
1452 | 0 | } |
1453 | 0 | } |
1454 | | |
1455 | | static void |
1456 | | whirlpool_final (void *ctx) |
1457 | 0 | { |
1458 | 0 | whirlpool_context_t *context = ctx; |
1459 | 0 | unsigned int i; |
1460 | 0 | u64 t, th, lsb, msb; |
1461 | 0 | unsigned char *length; |
1462 | |
|
1463 | 0 | if (context->use_bugemu) |
1464 | 0 | { |
1465 | 0 | whirlpool_final_bugemu (ctx); |
1466 | 0 | return; |
1467 | 0 | } |
1468 | | |
1469 | 0 | t = context->bctx.nblocks; |
1470 | | /* if (sizeof t == sizeof context->bctx.nblocks) */ |
1471 | 0 | th = context->bctx.nblocks_high; |
1472 | | /* else */ |
1473 | | /* th = context->bctx.nblocks >> 64; In case we ever use u128 */ |
1474 | | |
1475 | | /* multiply by 64 to make a byte count */ |
1476 | 0 | lsb = t << 6; |
1477 | 0 | msb = (th << 6) | (t >> 58); |
1478 | | /* add the count */ |
1479 | 0 | t = lsb; |
1480 | 0 | if ((lsb += context->bctx.count) < t) |
1481 | 0 | msb++; |
1482 | | /* multiply by 8 to make a bit count */ |
1483 | 0 | t = lsb; |
1484 | 0 | lsb <<= 3; |
1485 | 0 | msb <<= 3; |
1486 | 0 | msb |= t >> 61; |
1487 | | |
1488 | | /* Flush. */ |
1489 | 0 | whirlpool_write (context, NULL, 0); |
1490 | | |
1491 | | /* Pad. */ |
1492 | 0 | context->bctx.buf[context->bctx.count++] = 0x80; |
1493 | |
|
1494 | 0 | if (context->bctx.count > 32) |
1495 | 0 | { |
1496 | | /* An extra block is necessary. */ |
1497 | 0 | if (context->bctx.count < 64) |
1498 | 0 | memset (&context->bctx.buf[context->bctx.count], 0, |
1499 | 0 | 64 - context->bctx.count); |
1500 | 0 | context->bctx.count = 64; |
1501 | 0 | whirlpool_write (context, NULL, 0); |
1502 | 0 | } |
1503 | 0 | if (context->bctx.count < 32) |
1504 | 0 | memset (&context->bctx.buf[context->bctx.count], 0, |
1505 | 0 | 32 - context->bctx.count); |
1506 | 0 | context->bctx.count = 32; |
1507 | | |
1508 | | /* Add length of message. */ |
1509 | 0 | length = context->bctx.buf + context->bctx.count; |
1510 | 0 | buf_put_be64(&length[0 * 8], 0); |
1511 | 0 | buf_put_be64(&length[1 * 8], 0); |
1512 | 0 | buf_put_be64(&length[2 * 8], msb); |
1513 | 0 | buf_put_be64(&length[3 * 8], lsb); |
1514 | 0 | context->bctx.count += 32; |
1515 | 0 | whirlpool_write (context, NULL, 0); |
1516 | |
|
1517 | 0 | block_to_buffer (context->bctx.buf, context->hash_state, i); |
1518 | 0 | } |
1519 | | |
1520 | | static byte * |
1521 | | whirlpool_read (void *ctx) |
1522 | 0 | { |
1523 | 0 | whirlpool_context_t *context = ctx; |
1524 | |
|
1525 | 0 | return context->bctx.buf; |
1526 | 0 | } |
1527 | | |
1528 | | const gcry_md_spec_t _gcry_digest_spec_whirlpool = |
1529 | | { |
1530 | | GCRY_MD_WHIRLPOOL, {0, 0}, |
1531 | | "WHIRLPOOL", NULL, 0, NULL, 64, |
1532 | | whirlpool_init, whirlpool_write, whirlpool_final, whirlpool_read, NULL, |
1533 | | NULL, |
1534 | | sizeof (whirlpool_context_t) |
1535 | | }; |