1 /* $MirOS: src/lib/libc/hash/tiger.c,v 1.6 2007/08/19 12:21:50 tg Exp $ */
2
3 /*-
4 * Copyright (c) 2006
5 * Thorsten Glaser <tg@mirbsd.de>
6 *
7 * Provided that these terms and disclaimer and all copyright notices
8 * are retained or reproduced in an accompanying document, permission
9 * is granted to deal in this work without restriction, including un-
10 * limited rights to use, publicly perform, distribute, sell, modify,
11 * merge, give away, or sublicence.
12 *
13 * This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
14 * the utmost extent permitted by applicable law, neither express nor
15 * implied; without malicious intent or gross negligence. In no event
16 * may a licensor, author or contributor be held liable for indirect,
17 * direct, other damage, loss, or other issues arising in any way out
18 * of dealing in the work, even if advised of the possibility of such
19 * damage or existence of a defect, except proven that it results out
20 * of said person's immediate fault when using the work as intended.
21 */
22
23 #include <sys/param.h>
24 #ifndef _LIBMIRMAKE
25 #include <sys/endian.h>
26 #endif
27 #include <stdlib.h>
28 #include <string.h>
29 #include <tiger.h>
30
31 __RCSID("$MirOS: src/lib/libc/hash/tiger.c,v 1.6 2007/08/19 12:21:50 tg Exp $");
32
33 void
TIGERInit(TIGER_CTX * ctx)34 TIGERInit(TIGER_CTX *ctx)
35 {
36 if (ctx != NULL) {
37 ctx->digest[0] = 0x0123456789ABCDEFULL;
38 ctx->digest[1] = 0xFEDCBA9876543210ULL;
39 ctx->digest[2] = 0xF096A5B4C3B2E187ULL;
40 ctx->count = 0;
41 }
42 }
43
44 void
TIGERUpdate(TIGER_CTX * ctx,const uint8_t * data,size_t len)45 TIGERUpdate(TIGER_CTX *ctx, const uint8_t *data, size_t len)
46 {
47 size_t i, j;
48
49 j = ctx->count & 63;
50 ctx->count += len;
51 len -= (i = MIN(len, 64 - j));
52 memcpy(ctx->buffer + j, data, i);
53 data += i;
54 if ((i + j) == 64)
55 TIGERTransform(ctx->digest, ctx->buffer);
56 while (len >= 64) {
57 TIGERTransform(ctx->digest, data);
58 data += 64;
59 len -= 64;
60 }
61 if (len)
62 memcpy(ctx->buffer, data, len);
63 }
64
65 void
TIGERPad(TIGER_CTX * ctx)66 TIGERPad(TIGER_CTX *ctx)
67 {
68 size_t i = ctx->count & 63;
69 uint64_t tmp;
70
71 ctx->buffer[i++] = 0x01;
72 while (i & 7)
73 ctx->buffer[i++] = 0;
74 if (i > 56) {
75 while (i < 64)
76 ctx->buffer[i++] = 0;
77 TIGERTransform(ctx->digest, ctx->buffer);
78 i = 0;
79 }
80 while (i < 56)
81 ctx->buffer[i++] = 0;
82 tmp = htole64(ctx->count << 3);
83 memcpy(&(ctx->buffer[56]), &tmp, 8);
84 TIGERTransform(ctx->digest, ctx->buffer);
85 }
86
87 void
TIGERFinal(uint8_t * out,TIGER_CTX * ctx)88 TIGERFinal(uint8_t *out, TIGER_CTX *ctx)
89 {
90 uint64_t tmp;
91
92 TIGERPad(ctx);
93 if (out != NULL) {
94 tmp = htole64(ctx->digest[0]);
95 memcpy(out, &tmp, 8);
96 out += 8;
97 tmp = htole64(ctx->digest[1]);
98 memcpy(out, &tmp, 8);
99 out += 8;
100 tmp = htole64(ctx->digest[2]);
101 memcpy(out, &tmp, 8);
102 }
103 bzero(ctx, sizeof (TIGER_CTX));
104 }
105
106 static const uint64_t tiger_sboxen[4 * 256] = {
107 0x02AAB17CF7E90C5ELL, 0xAC424B03E243A8ECLL,
108 0x72CD5BE30DD5FCD3LL, 0x6D019B93F6F97F3ALL,
109 0xCD9978FFD21F9193LL, 0x7573A1C9708029E2LL,
110 0xB164326B922A83C3LL, 0x46883EEE04915870LL,
111 0xEAACE3057103ECE6LL, 0xC54169B808A3535CLL,
112 0x4CE754918DDEC47CLL, 0x0AA2F4DFDC0DF40CLL,
113 0x10B76F18A74DBEFALL, 0xC6CCB6235AD1AB6ALL,
114 0x13726121572FE2FFLL, 0x1A488C6F199D921ELL,
115 0x4BC9F9F4DA0007CALL, 0x26F5E6F6E85241C7LL,
116 0x859079DBEA5947B6LL, 0x4F1885C5C99E8C92LL,
117 0xD78E761EA96F864BLL, 0x8E36428C52B5C17DLL,
118 0x69CF6827373063C1LL, 0xB607C93D9BB4C56ELL,
119 0x7D820E760E76B5EALL, 0x645C9CC6F07FDC42LL,
120 0xBF38A078243342E0LL, 0x5F6B343C9D2E7D04LL,
121 0xF2C28AEB600B0EC6LL, 0x6C0ED85F7254BCACLL,
122 0x71592281A4DB4FE5LL, 0x1967FA69CE0FED9FLL,
123 0xFD5293F8B96545DBLL, 0xC879E9D7F2A7600BLL,
124 0x860248920193194ELL, 0xA4F9533B2D9CC0B3LL,
125 0x9053836C15957613LL, 0xDB6DCF8AFC357BF1LL,
126 0x18BEEA7A7A370F57LL, 0x037117CA50B99066LL,
127 0x6AB30A9774424A35LL, 0xF4E92F02E325249BLL,
128 0x7739DB07061CCAE1LL, 0xD8F3B49CECA42A05LL,
129 0xBD56BE3F51382F73LL, 0x45FAED5843B0BB28LL,
130 0x1C813D5C11BF1F83LL, 0x8AF0E4B6D75FA169LL,
131 0x33EE18A487AD9999LL, 0x3C26E8EAB1C94410LL,
132 0xB510102BC0A822F9LL, 0x141EEF310CE6123BLL,
133 0xFC65B90059DDB154LL, 0xE0158640C5E0E607LL,
134 0x884E079826C3A3CFLL, 0x930D0D9523C535FDLL,
135 0x35638D754E9A2B00LL, 0x4085FCCF40469DD5LL,
136 0xC4B17AD28BE23A4CLL, 0xCAB2F0FC6A3E6A2ELL,
137 0x2860971A6B943FCDLL, 0x3DDE6EE212E30446LL,
138 0x6222F32AE01765AELL, 0x5D550BB5478308FELL,
139 0xA9EFA98DA0EDA22ALL, 0xC351A71686C40DA7LL,
140 0x1105586D9C867C84LL, 0xDCFFEE85FDA22853LL,
141 0xCCFBD0262C5EEF76LL, 0xBAF294CB8990D201LL,
142 0xE69464F52AFAD975LL, 0x94B013AFDF133E14LL,
143 0x06A7D1A32823C958LL, 0x6F95FE5130F61119LL,
144 0xD92AB34E462C06C0LL, 0xED7BDE33887C71D2LL,
145 0x79746D6E6518393ELL, 0x5BA419385D713329LL,
146 0x7C1BA6B948A97564LL, 0x31987C197BFDAC67LL,
147 0xDE6C23C44B053D02LL, 0x581C49FED002D64DLL,
148 0xDD474D6338261571LL, 0xAA4546C3E473D062LL,
149 0x928FCE349455F860LL, 0x48161BBACAAB94D9LL,
150 0x63912430770E6F68LL, 0x6EC8A5E602C6641CLL,
151 0x87282515337DDD2BLL, 0x2CDA6B42034B701BLL,
152 0xB03D37C181CB096DLL, 0xE108438266C71C6FLL,
153 0x2B3180C7EB51B255LL, 0xDF92B82F96C08BBCLL,
154 0x5C68C8C0A632F3BALL, 0x5504CC861C3D0556LL,
155 0xABBFA4E55FB26B8FLL, 0x41848B0AB3BACEB4LL,
156 0xB334A273AA445D32LL, 0xBCA696F0A85AD881LL,
157 0x24F6EC65B528D56CLL, 0x0CE1512E90F4524ALL,
158 0x4E9DD79D5506D35ALL, 0x258905FAC6CE9779LL,
159 0x2019295B3E109B33LL, 0xF8A9478B73A054CCLL,
160 0x2924F2F934417EB0LL, 0x3993357D536D1BC4LL,
161 0x38A81AC21DB6FF8BLL, 0x47C4FBF17D6016BFLL,
162 0x1E0FAADD7667E3F5LL, 0x7ABCFF62938BEB96LL,
163 0xA78DAD948FC179C9LL, 0x8F1F98B72911E50DLL,
164 0x61E48EAE27121A91LL, 0x4D62F7AD31859808LL,
165 0xECEBA345EF5CEAEBLL, 0xF5CEB25EBC9684CELL,
166 0xF633E20CB7F76221LL, 0xA32CDF06AB8293E4LL,
167 0x985A202CA5EE2CA4LL, 0xCF0B8447CC8A8FB1LL,
168 0x9F765244979859A3LL, 0xA8D516B1A1240017LL,
169 0x0BD7BA3EBB5DC726LL, 0xE54BCA55B86ADB39LL,
170 0x1D7A3AFD6C478063LL, 0x519EC608E7669EDDLL,
171 0x0E5715A2D149AA23LL, 0x177D4571848FF194LL,
172 0xEEB55F3241014C22LL, 0x0F5E5CA13A6E2EC2LL,
173 0x8029927B75F5C361LL, 0xAD139FABC3D6E436LL,
174 0x0D5DF1A94CCF402FLL, 0x3E8BD948BEA5DFC8LL,
175 0xA5A0D357BD3FF77ELL, 0xA2D12E251F74F645LL,
176 0x66FD9E525E81A082LL, 0x2E0C90CE7F687A49LL,
177 0xC2E8BCBEBA973BC5LL, 0x000001BCE509745FLL,
178 0x423777BBE6DAB3D6LL, 0xD1661C7EAEF06EB5LL,
179 0xA1781F354DAACFD8LL, 0x2D11284A2B16AFFCLL,
180 0xF1FC4F67FA891D1FLL, 0x73ECC25DCB920ADALL,
181 0xAE610C22C2A12651LL, 0x96E0A810D356B78ALL,
182 0x5A9A381F2FE7870FLL, 0xD5AD62EDE94E5530LL,
183 0xD225E5E8368D1427LL, 0x65977B70C7AF4631LL,
184 0x99F889B2DE39D74FLL, 0x233F30BF54E1D143LL,
185 0x9A9675D3D9A63C97LL, 0x5470554FF334F9A8LL,
186 0x166ACB744A4F5688LL, 0x70C74CAAB2E4AEADLL,
187 0xF0D091646F294D12LL, 0x57B82A89684031D1LL,
188 0xEFD95A5A61BE0B6BLL, 0x2FBD12E969F2F29ALL,
189 0x9BD37013FEFF9FE8LL, 0x3F9B0404D6085A06LL,
190 0x4940C1F3166CFE15LL, 0x09542C4DCDF3DEFBLL,
191 0xB4C5218385CD5CE3LL, 0xC935B7DC4462A641LL,
192 0x3417F8A68ED3B63FLL, 0xB80959295B215B40LL,
193 0xF99CDAEF3B8C8572LL, 0x018C0614F8FCB95DLL,
194 0x1B14ACCD1A3ACDF3LL, 0x84D471F200BB732DLL,
195 0xC1A3110E95E8DA16LL, 0x430A7220BF1A82B8LL,
196 0xB77E090D39DF210ELL, 0x5EF4BD9F3CD05E9DLL,
197 0x9D4FF6DA7E57A444LL, 0xDA1D60E183D4A5F8LL,
198 0xB287C38417998E47LL, 0xFE3EDC121BB31886LL,
199 0xC7FE3CCC980CCBEFLL, 0xE46FB590189BFD03LL,
200 0x3732FD469A4C57DCLL, 0x7EF700A07CF1AD65LL,
201 0x59C64468A31D8859LL, 0x762FB0B4D45B61F6LL,
202 0x155BAED099047718LL, 0x68755E4C3D50BAA6LL,
203 0xE9214E7F22D8B4DFLL, 0x2ADDBF532EAC95F4LL,
204 0x32AE3909B4BD0109LL, 0x834DF537B08E3450LL,
205 0xFA209DA84220728DLL, 0x9E691D9B9EFE23F7LL,
206 0x0446D288C4AE8D7FLL, 0x7B4CC524E169785BLL,
207 0x21D87F0135CA1385LL, 0xCEBB400F137B8AA5LL,
208 0x272E2B66580796BELL, 0x3612264125C2B0DELL,
209 0x057702BDAD1EFBB2LL, 0xD4BABB8EACF84BE9LL,
210 0x91583139641BC67BLL, 0x8BDC2DE08036E024LL,
211 0x603C8156F49F68EDLL, 0xF7D236F7DBEF5111LL,
212 0x9727C4598AD21E80LL, 0xA08A0896670A5FD7LL,
213 0xCB4A8F4309EBA9CBLL, 0x81AF564B0F7036A1LL,
214 0xC0B99AA778199ABDLL, 0x959F1EC83FC8E952LL,
215 0x8C505077794A81B9LL, 0x3ACAAF8F056338F0LL,
216 0x07B43F50627A6778LL, 0x4A44AB49F5ECCC77LL,
217 0x3BC3D6E4B679EE98LL, 0x9CC0D4D1CF14108CLL,
218 0x4406C00B206BC8A0LL, 0x82A18854C8D72D89LL,
219 0x67E366B35C3C432CLL, 0xB923DD61102B37F2LL,
220 0x56AB2779D884271DLL, 0xBE83E1B0FF1525AFLL,
221 0xFB7C65D4217E49A9LL, 0x6BDBE0E76D48E7D4LL,
222 0x08DF828745D9179ELL, 0x22EA6A9ADD53BD34LL,
223 0xE36E141C5622200ALL, 0x7F805D1B8CB750EELL,
224 0xAFE5C7A59F58E837LL, 0xE27F996A4FB1C23CLL,
225 0xD3867DFB0775F0D0LL, 0xD0E673DE6E88891ALL,
226 0x123AEB9EAFB86C25LL, 0x30F1D5D5C145B895LL,
227 0xBB434A2DEE7269E7LL, 0x78CB67ECF931FA38LL,
228 0xF33B0372323BBF9CLL, 0x52D66336FB279C74LL,
229 0x505F33AC0AFB4EAALL, 0xE8A5CD99A2CCE187LL,
230 0x534974801E2D30BBLL, 0x8D2D5711D5876D90LL,
231 0x1F1A412891BC038ELL, 0xD6E2E71D82E56648LL,
232 0x74036C3A497732B7LL, 0x89B67ED96361F5ABLL,
233 0xFFED95D8F1EA02A2LL, 0xE72B3BD61464D43DLL,
234 0xA6300F170BDC4820LL, 0xEBC18760ED78A77ALL,
235 0xE6A6BE5A05A12138LL, 0xB5A122A5B4F87C98LL,
236 0x563C6089140B6990LL, 0x4C46CB2E391F5DD5LL,
237 0xD932ADDBC9B79434LL, 0x08EA70E42015AFF5LL,
238 0xD765A6673E478CF1LL, 0xC4FB757EAB278D99LL,
239 0xDF11C6862D6E0692LL, 0xDDEB84F10D7F3B16LL,
240 0x6F2EF604A665EA04LL, 0x4A8E0F0FF0E0DFB3LL,
241 0xA5EDEEF83DBCBA51LL, 0xFC4F0A2A0EA4371ELL,
242 0xE83E1DA85CB38429LL, 0xDC8FF882BA1B1CE2LL,
243 0xCD45505E8353E80DLL, 0x18D19A00D4DB0717LL,
244 0x34A0CFEDA5F38101LL, 0x0BE77E518887CAF2LL,
245 0x1E341438B3C45136LL, 0xE05797F49089CCF9LL,
246 0xFFD23F9DF2591D14LL, 0x543DDA228595C5CDLL,
247 0x661F81FD99052A33LL, 0x8736E641DB0F7B76LL,
248 0x15227725418E5307LL, 0xE25F7F46162EB2FALL,
249 0x48A8B2126C13D9FELL, 0xAFDC541792E76EEALL,
250 0x03D912BFC6D1898FLL, 0x31B1AAFA1B83F51BLL,
251 0xF1AC2796E42AB7D9LL, 0x40A3A7D7FCD2EBACLL,
252 0x1056136D0AFBBCC5LL, 0x7889E1DD9A6D0C85LL,
253 0xD33525782A7974AALL, 0xA7E25D09078AC09BLL,
254 0xBD4138B3EAC6EDD0LL, 0x920ABFBE71EB9E70LL,
255 0xA2A5D0F54FC2625CLL, 0xC054E36B0B1290A3LL,
256 0xF6DD59FF62FE932BLL, 0x3537354511A8AC7DLL,
257 0xCA845E9172FADCD4LL, 0x84F82B60329D20DCLL,
258 0x79C62CE1CD672F18LL, 0x8B09A2ADD124642CLL,
259 0xD0C1E96A19D9E726LL, 0x5A786A9B4BA9500CLL,
260 0x0E020336634C43F3LL, 0xC17B474AEB66D822LL,
261 0x6A731AE3EC9BAAC2LL, 0x8226667AE0840258LL,
262 0x67D4567691CAECA5LL, 0x1D94155C4875ADB5LL,
263 0x6D00FD985B813FDFLL, 0x51286EFCB774CD06LL,
264 0x5E8834471FA744AFLL, 0xF72CA0AEE761AE2ELL,
265 0xBE40E4CDAEE8E09ALL, 0xE9970BBB5118F665LL,
266 0x726E4BEB33DF1964LL, 0x703B000729199762LL,
267 0x4631D816F5EF30A7LL, 0xB880B5B51504A6BELL,
268 0x641793C37ED84B6CLL, 0x7B21ED77F6E97D96LL,
269 0x776306312EF96B73LL, 0xAE528948E86FF3F4LL,
270 0x53DBD7F286A3F8F8LL, 0x16CADCE74CFC1063LL,
271 0x005C19BDFA52C6DDLL, 0x68868F5D64D46AD3LL,
272 0x3A9D512CCF1E186ALL, 0x367E62C2385660AELL,
273 0xE359E7EA77DCB1D7LL, 0x526C0773749ABE6ELL,
274 0x735AE5F9D09F734BLL, 0x493FC7CC8A558BA8LL,
275 0xB0B9C1533041AB45LL, 0x321958BA470A59BDLL,
276 0x852DB00B5F46C393LL, 0x91209B2BD336B0E5LL,
277 0x6E604F7D659EF19FLL, 0xB99A8AE2782CCB24LL,
278 0xCCF52AB6C814C4C7LL, 0x4727D9AFBE11727BLL,
279 0x7E950D0C0121B34DLL, 0x756F435670AD471FLL,
280 0xF5ADD442615A6849LL, 0x4E87E09980B9957ALL,
281 0x2ACFA1DF50AEE355LL, 0xD898263AFD2FD556LL,
282 0xC8F4924DD80C8FD6LL, 0xCF99CA3D754A173ALL,
283 0xFE477BACAF91BF3CLL, 0xED5371F6D690C12DLL,
284 0x831A5C285E687094LL, 0xC5D3C90A3708A0A4LL,
285 0x0F7F903717D06580LL, 0x19F9BB13B8FDF27FLL,
286 0xB1BD6F1B4D502843LL, 0x1C761BA38FFF4012LL,
287 0x0D1530C4E2E21F3BLL, 0x8943CE69A7372C8ALL,
288 0xE5184E11FEB5CE66LL, 0x618BDB80BD736621LL,
289 0x7D29BAD68B574D0BLL, 0x81BB613E25E6FE5BLL,
290 0x071C9C10BC07913FLL, 0xC7BEEB7909AC2D97LL,
291 0xC3E58D353BC5D757LL, 0xEB017892F38F61E8LL,
292 0xD4EFFB9C9B1CC21ALL, 0x99727D26F494F7ABLL,
293 0xA3E063A2956B3E03LL, 0x9D4A8B9A4AA09C30LL,
294 0x3F6AB7D500090FB4LL, 0x9CC0F2A057268AC0LL,
295 0x3DEE9D2DEDBF42D1LL, 0x330F49C87960A972LL,
296 0xC6B2720287421B41LL, 0x0AC59EC07C00369CLL,
297 0xEF4EAC49CB353425LL, 0xF450244EEF0129D8LL,
298 0x8ACC46E5CAF4DEB6LL, 0x2FFEAB63989263F7LL,
299 0x8F7CB9FE5D7A4578LL, 0x5BD8F7644E634635LL,
300 0x427A7315BF2DC900LL, 0x17D0C4AA2125261CLL,
301 0x3992486C93518E50LL, 0xB4CBFEE0A2D7D4C3LL,
302 0x7C75D6202C5DDD8DLL, 0xDBC295D8E35B6C61LL,
303 0x60B369D302032B19LL, 0xCE42685FDCE44132LL,
304 0x06F3DDB9DDF65610LL, 0x8EA4D21DB5E148F0LL,
305 0x20B0FCE62FCD496FLL, 0x2C1B912358B0EE31LL,
306 0xB28317B818F5A308LL, 0xA89C1E189CA6D2CFLL,
307 0x0C6B18576AAADBC8LL, 0xB65DEAA91299FAE3LL,
308 0xFB2B794B7F1027E7LL, 0x04E4317F443B5BEBLL,
309 0x4B852D325939D0A6LL, 0xD5AE6BEEFB207FFCLL,
310 0x309682B281C7D374LL, 0xBAE309A194C3B475LL,
311 0x8CC3F97B13B49F05LL, 0x98A9422FF8293967LL,
312 0x244B16B01076FF7CLL, 0xF8BF571C663D67EELL,
313 0x1F0D6758EEE30DA1LL, 0xC9B611D97ADEB9B7LL,
314 0xB7AFD5887B6C57A2LL, 0x6290AE846B984FE1LL,
315 0x94DF4CDEACC1A5FDLL, 0x058A5BD1C5483AFFLL,
316 0x63166CC142BA3C37LL, 0x8DB8526EB2F76F40LL,
317 0xE10880036F0D6D4ELL, 0x9E0523C9971D311DLL,
318 0x45EC2824CC7CD691LL, 0x575B8359E62382C9LL,
319 0xFA9E400DC4889995LL, 0xD1823ECB45721568LL,
320 0xDAFD983B8206082FLL, 0xAA7D29082386A8CBLL,
321 0x269FCD4403B87588LL, 0x1B91F5F728BDD1E0LL,
322 0xE4669F39040201F6LL, 0x7A1D7C218CF04ADELL,
323 0x65623C29D79CE5CELL, 0x2368449096C00BB1LL,
324 0xAB9BF1879DA503BALL, 0xBC23ECB1A458058ELL,
325 0x9A58DF01BB401ECCLL, 0xA070E868A85F143DLL,
326 0x4FF188307DF2239ELL, 0x14D565B41A641183LL,
327 0xEE13337452701602LL, 0x950E3DCF3F285E09LL,
328 0x59930254B9C80953LL, 0x3BF299408930DA6DLL,
329 0xA955943F53691387LL, 0xA15EDECAA9CB8784LL,
330 0x29142127352BE9A0LL, 0x76F0371FFF4E7AFBLL,
331 0x0239F450274F2228LL, 0xBB073AF01D5E868BLL,
332 0xBFC80571C10E96C1LL, 0xD267088568222E23LL,
333 0x9671A3D48E80B5B0LL, 0x55B5D38AE193BB81LL,
334 0x693AE2D0A18B04B8LL, 0x5C48B4ECADD5335FLL,
335 0xFD743B194916A1CALL, 0x2577018134BE98C4LL,
336 0xE77987E83C54A4ADLL, 0x28E11014DA33E1B9LL,
337 0x270CC59E226AA213LL, 0x71495F756D1A5F60LL,
338 0x9BE853FB60AFEF77LL, 0xADC786A7F7443DBFLL,
339 0x0904456173B29A82LL, 0x58BC7A66C232BD5ELL,
340 0xF306558C673AC8B2LL, 0x41F639C6B6C9772ALL,
341 0x216DEFE99FDA35DALL, 0x11640CC71C7BE615LL,
342 0x93C43694565C5527LL, 0xEA038E6246777839LL,
343 0xF9ABF3CE5A3E2469LL, 0x741E768D0FD312D2LL,
344 0x0144B883CED652C6LL, 0xC20B5A5BA33F8552LL,
345 0x1AE69633C3435A9DLL, 0x97A28CA4088CFDECLL,
346 0x8824A43C1E96F420LL, 0x37612FA66EEEA746LL,
347 0x6B4CB165F9CF0E5ALL, 0x43AA1C06A0ABFB4ALL,
348 0x7F4DC26FF162796BLL, 0x6CBACC8E54ED9B0FLL,
349 0xA6B7FFEFD2BB253ELL, 0x2E25BC95B0A29D4FLL,
350 0x86D6A58BDEF1388CLL, 0xDED74AC576B6F054LL,
351 0x8030BDBC2B45805DLL, 0x3C81AF70E94D9289LL,
352 0x3EFF6DDA9E3100DBLL, 0xB38DC39FDFCC8847LL,
353 0x123885528D17B87ELL, 0xF2DA0ED240B1B642LL,
354 0x44CEFADCD54BF9A9LL, 0x1312200E433C7EE6LL,
355 0x9FFCC84F3A78C748LL, 0xF0CD1F72248576BBLL,
356 0xEC6974053638CFE4LL, 0x2BA7B67C0CEC4E4CLL,
357 0xAC2F4DF3E5CE32EDLL, 0xCB33D14326EA4C11LL,
358 0xA4E9044CC77E58BCLL, 0x5F513293D934FCEFLL,
359 0x5DC9645506E55444LL, 0x50DE418F317DE40ALL,
360 0x388CB31A69DDE259LL, 0x2DB4A83455820A86LL,
361 0x9010A91E84711AE9LL, 0x4DF7F0B7B1498371LL,
362 0xD62A2EABC0977179LL, 0x22FAC097AA8D5C0ELL,
363 0xF49FCC2FF1DAF39BLL, 0x487FD5C66FF29281LL,
364 0xE8A30667FCDCA83FLL, 0x2C9B4BE3D2FCCE63LL,
365 0xDA3FF74B93FBBBC2LL, 0x2FA165D2FE70BA66LL,
366 0xA103E279970E93D4LL, 0xBECDEC77B0E45E71LL,
367 0xCFB41E723985E497LL, 0xB70AAA025EF75017LL,
368 0xD42309F03840B8E0LL, 0x8EFC1AD035898579LL,
369 0x96C6920BE2B2ABC5LL, 0x66AF4163375A9172LL,
370 0x2174ABDCCA7127FBLL, 0xB33CCEA64A72FF41LL,
371 0xF04A4933083066A5LL, 0x8D970ACDD7289AF5LL,
372 0x8F96E8E031C8C25ELL, 0xF3FEC02276875D47LL,
373 0xEC7BF310056190DDLL, 0xF5ADB0AEBB0F1491LL,
374 0x9B50F8850FD58892LL, 0x4975488358B74DE8LL,
375 0xA3354FF691531C61LL, 0x0702BBE481D2C6EELL,
376 0x89FB24057DEDED98LL, 0xAC3075138596E902LL,
377 0x1D2D3580172772EDLL, 0xEB738FC28E6BC30DLL,
378 0x5854EF8F63044326LL, 0x9E5C52325ADD3BBELL,
379 0x90AA53CF325C4623LL, 0xC1D24D51349DD067LL,
380 0x2051CFEEA69EA624LL, 0x13220F0A862E7E4FLL,
381 0xCE39399404E04864LL, 0xD9C42CA47086FCB7LL,
382 0x685AD2238A03E7CCLL, 0x066484B2AB2FF1DBLL,
383 0xFE9D5D70EFBF79ECLL, 0x5B13B9DD9C481854LL,
384 0x15F0D475ED1509ADLL, 0x0BEBCD060EC79851LL,
385 0xD58C6791183AB7F8LL, 0xD1187C5052F3EEE4LL,
386 0xC95D1192E54E82FFLL, 0x86EEA14CB9AC6CA2LL,
387 0x3485BEB153677D5DLL, 0xDD191D781F8C492ALL,
388 0xF60866BAA784EBF9LL, 0x518F643BA2D08C74LL,
389 0x8852E956E1087C22LL, 0xA768CB8DC410AE8DLL,
390 0x38047726BFEC8E1ALL, 0xA67738B4CD3B45AALL,
391 0xAD16691CEC0DDE19LL, 0xC6D4319380462E07LL,
392 0xC5A5876D0BA61938LL, 0x16B9FA1FA58FD840LL,
393 0x188AB1173CA74F18LL, 0xABDA2F98C99C021FLL,
394 0x3E0580AB134AE816LL, 0x5F3B05B773645ABBLL,
395 0x2501A2BE5575F2F6LL, 0x1B2F74004E7E8BA9LL,
396 0x1CD7580371E8D953LL, 0x7F6ED89562764E30LL,
397 0xB15926FF596F003DLL, 0x9F65293DA8C5D6B9LL,
398 0x6ECEF04DD690F84CLL, 0x4782275FFF33AF88LL,
399 0xE41433083F820801LL, 0xFD0DFE409A1AF9B5LL,
400 0x4325A3342CDB396BLL, 0x8AE77E62B301B252LL,
401 0xC36F9E9F6655615ALL, 0x85455A2D92D32C09LL,
402 0xF2C7DEA949477485LL, 0x63CFB4C133A39EBALL,
403 0x83B040CC6EBC5462LL, 0x3B9454C8FDB326B0LL,
404 0x56F56A9E87FFD78CLL, 0x2DC2940D99F42BC6LL,
405 0x98F7DF096B096E2DLL, 0x19A6E01E3AD852BFLL,
406 0x42A99CCBDBD4B40BLL, 0xA59998AF45E9C559LL,
407 0x366295E807D93186LL, 0x6B48181BFAA1F773LL,
408 0x1FEC57E2157A0A1DLL, 0x4667446AF6201AD5LL,
409 0xE615EBCACFB0F075LL, 0xB8F31F4F68290778LL,
410 0x22713ED6CE22D11ELL, 0x3057C1A72EC3C93BLL,
411 0xCB46ACC37C3F1F2FLL, 0xDBB893FD02AAF50ELL,
412 0x331FD92E600B9FCFLL, 0xA498F96148EA3AD6LL,
413 0xA8D8426E8B6A83EALL, 0xA089B274B7735CDCLL,
414 0x87F6B3731E524A11LL, 0x118808E5CBC96749LL,
415 0x9906E4C7B19BD394LL, 0xAFED7F7E9B24A20CLL,
416 0x6509EADEEB3644A7LL, 0x6C1EF1D3E8EF0EDELL,
417 0xB9C97D43E9798FB4LL, 0xA2F2D784740C28A3LL,
418 0x7B8496476197566FLL, 0x7A5BE3E6B65F069DLL,
419 0xF96330ED78BE6F10LL, 0xEEE60DE77A076A15LL,
420 0x2B4BEE4AA08B9BD0LL, 0x6A56A63EC7B8894ELL,
421 0x02121359BA34FEF4LL, 0x4CBF99F8283703FCLL,
422 0x398071350CAF30C8LL, 0xD0A77A89F017687ALL,
423 0xF1C1A9EB9E423569LL, 0x8C7976282DEE8199LL,
424 0x5D1737A5DD1F7ABDLL, 0x4F53433C09A9FA80LL,
425 0xFA8B0C53DF7CA1D9LL, 0x3FD9DCBC886CCB77LL,
426 0xC040917CA91B4720LL, 0x7DD00142F9D1DCDFLL,
427 0x8476FC1D4F387B58LL, 0x23F8E7C5F3316503LL,
428 0x032A2244E7E37339LL, 0x5C87A5D750F5A74BLL,
429 0x082B4CC43698992ELL, 0xDF917BECB858F63CLL,
430 0x3270B8FC5BF86DDALL, 0x10AE72BB29B5DD76LL,
431 0x576AC94E7700362BLL, 0x1AD112DAC61EFB8FLL,
432 0x691BC30EC5FAA427LL, 0xFF246311CC327143LL,
433 0x3142368E30E53206LL, 0x71380E31E02CA396LL,
434 0x958D5C960AAD76F1LL, 0xF8D6F430C16DA536LL,
435 0xC8FFD13F1BE7E1D2LL, 0x7578AE66004DDBE1LL,
436 0x05833F01067BE646LL, 0xBB34B5AD3BFE586DLL,
437 0x095F34C9A12B97F0LL, 0x247AB64525D60CA8LL,
438 0xDCDBC6F3017477D1LL, 0x4A2E14D4DECAD24DLL,
439 0xBDB5E6D9BE0A1EEBLL, 0x2A7E70F7794301ABLL,
440 0xDEF42D8A270540FDLL, 0x01078EC0A34C22C1LL,
441 0xE5DE511AF4C16387LL, 0x7EBB3A52BD9A330ALL,
442 0x77697857AA7D6435LL, 0x004E831603AE4C32LL,
443 0xE7A21020AD78E312LL, 0x9D41A70C6AB420F2LL,
444 0x28E06C18EA1141E6LL, 0xD2B28CBD984F6B28LL,
445 0x26B75F6C446E9D83LL, 0xBA47568C4D418D7FLL,
446 0xD80BADBFE6183D8ELL, 0x0E206D7F5F166044LL,
447 0xE258A43911CBCA3ELL, 0x723A1746B21DC0BCLL,
448 0xC7CAA854F5D7CDD3LL, 0x7CAC32883D261D9CLL,
449 0x7690C26423BA942CLL, 0x17E55524478042B8LL,
450 0xE0BE477656A2389FLL, 0x4D289B5E67AB2DA0LL,
451 0x44862B9C8FBBFD31LL, 0xB47CC8049D141365LL,
452 0x822C1B362B91C793LL, 0x4EB14655FB13DFD8LL,
453 0x1ECBBA0714E2A97BLL, 0x6143459D5CDE5F14LL,
454 0x53A8FBF1D5F0AC89LL, 0x97EA04D81C5E5B00LL,
455 0x622181A8D4FDB3F3LL, 0xE9BCD341572A1208LL,
456 0x1411258643CCE58ALL, 0x9144C5FEA4C6E0A4LL,
457 0x0D33D06565CF620FLL, 0x54A48D489F219CA1LL,
458 0xC43E5EAC6D63C821LL, 0xA9728B3A72770DAFLL,
459 0xD7934E7B20DF87EFLL, 0xE35503B61A3E86E5LL,
460 0xCAE321FBC819D504LL, 0x129A50B3AC60BFA6LL,
461 0xCD5E68EA7E9FB6C3LL, 0xB01C90199483B1C7LL,
462 0x3DE93CD5C295376CLL, 0xAED52EDF2AB9AD13LL,
463 0x2E60F512C0A07884LL, 0xBC3D86A3E36210C9LL,
464 0x35269D9B163951CELL, 0x0C7D6E2AD0CDB5FALL,
465 0x59E86297D87F5733LL, 0x298EF221898DB0E7LL,
466 0x55000029D1A5AA7ELL, 0x8BC08AE1B5061B45LL,
467 0xC2C31C2B6C92703ALL, 0x94CC596BAF25EF42LL,
468 0x0A1D73DB22540456LL, 0x04B6A0F9D9C4179ALL,
469 0xEFFDAFA2AE3D3C60LL, 0xF7C8075BB49496C4LL,
470 0x9CC5C7141D1CD4E3LL, 0x78BD1638218E5534LL,
471 0xB2F11568F850246ALL, 0xEDFABCFA9502BC29LL,
472 0x796CE5F2DA23051BLL, 0xAAE128B0DC93537CLL,
473 0x3A493DA0EE4B29AELL, 0xB5DF6B2C416895D7LL,
474 0xFCABBD25122D7F37LL, 0x70810B58105DC4B1LL,
475 0xE10FDD37F7882A90LL, 0x524DCAB5518A3F5CLL,
476 0x3C9E85878451255BLL, 0x4029828119BD34E2LL,
477 0x74A05B6F5D3CECCBLL, 0xB610021542E13ECALL,
478 0x0FF979D12F59E2ACLL, 0x6037DA27E4F9CC50LL,
479 0x5E92975A0DF1847DLL, 0xD66DE190D3E623FELL,
480 0x5032D6B87B568048LL, 0x9A36B7CE8235216ELL,
481 0x80272A7A24F64B4ALL, 0x93EFED8B8C6916F7LL,
482 0x37DDBFF44CCE1555LL, 0x4B95DB5D4B99BD25LL,
483 0x92D3FDA169812FC0LL, 0xFB1A4A9A90660BB6LL,
484 0x730C196946A4B9B2LL, 0x81E289AA7F49DA68LL,
485 0x64669A0F83B1A05FLL, 0x27B3FF7D9644F48BLL,
486 0xCC6B615C8DB675B3LL, 0x674F20B9BCEBBE95LL,
487 0x6F31238275655982LL, 0x5AE488713E45CF05LL,
488 0xBF619F9954C21157LL, 0xEABAC46040A8EAE9LL,
489 0x454C6FE9F2C0C1CDLL, 0x419CF6496412691CLL,
490 0xD3DC3BEF265B0F70LL, 0x6D0E60F5C3578A9ELL,
491 0x5B0E608526323C55LL, 0x1A46C1A9FA1B59F5LL,
492 0xA9E245A17C4C8FFALL, 0x65CA5159DB2955D7LL,
493 0x05DB0A76CE35AFC2LL, 0x81EAC77EA9113D45LL,
494 0x528EF88AB6AC0A0DLL, 0xA09EA253597BE3FFLL,
495 0x430DDFB3AC48CD56LL, 0xC4B3A67AF45CE46FLL,
496 0x4ECECFD8FBE2D05ELL, 0x3EF56F10B39935F0LL,
497 0x0B22D6829CD619C6LL, 0x17FD460A74DF2069LL,
498 0x6CF8CC8E8510ED40LL, 0xD6C824BF3A6ECAA7LL,
499 0x61243D581A817049LL, 0x048BACB6BBC163A2LL,
500 0xD9A38AC27D44CC32LL, 0x7FDDFF5BAAF410ABLL,
501 0xAD6D495AA804824BLL, 0xE1A6A74F2D8C9F94LL,
502 0xD4F7851235DEE8E3LL, 0xFD4B7F886540D893LL,
503 0x247C20042AA4BFDALL, 0x096EA1C517D1327CLL,
504 0xD56966B4361A6685LL, 0x277DA5C31221057DLL,
505 0x94D59893A43ACFF7LL, 0x64F0C51CCDC02281LL,
506 0x3D33BCC4FF6189DBLL, 0xE005CB184CE66AF1LL,
507 0xFF5CCD1D1DB99BEALL, 0xB0B854A7FE42980FLL,
508 0x7BD46A6A718D4B9FLL, 0xD10FA8CC22A5FD8CLL,
509 0xD31484952BE4BD31LL, 0xC7FA975FCB243847LL,
510 0x4886ED1E5846C407LL, 0x28CDDB791EB70B04LL,
511 0xC2B00BE2F573417FLL, 0x5C9590452180F877LL,
512 0x7A6BDDFFF370EB00LL, 0xCE509E38D6D9D6A4LL,
513 0xEBEB0F00647FA702LL, 0x1DCC06CF76606F06LL,
514 0xE4D9F28BA286FF0ALL, 0xD85A305DC918C262LL,
515 0x475B1D8732225F54LL, 0x2D4FB51668CCB5FELL,
516 0xA679B9D9D72BBA20LL, 0x53841C0D912D43A5LL,
517 0x3B7EAA48BF12A4E8LL, 0x781E0E47F22F1DDFLL,
518 0xEFF20CE60AB50973LL, 0x20D261D19DFFB742LL,
519 0x16A12B03062A2E39LL, 0x1960EB2239650495LL,
520 0x251C16FED50EB8B8LL, 0x9AC0C330F826016ELL,
521 0xED152665953E7671LL, 0x02D63194A6369570LL,
522 0x5074F08394B1C987LL, 0x70BA598C90B25CE1LL,
523 0x794A15810B9742F6LL, 0x0D5925E9FCAF8C6CLL,
524 0x3067716CD868744ELL, 0x910AB077E8D7731BLL,
525 0x6A61BBDB5AC42F61LL, 0x93513EFBF0851567LL,
526 0xF494724B9E83E9D5LL, 0xE887E1985C09648DLL,
527 0x34B1D3C675370CFDLL, 0xDC35E433BC0D255DLL,
528 0xD0AAB84234131BE0LL, 0x08042A50B48B7EAFLL,
529 0x9997C4EE44A3AB35LL, 0x829A7B49201799D0LL,
530 0x263B8307B7C54441LL, 0x752F95F4FD6A6CA6LL,
531 0x927217402C08C6E5LL, 0x2A8AB754A795D9EELL,
532 0xA442F7552F72943DLL, 0x2C31334E19781208LL,
533 0x4FA98D7CEAEE6291LL, 0x55C3862F665DB309LL,
534 0xBD0610175D53B1F3LL, 0x46FE6CB840413F27LL,
535 0x3FE03792DF0CFA59LL, 0xCFE700372EB85E8FLL,
536 0xA7BE29E7ADBCE118LL, 0xE544EE5CDE8431DDLL,
537 0x8A781B1B41F1873ELL, 0xA5C94C78A0D2F0E7LL,
538 0x39412E2877B60728LL, 0xA1265EF3AFC9A62CLL,
539 0xBCC2770C6A2506C5LL, 0x3AB66DD5DCE1CE12LL,
540 0xE65499D04A675B37LL, 0x7D8F523481BFD216LL,
541 0x0F6F64FCEC15F389LL, 0x74EFBE618B5B13C8LL,
542 0xACDC82B714273E1DLL, 0xDD40BFE003199D17LL,
543 0x37E99257E7E061F8LL, 0xFA52626904775AAALL,
544 0x8BBBF63A463D56F9LL, 0xF0013F1543A26E64LL,
545 0xA8307E9F879EC898LL, 0xCC4C27A4150177CCLL,
546 0x1B432F2CCA1D3348LL, 0xDE1D1F8F9F6FA013LL,
547 0x606602A047A7DDD6LL, 0xD237AB64CC1CB2C7LL,
548 0x9B938E7225FCD1D3LL, 0xEC4E03708E0FF476LL,
549 0xFEB2FBDA3D03C12DLL, 0xAE0BCED2EE43889ALL,
550 0x22CB8923EBFB4F43LL, 0x69360D013CF7396DLL,
551 0x855E3602D2D4E022LL, 0x073805BAD01F784CLL,
552 0x33E17A133852F546LL, 0xDF4874058AC7B638LL,
553 0xBA92B29C678AA14ALL, 0x0CE89FC76CFAADCDLL,
554 0x5F9D4E0908339E34LL, 0xF1AFE9291F5923B9LL,
555 0x6E3480F60F4A265FLL, 0xEEBF3A2AB29B841CLL,
556 0xE21938A88F91B4ADLL, 0x57DFEFF845C6D3C3LL,
557 0x2F006B0BF62CAAF2LL, 0x62F479EF6F75EE78LL,
558 0x11A55AD41C8916A9LL, 0xF229D29084FED453LL,
559 0x42F1C27B16B000E6LL, 0x2B1F76749823C074LL,
560 0x4B76ECA3C2745360LL, 0x8C98F463B91691BDLL,
561 0x14BCC93CF1ADE66ALL, 0x8885213E6D458397LL,
562 0x8E177DF0274D4711LL, 0xB49B73B5503F2951LL,
563 0x10168168C3F96B6BLL, 0x0E3D963B63CAB0AELL,
564 0x8DFC4B5655A1DB14LL, 0xF789F1356E14DE5CLL,
565 0x683E68AF4E51DAC1LL, 0xC9A84F9D8D4B0FD9LL,
566 0x3691E03F52A0F9D1LL, 0x5ED86E46E1878E80LL,
567 0x3C711A0E99D07150LL, 0x5A0865B20C4E9310LL,
568 0x56FBFC1FE4F0682ELL, 0xEA8D5DE3105EDF9BLL,
569 0x71ABFDB12379187ALL, 0x2EB99DE1BEE77B9CLL,
570 0x21ECC0EA33CF4523LL, 0x59A4D7521805C7A1LL,
571 0x3896F5EB56AE7C72LL, 0xAA638F3DB18F75DCLL,
572 0x9F39358DABE9808ELL, 0xB7DEFA91C00B72ACLL,
573 0x6B5541FD62492D92LL, 0x6DC6DEE8F92E4D5BLL,
574 0x353F57ABC4BEEA7ELL, 0x735769D6DA5690CELL,
575 0x0A234AA642391484LL, 0xF6F9508028F80D9DLL,
576 0xB8E319A27AB3F215LL, 0x31AD9C1151341A4DLL,
577 0x773C22A57BEF5805LL, 0x45C7561A07968633LL,
578 0xF913DA9E249DBE36LL, 0xDA652D9B78A64C68LL,
579 0x4C27A97F3BC334EFLL, 0x76621220E66B17F4LL,
580 0x967743899ACD7D0BLL, 0xF3EE5BCAE0ED6782LL,
581 0x409F753600C879FCLL, 0x06D09A39B5926DB6LL,
582 0x6F83AEB0317AC588LL, 0x01E6CA4A86381F21LL,
583 0x66FF3462D19F3025LL, 0x72207C24DDFD3BFBLL,
584 0x4AF6B6D3E2ECE2EBLL, 0x9C994DBEC7EA08DELL,
585 0x49ACE597B09A8BC4LL, 0xB38C4766CF0797BALL,
586 0x131B9373C57C2A75LL, 0xB1822CCE61931E58LL,
587 0x9D7555B909BA1C0CLL, 0x127FAFDD937D11D2LL,
588 0x29DA3BADC66D92E4LL, 0xA2C1D57154C2ECBCLL,
589 0x58C5134D82F6FE24LL, 0x1C3AE3515B62274FLL,
590 0xE907C82E01CB8126LL, 0xF8ED091913E37FCBLL,
591 0x3249D8F9C80046C9LL, 0x80CF9BEDE388FB63LL,
592 0x1881539A116CF19ELL, 0x5103F3F76BD52457LL,
593 0x15B7E6F5AE47F7A8LL, 0xDBD7C6DED47E9CCFLL,
594 0x44E55C410228BB1ALL, 0xB647D4255EDB4E99LL,
595 0x5D11882BB8AAFC30LL, 0xF5098BBB29D3212ALL,
596 0x8FB5EA14E90296B3LL, 0x677B942157DD025ALL,
597 0xFB58E7C0A390ACB5LL, 0x89D3674C83BD4A01LL,
598 0x9E2DA4DF4BF3B93BLL, 0xFCC41E328CAB4829LL,
599 0x03F38C96BA582C52LL, 0xCAD1BDBD7FD85DB2LL,
600 0xBBB442C16082AE83LL, 0xB95FE86BA5DA9AB0LL,
601 0xB22E04673771A93FLL, 0x845358C9493152D8LL,
602 0xBE2A488697B4541ELL, 0x95A2DC2DD38E6966LL,
603 0xC02C11AC923C852BLL, 0x2388B1990DF2A87BLL,
604 0x7C8008FA1B4F37BELL, 0x1F70D0C84D54E503LL,
605 0x5490ADEC7ECE57D4LL, 0x002B3C27D9063A3ALL,
606 0x7EAEA3848030A2BFLL, 0xC602326DED2003C0LL,
607 0x83A7287D69A94086LL, 0xC57A5FCB30F57A8ALL,
608 0xB56844E479EBE779LL, 0xA373B40F05DCBCE9LL,
609 0xD71A786E88570EE2LL, 0x879CBACDBDE8F6A0LL,
610 0x976AD1BCC164A32FLL, 0xAB21E25E9666D78BLL,
611 0x901063AAE5E5C33CLL, 0x9818B34448698D90LL,
612 0xE36487AE3E1E8ABBLL, 0xAFBDF931893BDCB4LL,
613 0x6345A0DC5FBBD519LL, 0x8628FE269B9465CALL,
614 0x1E5D01603F9C51ECLL, 0x4DE44006A15049B7LL,
615 0xBF6C70E5F776CBB1LL, 0x411218F2EF552BEDLL,
616 0xCB0C0708705A36A3LL, 0xE74D14754F986044LL,
617 0xCD56D9430EA8280ELL, 0xC12591D7535F5065LL,
618 0xC83223F1720AEF96LL, 0xC3A0396F7363A51FLL
619 };
620
621 void
TIGERTransform(uint64_t * state,const uint8_t * data)622 TIGERTransform(uint64_t *state, const uint8_t *data)
623 {
624 uint64_t a, b, c, x0, x1, x2, x3, x4, x5, x6, x7, tmp;
625 uint32_t i;
626
627 #define t1 (tiger_sboxen)
628 #define t2 (tiger_sboxen + 256)
629 #define t3 (tiger_sboxen + 512)
630 #define t4 (tiger_sboxen + 768)
631 #define round(a, b, c, x, mul) do { \
632 c ^= x; \
633 a -= t1[((c)>>(0*8)) & 0xFF] ^ \
634 t2[((c)>>(2*8)) & 0xFF] ^ \
635 t3[((c)>>(4*8)) & 0xFF] ^ \
636 t4[((c)>>(6*8)) & 0xFF]; \
637 b += t4[((c)>>(1*8)) & 0xFF] ^ \
638 t3[((c)>>(3*8)) & 0xFF] ^ \
639 t2[((c)>>(5*8)) & 0xFF] ^ \
640 t1[((c)>>(7*8)) & 0xFF]; \
641 b *= mul; \
642 } while (0)
643 #define letoh64u(dst, src) do { \
644 memcpy(&tmp, (src), 8); \
645 (dst) = letoh64(tmp); \
646 } while (0)
647
648 a = state[0];
649 b = state[1];
650 c = state[2];
651
652 letoh64u(x0, data + 0 * 8);
653 letoh64u(x1, data + 1 * 8);
654 letoh64u(x2, data + 2 * 8);
655 letoh64u(x3, data + 3 * 8);
656 letoh64u(x4, data + 4 * 8);
657 letoh64u(x5, data + 5 * 8);
658 letoh64u(x6, data + 6 * 8);
659 letoh64u(x7, data + 7 * 8);
660
661 for (i = 0; i < 3; ++i) {
662 uint64_t tmpa;
663
664 if (i != 0) {
665 x0 -= x7 ^ 0xA5A5A5A5A5A5A5A5ULL;
666 x1 ^= x0;
667 x2 += x1;
668 x3 -= x2 ^ ((~x1) << 19);
669 x4 ^= x3;
670 x5 += x4;
671 x6 -= x5 ^ ((~x4) >> 23);
672 x7 ^= x6;
673 x0 += x7;
674 x1 -= x0 ^ ((~x7) << 19);
675 x2 ^= x1;
676 x3 += x2;
677 x4 -= x3 ^ ((~x2) >> 23);
678 x5 ^= x4;
679 x6 += x5;
680 x7 -= x6 ^ 0x0123456789ABCDEFULL;
681 }
682
683 round(a, b, c, x0, (i == 0 ? 5 : i == 1 ? 7 : 9));
684 round(b, c, a, x1, (i == 0 ? 5 : i == 1 ? 7 : 9));
685 round(c, a, b, x2, (i == 0 ? 5 : i == 1 ? 7 : 9));
686 round(a, b, c, x3, (i == 0 ? 5 : i == 1 ? 7 : 9));
687 round(b, c, a, x4, (i == 0 ? 5 : i == 1 ? 7 : 9));
688 round(c, a, b, x5, (i == 0 ? 5 : i == 1 ? 7 : 9));
689 round(a, b, c, x6, (i == 0 ? 5 : i == 1 ? 7 : 9));
690 round(b, c, a, x7, (i == 0 ? 5 : i == 1 ? 7 : 9));
691
692 tmpa = a;
693 a = c;
694 c = b;
695 b = tmpa;
696 }
697
698 state[0] ^= a;
699 state[1] = b - state[1];
700 state[2] += c;
701
702 #undef t1
703 #undef t2
704 #undef t3
705 #undef t4
706 #undef round
707 }
708