1 static void skein256_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
3 uint64_t k=key[0]^key[1]^key[2]^key[3]^0x1BD11BDAA9FC1A22ULL;
4 uint64_t t=tweak[0]^tweak[1];
10 out[1]+=key[1]+tweak[0];
11 out[2]+=key[2]+tweak[1];
14 out[1]=(out[1] << 14)|(out[1] >> 50);
17 out[3]=(out[3] << 16)|(out[3] >> 48);
20 out[3]=(out[3] << 52)|(out[3] >> 12);
23 out[1]=(out[1] << 57)|(out[1] >> 7);
26 out[1]=(out[1] << 23)|(out[1] >> 41);
29 out[3]=(out[3] << 40)|(out[3] >> 24);
32 out[3]=(out[3] << 5)|(out[3] >> 59);
35 out[1]=(out[1] << 37)|(out[1] >> 27);
38 out[1]+=key[2]+tweak[1];
42 out[1]=(out[1] << 25)|(out[1] >> 39);
45 out[3]=(out[3] << 33)|(out[3] >> 31);
48 out[3]=(out[3] << 46)|(out[3] >> 18);
51 out[1]=(out[1] << 12)|(out[1] >> 52);
54 out[1]=(out[1] << 58)|(out[1] >> 6);
57 out[3]=(out[3] << 22)|(out[3] >> 42);
60 out[3]=(out[3] << 32)|(out[3] >> 32);
63 out[1]=(out[1] << 32)|(out[1] >> 32);
70 out[1]=(out[1] << 14)|(out[1] >> 50);
73 out[3]=(out[3] << 16)|(out[3] >> 48);
76 out[3]=(out[3] << 52)|(out[3] >> 12);
79 out[1]=(out[1] << 57)|(out[1] >> 7);
82 out[1]=(out[1] << 23)|(out[1] >> 41);
85 out[3]=(out[3] << 40)|(out[3] >> 24);
88 out[3]=(out[3] << 5)|(out[3] >> 59);
91 out[1]=(out[1] << 37)|(out[1] >> 27);
95 out[2]+=key[0]+tweak[1];
98 out[1]=(out[1] << 25)|(out[1] >> 39);
100 out[2]=out[2]+out[3];
101 out[3]=(out[3] << 33)|(out[3] >> 31);
102 out[3]=out[2]^out[3];
103 out[0]=out[0]+out[3];
104 out[3]=(out[3] << 46)|(out[3] >> 18);
105 out[3]=out[0]^out[3];
106 out[2]=out[2]+out[1];
107 out[1]=(out[1] << 12)|(out[1] >> 52);
108 out[1]=out[2]^out[1];
109 out[0]=out[0]+out[1];
110 out[1]=(out[1] << 58)|(out[1] >> 6);
111 out[1]=out[0]^out[1];
112 out[2]=out[2]+out[3];
113 out[3]=(out[3] << 22)|(out[3] >> 42);
114 out[3]=out[2]^out[3];
115 out[0]=out[0]+out[3];
116 out[3]=(out[3] << 32)|(out[3] >> 32);
117 out[3]=out[0]^out[3];
118 out[2]=out[2]+out[1];
119 out[1]=(out[1] << 32)|(out[1] >> 32);
120 out[1]=out[2]^out[1];
122 out[1]+=key[0]+tweak[1];
125 out[0]=out[0]+out[1];
126 out[1]=(out[1] << 14)|(out[1] >> 50);
127 out[1]=out[0]^out[1];
128 out[2]=out[2]+out[3];
129 out[3]=(out[3] << 16)|(out[3] >> 48);
130 out[3]=out[2]^out[3];
131 out[0]=out[0]+out[3];
132 out[3]=(out[3] << 52)|(out[3] >> 12);
133 out[3]=out[0]^out[3];
134 out[2]=out[2]+out[1];
135 out[1]=(out[1] << 57)|(out[1] >> 7);
136 out[1]=out[2]^out[1];
137 out[0]=out[0]+out[1];
138 out[1]=(out[1] << 23)|(out[1] >> 41);
139 out[1]=out[0]^out[1];
140 out[2]=out[2]+out[3];
141 out[3]=(out[3] << 40)|(out[3] >> 24);
142 out[3]=out[2]^out[3];
143 out[0]=out[0]+out[3];
144 out[3]=(out[3] << 5)|(out[3] >> 59);
145 out[3]=out[0]^out[3];
146 out[2]=out[2]+out[1];
147 out[1]=(out[1] << 37)|(out[1] >> 27);
148 out[1]=out[2]^out[1];
151 out[2]+=key[2]+tweak[0];
153 out[0]=out[0]+out[1];
154 out[1]=(out[1] << 25)|(out[1] >> 39);
155 out[1]=out[0]^out[1];
156 out[2]=out[2]+out[3];
157 out[3]=(out[3] << 33)|(out[3] >> 31);
158 out[3]=out[2]^out[3];
159 out[0]=out[0]+out[3];
160 out[3]=(out[3] << 46)|(out[3] >> 18);
161 out[3]=out[0]^out[3];
162 out[2]=out[2]+out[1];
163 out[1]=(out[1] << 12)|(out[1] >> 52);
164 out[1]=out[2]^out[1];
165 out[0]=out[0]+out[1];
166 out[1]=(out[1] << 58)|(out[1] >> 6);
167 out[1]=out[0]^out[1];
168 out[2]=out[2]+out[3];
169 out[3]=(out[3] << 22)|(out[3] >> 42);
170 out[3]=out[2]^out[3];
171 out[0]=out[0]+out[3];
172 out[3]=(out[3] << 32)|(out[3] >> 32);
173 out[3]=out[0]^out[3];
174 out[2]=out[2]+out[1];
175 out[1]=(out[1] << 32)|(out[1] >> 32);
176 out[1]=out[2]^out[1];
178 out[1]+=key[2]+tweak[0];
179 out[2]+=key[3]+tweak[1];
181 out[0]=out[0]+out[1];
182 out[1]=(out[1] << 14)|(out[1] >> 50);
183 out[1]=out[0]^out[1];
184 out[2]=out[2]+out[3];
185 out[3]=(out[3] << 16)|(out[3] >> 48);
186 out[3]=out[2]^out[3];
187 out[0]=out[0]+out[3];
188 out[3]=(out[3] << 52)|(out[3] >> 12);
189 out[3]=out[0]^out[3];
190 out[2]=out[2]+out[1];
191 out[1]=(out[1] << 57)|(out[1] >> 7);
192 out[1]=out[2]^out[1];
193 out[0]=out[0]+out[1];
194 out[1]=(out[1] << 23)|(out[1] >> 41);
195 out[1]=out[0]^out[1];
196 out[2]=out[2]+out[3];
197 out[3]=(out[3] << 40)|(out[3] >> 24);
198 out[3]=out[2]^out[3];
199 out[0]=out[0]+out[3];
200 out[3]=(out[3] << 5)|(out[3] >> 59);
201 out[3]=out[0]^out[3];
202 out[2]=out[2]+out[1];
203 out[1]=(out[1] << 37)|(out[1] >> 27);
204 out[1]=out[2]^out[1];
206 out[1]+=key[3]+tweak[1];
209 out[0]=out[0]+out[1];
210 out[1]=(out[1] << 25)|(out[1] >> 39);
211 out[1]=out[0]^out[1];
212 out[2]=out[2]+out[3];
213 out[3]=(out[3] << 33)|(out[3] >> 31);
214 out[3]=out[2]^out[3];
215 out[0]=out[0]+out[3];
216 out[3]=(out[3] << 46)|(out[3] >> 18);
217 out[3]=out[0]^out[3];
218 out[2]=out[2]+out[1];
219 out[1]=(out[1] << 12)|(out[1] >> 52);
220 out[1]=out[2]^out[1];
221 out[0]=out[0]+out[1];
222 out[1]=(out[1] << 58)|(out[1] >> 6);
223 out[1]=out[0]^out[1];
224 out[2]=out[2]+out[3];
225 out[3]=(out[3] << 22)|(out[3] >> 42);
226 out[3]=out[2]^out[3];
227 out[0]=out[0]+out[3];
228 out[3]=(out[3] << 32)|(out[3] >> 32);
229 out[3]=out[0]^out[3];
230 out[2]=out[2]+out[1];
231 out[1]=(out[1] << 32)|(out[1] >> 32);
232 out[1]=out[2]^out[1];
235 out[2]+=key[0]+tweak[0];
237 out[0]=out[0]+out[1];
238 out[1]=(out[1] << 14)|(out[1] >> 50);
239 out[1]=out[0]^out[1];
240 out[2]=out[2]+out[3];
241 out[3]=(out[3] << 16)|(out[3] >> 48);
242 out[3]=out[2]^out[3];
243 out[0]=out[0]+out[3];
244 out[3]=(out[3] << 52)|(out[3] >> 12);
245 out[3]=out[0]^out[3];
246 out[2]=out[2]+out[1];
247 out[1]=(out[1] << 57)|(out[1] >> 7);
248 out[1]=out[2]^out[1];
249 out[0]=out[0]+out[1];
250 out[1]=(out[1] << 23)|(out[1] >> 41);
251 out[1]=out[0]^out[1];
252 out[2]=out[2]+out[3];
253 out[3]=(out[3] << 40)|(out[3] >> 24);
254 out[3]=out[2]^out[3];
255 out[0]=out[0]+out[3];
256 out[3]=(out[3] << 5)|(out[3] >> 59);
257 out[3]=out[0]^out[3];
258 out[2]=out[2]+out[1];
259 out[1]=(out[1] << 37)|(out[1] >> 27);
260 out[1]=out[2]^out[1];
262 out[1]+=key[0]+tweak[0];
263 out[2]+=key[1]+tweak[1];
265 out[0]=out[0]+out[1];
266 out[1]=(out[1] << 25)|(out[1] >> 39);
267 out[1]=out[0]^out[1];
268 out[2]=out[2]+out[3];
269 out[3]=(out[3] << 33)|(out[3] >> 31);
270 out[3]=out[2]^out[3];
271 out[0]=out[0]+out[3];
272 out[3]=(out[3] << 46)|(out[3] >> 18);
273 out[3]=out[0]^out[3];
274 out[2]=out[2]+out[1];
275 out[1]=(out[1] << 12)|(out[1] >> 52);
276 out[1]=out[2]^out[1];
277 out[0]=out[0]+out[1];
278 out[1]=(out[1] << 58)|(out[1] >> 6);
279 out[1]=out[0]^out[1];
280 out[2]=out[2]+out[3];
281 out[3]=(out[3] << 22)|(out[3] >> 42);
282 out[3]=out[2]^out[3];
283 out[0]=out[0]+out[3];
284 out[3]=(out[3] << 32)|(out[3] >> 32);
285 out[3]=out[0]^out[3];
286 out[2]=out[2]+out[1];
287 out[1]=(out[1] << 32)|(out[1] >> 32);
288 out[1]=out[2]^out[1];
290 out[1]+=key[1]+tweak[1];
293 out[0]=out[0]+out[1];
294 out[1]=(out[1] << 14)|(out[1] >> 50);
295 out[1]=out[0]^out[1];
296 out[2]=out[2]+out[3];
297 out[3]=(out[3] << 16)|(out[3] >> 48);
298 out[3]=out[2]^out[3];
299 out[0]=out[0]+out[3];
300 out[3]=(out[3] << 52)|(out[3] >> 12);
301 out[3]=out[0]^out[3];
302 out[2]=out[2]+out[1];
303 out[1]=(out[1] << 57)|(out[1] >> 7);
304 out[1]=out[2]^out[1];
305 out[0]=out[0]+out[1];
306 out[1]=(out[1] << 23)|(out[1] >> 41);
307 out[1]=out[0]^out[1];
308 out[2]=out[2]+out[3];
309 out[3]=(out[3] << 40)|(out[3] >> 24);
310 out[3]=out[2]^out[3];
311 out[0]=out[0]+out[3];
312 out[3]=(out[3] << 5)|(out[3] >> 59);
313 out[3]=out[0]^out[3];
314 out[2]=out[2]+out[1];
315 out[1]=(out[1] << 37)|(out[1] >> 27);
316 out[1]=out[2]^out[1];
319 out[2]+=key[3]+tweak[0];
321 out[0]=out[0]+out[1];
322 out[1]=(out[1] << 25)|(out[1] >> 39);
323 out[1]=out[0]^out[1];
324 out[2]=out[2]+out[3];
325 out[3]=(out[3] << 33)|(out[3] >> 31);
326 out[3]=out[2]^out[3];
327 out[0]=out[0]+out[3];
328 out[3]=(out[3] << 46)|(out[3] >> 18);
329 out[3]=out[0]^out[3];
330 out[2]=out[2]+out[1];
331 out[1]=(out[1] << 12)|(out[1] >> 52);
332 out[1]=out[2]^out[1];
333 out[0]=out[0]+out[1];
334 out[1]=(out[1] << 58)|(out[1] >> 6);
335 out[1]=out[0]^out[1];
336 out[2]=out[2]+out[3];
337 out[3]=(out[3] << 22)|(out[3] >> 42);
338 out[3]=out[2]^out[3];
339 out[0]=out[0]+out[3];
340 out[3]=(out[3] << 32)|(out[3] >> 32);
341 out[3]=out[0]^out[3];
342 out[2]=out[2]+out[1];
343 out[1]=(out[1] << 32)|(out[1] >> 32);
344 out[1]=out[2]^out[1];
346 out[1]+=key[3]+tweak[0];
349 out[0]=out[0]+out[1];
350 out[1]=(out[1] << 14)|(out[1] >> 50);
351 out[1]=out[0]^out[1];
352 out[2]=out[2]+out[3];
353 out[3]=(out[3] << 16)|(out[3] >> 48);
354 out[3]=out[2]^out[3];
355 out[0]=out[0]+out[3];
356 out[3]=(out[3] << 52)|(out[3] >> 12);
357 out[3]=out[0]^out[3];
358 out[2]=out[2]+out[1];
359 out[1]=(out[1] << 57)|(out[1] >> 7);
360 out[1]=out[2]^out[1];
361 out[0]=out[0]+out[1];
362 out[1]=(out[1] << 23)|(out[1] >> 41);
363 out[1]=out[0]^out[1];
364 out[2]=out[2]+out[3];
365 out[3]=(out[3] << 40)|(out[3] >> 24);
366 out[3]=out[2]^out[3];
367 out[0]=out[0]+out[3];
368 out[3]=(out[3] << 5)|(out[3] >> 59);
369 out[3]=out[0]^out[3];
370 out[2]=out[2]+out[1];
371 out[1]=(out[1] << 37)|(out[1] >> 27);
372 out[1]=out[2]^out[1];
377 out[0]=out[0]+out[1];
378 out[1]=(out[1] << 25)|(out[1] >> 39);
379 out[1]=out[0]^out[1];
380 out[2]=out[2]+out[3];
381 out[3]=(out[3] << 33)|(out[3] >> 31);
382 out[3]=out[2]^out[3];
383 out[0]=out[0]+out[3];
384 out[3]=(out[3] << 46)|(out[3] >> 18);
385 out[3]=out[0]^out[3];
386 out[2]=out[2]+out[1];
387 out[1]=(out[1] << 12)|(out[1] >> 52);
388 out[1]=out[2]^out[1];
389 out[0]=out[0]+out[1];
390 out[1]=(out[1] << 58)|(out[1] >> 6);
391 out[1]=out[0]^out[1];
392 out[2]=out[2]+out[3];
393 out[3]=(out[3] << 22)|(out[3] >> 42);
394 out[3]=out[2]^out[3];
395 out[0]=out[0]+out[3];
396 out[3]=(out[3] << 32)|(out[3] >> 32);
397 out[3]=out[0]^out[3];
398 out[2]=out[2]+out[1];
399 out[1]=(out[1] << 32)|(out[1] >> 32);
400 out[1]=out[2]^out[1];
403 out[2]+=key[1]+tweak[0];
405 out[0]=out[0]+out[1];
406 out[1]=(out[1] << 14)|(out[1] >> 50);
407 out[1]=out[0]^out[1];
408 out[2]=out[2]+out[3];
409 out[3]=(out[3] << 16)|(out[3] >> 48);
410 out[3]=out[2]^out[3];
411 out[0]=out[0]+out[3];
412 out[3]=(out[3] << 52)|(out[3] >> 12);
413 out[3]=out[0]^out[3];
414 out[2]=out[2]+out[1];
415 out[1]=(out[1] << 57)|(out[1] >> 7);
416 out[1]=out[2]^out[1];
417 out[0]=out[0]+out[1];
418 out[1]=(out[1] << 23)|(out[1] >> 41);
419 out[1]=out[0]^out[1];
420 out[2]=out[2]+out[3];
421 out[3]=(out[3] << 40)|(out[3] >> 24);
422 out[3]=out[2]^out[3];
423 out[0]=out[0]+out[3];
424 out[3]=(out[3] << 5)|(out[3] >> 59);
425 out[3]=out[0]^out[3];
426 out[2]=out[2]+out[1];
427 out[1]=(out[1] << 37)|(out[1] >> 27);
428 out[1]=out[2]^out[1];
430 out[1]+=key[1]+tweak[0];
431 out[2]+=key[2]+tweak[1];
433 out[0]=out[0]+out[1];
434 out[1]=(out[1] << 25)|(out[1] >> 39);
435 out[1]=out[0]^out[1];
436 out[2]=out[2]+out[3];
437 out[3]=(out[3] << 33)|(out[3] >> 31);
438 out[3]=out[2]^out[3];
439 out[0]=out[0]+out[3];
440 out[3]=(out[3] << 46)|(out[3] >> 18);
441 out[3]=out[0]^out[3];
442 out[2]=out[2]+out[1];
443 out[1]=(out[1] << 12)|(out[1] >> 52);
444 out[1]=out[2]^out[1];
445 out[0]=out[0]+out[1];
446 out[1]=(out[1] << 58)|(out[1] >> 6);
447 out[1]=out[0]^out[1];
448 out[2]=out[2]+out[3];
449 out[3]=(out[3] << 22)|(out[3] >> 42);
450 out[3]=out[2]^out[3];
451 out[0]=out[0]+out[3];
452 out[3]=(out[3] << 32)|(out[3] >> 32);
453 out[3]=out[0]^out[3];
454 out[2]=out[2]+out[1];
455 out[1]=(out[1] << 32)|(out[1] >> 32);
456 out[1]=out[2]^out[1];
458 out[1]+=key[2]+tweak[1];
461 out[0]=out[0]+out[1];
462 out[1]=(out[1] << 14)|(out[1] >> 50);
463 out[1]=out[0]^out[1];
464 out[2]=out[2]+out[3];
465 out[3]=(out[3] << 16)|(out[3] >> 48);
466 out[3]=out[2]^out[3];
467 out[0]=out[0]+out[3];
468 out[3]=(out[3] << 52)|(out[3] >> 12);
469 out[3]=out[0]^out[3];
470 out[2]=out[2]+out[1];
471 out[1]=(out[1] << 57)|(out[1] >> 7);
472 out[1]=out[2]^out[1];
473 out[0]=out[0]+out[1];
474 out[1]=(out[1] << 23)|(out[1] >> 41);
475 out[1]=out[0]^out[1];
476 out[2]=out[2]+out[3];
477 out[3]=(out[3] << 40)|(out[3] >> 24);
478 out[3]=out[2]^out[3];
479 out[0]=out[0]+out[3];
480 out[3]=(out[3] << 5)|(out[3] >> 59);
481 out[3]=out[0]^out[3];
482 out[2]=out[2]+out[1];
483 out[1]=(out[1] << 37)|(out[1] >> 27);
484 out[1]=out[2]^out[1];
489 out[0]=out[0]+out[1];
490 out[1]=(out[1] << 25)|(out[1] >> 39);
491 out[1]=out[0]^out[1];
492 out[2]=out[2]+out[3];
493 out[3]=(out[3] << 33)|(out[3] >> 31);
494 out[3]=out[2]^out[3];
495 out[0]=out[0]+out[3];
496 out[3]=(out[3] << 46)|(out[3] >> 18);
497 out[3]=out[0]^out[3];
498 out[2]=out[2]+out[1];
499 out[1]=(out[1] << 12)|(out[1] >> 52);
500 out[1]=out[2]^out[1];
501 out[0]=out[0]+out[1];
502 out[1]=(out[1] << 58)|(out[1] >> 6);
503 out[1]=out[0]^out[1];
504 out[2]=out[2]+out[3];
505 out[3]=(out[3] << 22)|(out[3] >> 42);
506 out[3]=out[2]^out[3];
507 out[0]=out[0]+out[3];
508 out[3]=(out[3] << 32)|(out[3] >> 32);
509 out[3]=out[0]^out[3];
510 out[2]=out[2]+out[1];
511 out[1]=(out[1] << 32)|(out[1] >> 32);
512 out[1]=out[2]^out[1];
515 out[2]+=key[0]+tweak[1];
523 asm volatile("" : : "r"(&k) : "memory");
524 asm volatile("" : : "r"(&t) : "memory");
526 static void skein512_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
528 uint64_t k=key[0]^key[1]^key[2]^key[3]^key[4]^key[5]^key[6]^key[7]^0x1BD11BDAA9FC1A22ULL;
529 uint64_t t=tweak[0]^tweak[1];
543 out[5]+=key[5]+tweak[0];
544 out[6]+=key[6]+tweak[1];
546 out[0]=out[0]+out[1];
547 out[1]=(out[1] << 46)|(out[1] >> 18);
548 out[1]=out[0]^out[1];
549 out[2]=out[2]+out[3];
550 out[3]=(out[3] << 36)|(out[3] >> 28);
551 out[3]=out[2]^out[3];
552 out[4]=out[4]+out[5];
553 out[5]=(out[5] << 19)|(out[5] >> 45);
554 out[5]=out[4]^out[5];
555 out[6]=out[6]+out[7];
556 out[7]=(out[7] << 37)|(out[7] >> 27);
557 out[7]=out[6]^out[7];
558 out[2]=out[2]+out[1];
559 out[1]=(out[1] << 33)|(out[1] >> 31);
560 out[1]=out[2]^out[1];
561 out[4]=out[4]+out[7];
562 out[7]=(out[7] << 27)|(out[7] >> 37);
563 out[7]=out[4]^out[7];
564 out[6]=out[6]+out[5];
565 out[5]=(out[5] << 14)|(out[5] >> 50);
566 out[5]=out[6]^out[5];
567 out[0]=out[0]+out[3];
568 out[3]=(out[3] << 42)|(out[3] >> 22);
569 out[3]=out[0]^out[3];
570 out[4]=out[4]+out[1];
571 out[1]=(out[1] << 17)|(out[1] >> 47);
572 out[1]=out[4]^out[1];
573 out[6]=out[6]+out[3];
574 out[3]=(out[3] << 49)|(out[3] >> 15);
575 out[3]=out[6]^out[3];
576 out[0]=out[0]+out[5];
577 out[5]=(out[5] << 36)|(out[5] >> 28);
578 out[5]=out[0]^out[5];
579 out[2]=out[2]+out[7];
580 out[7]=(out[7] << 39)|(out[7] >> 25);
581 out[7]=out[2]^out[7];
582 out[6]=out[6]+out[1];
583 out[1]=(out[1] << 44)|(out[1] >> 20);
584 out[1]=out[6]^out[1];
585 out[0]=out[0]+out[7];
586 out[7]=(out[7] << 9)|(out[7] >> 55);
587 out[7]=out[0]^out[7];
588 out[2]=out[2]+out[5];
589 out[5]=(out[5] << 54)|(out[5] >> 10);
590 out[5]=out[2]^out[5];
591 out[4]=out[4]+out[3];
592 out[3]=(out[3] << 56)|(out[3] >> 8);
593 out[3]=out[4]^out[3];
599 out[5]+=key[6]+tweak[1];
602 out[0]=out[0]+out[1];
603 out[1]=(out[1] << 39)|(out[1] >> 25);
604 out[1]=out[0]^out[1];
605 out[2]=out[2]+out[3];
606 out[3]=(out[3] << 30)|(out[3] >> 34);
607 out[3]=out[2]^out[3];
608 out[4]=out[4]+out[5];
609 out[5]=(out[5] << 34)|(out[5] >> 30);
610 out[5]=out[4]^out[5];
611 out[6]=out[6]+out[7];
612 out[7]=(out[7] << 24)|(out[7] >> 40);
613 out[7]=out[6]^out[7];
614 out[2]=out[2]+out[1];
615 out[1]=(out[1] << 13)|(out[1] >> 51);
616 out[1]=out[2]^out[1];
617 out[4]=out[4]+out[7];
618 out[7]=(out[7] << 50)|(out[7] >> 14);
619 out[7]=out[4]^out[7];
620 out[6]=out[6]+out[5];
621 out[5]=(out[5] << 10)|(out[5] >> 54);
622 out[5]=out[6]^out[5];
623 out[0]=out[0]+out[3];
624 out[3]=(out[3] << 17)|(out[3] >> 47);
625 out[3]=out[0]^out[3];
626 out[4]=out[4]+out[1];
627 out[1]=(out[1] << 25)|(out[1] >> 39);
628 out[1]=out[4]^out[1];
629 out[6]=out[6]+out[3];
630 out[3]=(out[3] << 29)|(out[3] >> 35);
631 out[3]=out[6]^out[3];
632 out[0]=out[0]+out[5];
633 out[5]=(out[5] << 39)|(out[5] >> 25);
634 out[5]=out[0]^out[5];
635 out[2]=out[2]+out[7];
636 out[7]=(out[7] << 43)|(out[7] >> 21);
637 out[7]=out[2]^out[7];
638 out[6]=out[6]+out[1];
639 out[1]=(out[1] << 8)|(out[1] >> 56);
640 out[1]=out[6]^out[1];
641 out[0]=out[0]+out[7];
642 out[7]=(out[7] << 35)|(out[7] >> 29);
643 out[7]=out[0]^out[7];
644 out[2]=out[2]+out[5];
645 out[5]=(out[5] << 56)|(out[5] >> 8);
646 out[5]=out[2]^out[5];
647 out[4]=out[4]+out[3];
648 out[3]=(out[3] << 22)|(out[3] >> 42);
649 out[3]=out[4]^out[3];
658 out[0]=out[0]+out[1];
659 out[1]=(out[1] << 46)|(out[1] >> 18);
660 out[1]=out[0]^out[1];
661 out[2]=out[2]+out[3];
662 out[3]=(out[3] << 36)|(out[3] >> 28);
663 out[3]=out[2]^out[3];
664 out[4]=out[4]+out[5];
665 out[5]=(out[5] << 19)|(out[5] >> 45);
666 out[5]=out[4]^out[5];
667 out[6]=out[6]+out[7];
668 out[7]=(out[7] << 37)|(out[7] >> 27);
669 out[7]=out[6]^out[7];
670 out[2]=out[2]+out[1];
671 out[1]=(out[1] << 33)|(out[1] >> 31);
672 out[1]=out[2]^out[1];
673 out[4]=out[4]+out[7];
674 out[7]=(out[7] << 27)|(out[7] >> 37);
675 out[7]=out[4]^out[7];
676 out[6]=out[6]+out[5];
677 out[5]=(out[5] << 14)|(out[5] >> 50);
678 out[5]=out[6]^out[5];
679 out[0]=out[0]+out[3];
680 out[3]=(out[3] << 42)|(out[3] >> 22);
681 out[3]=out[0]^out[3];
682 out[4]=out[4]+out[1];
683 out[1]=(out[1] << 17)|(out[1] >> 47);
684 out[1]=out[4]^out[1];
685 out[6]=out[6]+out[3];
686 out[3]=(out[3] << 49)|(out[3] >> 15);
687 out[3]=out[6]^out[3];
688 out[0]=out[0]+out[5];
689 out[5]=(out[5] << 36)|(out[5] >> 28);
690 out[5]=out[0]^out[5];
691 out[2]=out[2]+out[7];
692 out[7]=(out[7] << 39)|(out[7] >> 25);
693 out[7]=out[2]^out[7];
694 out[6]=out[6]+out[1];
695 out[1]=(out[1] << 44)|(out[1] >> 20);
696 out[1]=out[6]^out[1];
697 out[0]=out[0]+out[7];
698 out[7]=(out[7] << 9)|(out[7] >> 55);
699 out[7]=out[0]^out[7];
700 out[2]=out[2]+out[5];
701 out[5]=(out[5] << 54)|(out[5] >> 10);
702 out[5]=out[2]^out[5];
703 out[4]=out[4]+out[3];
704 out[3]=(out[3] << 56)|(out[3] >> 8);
705 out[3]=out[4]^out[3];
712 out[6]+=key[0]+tweak[1];
714 out[0]=out[0]+out[1];
715 out[1]=(out[1] << 39)|(out[1] >> 25);
716 out[1]=out[0]^out[1];
717 out[2]=out[2]+out[3];
718 out[3]=(out[3] << 30)|(out[3] >> 34);
719 out[3]=out[2]^out[3];
720 out[4]=out[4]+out[5];
721 out[5]=(out[5] << 34)|(out[5] >> 30);
722 out[5]=out[4]^out[5];
723 out[6]=out[6]+out[7];
724 out[7]=(out[7] << 24)|(out[7] >> 40);
725 out[7]=out[6]^out[7];
726 out[2]=out[2]+out[1];
727 out[1]=(out[1] << 13)|(out[1] >> 51);
728 out[1]=out[2]^out[1];
729 out[4]=out[4]+out[7];
730 out[7]=(out[7] << 50)|(out[7] >> 14);
731 out[7]=out[4]^out[7];
732 out[6]=out[6]+out[5];
733 out[5]=(out[5] << 10)|(out[5] >> 54);
734 out[5]=out[6]^out[5];
735 out[0]=out[0]+out[3];
736 out[3]=(out[3] << 17)|(out[3] >> 47);
737 out[3]=out[0]^out[3];
738 out[4]=out[4]+out[1];
739 out[1]=(out[1] << 25)|(out[1] >> 39);
740 out[1]=out[4]^out[1];
741 out[6]=out[6]+out[3];
742 out[3]=(out[3] << 29)|(out[3] >> 35);
743 out[3]=out[6]^out[3];
744 out[0]=out[0]+out[5];
745 out[5]=(out[5] << 39)|(out[5] >> 25);
746 out[5]=out[0]^out[5];
747 out[2]=out[2]+out[7];
748 out[7]=(out[7] << 43)|(out[7] >> 21);
749 out[7]=out[2]^out[7];
750 out[6]=out[6]+out[1];
751 out[1]=(out[1] << 8)|(out[1] >> 56);
752 out[1]=out[6]^out[1];
753 out[0]=out[0]+out[7];
754 out[7]=(out[7] << 35)|(out[7] >> 29);
755 out[7]=out[0]^out[7];
756 out[2]=out[2]+out[5];
757 out[5]=(out[5] << 56)|(out[5] >> 8);
758 out[5]=out[2]^out[5];
759 out[4]=out[4]+out[3];
760 out[3]=(out[3] << 22)|(out[3] >> 42);
761 out[3]=out[4]^out[3];
767 out[5]+=key[0]+tweak[1];
770 out[0]=out[0]+out[1];
771 out[1]=(out[1] << 46)|(out[1] >> 18);
772 out[1]=out[0]^out[1];
773 out[2]=out[2]+out[3];
774 out[3]=(out[3] << 36)|(out[3] >> 28);
775 out[3]=out[2]^out[3];
776 out[4]=out[4]+out[5];
777 out[5]=(out[5] << 19)|(out[5] >> 45);
778 out[5]=out[4]^out[5];
779 out[6]=out[6]+out[7];
780 out[7]=(out[7] << 37)|(out[7] >> 27);
781 out[7]=out[6]^out[7];
782 out[2]=out[2]+out[1];
783 out[1]=(out[1] << 33)|(out[1] >> 31);
784 out[1]=out[2]^out[1];
785 out[4]=out[4]+out[7];
786 out[7]=(out[7] << 27)|(out[7] >> 37);
787 out[7]=out[4]^out[7];
788 out[6]=out[6]+out[5];
789 out[5]=(out[5] << 14)|(out[5] >> 50);
790 out[5]=out[6]^out[5];
791 out[0]=out[0]+out[3];
792 out[3]=(out[3] << 42)|(out[3] >> 22);
793 out[3]=out[0]^out[3];
794 out[4]=out[4]+out[1];
795 out[1]=(out[1] << 17)|(out[1] >> 47);
796 out[1]=out[4]^out[1];
797 out[6]=out[6]+out[3];
798 out[3]=(out[3] << 49)|(out[3] >> 15);
799 out[3]=out[6]^out[3];
800 out[0]=out[0]+out[5];
801 out[5]=(out[5] << 36)|(out[5] >> 28);
802 out[5]=out[0]^out[5];
803 out[2]=out[2]+out[7];
804 out[7]=(out[7] << 39)|(out[7] >> 25);
805 out[7]=out[2]^out[7];
806 out[6]=out[6]+out[1];
807 out[1]=(out[1] << 44)|(out[1] >> 20);
808 out[1]=out[6]^out[1];
809 out[0]=out[0]+out[7];
810 out[7]=(out[7] << 9)|(out[7] >> 55);
811 out[7]=out[0]^out[7];
812 out[2]=out[2]+out[5];
813 out[5]=(out[5] << 54)|(out[5] >> 10);
814 out[5]=out[2]^out[5];
815 out[4]=out[4]+out[3];
816 out[3]=(out[3] << 56)|(out[3] >> 8);
817 out[3]=out[4]^out[3];
824 out[6]+=key[2]+tweak[0];
826 out[0]=out[0]+out[1];
827 out[1]=(out[1] << 39)|(out[1] >> 25);
828 out[1]=out[0]^out[1];
829 out[2]=out[2]+out[3];
830 out[3]=(out[3] << 30)|(out[3] >> 34);
831 out[3]=out[2]^out[3];
832 out[4]=out[4]+out[5];
833 out[5]=(out[5] << 34)|(out[5] >> 30);
834 out[5]=out[4]^out[5];
835 out[6]=out[6]+out[7];
836 out[7]=(out[7] << 24)|(out[7] >> 40);
837 out[7]=out[6]^out[7];
838 out[2]=out[2]+out[1];
839 out[1]=(out[1] << 13)|(out[1] >> 51);
840 out[1]=out[2]^out[1];
841 out[4]=out[4]+out[7];
842 out[7]=(out[7] << 50)|(out[7] >> 14);
843 out[7]=out[4]^out[7];
844 out[6]=out[6]+out[5];
845 out[5]=(out[5] << 10)|(out[5] >> 54);
846 out[5]=out[6]^out[5];
847 out[0]=out[0]+out[3];
848 out[3]=(out[3] << 17)|(out[3] >> 47);
849 out[3]=out[0]^out[3];
850 out[4]=out[4]+out[1];
851 out[1]=(out[1] << 25)|(out[1] >> 39);
852 out[1]=out[4]^out[1];
853 out[6]=out[6]+out[3];
854 out[3]=(out[3] << 29)|(out[3] >> 35);
855 out[3]=out[6]^out[3];
856 out[0]=out[0]+out[5];
857 out[5]=(out[5] << 39)|(out[5] >> 25);
858 out[5]=out[0]^out[5];
859 out[2]=out[2]+out[7];
860 out[7]=(out[7] << 43)|(out[7] >> 21);
861 out[7]=out[2]^out[7];
862 out[6]=out[6]+out[1];
863 out[1]=(out[1] << 8)|(out[1] >> 56);
864 out[1]=out[6]^out[1];
865 out[0]=out[0]+out[7];
866 out[7]=(out[7] << 35)|(out[7] >> 29);
867 out[7]=out[0]^out[7];
868 out[2]=out[2]+out[5];
869 out[5]=(out[5] << 56)|(out[5] >> 8);
870 out[5]=out[2]^out[5];
871 out[4]=out[4]+out[3];
872 out[3]=(out[3] << 22)|(out[3] >> 42);
873 out[3]=out[4]^out[3];
879 out[5]+=key[2]+tweak[0];
880 out[6]+=key[3]+tweak[1];
882 out[0]=out[0]+out[1];
883 out[1]=(out[1] << 46)|(out[1] >> 18);
884 out[1]=out[0]^out[1];
885 out[2]=out[2]+out[3];
886 out[3]=(out[3] << 36)|(out[3] >> 28);
887 out[3]=out[2]^out[3];
888 out[4]=out[4]+out[5];
889 out[5]=(out[5] << 19)|(out[5] >> 45);
890 out[5]=out[4]^out[5];
891 out[6]=out[6]+out[7];
892 out[7]=(out[7] << 37)|(out[7] >> 27);
893 out[7]=out[6]^out[7];
894 out[2]=out[2]+out[1];
895 out[1]=(out[1] << 33)|(out[1] >> 31);
896 out[1]=out[2]^out[1];
897 out[4]=out[4]+out[7];
898 out[7]=(out[7] << 27)|(out[7] >> 37);
899 out[7]=out[4]^out[7];
900 out[6]=out[6]+out[5];
901 out[5]=(out[5] << 14)|(out[5] >> 50);
902 out[5]=out[6]^out[5];
903 out[0]=out[0]+out[3];
904 out[3]=(out[3] << 42)|(out[3] >> 22);
905 out[3]=out[0]^out[3];
906 out[4]=out[4]+out[1];
907 out[1]=(out[1] << 17)|(out[1] >> 47);
908 out[1]=out[4]^out[1];
909 out[6]=out[6]+out[3];
910 out[3]=(out[3] << 49)|(out[3] >> 15);
911 out[3]=out[6]^out[3];
912 out[0]=out[0]+out[5];
913 out[5]=(out[5] << 36)|(out[5] >> 28);
914 out[5]=out[0]^out[5];
915 out[2]=out[2]+out[7];
916 out[7]=(out[7] << 39)|(out[7] >> 25);
917 out[7]=out[2]^out[7];
918 out[6]=out[6]+out[1];
919 out[1]=(out[1] << 44)|(out[1] >> 20);
920 out[1]=out[6]^out[1];
921 out[0]=out[0]+out[7];
922 out[7]=(out[7] << 9)|(out[7] >> 55);
923 out[7]=out[0]^out[7];
924 out[2]=out[2]+out[5];
925 out[5]=(out[5] << 54)|(out[5] >> 10);
926 out[5]=out[2]^out[5];
927 out[4]=out[4]+out[3];
928 out[3]=(out[3] << 56)|(out[3] >> 8);
929 out[3]=out[4]^out[3];
935 out[5]+=key[3]+tweak[1];
938 out[0]=out[0]+out[1];
939 out[1]=(out[1] << 39)|(out[1] >> 25);
940 out[1]=out[0]^out[1];
941 out[2]=out[2]+out[3];
942 out[3]=(out[3] << 30)|(out[3] >> 34);
943 out[3]=out[2]^out[3];
944 out[4]=out[4]+out[5];
945 out[5]=(out[5] << 34)|(out[5] >> 30);
946 out[5]=out[4]^out[5];
947 out[6]=out[6]+out[7];
948 out[7]=(out[7] << 24)|(out[7] >> 40);
949 out[7]=out[6]^out[7];
950 out[2]=out[2]+out[1];
951 out[1]=(out[1] << 13)|(out[1] >> 51);
952 out[1]=out[2]^out[1];
953 out[4]=out[4]+out[7];
954 out[7]=(out[7] << 50)|(out[7] >> 14);
955 out[7]=out[4]^out[7];
956 out[6]=out[6]+out[5];
957 out[5]=(out[5] << 10)|(out[5] >> 54);
958 out[5]=out[6]^out[5];
959 out[0]=out[0]+out[3];
960 out[3]=(out[3] << 17)|(out[3] >> 47);
961 out[3]=out[0]^out[3];
962 out[4]=out[4]+out[1];
963 out[1]=(out[1] << 25)|(out[1] >> 39);
964 out[1]=out[4]^out[1];
965 out[6]=out[6]+out[3];
966 out[3]=(out[3] << 29)|(out[3] >> 35);
967 out[3]=out[6]^out[3];
968 out[0]=out[0]+out[5];
969 out[5]=(out[5] << 39)|(out[5] >> 25);
970 out[5]=out[0]^out[5];
971 out[2]=out[2]+out[7];
972 out[7]=(out[7] << 43)|(out[7] >> 21);
973 out[7]=out[2]^out[7];
974 out[6]=out[6]+out[1];
975 out[1]=(out[1] << 8)|(out[1] >> 56);
976 out[1]=out[6]^out[1];
977 out[0]=out[0]+out[7];
978 out[7]=(out[7] << 35)|(out[7] >> 29);
979 out[7]=out[0]^out[7];
980 out[2]=out[2]+out[5];
981 out[5]=(out[5] << 56)|(out[5] >> 8);
982 out[5]=out[2]^out[5];
983 out[4]=out[4]+out[3];
984 out[3]=(out[3] << 22)|(out[3] >> 42);
985 out[3]=out[4]^out[3];
992 out[6]+=key[5]+tweak[0];
994 out[0]=out[0]+out[1];
995 out[1]=(out[1] << 46)|(out[1] >> 18);
996 out[1]=out[0]^out[1];
997 out[2]=out[2]+out[3];
998 out[3]=(out[3] << 36)|(out[3] >> 28);
999 out[3]=out[2]^out[3];
1000 out[4]=out[4]+out[5];
1001 out[5]=(out[5] << 19)|(out[5] >> 45);
1002 out[5]=out[4]^out[5];
1003 out[6]=out[6]+out[7];
1004 out[7]=(out[7] << 37)|(out[7] >> 27);
1005 out[7]=out[6]^out[7];
1006 out[2]=out[2]+out[1];
1007 out[1]=(out[1] << 33)|(out[1] >> 31);
1008 out[1]=out[2]^out[1];
1009 out[4]=out[4]+out[7];
1010 out[7]=(out[7] << 27)|(out[7] >> 37);
1011 out[7]=out[4]^out[7];
1012 out[6]=out[6]+out[5];
1013 out[5]=(out[5] << 14)|(out[5] >> 50);
1014 out[5]=out[6]^out[5];
1015 out[0]=out[0]+out[3];
1016 out[3]=(out[3] << 42)|(out[3] >> 22);
1017 out[3]=out[0]^out[3];
1018 out[4]=out[4]+out[1];
1019 out[1]=(out[1] << 17)|(out[1] >> 47);
1020 out[1]=out[4]^out[1];
1021 out[6]=out[6]+out[3];
1022 out[3]=(out[3] << 49)|(out[3] >> 15);
1023 out[3]=out[6]^out[3];
1024 out[0]=out[0]+out[5];
1025 out[5]=(out[5] << 36)|(out[5] >> 28);
1026 out[5]=out[0]^out[5];
1027 out[2]=out[2]+out[7];
1028 out[7]=(out[7] << 39)|(out[7] >> 25);
1029 out[7]=out[2]^out[7];
1030 out[6]=out[6]+out[1];
1031 out[1]=(out[1] << 44)|(out[1] >> 20);
1032 out[1]=out[6]^out[1];
1033 out[0]=out[0]+out[7];
1034 out[7]=(out[7] << 9)|(out[7] >> 55);
1035 out[7]=out[0]^out[7];
1036 out[2]=out[2]+out[5];
1037 out[5]=(out[5] << 54)|(out[5] >> 10);
1038 out[5]=out[2]^out[5];
1039 out[4]=out[4]+out[3];
1040 out[3]=(out[3] << 56)|(out[3] >> 8);
1041 out[3]=out[4]^out[3];
1047 out[5]+=key[5]+tweak[0];
1048 out[6]+=key[6]+tweak[1];
1050 out[0]=out[0]+out[1];
1051 out[1]=(out[1] << 39)|(out[1] >> 25);
1052 out[1]=out[0]^out[1];
1053 out[2]=out[2]+out[3];
1054 out[3]=(out[3] << 30)|(out[3] >> 34);
1055 out[3]=out[2]^out[3];
1056 out[4]=out[4]+out[5];
1057 out[5]=(out[5] << 34)|(out[5] >> 30);
1058 out[5]=out[4]^out[5];
1059 out[6]=out[6]+out[7];
1060 out[7]=(out[7] << 24)|(out[7] >> 40);
1061 out[7]=out[6]^out[7];
1062 out[2]=out[2]+out[1];
1063 out[1]=(out[1] << 13)|(out[1] >> 51);
1064 out[1]=out[2]^out[1];
1065 out[4]=out[4]+out[7];
1066 out[7]=(out[7] << 50)|(out[7] >> 14);
1067 out[7]=out[4]^out[7];
1068 out[6]=out[6]+out[5];
1069 out[5]=(out[5] << 10)|(out[5] >> 54);
1070 out[5]=out[6]^out[5];
1071 out[0]=out[0]+out[3];
1072 out[3]=(out[3] << 17)|(out[3] >> 47);
1073 out[3]=out[0]^out[3];
1074 out[4]=out[4]+out[1];
1075 out[1]=(out[1] << 25)|(out[1] >> 39);
1076 out[1]=out[4]^out[1];
1077 out[6]=out[6]+out[3];
1078 out[3]=(out[3] << 29)|(out[3] >> 35);
1079 out[3]=out[6]^out[3];
1080 out[0]=out[0]+out[5];
1081 out[5]=(out[5] << 39)|(out[5] >> 25);
1082 out[5]=out[0]^out[5];
1083 out[2]=out[2]+out[7];
1084 out[7]=(out[7] << 43)|(out[7] >> 21);
1085 out[7]=out[2]^out[7];
1086 out[6]=out[6]+out[1];
1087 out[1]=(out[1] << 8)|(out[1] >> 56);
1088 out[1]=out[6]^out[1];
1089 out[0]=out[0]+out[7];
1090 out[7]=(out[7] << 35)|(out[7] >> 29);
1091 out[7]=out[0]^out[7];
1092 out[2]=out[2]+out[5];
1093 out[5]=(out[5] << 56)|(out[5] >> 8);
1094 out[5]=out[2]^out[5];
1095 out[4]=out[4]+out[3];
1096 out[3]=(out[3] << 22)|(out[3] >> 42);
1097 out[3]=out[4]^out[3];
1103 out[5]+=key[6]+tweak[1];
1106 out[0]=out[0]+out[1];
1107 out[1]=(out[1] << 46)|(out[1] >> 18);
1108 out[1]=out[0]^out[1];
1109 out[2]=out[2]+out[3];
1110 out[3]=(out[3] << 36)|(out[3] >> 28);
1111 out[3]=out[2]^out[3];
1112 out[4]=out[4]+out[5];
1113 out[5]=(out[5] << 19)|(out[5] >> 45);
1114 out[5]=out[4]^out[5];
1115 out[6]=out[6]+out[7];
1116 out[7]=(out[7] << 37)|(out[7] >> 27);
1117 out[7]=out[6]^out[7];
1118 out[2]=out[2]+out[1];
1119 out[1]=(out[1] << 33)|(out[1] >> 31);
1120 out[1]=out[2]^out[1];
1121 out[4]=out[4]+out[7];
1122 out[7]=(out[7] << 27)|(out[7] >> 37);
1123 out[7]=out[4]^out[7];
1124 out[6]=out[6]+out[5];
1125 out[5]=(out[5] << 14)|(out[5] >> 50);
1126 out[5]=out[6]^out[5];
1127 out[0]=out[0]+out[3];
1128 out[3]=(out[3] << 42)|(out[3] >> 22);
1129 out[3]=out[0]^out[3];
1130 out[4]=out[4]+out[1];
1131 out[1]=(out[1] << 17)|(out[1] >> 47);
1132 out[1]=out[4]^out[1];
1133 out[6]=out[6]+out[3];
1134 out[3]=(out[3] << 49)|(out[3] >> 15);
1135 out[3]=out[6]^out[3];
1136 out[0]=out[0]+out[5];
1137 out[5]=(out[5] << 36)|(out[5] >> 28);
1138 out[5]=out[0]^out[5];
1139 out[2]=out[2]+out[7];
1140 out[7]=(out[7] << 39)|(out[7] >> 25);
1141 out[7]=out[2]^out[7];
1142 out[6]=out[6]+out[1];
1143 out[1]=(out[1] << 44)|(out[1] >> 20);
1144 out[1]=out[6]^out[1];
1145 out[0]=out[0]+out[7];
1146 out[7]=(out[7] << 9)|(out[7] >> 55);
1147 out[7]=out[0]^out[7];
1148 out[2]=out[2]+out[5];
1149 out[5]=(out[5] << 54)|(out[5] >> 10);
1150 out[5]=out[2]^out[5];
1151 out[4]=out[4]+out[3];
1152 out[3]=(out[3] << 56)|(out[3] >> 8);
1153 out[3]=out[4]^out[3];
1162 out[0]=out[0]+out[1];
1163 out[1]=(out[1] << 39)|(out[1] >> 25);
1164 out[1]=out[0]^out[1];
1165 out[2]=out[2]+out[3];
1166 out[3]=(out[3] << 30)|(out[3] >> 34);
1167 out[3]=out[2]^out[3];
1168 out[4]=out[4]+out[5];
1169 out[5]=(out[5] << 34)|(out[5] >> 30);
1170 out[5]=out[4]^out[5];
1171 out[6]=out[6]+out[7];
1172 out[7]=(out[7] << 24)|(out[7] >> 40);
1173 out[7]=out[6]^out[7];
1174 out[2]=out[2]+out[1];
1175 out[1]=(out[1] << 13)|(out[1] >> 51);
1176 out[1]=out[2]^out[1];
1177 out[4]=out[4]+out[7];
1178 out[7]=(out[7] << 50)|(out[7] >> 14);
1179 out[7]=out[4]^out[7];
1180 out[6]=out[6]+out[5];
1181 out[5]=(out[5] << 10)|(out[5] >> 54);
1182 out[5]=out[6]^out[5];
1183 out[0]=out[0]+out[3];
1184 out[3]=(out[3] << 17)|(out[3] >> 47);
1185 out[3]=out[0]^out[3];
1186 out[4]=out[4]+out[1];
1187 out[1]=(out[1] << 25)|(out[1] >> 39);
1188 out[1]=out[4]^out[1];
1189 out[6]=out[6]+out[3];
1190 out[3]=(out[3] << 29)|(out[3] >> 35);
1191 out[3]=out[6]^out[3];
1192 out[0]=out[0]+out[5];
1193 out[5]=(out[5] << 39)|(out[5] >> 25);
1194 out[5]=out[0]^out[5];
1195 out[2]=out[2]+out[7];
1196 out[7]=(out[7] << 43)|(out[7] >> 21);
1197 out[7]=out[2]^out[7];
1198 out[6]=out[6]+out[1];
1199 out[1]=(out[1] << 8)|(out[1] >> 56);
1200 out[1]=out[6]^out[1];
1201 out[0]=out[0]+out[7];
1202 out[7]=(out[7] << 35)|(out[7] >> 29);
1203 out[7]=out[0]^out[7];
1204 out[2]=out[2]+out[5];
1205 out[5]=(out[5] << 56)|(out[5] >> 8);
1206 out[5]=out[2]^out[5];
1207 out[4]=out[4]+out[3];
1208 out[3]=(out[3] << 22)|(out[3] >> 42);
1209 out[3]=out[4]^out[3];
1216 out[6]+=key[0]+tweak[1];
1218 out[0]=out[0]+out[1];
1219 out[1]=(out[1] << 46)|(out[1] >> 18);
1220 out[1]=out[0]^out[1];
1221 out[2]=out[2]+out[3];
1222 out[3]=(out[3] << 36)|(out[3] >> 28);
1223 out[3]=out[2]^out[3];
1224 out[4]=out[4]+out[5];
1225 out[5]=(out[5] << 19)|(out[5] >> 45);
1226 out[5]=out[4]^out[5];
1227 out[6]=out[6]+out[7];
1228 out[7]=(out[7] << 37)|(out[7] >> 27);
1229 out[7]=out[6]^out[7];
1230 out[2]=out[2]+out[1];
1231 out[1]=(out[1] << 33)|(out[1] >> 31);
1232 out[1]=out[2]^out[1];
1233 out[4]=out[4]+out[7];
1234 out[7]=(out[7] << 27)|(out[7] >> 37);
1235 out[7]=out[4]^out[7];
1236 out[6]=out[6]+out[5];
1237 out[5]=(out[5] << 14)|(out[5] >> 50);
1238 out[5]=out[6]^out[5];
1239 out[0]=out[0]+out[3];
1240 out[3]=(out[3] << 42)|(out[3] >> 22);
1241 out[3]=out[0]^out[3];
1242 out[4]=out[4]+out[1];
1243 out[1]=(out[1] << 17)|(out[1] >> 47);
1244 out[1]=out[4]^out[1];
1245 out[6]=out[6]+out[3];
1246 out[3]=(out[3] << 49)|(out[3] >> 15);
1247 out[3]=out[6]^out[3];
1248 out[0]=out[0]+out[5];
1249 out[5]=(out[5] << 36)|(out[5] >> 28);
1250 out[5]=out[0]^out[5];
1251 out[2]=out[2]+out[7];
1252 out[7]=(out[7] << 39)|(out[7] >> 25);
1253 out[7]=out[2]^out[7];
1254 out[6]=out[6]+out[1];
1255 out[1]=(out[1] << 44)|(out[1] >> 20);
1256 out[1]=out[6]^out[1];
1257 out[0]=out[0]+out[7];
1258 out[7]=(out[7] << 9)|(out[7] >> 55);
1259 out[7]=out[0]^out[7];
1260 out[2]=out[2]+out[5];
1261 out[5]=(out[5] << 54)|(out[5] >> 10);
1262 out[5]=out[2]^out[5];
1263 out[4]=out[4]+out[3];
1264 out[3]=(out[3] << 56)|(out[3] >> 8);
1265 out[3]=out[4]^out[3];
1271 out[5]+=key[0]+tweak[1];
1274 out[0]=out[0]+out[1];
1275 out[1]=(out[1] << 39)|(out[1] >> 25);
1276 out[1]=out[0]^out[1];
1277 out[2]=out[2]+out[3];
1278 out[3]=(out[3] << 30)|(out[3] >> 34);
1279 out[3]=out[2]^out[3];
1280 out[4]=out[4]+out[5];
1281 out[5]=(out[5] << 34)|(out[5] >> 30);
1282 out[5]=out[4]^out[5];
1283 out[6]=out[6]+out[7];
1284 out[7]=(out[7] << 24)|(out[7] >> 40);
1285 out[7]=out[6]^out[7];
1286 out[2]=out[2]+out[1];
1287 out[1]=(out[1] << 13)|(out[1] >> 51);
1288 out[1]=out[2]^out[1];
1289 out[4]=out[4]+out[7];
1290 out[7]=(out[7] << 50)|(out[7] >> 14);
1291 out[7]=out[4]^out[7];
1292 out[6]=out[6]+out[5];
1293 out[5]=(out[5] << 10)|(out[5] >> 54);
1294 out[5]=out[6]^out[5];
1295 out[0]=out[0]+out[3];
1296 out[3]=(out[3] << 17)|(out[3] >> 47);
1297 out[3]=out[0]^out[3];
1298 out[4]=out[4]+out[1];
1299 out[1]=(out[1] << 25)|(out[1] >> 39);
1300 out[1]=out[4]^out[1];
1301 out[6]=out[6]+out[3];
1302 out[3]=(out[3] << 29)|(out[3] >> 35);
1303 out[3]=out[6]^out[3];
1304 out[0]=out[0]+out[5];
1305 out[5]=(out[5] << 39)|(out[5] >> 25);
1306 out[5]=out[0]^out[5];
1307 out[2]=out[2]+out[7];
1308 out[7]=(out[7] << 43)|(out[7] >> 21);
1309 out[7]=out[2]^out[7];
1310 out[6]=out[6]+out[1];
1311 out[1]=(out[1] << 8)|(out[1] >> 56);
1312 out[1]=out[6]^out[1];
1313 out[0]=out[0]+out[7];
1314 out[7]=(out[7] << 35)|(out[7] >> 29);
1315 out[7]=out[0]^out[7];
1316 out[2]=out[2]+out[5];
1317 out[5]=(out[5] << 56)|(out[5] >> 8);
1318 out[5]=out[2]^out[5];
1319 out[4]=out[4]+out[3];
1320 out[3]=(out[3] << 22)|(out[3] >> 42);
1321 out[3]=out[4]^out[3];
1328 out[6]+=key[2]+tweak[0];
1330 out[0]=out[0]+out[1];
1331 out[1]=(out[1] << 46)|(out[1] >> 18);
1332 out[1]=out[0]^out[1];
1333 out[2]=out[2]+out[3];
1334 out[3]=(out[3] << 36)|(out[3] >> 28);
1335 out[3]=out[2]^out[3];
1336 out[4]=out[4]+out[5];
1337 out[5]=(out[5] << 19)|(out[5] >> 45);
1338 out[5]=out[4]^out[5];
1339 out[6]=out[6]+out[7];
1340 out[7]=(out[7] << 37)|(out[7] >> 27);
1341 out[7]=out[6]^out[7];
1342 out[2]=out[2]+out[1];
1343 out[1]=(out[1] << 33)|(out[1] >> 31);
1344 out[1]=out[2]^out[1];
1345 out[4]=out[4]+out[7];
1346 out[7]=(out[7] << 27)|(out[7] >> 37);
1347 out[7]=out[4]^out[7];
1348 out[6]=out[6]+out[5];
1349 out[5]=(out[5] << 14)|(out[5] >> 50);
1350 out[5]=out[6]^out[5];
1351 out[0]=out[0]+out[3];
1352 out[3]=(out[3] << 42)|(out[3] >> 22);
1353 out[3]=out[0]^out[3];
1354 out[4]=out[4]+out[1];
1355 out[1]=(out[1] << 17)|(out[1] >> 47);
1356 out[1]=out[4]^out[1];
1357 out[6]=out[6]+out[3];
1358 out[3]=(out[3] << 49)|(out[3] >> 15);
1359 out[3]=out[6]^out[3];
1360 out[0]=out[0]+out[5];
1361 out[5]=(out[5] << 36)|(out[5] >> 28);
1362 out[5]=out[0]^out[5];
1363 out[2]=out[2]+out[7];
1364 out[7]=(out[7] << 39)|(out[7] >> 25);
1365 out[7]=out[2]^out[7];
1366 out[6]=out[6]+out[1];
1367 out[1]=(out[1] << 44)|(out[1] >> 20);
1368 out[1]=out[6]^out[1];
1369 out[0]=out[0]+out[7];
1370 out[7]=(out[7] << 9)|(out[7] >> 55);
1371 out[7]=out[0]^out[7];
1372 out[2]=out[2]+out[5];
1373 out[5]=(out[5] << 54)|(out[5] >> 10);
1374 out[5]=out[2]^out[5];
1375 out[4]=out[4]+out[3];
1376 out[3]=(out[3] << 56)|(out[3] >> 8);
1377 out[3]=out[4]^out[3];
1383 out[5]+=key[2]+tweak[0];
1384 out[6]+=key[3]+tweak[1];
1386 out[0]=out[0]+out[1];
1387 out[1]=(out[1] << 39)|(out[1] >> 25);
1388 out[1]=out[0]^out[1];
1389 out[2]=out[2]+out[3];
1390 out[3]=(out[3] << 30)|(out[3] >> 34);
1391 out[3]=out[2]^out[3];
1392 out[4]=out[4]+out[5];
1393 out[5]=(out[5] << 34)|(out[5] >> 30);
1394 out[5]=out[4]^out[5];
1395 out[6]=out[6]+out[7];
1396 out[7]=(out[7] << 24)|(out[7] >> 40);
1397 out[7]=out[6]^out[7];
1398 out[2]=out[2]+out[1];
1399 out[1]=(out[1] << 13)|(out[1] >> 51);
1400 out[1]=out[2]^out[1];
1401 out[4]=out[4]+out[7];
1402 out[7]=(out[7] << 50)|(out[7] >> 14);
1403 out[7]=out[4]^out[7];
1404 out[6]=out[6]+out[5];
1405 out[5]=(out[5] << 10)|(out[5] >> 54);
1406 out[5]=out[6]^out[5];
1407 out[0]=out[0]+out[3];
1408 out[3]=(out[3] << 17)|(out[3] >> 47);
1409 out[3]=out[0]^out[3];
1410 out[4]=out[4]+out[1];
1411 out[1]=(out[1] << 25)|(out[1] >> 39);
1412 out[1]=out[4]^out[1];
1413 out[6]=out[6]+out[3];
1414 out[3]=(out[3] << 29)|(out[3] >> 35);
1415 out[3]=out[6]^out[3];
1416 out[0]=out[0]+out[5];
1417 out[5]=(out[5] << 39)|(out[5] >> 25);
1418 out[5]=out[0]^out[5];
1419 out[2]=out[2]+out[7];
1420 out[7]=(out[7] << 43)|(out[7] >> 21);
1421 out[7]=out[2]^out[7];
1422 out[6]=out[6]+out[1];
1423 out[1]=(out[1] << 8)|(out[1] >> 56);
1424 out[1]=out[6]^out[1];
1425 out[0]=out[0]+out[7];
1426 out[7]=(out[7] << 35)|(out[7] >> 29);
1427 out[7]=out[0]^out[7];
1428 out[2]=out[2]+out[5];
1429 out[5]=(out[5] << 56)|(out[5] >> 8);
1430 out[5]=out[2]^out[5];
1431 out[4]=out[4]+out[3];
1432 out[3]=(out[3] << 22)|(out[3] >> 42);
1433 out[3]=out[4]^out[3];
1439 out[5]+=key[3]+tweak[1];
1442 out[0]=out[0]+out[1];
1443 out[1]=(out[1] << 46)|(out[1] >> 18);
1444 out[1]=out[0]^out[1];
1445 out[2]=out[2]+out[3];
1446 out[3]=(out[3] << 36)|(out[3] >> 28);
1447 out[3]=out[2]^out[3];
1448 out[4]=out[4]+out[5];
1449 out[5]=(out[5] << 19)|(out[5] >> 45);
1450 out[5]=out[4]^out[5];
1451 out[6]=out[6]+out[7];
1452 out[7]=(out[7] << 37)|(out[7] >> 27);
1453 out[7]=out[6]^out[7];
1454 out[2]=out[2]+out[1];
1455 out[1]=(out[1] << 33)|(out[1] >> 31);
1456 out[1]=out[2]^out[1];
1457 out[4]=out[4]+out[7];
1458 out[7]=(out[7] << 27)|(out[7] >> 37);
1459 out[7]=out[4]^out[7];
1460 out[6]=out[6]+out[5];
1461 out[5]=(out[5] << 14)|(out[5] >> 50);
1462 out[5]=out[6]^out[5];
1463 out[0]=out[0]+out[3];
1464 out[3]=(out[3] << 42)|(out[3] >> 22);
1465 out[3]=out[0]^out[3];
1466 out[4]=out[4]+out[1];
1467 out[1]=(out[1] << 17)|(out[1] >> 47);
1468 out[1]=out[4]^out[1];
1469 out[6]=out[6]+out[3];
1470 out[3]=(out[3] << 49)|(out[3] >> 15);
1471 out[3]=out[6]^out[3];
1472 out[0]=out[0]+out[5];
1473 out[5]=(out[5] << 36)|(out[5] >> 28);
1474 out[5]=out[0]^out[5];
1475 out[2]=out[2]+out[7];
1476 out[7]=(out[7] << 39)|(out[7] >> 25);
1477 out[7]=out[2]^out[7];
1478 out[6]=out[6]+out[1];
1479 out[1]=(out[1] << 44)|(out[1] >> 20);
1480 out[1]=out[6]^out[1];
1481 out[0]=out[0]+out[7];
1482 out[7]=(out[7] << 9)|(out[7] >> 55);
1483 out[7]=out[0]^out[7];
1484 out[2]=out[2]+out[5];
1485 out[5]=(out[5] << 54)|(out[5] >> 10);
1486 out[5]=out[2]^out[5];
1487 out[4]=out[4]+out[3];
1488 out[3]=(out[3] << 56)|(out[3] >> 8);
1489 out[3]=out[4]^out[3];
1496 out[6]+=key[5]+tweak[0];
1498 out[0]=out[0]+out[1];
1499 out[1]=(out[1] << 39)|(out[1] >> 25);
1500 out[1]=out[0]^out[1];
1501 out[2]=out[2]+out[3];
1502 out[3]=(out[3] << 30)|(out[3] >> 34);
1503 out[3]=out[2]^out[3];
1504 out[4]=out[4]+out[5];
1505 out[5]=(out[5] << 34)|(out[5] >> 30);
1506 out[5]=out[4]^out[5];
1507 out[6]=out[6]+out[7];
1508 out[7]=(out[7] << 24)|(out[7] >> 40);
1509 out[7]=out[6]^out[7];
1510 out[2]=out[2]+out[1];
1511 out[1]=(out[1] << 13)|(out[1] >> 51);
1512 out[1]=out[2]^out[1];
1513 out[4]=out[4]+out[7];
1514 out[7]=(out[7] << 50)|(out[7] >> 14);
1515 out[7]=out[4]^out[7];
1516 out[6]=out[6]+out[5];
1517 out[5]=(out[5] << 10)|(out[5] >> 54);
1518 out[5]=out[6]^out[5];
1519 out[0]=out[0]+out[3];
1520 out[3]=(out[3] << 17)|(out[3] >> 47);
1521 out[3]=out[0]^out[3];
1522 out[4]=out[4]+out[1];
1523 out[1]=(out[1] << 25)|(out[1] >> 39);
1524 out[1]=out[4]^out[1];
1525 out[6]=out[6]+out[3];
1526 out[3]=(out[3] << 29)|(out[3] >> 35);
1527 out[3]=out[6]^out[3];
1528 out[0]=out[0]+out[5];
1529 out[5]=(out[5] << 39)|(out[5] >> 25);
1530 out[5]=out[0]^out[5];
1531 out[2]=out[2]+out[7];
1532 out[7]=(out[7] << 43)|(out[7] >> 21);
1533 out[7]=out[2]^out[7];
1534 out[6]=out[6]+out[1];
1535 out[1]=(out[1] << 8)|(out[1] >> 56);
1536 out[1]=out[6]^out[1];
1537 out[0]=out[0]+out[7];
1538 out[7]=(out[7] << 35)|(out[7] >> 29);
1539 out[7]=out[0]^out[7];
1540 out[2]=out[2]+out[5];
1541 out[5]=(out[5] << 56)|(out[5] >> 8);
1542 out[5]=out[2]^out[5];
1543 out[4]=out[4]+out[3];
1544 out[3]=(out[3] << 22)|(out[3] >> 42);
1545 out[3]=out[4]^out[3];
1551 out[5]+=key[5]+tweak[0];
1552 out[6]+=key[6]+tweak[1];
1554 out[0]=in[0]^out[0];
1555 out[1]=in[1]^out[1];
1556 out[2]=in[2]^out[2];
1557 out[3]=in[3]^out[3];
1558 out[4]=in[4]^out[4];
1559 out[5]=in[5]^out[5];
1560 out[6]=in[6]^out[6];
1561 out[7]=in[7]^out[7];
1564 asm volatile("" : : "r"(&k) : "memory");
1565 asm volatile("" : : "r"(&t) : "memory");
1567 static void skein1024_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
1569 uint64_t k=key[0]^key[1]^key[2]^key[3]^key[4]^key[5]^key[6]^key[7]^key[8]^key[9]^key[10]^key[11]^key[12]^key[13]^key[14]^key[15]^0x1BD11BDAA9FC1A22ULL;
1570 uint64_t t=tweak[0]^tweak[1];
1600 out[13]+=key[13]+tweak[0];
1601 out[14]+=key[14]+tweak[1];
1603 out[0]=out[0]+out[1];
1604 out[1]=(out[1] << 24)|(out[1] >> 40);
1605 out[1]=out[0]^out[1];
1606 out[2]=out[2]+out[3];
1607 out[3]=(out[3] << 13)|(out[3] >> 51);
1608 out[3]=out[2]^out[3];
1609 out[4]=out[4]+out[5];
1610 out[5]=(out[5] << 8)|(out[5] >> 56);
1611 out[5]=out[4]^out[5];
1612 out[6]=out[6]+out[7];
1613 out[7]=(out[7] << 47)|(out[7] >> 17);
1614 out[7]=out[6]^out[7];
1615 out[8]=out[8]+out[9];
1616 out[9]=(out[9] << 8)|(out[9] >> 56);
1617 out[9]=out[8]^out[9];
1618 out[10]=out[10]+out[11];
1619 out[11]=(out[11] << 17)|(out[11] >> 47);
1620 out[11]=out[10]^out[11];
1621 out[12]=out[12]+out[13];
1622 out[13]=(out[13] << 22)|(out[13] >> 42);
1623 out[13]=out[12]^out[13];
1624 out[14]=out[14]+out[15];
1625 out[15]=(out[15] << 37)|(out[15] >> 27);
1626 out[15]=out[14]^out[15];
1627 out[0]=out[0]+out[9];
1628 out[9]=(out[9] << 38)|(out[9] >> 26);
1629 out[9]=out[0]^out[9];
1630 out[2]=out[2]+out[13];
1631 out[13]=(out[13] << 19)|(out[13] >> 45);
1632 out[13]=out[2]^out[13];
1633 out[6]=out[6]+out[11];
1634 out[11]=(out[11] << 10)|(out[11] >> 54);
1635 out[11]=out[6]^out[11];
1636 out[4]=out[4]+out[15];
1637 out[15]=(out[15] << 55)|(out[15] >> 9);
1638 out[15]=out[4]^out[15];
1639 out[10]=out[10]+out[7];
1640 out[7]=(out[7] << 49)|(out[7] >> 15);
1641 out[7]=out[10]^out[7];
1642 out[12]=out[12]+out[3];
1643 out[3]=(out[3] << 18)|(out[3] >> 46);
1644 out[3]=out[12]^out[3];
1645 out[14]=out[14]+out[5];
1646 out[5]=(out[5] << 23)|(out[5] >> 41);
1647 out[5]=out[14]^out[5];
1648 out[8]=out[8]+out[1];
1649 out[1]=(out[1] << 52)|(out[1] >> 12);
1650 out[1]=out[8]^out[1];
1651 out[0]=out[0]+out[7];
1652 out[7]=(out[7] << 33)|(out[7] >> 31);
1653 out[7]=out[0]^out[7];
1654 out[2]=out[2]+out[5];
1655 out[5]=(out[5] << 4)|(out[5] >> 60);
1656 out[5]=out[2]^out[5];
1657 out[4]=out[4]+out[3];
1658 out[3]=(out[3] << 51)|(out[3] >> 13);
1659 out[3]=out[4]^out[3];
1660 out[6]=out[6]+out[1];
1661 out[1]=(out[1] << 13)|(out[1] >> 51);
1662 out[1]=out[6]^out[1];
1663 out[12]=out[12]+out[15];
1664 out[15]=(out[15] << 34)|(out[15] >> 30);
1665 out[15]=out[12]^out[15];
1666 out[14]=out[14]+out[13];
1667 out[13]=(out[13] << 41)|(out[13] >> 23);
1668 out[13]=out[14]^out[13];
1669 out[8]=out[8]+out[11];
1670 out[11]=(out[11] << 59)|(out[11] >> 5);
1671 out[11]=out[8]^out[11];
1672 out[10]=out[10]+out[9];
1673 out[9]=(out[9] << 17)|(out[9] >> 47);
1674 out[9]=out[10]^out[9];
1675 out[0]=out[0]+out[15];
1676 out[15]=(out[15] << 5)|(out[15] >> 59);
1677 out[15]=out[0]^out[15];
1678 out[2]=out[2]+out[11];
1679 out[11]=(out[11] << 20)|(out[11] >> 44);
1680 out[11]=out[2]^out[11];
1681 out[6]=out[6]+out[13];
1682 out[13]=(out[13] << 48)|(out[13] >> 16);
1683 out[13]=out[6]^out[13];
1684 out[4]=out[4]+out[9];
1685 out[9]=(out[9] << 41)|(out[9] >> 23);
1686 out[9]=out[4]^out[9];
1687 out[14]=out[14]+out[1];
1688 out[1]=(out[1] << 47)|(out[1] >> 17);
1689 out[1]=out[14]^out[1];
1690 out[8]=out[8]+out[5];
1691 out[5]=(out[5] << 28)|(out[5] >> 36);
1692 out[5]=out[8]^out[5];
1693 out[10]=out[10]+out[3];
1694 out[3]=(out[3] << 16)|(out[3] >> 48);
1695 out[3]=out[10]^out[3];
1696 out[12]=out[12]+out[7];
1697 out[7]=(out[7] << 25)|(out[7] >> 39);
1698 out[7]=out[12]^out[7];
1712 out[13]+=key[14]+tweak[1];
1715 out[0]=out[0]+out[1];
1716 out[1]=(out[1] << 41)|(out[1] >> 23);
1717 out[1]=out[0]^out[1];
1718 out[2]=out[2]+out[3];
1719 out[3]=(out[3] << 9)|(out[3] >> 55);
1720 out[3]=out[2]^out[3];
1721 out[4]=out[4]+out[5];
1722 out[5]=(out[5] << 37)|(out[5] >> 27);
1723 out[5]=out[4]^out[5];
1724 out[6]=out[6]+out[7];
1725 out[7]=(out[7] << 31)|(out[7] >> 33);
1726 out[7]=out[6]^out[7];
1727 out[8]=out[8]+out[9];
1728 out[9]=(out[9] << 12)|(out[9] >> 52);
1729 out[9]=out[8]^out[9];
1730 out[10]=out[10]+out[11];
1731 out[11]=(out[11] << 47)|(out[11] >> 17);
1732 out[11]=out[10]^out[11];
1733 out[12]=out[12]+out[13];
1734 out[13]=(out[13] << 44)|(out[13] >> 20);
1735 out[13]=out[12]^out[13];
1736 out[14]=out[14]+out[15];
1737 out[15]=(out[15] << 30)|(out[15] >> 34);
1738 out[15]=out[14]^out[15];
1739 out[0]=out[0]+out[9];
1740 out[9]=(out[9] << 16)|(out[9] >> 48);
1741 out[9]=out[0]^out[9];
1742 out[2]=out[2]+out[13];
1743 out[13]=(out[13] << 34)|(out[13] >> 30);
1744 out[13]=out[2]^out[13];
1745 out[6]=out[6]+out[11];
1746 out[11]=(out[11] << 56)|(out[11] >> 8);
1747 out[11]=out[6]^out[11];
1748 out[4]=out[4]+out[15];
1749 out[15]=(out[15] << 51)|(out[15] >> 13);
1750 out[15]=out[4]^out[15];
1751 out[10]=out[10]+out[7];
1752 out[7]=(out[7] << 4)|(out[7] >> 60);
1753 out[7]=out[10]^out[7];
1754 out[12]=out[12]+out[3];
1755 out[3]=(out[3] << 53)|(out[3] >> 11);
1756 out[3]=out[12]^out[3];
1757 out[14]=out[14]+out[5];
1758 out[5]=(out[5] << 42)|(out[5] >> 22);
1759 out[5]=out[14]^out[5];
1760 out[8]=out[8]+out[1];
1761 out[1]=(out[1] << 41)|(out[1] >> 23);
1762 out[1]=out[8]^out[1];
1763 out[0]=out[0]+out[7];
1764 out[7]=(out[7] << 31)|(out[7] >> 33);
1765 out[7]=out[0]^out[7];
1766 out[2]=out[2]+out[5];
1767 out[5]=(out[5] << 44)|(out[5] >> 20);
1768 out[5]=out[2]^out[5];
1769 out[4]=out[4]+out[3];
1770 out[3]=(out[3] << 47)|(out[3] >> 17);
1771 out[3]=out[4]^out[3];
1772 out[6]=out[6]+out[1];
1773 out[1]=(out[1] << 46)|(out[1] >> 18);
1774 out[1]=out[6]^out[1];
1775 out[12]=out[12]+out[15];
1776 out[15]=(out[15] << 19)|(out[15] >> 45);
1777 out[15]=out[12]^out[15];
1778 out[14]=out[14]+out[13];
1779 out[13]=(out[13] << 42)|(out[13] >> 22);
1780 out[13]=out[14]^out[13];
1781 out[8]=out[8]+out[11];
1782 out[11]=(out[11] << 44)|(out[11] >> 20);
1783 out[11]=out[8]^out[11];
1784 out[10]=out[10]+out[9];
1785 out[9]=(out[9] << 25)|(out[9] >> 39);
1786 out[9]=out[10]^out[9];
1787 out[0]=out[0]+out[15];
1788 out[15]=(out[15] << 9)|(out[15] >> 55);
1789 out[15]=out[0]^out[15];
1790 out[2]=out[2]+out[11];
1791 out[11]=(out[11] << 48)|(out[11] >> 16);
1792 out[11]=out[2]^out[11];
1793 out[6]=out[6]+out[13];
1794 out[13]=(out[13] << 35)|(out[13] >> 29);
1795 out[13]=out[6]^out[13];
1796 out[4]=out[4]+out[9];
1797 out[9]=(out[9] << 52)|(out[9] >> 12);
1798 out[9]=out[4]^out[9];
1799 out[14]=out[14]+out[1];
1800 out[1]=(out[1] << 23)|(out[1] >> 41);
1801 out[1]=out[14]^out[1];
1802 out[8]=out[8]+out[5];
1803 out[5]=(out[5] << 31)|(out[5] >> 33);
1804 out[5]=out[8]^out[5];
1805 out[10]=out[10]+out[3];
1806 out[3]=(out[3] << 37)|(out[3] >> 27);
1807 out[3]=out[10]^out[3];
1808 out[12]=out[12]+out[7];
1809 out[7]=(out[7] << 20)|(out[7] >> 44);
1810 out[7]=out[12]^out[7];
1825 out[14]+=k+tweak[0];
1827 out[0]=out[0]+out[1];
1828 out[1]=(out[1] << 24)|(out[1] >> 40);
1829 out[1]=out[0]^out[1];
1830 out[2]=out[2]+out[3];
1831 out[3]=(out[3] << 13)|(out[3] >> 51);
1832 out[3]=out[2]^out[3];
1833 out[4]=out[4]+out[5];
1834 out[5]=(out[5] << 8)|(out[5] >> 56);
1835 out[5]=out[4]^out[5];
1836 out[6]=out[6]+out[7];
1837 out[7]=(out[7] << 47)|(out[7] >> 17);
1838 out[7]=out[6]^out[7];
1839 out[8]=out[8]+out[9];
1840 out[9]=(out[9] << 8)|(out[9] >> 56);
1841 out[9]=out[8]^out[9];
1842 out[10]=out[10]+out[11];
1843 out[11]=(out[11] << 17)|(out[11] >> 47);
1844 out[11]=out[10]^out[11];
1845 out[12]=out[12]+out[13];
1846 out[13]=(out[13] << 22)|(out[13] >> 42);
1847 out[13]=out[12]^out[13];
1848 out[14]=out[14]+out[15];
1849 out[15]=(out[15] << 37)|(out[15] >> 27);
1850 out[15]=out[14]^out[15];
1851 out[0]=out[0]+out[9];
1852 out[9]=(out[9] << 38)|(out[9] >> 26);
1853 out[9]=out[0]^out[9];
1854 out[2]=out[2]+out[13];
1855 out[13]=(out[13] << 19)|(out[13] >> 45);
1856 out[13]=out[2]^out[13];
1857 out[6]=out[6]+out[11];
1858 out[11]=(out[11] << 10)|(out[11] >> 54);
1859 out[11]=out[6]^out[11];
1860 out[4]=out[4]+out[15];
1861 out[15]=(out[15] << 55)|(out[15] >> 9);
1862 out[15]=out[4]^out[15];
1863 out[10]=out[10]+out[7];
1864 out[7]=(out[7] << 49)|(out[7] >> 15);
1865 out[7]=out[10]^out[7];
1866 out[12]=out[12]+out[3];
1867 out[3]=(out[3] << 18)|(out[3] >> 46);
1868 out[3]=out[12]^out[3];
1869 out[14]=out[14]+out[5];
1870 out[5]=(out[5] << 23)|(out[5] >> 41);
1871 out[5]=out[14]^out[5];
1872 out[8]=out[8]+out[1];
1873 out[1]=(out[1] << 52)|(out[1] >> 12);
1874 out[1]=out[8]^out[1];
1875 out[0]=out[0]+out[7];
1876 out[7]=(out[7] << 33)|(out[7] >> 31);
1877 out[7]=out[0]^out[7];
1878 out[2]=out[2]+out[5];
1879 out[5]=(out[5] << 4)|(out[5] >> 60);
1880 out[5]=out[2]^out[5];
1881 out[4]=out[4]+out[3];
1882 out[3]=(out[3] << 51)|(out[3] >> 13);
1883 out[3]=out[4]^out[3];
1884 out[6]=out[6]+out[1];
1885 out[1]=(out[1] << 13)|(out[1] >> 51);
1886 out[1]=out[6]^out[1];
1887 out[12]=out[12]+out[15];
1888 out[15]=(out[15] << 34)|(out[15] >> 30);
1889 out[15]=out[12]^out[15];
1890 out[14]=out[14]+out[13];
1891 out[13]=(out[13] << 41)|(out[13] >> 23);
1892 out[13]=out[14]^out[13];
1893 out[8]=out[8]+out[11];
1894 out[11]=(out[11] << 59)|(out[11] >> 5);
1895 out[11]=out[8]^out[11];
1896 out[10]=out[10]+out[9];
1897 out[9]=(out[9] << 17)|(out[9] >> 47);
1898 out[9]=out[10]^out[9];
1899 out[0]=out[0]+out[15];
1900 out[15]=(out[15] << 5)|(out[15] >> 59);
1901 out[15]=out[0]^out[15];
1902 out[2]=out[2]+out[11];
1903 out[11]=(out[11] << 20)|(out[11] >> 44);
1904 out[11]=out[2]^out[11];
1905 out[6]=out[6]+out[13];
1906 out[13]=(out[13] << 48)|(out[13] >> 16);
1907 out[13]=out[6]^out[13];
1908 out[4]=out[4]+out[9];
1909 out[9]=(out[9] << 41)|(out[9] >> 23);
1910 out[9]=out[4]^out[9];
1911 out[14]=out[14]+out[1];
1912 out[1]=(out[1] << 47)|(out[1] >> 17);
1913 out[1]=out[14]^out[1];
1914 out[8]=out[8]+out[5];
1915 out[5]=(out[5] << 28)|(out[5] >> 36);
1916 out[5]=out[8]^out[5];
1917 out[10]=out[10]+out[3];
1918 out[3]=(out[3] << 16)|(out[3] >> 48);
1919 out[3]=out[10]^out[3];
1920 out[12]=out[12]+out[7];
1921 out[7]=(out[7] << 25)|(out[7] >> 39);
1922 out[7]=out[12]^out[7];
1936 out[13]+=k+tweak[0];
1937 out[14]+=key[0]+tweak[1];
1939 out[0]=out[0]+out[1];
1940 out[1]=(out[1] << 41)|(out[1] >> 23);
1941 out[1]=out[0]^out[1];
1942 out[2]=out[2]+out[3];
1943 out[3]=(out[3] << 9)|(out[3] >> 55);
1944 out[3]=out[2]^out[3];
1945 out[4]=out[4]+out[5];
1946 out[5]=(out[5] << 37)|(out[5] >> 27);
1947 out[5]=out[4]^out[5];
1948 out[6]=out[6]+out[7];
1949 out[7]=(out[7] << 31)|(out[7] >> 33);
1950 out[7]=out[6]^out[7];
1951 out[8]=out[8]+out[9];
1952 out[9]=(out[9] << 12)|(out[9] >> 52);
1953 out[9]=out[8]^out[9];
1954 out[10]=out[10]+out[11];
1955 out[11]=(out[11] << 47)|(out[11] >> 17);
1956 out[11]=out[10]^out[11];
1957 out[12]=out[12]+out[13];
1958 out[13]=(out[13] << 44)|(out[13] >> 20);
1959 out[13]=out[12]^out[13];
1960 out[14]=out[14]+out[15];
1961 out[15]=(out[15] << 30)|(out[15] >> 34);
1962 out[15]=out[14]^out[15];
1963 out[0]=out[0]+out[9];
1964 out[9]=(out[9] << 16)|(out[9] >> 48);
1965 out[9]=out[0]^out[9];
1966 out[2]=out[2]+out[13];
1967 out[13]=(out[13] << 34)|(out[13] >> 30);
1968 out[13]=out[2]^out[13];
1969 out[6]=out[6]+out[11];
1970 out[11]=(out[11] << 56)|(out[11] >> 8);
1971 out[11]=out[6]^out[11];
1972 out[4]=out[4]+out[15];
1973 out[15]=(out[15] << 51)|(out[15] >> 13);
1974 out[15]=out[4]^out[15];
1975 out[10]=out[10]+out[7];
1976 out[7]=(out[7] << 4)|(out[7] >> 60);
1977 out[7]=out[10]^out[7];
1978 out[12]=out[12]+out[3];
1979 out[3]=(out[3] << 53)|(out[3] >> 11);
1980 out[3]=out[12]^out[3];
1981 out[14]=out[14]+out[5];
1982 out[5]=(out[5] << 42)|(out[5] >> 22);
1983 out[5]=out[14]^out[5];
1984 out[8]=out[8]+out[1];
1985 out[1]=(out[1] << 41)|(out[1] >> 23);
1986 out[1]=out[8]^out[1];
1987 out[0]=out[0]+out[7];
1988 out[7]=(out[7] << 31)|(out[7] >> 33);
1989 out[7]=out[0]^out[7];
1990 out[2]=out[2]+out[5];
1991 out[5]=(out[5] << 44)|(out[5] >> 20);
1992 out[5]=out[2]^out[5];
1993 out[4]=out[4]+out[3];
1994 out[3]=(out[3] << 47)|(out[3] >> 17);
1995 out[3]=out[4]^out[3];
1996 out[6]=out[6]+out[1];
1997 out[1]=(out[1] << 46)|(out[1] >> 18);
1998 out[1]=out[6]^out[1];
1999 out[12]=out[12]+out[15];
2000 out[15]=(out[15] << 19)|(out[15] >> 45);
2001 out[15]=out[12]^out[15];
2002 out[14]=out[14]+out[13];
2003 out[13]=(out[13] << 42)|(out[13] >> 22);
2004 out[13]=out[14]^out[13];
2005 out[8]=out[8]+out[11];
2006 out[11]=(out[11] << 44)|(out[11] >> 20);
2007 out[11]=out[8]^out[11];
2008 out[10]=out[10]+out[9];
2009 out[9]=(out[9] << 25)|(out[9] >> 39);
2010 out[9]=out[10]^out[9];
2011 out[0]=out[0]+out[15];
2012 out[15]=(out[15] << 9)|(out[15] >> 55);
2013 out[15]=out[0]^out[15];
2014 out[2]=out[2]+out[11];
2015 out[11]=(out[11] << 48)|(out[11] >> 16);
2016 out[11]=out[2]^out[11];
2017 out[6]=out[6]+out[13];
2018 out[13]=(out[13] << 35)|(out[13] >> 29);
2019 out[13]=out[6]^out[13];
2020 out[4]=out[4]+out[9];
2021 out[9]=(out[9] << 52)|(out[9] >> 12);
2022 out[9]=out[4]^out[9];
2023 out[14]=out[14]+out[1];
2024 out[1]=(out[1] << 23)|(out[1] >> 41);
2025 out[1]=out[14]^out[1];
2026 out[8]=out[8]+out[5];
2027 out[5]=(out[5] << 31)|(out[5] >> 33);
2028 out[5]=out[8]^out[5];
2029 out[10]=out[10]+out[3];
2030 out[3]=(out[3] << 37)|(out[3] >> 27);
2031 out[3]=out[10]^out[3];
2032 out[12]=out[12]+out[7];
2033 out[7]=(out[7] << 20)|(out[7] >> 44);
2034 out[7]=out[12]^out[7];
2048 out[13]+=key[0]+tweak[1];
2051 out[0]=out[0]+out[1];
2052 out[1]=(out[1] << 24)|(out[1] >> 40);
2053 out[1]=out[0]^out[1];
2054 out[2]=out[2]+out[3];
2055 out[3]=(out[3] << 13)|(out[3] >> 51);
2056 out[3]=out[2]^out[3];
2057 out[4]=out[4]+out[5];
2058 out[5]=(out[5] << 8)|(out[5] >> 56);
2059 out[5]=out[4]^out[5];
2060 out[6]=out[6]+out[7];
2061 out[7]=(out[7] << 47)|(out[7] >> 17);
2062 out[7]=out[6]^out[7];
2063 out[8]=out[8]+out[9];
2064 out[9]=(out[9] << 8)|(out[9] >> 56);
2065 out[9]=out[8]^out[9];
2066 out[10]=out[10]+out[11];
2067 out[11]=(out[11] << 17)|(out[11] >> 47);
2068 out[11]=out[10]^out[11];
2069 out[12]=out[12]+out[13];
2070 out[13]=(out[13] << 22)|(out[13] >> 42);
2071 out[13]=out[12]^out[13];
2072 out[14]=out[14]+out[15];
2073 out[15]=(out[15] << 37)|(out[15] >> 27);
2074 out[15]=out[14]^out[15];
2075 out[0]=out[0]+out[9];
2076 out[9]=(out[9] << 38)|(out[9] >> 26);
2077 out[9]=out[0]^out[9];
2078 out[2]=out[2]+out[13];
2079 out[13]=(out[13] << 19)|(out[13] >> 45);
2080 out[13]=out[2]^out[13];
2081 out[6]=out[6]+out[11];
2082 out[11]=(out[11] << 10)|(out[11] >> 54);
2083 out[11]=out[6]^out[11];
2084 out[4]=out[4]+out[15];
2085 out[15]=(out[15] << 55)|(out[15] >> 9);
2086 out[15]=out[4]^out[15];
2087 out[10]=out[10]+out[7];
2088 out[7]=(out[7] << 49)|(out[7] >> 15);
2089 out[7]=out[10]^out[7];
2090 out[12]=out[12]+out[3];
2091 out[3]=(out[3] << 18)|(out[3] >> 46);
2092 out[3]=out[12]^out[3];
2093 out[14]=out[14]+out[5];
2094 out[5]=(out[5] << 23)|(out[5] >> 41);
2095 out[5]=out[14]^out[5];
2096 out[8]=out[8]+out[1];
2097 out[1]=(out[1] << 52)|(out[1] >> 12);
2098 out[1]=out[8]^out[1];
2099 out[0]=out[0]+out[7];
2100 out[7]=(out[7] << 33)|(out[7] >> 31);
2101 out[7]=out[0]^out[7];
2102 out[2]=out[2]+out[5];
2103 out[5]=(out[5] << 4)|(out[5] >> 60);
2104 out[5]=out[2]^out[5];
2105 out[4]=out[4]+out[3];
2106 out[3]=(out[3] << 51)|(out[3] >> 13);
2107 out[3]=out[4]^out[3];
2108 out[6]=out[6]+out[1];
2109 out[1]=(out[1] << 13)|(out[1] >> 51);
2110 out[1]=out[6]^out[1];
2111 out[12]=out[12]+out[15];
2112 out[15]=(out[15] << 34)|(out[15] >> 30);
2113 out[15]=out[12]^out[15];
2114 out[14]=out[14]+out[13];
2115 out[13]=(out[13] << 41)|(out[13] >> 23);
2116 out[13]=out[14]^out[13];
2117 out[8]=out[8]+out[11];
2118 out[11]=(out[11] << 59)|(out[11] >> 5);
2119 out[11]=out[8]^out[11];
2120 out[10]=out[10]+out[9];
2121 out[9]=(out[9] << 17)|(out[9] >> 47);
2122 out[9]=out[10]^out[9];
2123 out[0]=out[0]+out[15];
2124 out[15]=(out[15] << 5)|(out[15] >> 59);
2125 out[15]=out[0]^out[15];
2126 out[2]=out[2]+out[11];
2127 out[11]=(out[11] << 20)|(out[11] >> 44);
2128 out[11]=out[2]^out[11];
2129 out[6]=out[6]+out[13];
2130 out[13]=(out[13] << 48)|(out[13] >> 16);
2131 out[13]=out[6]^out[13];
2132 out[4]=out[4]+out[9];
2133 out[9]=(out[9] << 41)|(out[9] >> 23);
2134 out[9]=out[4]^out[9];
2135 out[14]=out[14]+out[1];
2136 out[1]=(out[1] << 47)|(out[1] >> 17);
2137 out[1]=out[14]^out[1];
2138 out[8]=out[8]+out[5];
2139 out[5]=(out[5] << 28)|(out[5] >> 36);
2140 out[5]=out[8]^out[5];
2141 out[10]=out[10]+out[3];
2142 out[3]=(out[3] << 16)|(out[3] >> 48);
2143 out[3]=out[10]^out[3];
2144 out[12]=out[12]+out[7];
2145 out[7]=(out[7] << 25)|(out[7] >> 39);
2146 out[7]=out[12]^out[7];
2161 out[14]+=key[2]+tweak[0];
2163 out[0]=out[0]+out[1];
2164 out[1]=(out[1] << 41)|(out[1] >> 23);
2165 out[1]=out[0]^out[1];
2166 out[2]=out[2]+out[3];
2167 out[3]=(out[3] << 9)|(out[3] >> 55);
2168 out[3]=out[2]^out[3];
2169 out[4]=out[4]+out[5];
2170 out[5]=(out[5] << 37)|(out[5] >> 27);
2171 out[5]=out[4]^out[5];
2172 out[6]=out[6]+out[7];
2173 out[7]=(out[7] << 31)|(out[7] >> 33);
2174 out[7]=out[6]^out[7];
2175 out[8]=out[8]+out[9];
2176 out[9]=(out[9] << 12)|(out[9] >> 52);
2177 out[9]=out[8]^out[9];
2178 out[10]=out[10]+out[11];
2179 out[11]=(out[11] << 47)|(out[11] >> 17);
2180 out[11]=out[10]^out[11];
2181 out[12]=out[12]+out[13];
2182 out[13]=(out[13] << 44)|(out[13] >> 20);
2183 out[13]=out[12]^out[13];
2184 out[14]=out[14]+out[15];
2185 out[15]=(out[15] << 30)|(out[15] >> 34);
2186 out[15]=out[14]^out[15];
2187 out[0]=out[0]+out[9];
2188 out[9]=(out[9] << 16)|(out[9] >> 48);
2189 out[9]=out[0]^out[9];
2190 out[2]=out[2]+out[13];
2191 out[13]=(out[13] << 34)|(out[13] >> 30);
2192 out[13]=out[2]^out[13];
2193 out[6]=out[6]+out[11];
2194 out[11]=(out[11] << 56)|(out[11] >> 8);
2195 out[11]=out[6]^out[11];
2196 out[4]=out[4]+out[15];
2197 out[15]=(out[15] << 51)|(out[15] >> 13);
2198 out[15]=out[4]^out[15];
2199 out[10]=out[10]+out[7];
2200 out[7]=(out[7] << 4)|(out[7] >> 60);
2201 out[7]=out[10]^out[7];
2202 out[12]=out[12]+out[3];
2203 out[3]=(out[3] << 53)|(out[3] >> 11);
2204 out[3]=out[12]^out[3];
2205 out[14]=out[14]+out[5];
2206 out[5]=(out[5] << 42)|(out[5] >> 22);
2207 out[5]=out[14]^out[5];
2208 out[8]=out[8]+out[1];
2209 out[1]=(out[1] << 41)|(out[1] >> 23);
2210 out[1]=out[8]^out[1];
2211 out[0]=out[0]+out[7];
2212 out[7]=(out[7] << 31)|(out[7] >> 33);
2213 out[7]=out[0]^out[7];
2214 out[2]=out[2]+out[5];
2215 out[5]=(out[5] << 44)|(out[5] >> 20);
2216 out[5]=out[2]^out[5];
2217 out[4]=out[4]+out[3];
2218 out[3]=(out[3] << 47)|(out[3] >> 17);
2219 out[3]=out[4]^out[3];
2220 out[6]=out[6]+out[1];
2221 out[1]=(out[1] << 46)|(out[1] >> 18);
2222 out[1]=out[6]^out[1];
2223 out[12]=out[12]+out[15];
2224 out[15]=(out[15] << 19)|(out[15] >> 45);
2225 out[15]=out[12]^out[15];
2226 out[14]=out[14]+out[13];
2227 out[13]=(out[13] << 42)|(out[13] >> 22);
2228 out[13]=out[14]^out[13];
2229 out[8]=out[8]+out[11];
2230 out[11]=(out[11] << 44)|(out[11] >> 20);
2231 out[11]=out[8]^out[11];
2232 out[10]=out[10]+out[9];
2233 out[9]=(out[9] << 25)|(out[9] >> 39);
2234 out[9]=out[10]^out[9];
2235 out[0]=out[0]+out[15];
2236 out[15]=(out[15] << 9)|(out[15] >> 55);
2237 out[15]=out[0]^out[15];
2238 out[2]=out[2]+out[11];
2239 out[11]=(out[11] << 48)|(out[11] >> 16);
2240 out[11]=out[2]^out[11];
2241 out[6]=out[6]+out[13];
2242 out[13]=(out[13] << 35)|(out[13] >> 29);
2243 out[13]=out[6]^out[13];
2244 out[4]=out[4]+out[9];
2245 out[9]=(out[9] << 52)|(out[9] >> 12);
2246 out[9]=out[4]^out[9];
2247 out[14]=out[14]+out[1];
2248 out[1]=(out[1] << 23)|(out[1] >> 41);
2249 out[1]=out[14]^out[1];
2250 out[8]=out[8]+out[5];
2251 out[5]=(out[5] << 31)|(out[5] >> 33);
2252 out[5]=out[8]^out[5];
2253 out[10]=out[10]+out[3];
2254 out[3]=(out[3] << 37)|(out[3] >> 27);
2255 out[3]=out[10]^out[3];
2256 out[12]=out[12]+out[7];
2257 out[7]=(out[7] << 20)|(out[7] >> 44);
2258 out[7]=out[12]^out[7];
2272 out[13]+=key[2]+tweak[0];
2273 out[14]+=key[3]+tweak[1];
2275 out[0]=out[0]+out[1];
2276 out[1]=(out[1] << 24)|(out[1] >> 40);
2277 out[1]=out[0]^out[1];
2278 out[2]=out[2]+out[3];
2279 out[3]=(out[3] << 13)|(out[3] >> 51);
2280 out[3]=out[2]^out[3];
2281 out[4]=out[4]+out[5];
2282 out[5]=(out[5] << 8)|(out[5] >> 56);
2283 out[5]=out[4]^out[5];
2284 out[6]=out[6]+out[7];
2285 out[7]=(out[7] << 47)|(out[7] >> 17);
2286 out[7]=out[6]^out[7];
2287 out[8]=out[8]+out[9];
2288 out[9]=(out[9] << 8)|(out[9] >> 56);
2289 out[9]=out[8]^out[9];
2290 out[10]=out[10]+out[11];
2291 out[11]=(out[11] << 17)|(out[11] >> 47);
2292 out[11]=out[10]^out[11];
2293 out[12]=out[12]+out[13];
2294 out[13]=(out[13] << 22)|(out[13] >> 42);
2295 out[13]=out[12]^out[13];
2296 out[14]=out[14]+out[15];
2297 out[15]=(out[15] << 37)|(out[15] >> 27);
2298 out[15]=out[14]^out[15];
2299 out[0]=out[0]+out[9];
2300 out[9]=(out[9] << 38)|(out[9] >> 26);
2301 out[9]=out[0]^out[9];
2302 out[2]=out[2]+out[13];
2303 out[13]=(out[13] << 19)|(out[13] >> 45);
2304 out[13]=out[2]^out[13];
2305 out[6]=out[6]+out[11];
2306 out[11]=(out[11] << 10)|(out[11] >> 54);
2307 out[11]=out[6]^out[11];
2308 out[4]=out[4]+out[15];
2309 out[15]=(out[15] << 55)|(out[15] >> 9);
2310 out[15]=out[4]^out[15];
2311 out[10]=out[10]+out[7];
2312 out[7]=(out[7] << 49)|(out[7] >> 15);
2313 out[7]=out[10]^out[7];
2314 out[12]=out[12]+out[3];
2315 out[3]=(out[3] << 18)|(out[3] >> 46);
2316 out[3]=out[12]^out[3];
2317 out[14]=out[14]+out[5];
2318 out[5]=(out[5] << 23)|(out[5] >> 41);
2319 out[5]=out[14]^out[5];
2320 out[8]=out[8]+out[1];
2321 out[1]=(out[1] << 52)|(out[1] >> 12);
2322 out[1]=out[8]^out[1];
2323 out[0]=out[0]+out[7];
2324 out[7]=(out[7] << 33)|(out[7] >> 31);
2325 out[7]=out[0]^out[7];
2326 out[2]=out[2]+out[5];
2327 out[5]=(out[5] << 4)|(out[5] >> 60);
2328 out[5]=out[2]^out[5];
2329 out[4]=out[4]+out[3];
2330 out[3]=(out[3] << 51)|(out[3] >> 13);
2331 out[3]=out[4]^out[3];
2332 out[6]=out[6]+out[1];
2333 out[1]=(out[1] << 13)|(out[1] >> 51);
2334 out[1]=out[6]^out[1];
2335 out[12]=out[12]+out[15];
2336 out[15]=(out[15] << 34)|(out[15] >> 30);
2337 out[15]=out[12]^out[15];
2338 out[14]=out[14]+out[13];
2339 out[13]=(out[13] << 41)|(out[13] >> 23);
2340 out[13]=out[14]^out[13];
2341 out[8]=out[8]+out[11];
2342 out[11]=(out[11] << 59)|(out[11] >> 5);
2343 out[11]=out[8]^out[11];
2344 out[10]=out[10]+out[9];
2345 out[9]=(out[9] << 17)|(out[9] >> 47);
2346 out[9]=out[10]^out[9];
2347 out[0]=out[0]+out[15];
2348 out[15]=(out[15] << 5)|(out[15] >> 59);
2349 out[15]=out[0]^out[15];
2350 out[2]=out[2]+out[11];
2351 out[11]=(out[11] << 20)|(out[11] >> 44);
2352 out[11]=out[2]^out[11];
2353 out[6]=out[6]+out[13];
2354 out[13]=(out[13] << 48)|(out[13] >> 16);
2355 out[13]=out[6]^out[13];
2356 out[4]=out[4]+out[9];
2357 out[9]=(out[9] << 41)|(out[9] >> 23);
2358 out[9]=out[4]^out[9];
2359 out[14]=out[14]+out[1];
2360 out[1]=(out[1] << 47)|(out[1] >> 17);
2361 out[1]=out[14]^out[1];
2362 out[8]=out[8]+out[5];
2363 out[5]=(out[5] << 28)|(out[5] >> 36);
2364 out[5]=out[8]^out[5];
2365 out[10]=out[10]+out[3];
2366 out[3]=(out[3] << 16)|(out[3] >> 48);
2367 out[3]=out[10]^out[3];
2368 out[12]=out[12]+out[7];
2369 out[7]=(out[7] << 25)|(out[7] >> 39);
2370 out[7]=out[12]^out[7];
2384 out[13]+=key[3]+tweak[1];
2387 out[0]=out[0]+out[1];
2388 out[1]=(out[1] << 41)|(out[1] >> 23);
2389 out[1]=out[0]^out[1];
2390 out[2]=out[2]+out[3];
2391 out[3]=(out[3] << 9)|(out[3] >> 55);
2392 out[3]=out[2]^out[3];
2393 out[4]=out[4]+out[5];
2394 out[5]=(out[5] << 37)|(out[5] >> 27);
2395 out[5]=out[4]^out[5];
2396 out[6]=out[6]+out[7];
2397 out[7]=(out[7] << 31)|(out[7] >> 33);
2398 out[7]=out[6]^out[7];
2399 out[8]=out[8]+out[9];
2400 out[9]=(out[9] << 12)|(out[9] >> 52);
2401 out[9]=out[8]^out[9];
2402 out[10]=out[10]+out[11];
2403 out[11]=(out[11] << 47)|(out[11] >> 17);
2404 out[11]=out[10]^out[11];
2405 out[12]=out[12]+out[13];
2406 out[13]=(out[13] << 44)|(out[13] >> 20);
2407 out[13]=out[12]^out[13];
2408 out[14]=out[14]+out[15];
2409 out[15]=(out[15] << 30)|(out[15] >> 34);
2410 out[15]=out[14]^out[15];
2411 out[0]=out[0]+out[9];
2412 out[9]=(out[9] << 16)|(out[9] >> 48);
2413 out[9]=out[0]^out[9];
2414 out[2]=out[2]+out[13];
2415 out[13]=(out[13] << 34)|(out[13] >> 30);
2416 out[13]=out[2]^out[13];
2417 out[6]=out[6]+out[11];
2418 out[11]=(out[11] << 56)|(out[11] >> 8);
2419 out[11]=out[6]^out[11];
2420 out[4]=out[4]+out[15];
2421 out[15]=(out[15] << 51)|(out[15] >> 13);
2422 out[15]=out[4]^out[15];
2423 out[10]=out[10]+out[7];
2424 out[7]=(out[7] << 4)|(out[7] >> 60);
2425 out[7]=out[10]^out[7];
2426 out[12]=out[12]+out[3];
2427 out[3]=(out[3] << 53)|(out[3] >> 11);
2428 out[3]=out[12]^out[3];
2429 out[14]=out[14]+out[5];
2430 out[5]=(out[5] << 42)|(out[5] >> 22);
2431 out[5]=out[14]^out[5];
2432 out[8]=out[8]+out[1];
2433 out[1]=(out[1] << 41)|(out[1] >> 23);
2434 out[1]=out[8]^out[1];
2435 out[0]=out[0]+out[7];
2436 out[7]=(out[7] << 31)|(out[7] >> 33);
2437 out[7]=out[0]^out[7];
2438 out[2]=out[2]+out[5];
2439 out[5]=(out[5] << 44)|(out[5] >> 20);
2440 out[5]=out[2]^out[5];
2441 out[4]=out[4]+out[3];
2442 out[3]=(out[3] << 47)|(out[3] >> 17);
2443 out[3]=out[4]^out[3];
2444 out[6]=out[6]+out[1];
2445 out[1]=(out[1] << 46)|(out[1] >> 18);
2446 out[1]=out[6]^out[1];
2447 out[12]=out[12]+out[15];
2448 out[15]=(out[15] << 19)|(out[15] >> 45);
2449 out[15]=out[12]^out[15];
2450 out[14]=out[14]+out[13];
2451 out[13]=(out[13] << 42)|(out[13] >> 22);
2452 out[13]=out[14]^out[13];
2453 out[8]=out[8]+out[11];
2454 out[11]=(out[11] << 44)|(out[11] >> 20);
2455 out[11]=out[8]^out[11];
2456 out[10]=out[10]+out[9];
2457 out[9]=(out[9] << 25)|(out[9] >> 39);
2458 out[9]=out[10]^out[9];
2459 out[0]=out[0]+out[15];
2460 out[15]=(out[15] << 9)|(out[15] >> 55);
2461 out[15]=out[0]^out[15];
2462 out[2]=out[2]+out[11];
2463 out[11]=(out[11] << 48)|(out[11] >> 16);
2464 out[11]=out[2]^out[11];
2465 out[6]=out[6]+out[13];
2466 out[13]=(out[13] << 35)|(out[13] >> 29);
2467 out[13]=out[6]^out[13];
2468 out[4]=out[4]+out[9];
2469 out[9]=(out[9] << 52)|(out[9] >> 12);
2470 out[9]=out[4]^out[9];
2471 out[14]=out[14]+out[1];
2472 out[1]=(out[1] << 23)|(out[1] >> 41);
2473 out[1]=out[14]^out[1];
2474 out[8]=out[8]+out[5];
2475 out[5]=(out[5] << 31)|(out[5] >> 33);
2476 out[5]=out[8]^out[5];
2477 out[10]=out[10]+out[3];
2478 out[3]=(out[3] << 37)|(out[3] >> 27);
2479 out[3]=out[10]^out[3];
2480 out[12]=out[12]+out[7];
2481 out[7]=(out[7] << 20)|(out[7] >> 44);
2482 out[7]=out[12]^out[7];
2497 out[14]+=key[5]+tweak[0];
2499 out[0]=out[0]+out[1];
2500 out[1]=(out[1] << 24)|(out[1] >> 40);
2501 out[1]=out[0]^out[1];
2502 out[2]=out[2]+out[3];
2503 out[3]=(out[3] << 13)|(out[3] >> 51);
2504 out[3]=out[2]^out[3];
2505 out[4]=out[4]+out[5];
2506 out[5]=(out[5] << 8)|(out[5] >> 56);
2507 out[5]=out[4]^out[5];
2508 out[6]=out[6]+out[7];
2509 out[7]=(out[7] << 47)|(out[7] >> 17);
2510 out[7]=out[6]^out[7];
2511 out[8]=out[8]+out[9];
2512 out[9]=(out[9] << 8)|(out[9] >> 56);
2513 out[9]=out[8]^out[9];
2514 out[10]=out[10]+out[11];
2515 out[11]=(out[11] << 17)|(out[11] >> 47);
2516 out[11]=out[10]^out[11];
2517 out[12]=out[12]+out[13];
2518 out[13]=(out[13] << 22)|(out[13] >> 42);
2519 out[13]=out[12]^out[13];
2520 out[14]=out[14]+out[15];
2521 out[15]=(out[15] << 37)|(out[15] >> 27);
2522 out[15]=out[14]^out[15];
2523 out[0]=out[0]+out[9];
2524 out[9]=(out[9] << 38)|(out[9] >> 26);
2525 out[9]=out[0]^out[9];
2526 out[2]=out[2]+out[13];
2527 out[13]=(out[13] << 19)|(out[13] >> 45);
2528 out[13]=out[2]^out[13];
2529 out[6]=out[6]+out[11];
2530 out[11]=(out[11] << 10)|(out[11] >> 54);
2531 out[11]=out[6]^out[11];
2532 out[4]=out[4]+out[15];
2533 out[15]=(out[15] << 55)|(out[15] >> 9);
2534 out[15]=out[4]^out[15];
2535 out[10]=out[10]+out[7];
2536 out[7]=(out[7] << 49)|(out[7] >> 15);
2537 out[7]=out[10]^out[7];
2538 out[12]=out[12]+out[3];
2539 out[3]=(out[3] << 18)|(out[3] >> 46);
2540 out[3]=out[12]^out[3];
2541 out[14]=out[14]+out[5];
2542 out[5]=(out[5] << 23)|(out[5] >> 41);
2543 out[5]=out[14]^out[5];
2544 out[8]=out[8]+out[1];
2545 out[1]=(out[1] << 52)|(out[1] >> 12);
2546 out[1]=out[8]^out[1];
2547 out[0]=out[0]+out[7];
2548 out[7]=(out[7] << 33)|(out[7] >> 31);
2549 out[7]=out[0]^out[7];
2550 out[2]=out[2]+out[5];
2551 out[5]=(out[5] << 4)|(out[5] >> 60);
2552 out[5]=out[2]^out[5];
2553 out[4]=out[4]+out[3];
2554 out[3]=(out[3] << 51)|(out[3] >> 13);
2555 out[3]=out[4]^out[3];
2556 out[6]=out[6]+out[1];
2557 out[1]=(out[1] << 13)|(out[1] >> 51);
2558 out[1]=out[6]^out[1];
2559 out[12]=out[12]+out[15];
2560 out[15]=(out[15] << 34)|(out[15] >> 30);
2561 out[15]=out[12]^out[15];
2562 out[14]=out[14]+out[13];
2563 out[13]=(out[13] << 41)|(out[13] >> 23);
2564 out[13]=out[14]^out[13];
2565 out[8]=out[8]+out[11];
2566 out[11]=(out[11] << 59)|(out[11] >> 5);
2567 out[11]=out[8]^out[11];
2568 out[10]=out[10]+out[9];
2569 out[9]=(out[9] << 17)|(out[9] >> 47);
2570 out[9]=out[10]^out[9];
2571 out[0]=out[0]+out[15];
2572 out[15]=(out[15] << 5)|(out[15] >> 59);
2573 out[15]=out[0]^out[15];
2574 out[2]=out[2]+out[11];
2575 out[11]=(out[11] << 20)|(out[11] >> 44);
2576 out[11]=out[2]^out[11];
2577 out[6]=out[6]+out[13];
2578 out[13]=(out[13] << 48)|(out[13] >> 16);
2579 out[13]=out[6]^out[13];
2580 out[4]=out[4]+out[9];
2581 out[9]=(out[9] << 41)|(out[9] >> 23);
2582 out[9]=out[4]^out[9];
2583 out[14]=out[14]+out[1];
2584 out[1]=(out[1] << 47)|(out[1] >> 17);
2585 out[1]=out[14]^out[1];
2586 out[8]=out[8]+out[5];
2587 out[5]=(out[5] << 28)|(out[5] >> 36);
2588 out[5]=out[8]^out[5];
2589 out[10]=out[10]+out[3];
2590 out[3]=(out[3] << 16)|(out[3] >> 48);
2591 out[3]=out[10]^out[3];
2592 out[12]=out[12]+out[7];
2593 out[7]=(out[7] << 25)|(out[7] >> 39);
2594 out[7]=out[12]^out[7];
2608 out[13]+=key[5]+tweak[0];
2609 out[14]+=key[6]+tweak[1];
2611 out[0]=out[0]+out[1];
2612 out[1]=(out[1] << 41)|(out[1] >> 23);
2613 out[1]=out[0]^out[1];
2614 out[2]=out[2]+out[3];
2615 out[3]=(out[3] << 9)|(out[3] >> 55);
2616 out[3]=out[2]^out[3];
2617 out[4]=out[4]+out[5];
2618 out[5]=(out[5] << 37)|(out[5] >> 27);
2619 out[5]=out[4]^out[5];
2620 out[6]=out[6]+out[7];
2621 out[7]=(out[7] << 31)|(out[7] >> 33);
2622 out[7]=out[6]^out[7];
2623 out[8]=out[8]+out[9];
2624 out[9]=(out[9] << 12)|(out[9] >> 52);
2625 out[9]=out[8]^out[9];
2626 out[10]=out[10]+out[11];
2627 out[11]=(out[11] << 47)|(out[11] >> 17);
2628 out[11]=out[10]^out[11];
2629 out[12]=out[12]+out[13];
2630 out[13]=(out[13] << 44)|(out[13] >> 20);
2631 out[13]=out[12]^out[13];
2632 out[14]=out[14]+out[15];
2633 out[15]=(out[15] << 30)|(out[15] >> 34);
2634 out[15]=out[14]^out[15];
2635 out[0]=out[0]+out[9];
2636 out[9]=(out[9] << 16)|(out[9] >> 48);
2637 out[9]=out[0]^out[9];
2638 out[2]=out[2]+out[13];
2639 out[13]=(out[13] << 34)|(out[13] >> 30);
2640 out[13]=out[2]^out[13];
2641 out[6]=out[6]+out[11];
2642 out[11]=(out[11] << 56)|(out[11] >> 8);
2643 out[11]=out[6]^out[11];
2644 out[4]=out[4]+out[15];
2645 out[15]=(out[15] << 51)|(out[15] >> 13);
2646 out[15]=out[4]^out[15];
2647 out[10]=out[10]+out[7];
2648 out[7]=(out[7] << 4)|(out[7] >> 60);
2649 out[7]=out[10]^out[7];
2650 out[12]=out[12]+out[3];
2651 out[3]=(out[3] << 53)|(out[3] >> 11);
2652 out[3]=out[12]^out[3];
2653 out[14]=out[14]+out[5];
2654 out[5]=(out[5] << 42)|(out[5] >> 22);
2655 out[5]=out[14]^out[5];
2656 out[8]=out[8]+out[1];
2657 out[1]=(out[1] << 41)|(out[1] >> 23);
2658 out[1]=out[8]^out[1];
2659 out[0]=out[0]+out[7];
2660 out[7]=(out[7] << 31)|(out[7] >> 33);
2661 out[7]=out[0]^out[7];
2662 out[2]=out[2]+out[5];
2663 out[5]=(out[5] << 44)|(out[5] >> 20);
2664 out[5]=out[2]^out[5];
2665 out[4]=out[4]+out[3];
2666 out[3]=(out[3] << 47)|(out[3] >> 17);
2667 out[3]=out[4]^out[3];
2668 out[6]=out[6]+out[1];
2669 out[1]=(out[1] << 46)|(out[1] >> 18);
2670 out[1]=out[6]^out[1];
2671 out[12]=out[12]+out[15];
2672 out[15]=(out[15] << 19)|(out[15] >> 45);
2673 out[15]=out[12]^out[15];
2674 out[14]=out[14]+out[13];
2675 out[13]=(out[13] << 42)|(out[13] >> 22);
2676 out[13]=out[14]^out[13];
2677 out[8]=out[8]+out[11];
2678 out[11]=(out[11] << 44)|(out[11] >> 20);
2679 out[11]=out[8]^out[11];
2680 out[10]=out[10]+out[9];
2681 out[9]=(out[9] << 25)|(out[9] >> 39);
2682 out[9]=out[10]^out[9];
2683 out[0]=out[0]+out[15];
2684 out[15]=(out[15] << 9)|(out[15] >> 55);
2685 out[15]=out[0]^out[15];
2686 out[2]=out[2]+out[11];
2687 out[11]=(out[11] << 48)|(out[11] >> 16);
2688 out[11]=out[2]^out[11];
2689 out[6]=out[6]+out[13];
2690 out[13]=(out[13] << 35)|(out[13] >> 29);
2691 out[13]=out[6]^out[13];
2692 out[4]=out[4]+out[9];
2693 out[9]=(out[9] << 52)|(out[9] >> 12);
2694 out[9]=out[4]^out[9];
2695 out[14]=out[14]+out[1];
2696 out[1]=(out[1] << 23)|(out[1] >> 41);
2697 out[1]=out[14]^out[1];
2698 out[8]=out[8]+out[5];
2699 out[5]=(out[5] << 31)|(out[5] >> 33);
2700 out[5]=out[8]^out[5];
2701 out[10]=out[10]+out[3];
2702 out[3]=(out[3] << 37)|(out[3] >> 27);
2703 out[3]=out[10]^out[3];
2704 out[12]=out[12]+out[7];
2705 out[7]=(out[7] << 20)|(out[7] >> 44);
2706 out[7]=out[12]^out[7];
2720 out[13]+=key[6]+tweak[1];
2723 out[0]=out[0]+out[1];
2724 out[1]=(out[1] << 24)|(out[1] >> 40);
2725 out[1]=out[0]^out[1];
2726 out[2]=out[2]+out[3];
2727 out[3]=(out[3] << 13)|(out[3] >> 51);
2728 out[3]=out[2]^out[3];
2729 out[4]=out[4]+out[5];
2730 out[5]=(out[5] << 8)|(out[5] >> 56);
2731 out[5]=out[4]^out[5];
2732 out[6]=out[6]+out[7];
2733 out[7]=(out[7] << 47)|(out[7] >> 17);
2734 out[7]=out[6]^out[7];
2735 out[8]=out[8]+out[9];
2736 out[9]=(out[9] << 8)|(out[9] >> 56);
2737 out[9]=out[8]^out[9];
2738 out[10]=out[10]+out[11];
2739 out[11]=(out[11] << 17)|(out[11] >> 47);
2740 out[11]=out[10]^out[11];
2741 out[12]=out[12]+out[13];
2742 out[13]=(out[13] << 22)|(out[13] >> 42);
2743 out[13]=out[12]^out[13];
2744 out[14]=out[14]+out[15];
2745 out[15]=(out[15] << 37)|(out[15] >> 27);
2746 out[15]=out[14]^out[15];
2747 out[0]=out[0]+out[9];
2748 out[9]=(out[9] << 38)|(out[9] >> 26);
2749 out[9]=out[0]^out[9];
2750 out[2]=out[2]+out[13];
2751 out[13]=(out[13] << 19)|(out[13] >> 45);
2752 out[13]=out[2]^out[13];
2753 out[6]=out[6]+out[11];
2754 out[11]=(out[11] << 10)|(out[11] >> 54);
2755 out[11]=out[6]^out[11];
2756 out[4]=out[4]+out[15];
2757 out[15]=(out[15] << 55)|(out[15] >> 9);
2758 out[15]=out[4]^out[15];
2759 out[10]=out[10]+out[7];
2760 out[7]=(out[7] << 49)|(out[7] >> 15);
2761 out[7]=out[10]^out[7];
2762 out[12]=out[12]+out[3];
2763 out[3]=(out[3] << 18)|(out[3] >> 46);
2764 out[3]=out[12]^out[3];
2765 out[14]=out[14]+out[5];
2766 out[5]=(out[5] << 23)|(out[5] >> 41);
2767 out[5]=out[14]^out[5];
2768 out[8]=out[8]+out[1];
2769 out[1]=(out[1] << 52)|(out[1] >> 12);
2770 out[1]=out[8]^out[1];
2771 out[0]=out[0]+out[7];
2772 out[7]=(out[7] << 33)|(out[7] >> 31);
2773 out[7]=out[0]^out[7];
2774 out[2]=out[2]+out[5];
2775 out[5]=(out[5] << 4)|(out[5] >> 60);
2776 out[5]=out[2]^out[5];
2777 out[4]=out[4]+out[3];
2778 out[3]=(out[3] << 51)|(out[3] >> 13);
2779 out[3]=out[4]^out[3];
2780 out[6]=out[6]+out[1];
2781 out[1]=(out[1] << 13)|(out[1] >> 51);
2782 out[1]=out[6]^out[1];
2783 out[12]=out[12]+out[15];
2784 out[15]=(out[15] << 34)|(out[15] >> 30);
2785 out[15]=out[12]^out[15];
2786 out[14]=out[14]+out[13];
2787 out[13]=(out[13] << 41)|(out[13] >> 23);
2788 out[13]=out[14]^out[13];
2789 out[8]=out[8]+out[11];
2790 out[11]=(out[11] << 59)|(out[11] >> 5);
2791 out[11]=out[8]^out[11];
2792 out[10]=out[10]+out[9];
2793 out[9]=(out[9] << 17)|(out[9] >> 47);
2794 out[9]=out[10]^out[9];
2795 out[0]=out[0]+out[15];
2796 out[15]=(out[15] << 5)|(out[15] >> 59);
2797 out[15]=out[0]^out[15];
2798 out[2]=out[2]+out[11];
2799 out[11]=(out[11] << 20)|(out[11] >> 44);
2800 out[11]=out[2]^out[11];
2801 out[6]=out[6]+out[13];
2802 out[13]=(out[13] << 48)|(out[13] >> 16);
2803 out[13]=out[6]^out[13];
2804 out[4]=out[4]+out[9];
2805 out[9]=(out[9] << 41)|(out[9] >> 23);
2806 out[9]=out[4]^out[9];
2807 out[14]=out[14]+out[1];
2808 out[1]=(out[1] << 47)|(out[1] >> 17);
2809 out[1]=out[14]^out[1];
2810 out[8]=out[8]+out[5];
2811 out[5]=(out[5] << 28)|(out[5] >> 36);
2812 out[5]=out[8]^out[5];
2813 out[10]=out[10]+out[3];
2814 out[3]=(out[3] << 16)|(out[3] >> 48);
2815 out[3]=out[10]^out[3];
2816 out[12]=out[12]+out[7];
2817 out[7]=(out[7] << 25)|(out[7] >> 39);
2818 out[7]=out[12]^out[7];
2833 out[14]+=key[8]+tweak[0];
2835 out[0]=out[0]+out[1];
2836 out[1]=(out[1] << 41)|(out[1] >> 23);
2837 out[1]=out[0]^out[1];
2838 out[2]=out[2]+out[3];
2839 out[3]=(out[3] << 9)|(out[3] >> 55);
2840 out[3]=out[2]^out[3];
2841 out[4]=out[4]+out[5];
2842 out[5]=(out[5] << 37)|(out[5] >> 27);
2843 out[5]=out[4]^out[5];
2844 out[6]=out[6]+out[7];
2845 out[7]=(out[7] << 31)|(out[7] >> 33);
2846 out[7]=out[6]^out[7];
2847 out[8]=out[8]+out[9];
2848 out[9]=(out[9] << 12)|(out[9] >> 52);
2849 out[9]=out[8]^out[9];
2850 out[10]=out[10]+out[11];
2851 out[11]=(out[11] << 47)|(out[11] >> 17);
2852 out[11]=out[10]^out[11];
2853 out[12]=out[12]+out[13];
2854 out[13]=(out[13] << 44)|(out[13] >> 20);
2855 out[13]=out[12]^out[13];
2856 out[14]=out[14]+out[15];
2857 out[15]=(out[15] << 30)|(out[15] >> 34);
2858 out[15]=out[14]^out[15];
2859 out[0]=out[0]+out[9];
2860 out[9]=(out[9] << 16)|(out[9] >> 48);
2861 out[9]=out[0]^out[9];
2862 out[2]=out[2]+out[13];
2863 out[13]=(out[13] << 34)|(out[13] >> 30);
2864 out[13]=out[2]^out[13];
2865 out[6]=out[6]+out[11];
2866 out[11]=(out[11] << 56)|(out[11] >> 8);
2867 out[11]=out[6]^out[11];
2868 out[4]=out[4]+out[15];
2869 out[15]=(out[15] << 51)|(out[15] >> 13);
2870 out[15]=out[4]^out[15];
2871 out[10]=out[10]+out[7];
2872 out[7]=(out[7] << 4)|(out[7] >> 60);
2873 out[7]=out[10]^out[7];
2874 out[12]=out[12]+out[3];
2875 out[3]=(out[3] << 53)|(out[3] >> 11);
2876 out[3]=out[12]^out[3];
2877 out[14]=out[14]+out[5];
2878 out[5]=(out[5] << 42)|(out[5] >> 22);
2879 out[5]=out[14]^out[5];
2880 out[8]=out[8]+out[1];
2881 out[1]=(out[1] << 41)|(out[1] >> 23);
2882 out[1]=out[8]^out[1];
2883 out[0]=out[0]+out[7];
2884 out[7]=(out[7] << 31)|(out[7] >> 33);
2885 out[7]=out[0]^out[7];
2886 out[2]=out[2]+out[5];
2887 out[5]=(out[5] << 44)|(out[5] >> 20);
2888 out[5]=out[2]^out[5];
2889 out[4]=out[4]+out[3];
2890 out[3]=(out[3] << 47)|(out[3] >> 17);
2891 out[3]=out[4]^out[3];
2892 out[6]=out[6]+out[1];
2893 out[1]=(out[1] << 46)|(out[1] >> 18);
2894 out[1]=out[6]^out[1];
2895 out[12]=out[12]+out[15];
2896 out[15]=(out[15] << 19)|(out[15] >> 45);
2897 out[15]=out[12]^out[15];
2898 out[14]=out[14]+out[13];
2899 out[13]=(out[13] << 42)|(out[13] >> 22);
2900 out[13]=out[14]^out[13];
2901 out[8]=out[8]+out[11];
2902 out[11]=(out[11] << 44)|(out[11] >> 20);
2903 out[11]=out[8]^out[11];
2904 out[10]=out[10]+out[9];
2905 out[9]=(out[9] << 25)|(out[9] >> 39);
2906 out[9]=out[10]^out[9];
2907 out[0]=out[0]+out[15];
2908 out[15]=(out[15] << 9)|(out[15] >> 55);
2909 out[15]=out[0]^out[15];
2910 out[2]=out[2]+out[11];
2911 out[11]=(out[11] << 48)|(out[11] >> 16);
2912 out[11]=out[2]^out[11];
2913 out[6]=out[6]+out[13];
2914 out[13]=(out[13] << 35)|(out[13] >> 29);
2915 out[13]=out[6]^out[13];
2916 out[4]=out[4]+out[9];
2917 out[9]=(out[9] << 52)|(out[9] >> 12);
2918 out[9]=out[4]^out[9];
2919 out[14]=out[14]+out[1];
2920 out[1]=(out[1] << 23)|(out[1] >> 41);
2921 out[1]=out[14]^out[1];
2922 out[8]=out[8]+out[5];
2923 out[5]=(out[5] << 31)|(out[5] >> 33);
2924 out[5]=out[8]^out[5];
2925 out[10]=out[10]+out[3];
2926 out[3]=(out[3] << 37)|(out[3] >> 27);
2927 out[3]=out[10]^out[3];
2928 out[12]=out[12]+out[7];
2929 out[7]=(out[7] << 20)|(out[7] >> 44);
2930 out[7]=out[12]^out[7];
2944 out[13]+=key[8]+tweak[0];
2945 out[14]+=key[9]+tweak[1];
2946 out[15]+=key[10]+12;
2947 out[0]=out[0]+out[1];
2948 out[1]=(out[1] << 24)|(out[1] >> 40);
2949 out[1]=out[0]^out[1];
2950 out[2]=out[2]+out[3];
2951 out[3]=(out[3] << 13)|(out[3] >> 51);
2952 out[3]=out[2]^out[3];
2953 out[4]=out[4]+out[5];
2954 out[5]=(out[5] << 8)|(out[5] >> 56);
2955 out[5]=out[4]^out[5];
2956 out[6]=out[6]+out[7];
2957 out[7]=(out[7] << 47)|(out[7] >> 17);
2958 out[7]=out[6]^out[7];
2959 out[8]=out[8]+out[9];
2960 out[9]=(out[9] << 8)|(out[9] >> 56);
2961 out[9]=out[8]^out[9];
2962 out[10]=out[10]+out[11];
2963 out[11]=(out[11] << 17)|(out[11] >> 47);
2964 out[11]=out[10]^out[11];
2965 out[12]=out[12]+out[13];
2966 out[13]=(out[13] << 22)|(out[13] >> 42);
2967 out[13]=out[12]^out[13];
2968 out[14]=out[14]+out[15];
2969 out[15]=(out[15] << 37)|(out[15] >> 27);
2970 out[15]=out[14]^out[15];
2971 out[0]=out[0]+out[9];
2972 out[9]=(out[9] << 38)|(out[9] >> 26);
2973 out[9]=out[0]^out[9];
2974 out[2]=out[2]+out[13];
2975 out[13]=(out[13] << 19)|(out[13] >> 45);
2976 out[13]=out[2]^out[13];
2977 out[6]=out[6]+out[11];
2978 out[11]=(out[11] << 10)|(out[11] >> 54);
2979 out[11]=out[6]^out[11];
2980 out[4]=out[4]+out[15];
2981 out[15]=(out[15] << 55)|(out[15] >> 9);
2982 out[15]=out[4]^out[15];
2983 out[10]=out[10]+out[7];
2984 out[7]=(out[7] << 49)|(out[7] >> 15);
2985 out[7]=out[10]^out[7];
2986 out[12]=out[12]+out[3];
2987 out[3]=(out[3] << 18)|(out[3] >> 46);
2988 out[3]=out[12]^out[3];
2989 out[14]=out[14]+out[5];
2990 out[5]=(out[5] << 23)|(out[5] >> 41);
2991 out[5]=out[14]^out[5];
2992 out[8]=out[8]+out[1];
2993 out[1]=(out[1] << 52)|(out[1] >> 12);
2994 out[1]=out[8]^out[1];
2995 out[0]=out[0]+out[7];
2996 out[7]=(out[7] << 33)|(out[7] >> 31);
2997 out[7]=out[0]^out[7];
2998 out[2]=out[2]+out[5];
2999 out[5]=(out[5] << 4)|(out[5] >> 60);
3000 out[5]=out[2]^out[5];
3001 out[4]=out[4]+out[3];
3002 out[3]=(out[3] << 51)|(out[3] >> 13);
3003 out[3]=out[4]^out[3];
3004 out[6]=out[6]+out[1];
3005 out[1]=(out[1] << 13)|(out[1] >> 51);
3006 out[1]=out[6]^out[1];
3007 out[12]=out[12]+out[15];
3008 out[15]=(out[15] << 34)|(out[15] >> 30);
3009 out[15]=out[12]^out[15];
3010 out[14]=out[14]+out[13];
3011 out[13]=(out[13] << 41)|(out[13] >> 23);
3012 out[13]=out[14]^out[13];
3013 out[8]=out[8]+out[11];
3014 out[11]=(out[11] << 59)|(out[11] >> 5);
3015 out[11]=out[8]^out[11];
3016 out[10]=out[10]+out[9];
3017 out[9]=(out[9] << 17)|(out[9] >> 47);
3018 out[9]=out[10]^out[9];
3019 out[0]=out[0]+out[15];
3020 out[15]=(out[15] << 5)|(out[15] >> 59);
3021 out[15]=out[0]^out[15];
3022 out[2]=out[2]+out[11];
3023 out[11]=(out[11] << 20)|(out[11] >> 44);
3024 out[11]=out[2]^out[11];
3025 out[6]=out[6]+out[13];
3026 out[13]=(out[13] << 48)|(out[13] >> 16);
3027 out[13]=out[6]^out[13];
3028 out[4]=out[4]+out[9];
3029 out[9]=(out[9] << 41)|(out[9] >> 23);
3030 out[9]=out[4]^out[9];
3031 out[14]=out[14]+out[1];
3032 out[1]=(out[1] << 47)|(out[1] >> 17);
3033 out[1]=out[14]^out[1];
3034 out[8]=out[8]+out[5];
3035 out[5]=(out[5] << 28)|(out[5] >> 36);
3036 out[5]=out[8]^out[5];
3037 out[10]=out[10]+out[3];
3038 out[3]=(out[3] << 16)|(out[3] >> 48);
3039 out[3]=out[10]^out[3];
3040 out[12]=out[12]+out[7];
3041 out[7]=(out[7] << 25)|(out[7] >> 39);
3042 out[7]=out[12]^out[7];
3056 out[13]+=key[9]+tweak[1];
3058 out[15]+=key[11]+13;
3059 out[0]=out[0]+out[1];
3060 out[1]=(out[1] << 41)|(out[1] >> 23);
3061 out[1]=out[0]^out[1];
3062 out[2]=out[2]+out[3];
3063 out[3]=(out[3] << 9)|(out[3] >> 55);
3064 out[3]=out[2]^out[3];
3065 out[4]=out[4]+out[5];
3066 out[5]=(out[5] << 37)|(out[5] >> 27);
3067 out[5]=out[4]^out[5];
3068 out[6]=out[6]+out[7];
3069 out[7]=(out[7] << 31)|(out[7] >> 33);
3070 out[7]=out[6]^out[7];
3071 out[8]=out[8]+out[9];
3072 out[9]=(out[9] << 12)|(out[9] >> 52);
3073 out[9]=out[8]^out[9];
3074 out[10]=out[10]+out[11];
3075 out[11]=(out[11] << 47)|(out[11] >> 17);
3076 out[11]=out[10]^out[11];
3077 out[12]=out[12]+out[13];
3078 out[13]=(out[13] << 44)|(out[13] >> 20);
3079 out[13]=out[12]^out[13];
3080 out[14]=out[14]+out[15];
3081 out[15]=(out[15] << 30)|(out[15] >> 34);
3082 out[15]=out[14]^out[15];
3083 out[0]=out[0]+out[9];
3084 out[9]=(out[9] << 16)|(out[9] >> 48);
3085 out[9]=out[0]^out[9];
3086 out[2]=out[2]+out[13];
3087 out[13]=(out[13] << 34)|(out[13] >> 30);
3088 out[13]=out[2]^out[13];
3089 out[6]=out[6]+out[11];
3090 out[11]=(out[11] << 56)|(out[11] >> 8);
3091 out[11]=out[6]^out[11];
3092 out[4]=out[4]+out[15];
3093 out[15]=(out[15] << 51)|(out[15] >> 13);
3094 out[15]=out[4]^out[15];
3095 out[10]=out[10]+out[7];
3096 out[7]=(out[7] << 4)|(out[7] >> 60);
3097 out[7]=out[10]^out[7];
3098 out[12]=out[12]+out[3];
3099 out[3]=(out[3] << 53)|(out[3] >> 11);
3100 out[3]=out[12]^out[3];
3101 out[14]=out[14]+out[5];
3102 out[5]=(out[5] << 42)|(out[5] >> 22);
3103 out[5]=out[14]^out[5];
3104 out[8]=out[8]+out[1];
3105 out[1]=(out[1] << 41)|(out[1] >> 23);
3106 out[1]=out[8]^out[1];
3107 out[0]=out[0]+out[7];
3108 out[7]=(out[7] << 31)|(out[7] >> 33);
3109 out[7]=out[0]^out[7];
3110 out[2]=out[2]+out[5];
3111 out[5]=(out[5] << 44)|(out[5] >> 20);
3112 out[5]=out[2]^out[5];
3113 out[4]=out[4]+out[3];
3114 out[3]=(out[3] << 47)|(out[3] >> 17);
3115 out[3]=out[4]^out[3];
3116 out[6]=out[6]+out[1];
3117 out[1]=(out[1] << 46)|(out[1] >> 18);
3118 out[1]=out[6]^out[1];
3119 out[12]=out[12]+out[15];
3120 out[15]=(out[15] << 19)|(out[15] >> 45);
3121 out[15]=out[12]^out[15];
3122 out[14]=out[14]+out[13];
3123 out[13]=(out[13] << 42)|(out[13] >> 22);
3124 out[13]=out[14]^out[13];
3125 out[8]=out[8]+out[11];
3126 out[11]=(out[11] << 44)|(out[11] >> 20);
3127 out[11]=out[8]^out[11];
3128 out[10]=out[10]+out[9];
3129 out[9]=(out[9] << 25)|(out[9] >> 39);
3130 out[9]=out[10]^out[9];
3131 out[0]=out[0]+out[15];
3132 out[15]=(out[15] << 9)|(out[15] >> 55);
3133 out[15]=out[0]^out[15];
3134 out[2]=out[2]+out[11];
3135 out[11]=(out[11] << 48)|(out[11] >> 16);
3136 out[11]=out[2]^out[11];
3137 out[6]=out[6]+out[13];
3138 out[13]=(out[13] << 35)|(out[13] >> 29);
3139 out[13]=out[6]^out[13];
3140 out[4]=out[4]+out[9];
3141 out[9]=(out[9] << 52)|(out[9] >> 12);
3142 out[9]=out[4]^out[9];
3143 out[14]=out[14]+out[1];
3144 out[1]=(out[1] << 23)|(out[1] >> 41);
3145 out[1]=out[14]^out[1];
3146 out[8]=out[8]+out[5];
3147 out[5]=(out[5] << 31)|(out[5] >> 33);
3148 out[5]=out[8]^out[5];
3149 out[10]=out[10]+out[3];
3150 out[3]=(out[3] << 37)|(out[3] >> 27);
3151 out[3]=out[10]^out[3];
3152 out[12]=out[12]+out[7];
3153 out[7]=(out[7] << 20)|(out[7] >> 44);
3154 out[7]=out[12]^out[7];
3169 out[14]+=key[11]+tweak[0];
3170 out[15]+=key[12]+14;
3171 out[0]=out[0]+out[1];
3172 out[1]=(out[1] << 24)|(out[1] >> 40);
3173 out[1]=out[0]^out[1];
3174 out[2]=out[2]+out[3];
3175 out[3]=(out[3] << 13)|(out[3] >> 51);
3176 out[3]=out[2]^out[3];
3177 out[4]=out[4]+out[5];
3178 out[5]=(out[5] << 8)|(out[5] >> 56);
3179 out[5]=out[4]^out[5];
3180 out[6]=out[6]+out[7];
3181 out[7]=(out[7] << 47)|(out[7] >> 17);
3182 out[7]=out[6]^out[7];
3183 out[8]=out[8]+out[9];
3184 out[9]=(out[9] << 8)|(out[9] >> 56);
3185 out[9]=out[8]^out[9];
3186 out[10]=out[10]+out[11];
3187 out[11]=(out[11] << 17)|(out[11] >> 47);
3188 out[11]=out[10]^out[11];
3189 out[12]=out[12]+out[13];
3190 out[13]=(out[13] << 22)|(out[13] >> 42);
3191 out[13]=out[12]^out[13];
3192 out[14]=out[14]+out[15];
3193 out[15]=(out[15] << 37)|(out[15] >> 27);
3194 out[15]=out[14]^out[15];
3195 out[0]=out[0]+out[9];
3196 out[9]=(out[9] << 38)|(out[9] >> 26);
3197 out[9]=out[0]^out[9];
3198 out[2]=out[2]+out[13];
3199 out[13]=(out[13] << 19)|(out[13] >> 45);
3200 out[13]=out[2]^out[13];
3201 out[6]=out[6]+out[11];
3202 out[11]=(out[11] << 10)|(out[11] >> 54);
3203 out[11]=out[6]^out[11];
3204 out[4]=out[4]+out[15];
3205 out[15]=(out[15] << 55)|(out[15] >> 9);
3206 out[15]=out[4]^out[15];
3207 out[10]=out[10]+out[7];
3208 out[7]=(out[7] << 49)|(out[7] >> 15);
3209 out[7]=out[10]^out[7];
3210 out[12]=out[12]+out[3];
3211 out[3]=(out[3] << 18)|(out[3] >> 46);
3212 out[3]=out[12]^out[3];
3213 out[14]=out[14]+out[5];
3214 out[5]=(out[5] << 23)|(out[5] >> 41);
3215 out[5]=out[14]^out[5];
3216 out[8]=out[8]+out[1];
3217 out[1]=(out[1] << 52)|(out[1] >> 12);
3218 out[1]=out[8]^out[1];
3219 out[0]=out[0]+out[7];
3220 out[7]=(out[7] << 33)|(out[7] >> 31);
3221 out[7]=out[0]^out[7];
3222 out[2]=out[2]+out[5];
3223 out[5]=(out[5] << 4)|(out[5] >> 60);
3224 out[5]=out[2]^out[5];
3225 out[4]=out[4]+out[3];
3226 out[3]=(out[3] << 51)|(out[3] >> 13);
3227 out[3]=out[4]^out[3];
3228 out[6]=out[6]+out[1];
3229 out[1]=(out[1] << 13)|(out[1] >> 51);
3230 out[1]=out[6]^out[1];
3231 out[12]=out[12]+out[15];
3232 out[15]=(out[15] << 34)|(out[15] >> 30);
3233 out[15]=out[12]^out[15];
3234 out[14]=out[14]+out[13];
3235 out[13]=(out[13] << 41)|(out[13] >> 23);
3236 out[13]=out[14]^out[13];
3237 out[8]=out[8]+out[11];
3238 out[11]=(out[11] << 59)|(out[11] >> 5);
3239 out[11]=out[8]^out[11];
3240 out[10]=out[10]+out[9];
3241 out[9]=(out[9] << 17)|(out[9] >> 47);
3242 out[9]=out[10]^out[9];
3243 out[0]=out[0]+out[15];
3244 out[15]=(out[15] << 5)|(out[15] >> 59);
3245 out[15]=out[0]^out[15];
3246 out[2]=out[2]+out[11];
3247 out[11]=(out[11] << 20)|(out[11] >> 44);
3248 out[11]=out[2]^out[11];
3249 out[6]=out[6]+out[13];
3250 out[13]=(out[13] << 48)|(out[13] >> 16);
3251 out[13]=out[6]^out[13];
3252 out[4]=out[4]+out[9];
3253 out[9]=(out[9] << 41)|(out[9] >> 23);
3254 out[9]=out[4]^out[9];
3255 out[14]=out[14]+out[1];
3256 out[1]=(out[1] << 47)|(out[1] >> 17);
3257 out[1]=out[14]^out[1];
3258 out[8]=out[8]+out[5];
3259 out[5]=(out[5] << 28)|(out[5] >> 36);
3260 out[5]=out[8]^out[5];
3261 out[10]=out[10]+out[3];
3262 out[3]=(out[3] << 16)|(out[3] >> 48);
3263 out[3]=out[10]^out[3];
3264 out[12]=out[12]+out[7];
3265 out[7]=(out[7] << 25)|(out[7] >> 39);
3266 out[7]=out[12]^out[7];
3280 out[13]+=key[11]+tweak[0];
3281 out[14]+=key[12]+tweak[1];
3282 out[15]+=key[13]+15;
3283 out[0]=out[0]+out[1];
3284 out[1]=(out[1] << 41)|(out[1] >> 23);
3285 out[1]=out[0]^out[1];
3286 out[2]=out[2]+out[3];
3287 out[3]=(out[3] << 9)|(out[3] >> 55);
3288 out[3]=out[2]^out[3];
3289 out[4]=out[4]+out[5];
3290 out[5]=(out[5] << 37)|(out[5] >> 27);
3291 out[5]=out[4]^out[5];
3292 out[6]=out[6]+out[7];
3293 out[7]=(out[7] << 31)|(out[7] >> 33);
3294 out[7]=out[6]^out[7];
3295 out[8]=out[8]+out[9];
3296 out[9]=(out[9] << 12)|(out[9] >> 52);
3297 out[9]=out[8]^out[9];
3298 out[10]=out[10]+out[11];
3299 out[11]=(out[11] << 47)|(out[11] >> 17);
3300 out[11]=out[10]^out[11];
3301 out[12]=out[12]+out[13];
3302 out[13]=(out[13] << 44)|(out[13] >> 20);
3303 out[13]=out[12]^out[13];
3304 out[14]=out[14]+out[15];
3305 out[15]=(out[15] << 30)|(out[15] >> 34);
3306 out[15]=out[14]^out[15];
3307 out[0]=out[0]+out[9];
3308 out[9]=(out[9] << 16)|(out[9] >> 48);
3309 out[9]=out[0]^out[9];
3310 out[2]=out[2]+out[13];
3311 out[13]=(out[13] << 34)|(out[13] >> 30);
3312 out[13]=out[2]^out[13];
3313 out[6]=out[6]+out[11];
3314 out[11]=(out[11] << 56)|(out[11] >> 8);
3315 out[11]=out[6]^out[11];
3316 out[4]=out[4]+out[15];
3317 out[15]=(out[15] << 51)|(out[15] >> 13);
3318 out[15]=out[4]^out[15];
3319 out[10]=out[10]+out[7];
3320 out[7]=(out[7] << 4)|(out[7] >> 60);
3321 out[7]=out[10]^out[7];
3322 out[12]=out[12]+out[3];
3323 out[3]=(out[3] << 53)|(out[3] >> 11);
3324 out[3]=out[12]^out[3];
3325 out[14]=out[14]+out[5];
3326 out[5]=(out[5] << 42)|(out[5] >> 22);
3327 out[5]=out[14]^out[5];
3328 out[8]=out[8]+out[1];
3329 out[1]=(out[1] << 41)|(out[1] >> 23);
3330 out[1]=out[8]^out[1];
3331 out[0]=out[0]+out[7];
3332 out[7]=(out[7] << 31)|(out[7] >> 33);
3333 out[7]=out[0]^out[7];
3334 out[2]=out[2]+out[5];
3335 out[5]=(out[5] << 44)|(out[5] >> 20);
3336 out[5]=out[2]^out[5];
3337 out[4]=out[4]+out[3];
3338 out[3]=(out[3] << 47)|(out[3] >> 17);
3339 out[3]=out[4]^out[3];
3340 out[6]=out[6]+out[1];
3341 out[1]=(out[1] << 46)|(out[1] >> 18);
3342 out[1]=out[6]^out[1];
3343 out[12]=out[12]+out[15];
3344 out[15]=(out[15] << 19)|(out[15] >> 45);
3345 out[15]=out[12]^out[15];
3346 out[14]=out[14]+out[13];
3347 out[13]=(out[13] << 42)|(out[13] >> 22);
3348 out[13]=out[14]^out[13];
3349 out[8]=out[8]+out[11];
3350 out[11]=(out[11] << 44)|(out[11] >> 20);
3351 out[11]=out[8]^out[11];
3352 out[10]=out[10]+out[9];
3353 out[9]=(out[9] << 25)|(out[9] >> 39);
3354 out[9]=out[10]^out[9];
3355 out[0]=out[0]+out[15];
3356 out[15]=(out[15] << 9)|(out[15] >> 55);
3357 out[15]=out[0]^out[15];
3358 out[2]=out[2]+out[11];
3359 out[11]=(out[11] << 48)|(out[11] >> 16);
3360 out[11]=out[2]^out[11];
3361 out[6]=out[6]+out[13];
3362 out[13]=(out[13] << 35)|(out[13] >> 29);
3363 out[13]=out[6]^out[13];
3364 out[4]=out[4]+out[9];
3365 out[9]=(out[9] << 52)|(out[9] >> 12);
3366 out[9]=out[4]^out[9];
3367 out[14]=out[14]+out[1];
3368 out[1]=(out[1] << 23)|(out[1] >> 41);
3369 out[1]=out[14]^out[1];
3370 out[8]=out[8]+out[5];
3371 out[5]=(out[5] << 31)|(out[5] >> 33);
3372 out[5]=out[8]^out[5];
3373 out[10]=out[10]+out[3];
3374 out[3]=(out[3] << 37)|(out[3] >> 27);
3375 out[3]=out[10]^out[3];
3376 out[12]=out[12]+out[7];
3377 out[7]=(out[7] << 20)|(out[7] >> 44);
3378 out[7]=out[12]^out[7];
3392 out[13]+=key[12]+tweak[1];
3394 out[15]+=key[14]+16;
3395 out[0]=out[0]+out[1];
3396 out[1]=(out[1] << 24)|(out[1] >> 40);
3397 out[1]=out[0]^out[1];
3398 out[2]=out[2]+out[3];
3399 out[3]=(out[3] << 13)|(out[3] >> 51);
3400 out[3]=out[2]^out[3];
3401 out[4]=out[4]+out[5];
3402 out[5]=(out[5] << 8)|(out[5] >> 56);
3403 out[5]=out[4]^out[5];
3404 out[6]=out[6]+out[7];
3405 out[7]=(out[7] << 47)|(out[7] >> 17);
3406 out[7]=out[6]^out[7];
3407 out[8]=out[8]+out[9];
3408 out[9]=(out[9] << 8)|(out[9] >> 56);
3409 out[9]=out[8]^out[9];
3410 out[10]=out[10]+out[11];
3411 out[11]=(out[11] << 17)|(out[11] >> 47);
3412 out[11]=out[10]^out[11];
3413 out[12]=out[12]+out[13];
3414 out[13]=(out[13] << 22)|(out[13] >> 42);
3415 out[13]=out[12]^out[13];
3416 out[14]=out[14]+out[15];
3417 out[15]=(out[15] << 37)|(out[15] >> 27);
3418 out[15]=out[14]^out[15];
3419 out[0]=out[0]+out[9];
3420 out[9]=(out[9] << 38)|(out[9] >> 26);
3421 out[9]=out[0]^out[9];
3422 out[2]=out[2]+out[13];
3423 out[13]=(out[13] << 19)|(out[13] >> 45);
3424 out[13]=out[2]^out[13];
3425 out[6]=out[6]+out[11];
3426 out[11]=(out[11] << 10)|(out[11] >> 54);
3427 out[11]=out[6]^out[11];
3428 out[4]=out[4]+out[15];
3429 out[15]=(out[15] << 55)|(out[15] >> 9);
3430 out[15]=out[4]^out[15];
3431 out[10]=out[10]+out[7];
3432 out[7]=(out[7] << 49)|(out[7] >> 15);
3433 out[7]=out[10]^out[7];
3434 out[12]=out[12]+out[3];
3435 out[3]=(out[3] << 18)|(out[3] >> 46);
3436 out[3]=out[12]^out[3];
3437 out[14]=out[14]+out[5];
3438 out[5]=(out[5] << 23)|(out[5] >> 41);
3439 out[5]=out[14]^out[5];
3440 out[8]=out[8]+out[1];
3441 out[1]=(out[1] << 52)|(out[1] >> 12);
3442 out[1]=out[8]^out[1];
3443 out[0]=out[0]+out[7];
3444 out[7]=(out[7] << 33)|(out[7] >> 31);
3445 out[7]=out[0]^out[7];
3446 out[2]=out[2]+out[5];
3447 out[5]=(out[5] << 4)|(out[5] >> 60);
3448 out[5]=out[2]^out[5];
3449 out[4]=out[4]+out[3];
3450 out[3]=(out[3] << 51)|(out[3] >> 13);
3451 out[3]=out[4]^out[3];
3452 out[6]=out[6]+out[1];
3453 out[1]=(out[1] << 13)|(out[1] >> 51);
3454 out[1]=out[6]^out[1];
3455 out[12]=out[12]+out[15];
3456 out[15]=(out[15] << 34)|(out[15] >> 30);
3457 out[15]=out[12]^out[15];
3458 out[14]=out[14]+out[13];
3459 out[13]=(out[13] << 41)|(out[13] >> 23);
3460 out[13]=out[14]^out[13];
3461 out[8]=out[8]+out[11];
3462 out[11]=(out[11] << 59)|(out[11] >> 5);
3463 out[11]=out[8]^out[11];
3464 out[10]=out[10]+out[9];
3465 out[9]=(out[9] << 17)|(out[9] >> 47);
3466 out[9]=out[10]^out[9];
3467 out[0]=out[0]+out[15];
3468 out[15]=(out[15] << 5)|(out[15] >> 59);
3469 out[15]=out[0]^out[15];
3470 out[2]=out[2]+out[11];
3471 out[11]=(out[11] << 20)|(out[11] >> 44);
3472 out[11]=out[2]^out[11];
3473 out[6]=out[6]+out[13];
3474 out[13]=(out[13] << 48)|(out[13] >> 16);
3475 out[13]=out[6]^out[13];
3476 out[4]=out[4]+out[9];
3477 out[9]=(out[9] << 41)|(out[9] >> 23);
3478 out[9]=out[4]^out[9];
3479 out[14]=out[14]+out[1];
3480 out[1]=(out[1] << 47)|(out[1] >> 17);
3481 out[1]=out[14]^out[1];
3482 out[8]=out[8]+out[5];
3483 out[5]=(out[5] << 28)|(out[5] >> 36);
3484 out[5]=out[8]^out[5];
3485 out[10]=out[10]+out[3];
3486 out[3]=(out[3] << 16)|(out[3] >> 48);
3487 out[3]=out[10]^out[3];
3488 out[12]=out[12]+out[7];
3489 out[7]=(out[7] << 25)|(out[7] >> 39);
3490 out[7]=out[12]^out[7];
3505 out[14]+=key[14]+tweak[0];
3506 out[15]+=key[15]+17;
3507 out[0]=out[0]+out[1];
3508 out[1]=(out[1] << 41)|(out[1] >> 23);
3509 out[1]=out[0]^out[1];
3510 out[2]=out[2]+out[3];
3511 out[3]=(out[3] << 9)|(out[3] >> 55);
3512 out[3]=out[2]^out[3];
3513 out[4]=out[4]+out[5];
3514 out[5]=(out[5] << 37)|(out[5] >> 27);
3515 out[5]=out[4]^out[5];
3516 out[6]=out[6]+out[7];
3517 out[7]=(out[7] << 31)|(out[7] >> 33);
3518 out[7]=out[6]^out[7];
3519 out[8]=out[8]+out[9];
3520 out[9]=(out[9] << 12)|(out[9] >> 52);
3521 out[9]=out[8]^out[9];
3522 out[10]=out[10]+out[11];
3523 out[11]=(out[11] << 47)|(out[11] >> 17);
3524 out[11]=out[10]^out[11];
3525 out[12]=out[12]+out[13];
3526 out[13]=(out[13] << 44)|(out[13] >> 20);
3527 out[13]=out[12]^out[13];
3528 out[14]=out[14]+out[15];
3529 out[15]=(out[15] << 30)|(out[15] >> 34);
3530 out[15]=out[14]^out[15];
3531 out[0]=out[0]+out[9];
3532 out[9]=(out[9] << 16)|(out[9] >> 48);
3533 out[9]=out[0]^out[9];
3534 out[2]=out[2]+out[13];
3535 out[13]=(out[13] << 34)|(out[13] >> 30);
3536 out[13]=out[2]^out[13];
3537 out[6]=out[6]+out[11];
3538 out[11]=(out[11] << 56)|(out[11] >> 8);
3539 out[11]=out[6]^out[11];
3540 out[4]=out[4]+out[15];
3541 out[15]=(out[15] << 51)|(out[15] >> 13);
3542 out[15]=out[4]^out[15];
3543 out[10]=out[10]+out[7];
3544 out[7]=(out[7] << 4)|(out[7] >> 60);
3545 out[7]=out[10]^out[7];
3546 out[12]=out[12]+out[3];
3547 out[3]=(out[3] << 53)|(out[3] >> 11);
3548 out[3]=out[12]^out[3];
3549 out[14]=out[14]+out[5];
3550 out[5]=(out[5] << 42)|(out[5] >> 22);
3551 out[5]=out[14]^out[5];
3552 out[8]=out[8]+out[1];
3553 out[1]=(out[1] << 41)|(out[1] >> 23);
3554 out[1]=out[8]^out[1];
3555 out[0]=out[0]+out[7];
3556 out[7]=(out[7] << 31)|(out[7] >> 33);
3557 out[7]=out[0]^out[7];
3558 out[2]=out[2]+out[5];
3559 out[5]=(out[5] << 44)|(out[5] >> 20);
3560 out[5]=out[2]^out[5];
3561 out[4]=out[4]+out[3];
3562 out[3]=(out[3] << 47)|(out[3] >> 17);
3563 out[3]=out[4]^out[3];
3564 out[6]=out[6]+out[1];
3565 out[1]=(out[1] << 46)|(out[1] >> 18);
3566 out[1]=out[6]^out[1];
3567 out[12]=out[12]+out[15];
3568 out[15]=(out[15] << 19)|(out[15] >> 45);
3569 out[15]=out[12]^out[15];
3570 out[14]=out[14]+out[13];
3571 out[13]=(out[13] << 42)|(out[13] >> 22);
3572 out[13]=out[14]^out[13];
3573 out[8]=out[8]+out[11];
3574 out[11]=(out[11] << 44)|(out[11] >> 20);
3575 out[11]=out[8]^out[11];
3576 out[10]=out[10]+out[9];
3577 out[9]=(out[9] << 25)|(out[9] >> 39);
3578 out[9]=out[10]^out[9];
3579 out[0]=out[0]+out[15];
3580 out[15]=(out[15] << 9)|(out[15] >> 55);
3581 out[15]=out[0]^out[15];
3582 out[2]=out[2]+out[11];
3583 out[11]=(out[11] << 48)|(out[11] >> 16);
3584 out[11]=out[2]^out[11];
3585 out[6]=out[6]+out[13];
3586 out[13]=(out[13] << 35)|(out[13] >> 29);
3587 out[13]=out[6]^out[13];
3588 out[4]=out[4]+out[9];
3589 out[9]=(out[9] << 52)|(out[9] >> 12);
3590 out[9]=out[4]^out[9];
3591 out[14]=out[14]+out[1];
3592 out[1]=(out[1] << 23)|(out[1] >> 41);
3593 out[1]=out[14]^out[1];
3594 out[8]=out[8]+out[5];
3595 out[5]=(out[5] << 31)|(out[5] >> 33);
3596 out[5]=out[8]^out[5];
3597 out[10]=out[10]+out[3];
3598 out[3]=(out[3] << 37)|(out[3] >> 27);
3599 out[3]=out[10]^out[3];
3600 out[12]=out[12]+out[7];
3601 out[7]=(out[7] << 20)|(out[7] >> 44);
3602 out[7]=out[12]^out[7];
3616 out[13]+=key[14]+tweak[0];
3617 out[14]+=key[15]+tweak[1];
3619 out[0]=out[0]+out[1];
3620 out[1]=(out[1] << 24)|(out[1] >> 40);
3621 out[1]=out[0]^out[1];
3622 out[2]=out[2]+out[3];
3623 out[3]=(out[3] << 13)|(out[3] >> 51);
3624 out[3]=out[2]^out[3];
3625 out[4]=out[4]+out[5];
3626 out[5]=(out[5] << 8)|(out[5] >> 56);
3627 out[5]=out[4]^out[5];
3628 out[6]=out[6]+out[7];
3629 out[7]=(out[7] << 47)|(out[7] >> 17);
3630 out[7]=out[6]^out[7];
3631 out[8]=out[8]+out[9];
3632 out[9]=(out[9] << 8)|(out[9] >> 56);
3633 out[9]=out[8]^out[9];
3634 out[10]=out[10]+out[11];
3635 out[11]=(out[11] << 17)|(out[11] >> 47);
3636 out[11]=out[10]^out[11];
3637 out[12]=out[12]+out[13];
3638 out[13]=(out[13] << 22)|(out[13] >> 42);
3639 out[13]=out[12]^out[13];
3640 out[14]=out[14]+out[15];
3641 out[15]=(out[15] << 37)|(out[15] >> 27);
3642 out[15]=out[14]^out[15];
3643 out[0]=out[0]+out[9];
3644 out[9]=(out[9] << 38)|(out[9] >> 26);
3645 out[9]=out[0]^out[9];
3646 out[2]=out[2]+out[13];
3647 out[13]=(out[13] << 19)|(out[13] >> 45);
3648 out[13]=out[2]^out[13];
3649 out[6]=out[6]+out[11];
3650 out[11]=(out[11] << 10)|(out[11] >> 54);
3651 out[11]=out[6]^out[11];
3652 out[4]=out[4]+out[15];
3653 out[15]=(out[15] << 55)|(out[15] >> 9);
3654 out[15]=out[4]^out[15];
3655 out[10]=out[10]+out[7];
3656 out[7]=(out[7] << 49)|(out[7] >> 15);
3657 out[7]=out[10]^out[7];
3658 out[12]=out[12]+out[3];
3659 out[3]=(out[3] << 18)|(out[3] >> 46);
3660 out[3]=out[12]^out[3];
3661 out[14]=out[14]+out[5];
3662 out[5]=(out[5] << 23)|(out[5] >> 41);
3663 out[5]=out[14]^out[5];
3664 out[8]=out[8]+out[1];
3665 out[1]=(out[1] << 52)|(out[1] >> 12);
3666 out[1]=out[8]^out[1];
3667 out[0]=out[0]+out[7];
3668 out[7]=(out[7] << 33)|(out[7] >> 31);
3669 out[7]=out[0]^out[7];
3670 out[2]=out[2]+out[5];
3671 out[5]=(out[5] << 4)|(out[5] >> 60);
3672 out[5]=out[2]^out[5];
3673 out[4]=out[4]+out[3];
3674 out[3]=(out[3] << 51)|(out[3] >> 13);
3675 out[3]=out[4]^out[3];
3676 out[6]=out[6]+out[1];
3677 out[1]=(out[1] << 13)|(out[1] >> 51);
3678 out[1]=out[6]^out[1];
3679 out[12]=out[12]+out[15];
3680 out[15]=(out[15] << 34)|(out[15] >> 30);
3681 out[15]=out[12]^out[15];
3682 out[14]=out[14]+out[13];
3683 out[13]=(out[13] << 41)|(out[13] >> 23);
3684 out[13]=out[14]^out[13];
3685 out[8]=out[8]+out[11];
3686 out[11]=(out[11] << 59)|(out[11] >> 5);
3687 out[11]=out[8]^out[11];
3688 out[10]=out[10]+out[9];
3689 out[9]=(out[9] << 17)|(out[9] >> 47);
3690 out[9]=out[10]^out[9];
3691 out[0]=out[0]+out[15];
3692 out[15]=(out[15] << 5)|(out[15] >> 59);
3693 out[15]=out[0]^out[15];
3694 out[2]=out[2]+out[11];
3695 out[11]=(out[11] << 20)|(out[11] >> 44);
3696 out[11]=out[2]^out[11];
3697 out[6]=out[6]+out[13];
3698 out[13]=(out[13] << 48)|(out[13] >> 16);
3699 out[13]=out[6]^out[13];
3700 out[4]=out[4]+out[9];
3701 out[9]=(out[9] << 41)|(out[9] >> 23);
3702 out[9]=out[4]^out[9];
3703 out[14]=out[14]+out[1];
3704 out[1]=(out[1] << 47)|(out[1] >> 17);
3705 out[1]=out[14]^out[1];
3706 out[8]=out[8]+out[5];
3707 out[5]=(out[5] << 28)|(out[5] >> 36);
3708 out[5]=out[8]^out[5];
3709 out[10]=out[10]+out[3];
3710 out[3]=(out[3] << 16)|(out[3] >> 48);
3711 out[3]=out[10]^out[3];
3712 out[12]=out[12]+out[7];
3713 out[7]=(out[7] << 25)|(out[7] >> 39);
3714 out[7]=out[12]^out[7];
3728 out[13]+=key[15]+tweak[1];
3731 out[0]=out[0]+out[1];
3732 out[1]=(out[1] << 41)|(out[1] >> 23);
3733 out[1]=out[0]^out[1];
3734 out[2]=out[2]+out[3];
3735 out[3]=(out[3] << 9)|(out[3] >> 55);
3736 out[3]=out[2]^out[3];
3737 out[4]=out[4]+out[5];
3738 out[5]=(out[5] << 37)|(out[5] >> 27);
3739 out[5]=out[4]^out[5];
3740 out[6]=out[6]+out[7];
3741 out[7]=(out[7] << 31)|(out[7] >> 33);
3742 out[7]=out[6]^out[7];
3743 out[8]=out[8]+out[9];
3744 out[9]=(out[9] << 12)|(out[9] >> 52);
3745 out[9]=out[8]^out[9];
3746 out[10]=out[10]+out[11];
3747 out[11]=(out[11] << 47)|(out[11] >> 17);
3748 out[11]=out[10]^out[11];
3749 out[12]=out[12]+out[13];
3750 out[13]=(out[13] << 44)|(out[13] >> 20);
3751 out[13]=out[12]^out[13];
3752 out[14]=out[14]+out[15];
3753 out[15]=(out[15] << 30)|(out[15] >> 34);
3754 out[15]=out[14]^out[15];
3755 out[0]=out[0]+out[9];
3756 out[9]=(out[9] << 16)|(out[9] >> 48);
3757 out[9]=out[0]^out[9];
3758 out[2]=out[2]+out[13];
3759 out[13]=(out[13] << 34)|(out[13] >> 30);
3760 out[13]=out[2]^out[13];
3761 out[6]=out[6]+out[11];
3762 out[11]=(out[11] << 56)|(out[11] >> 8);
3763 out[11]=out[6]^out[11];
3764 out[4]=out[4]+out[15];
3765 out[15]=(out[15] << 51)|(out[15] >> 13);
3766 out[15]=out[4]^out[15];
3767 out[10]=out[10]+out[7];
3768 out[7]=(out[7] << 4)|(out[7] >> 60);
3769 out[7]=out[10]^out[7];
3770 out[12]=out[12]+out[3];
3771 out[3]=(out[3] << 53)|(out[3] >> 11);
3772 out[3]=out[12]^out[3];
3773 out[14]=out[14]+out[5];
3774 out[5]=(out[5] << 42)|(out[5] >> 22);
3775 out[5]=out[14]^out[5];
3776 out[8]=out[8]+out[1];
3777 out[1]=(out[1] << 41)|(out[1] >> 23);
3778 out[1]=out[8]^out[1];
3779 out[0]=out[0]+out[7];
3780 out[7]=(out[7] << 31)|(out[7] >> 33);
3781 out[7]=out[0]^out[7];
3782 out[2]=out[2]+out[5];
3783 out[5]=(out[5] << 44)|(out[5] >> 20);
3784 out[5]=out[2]^out[5];
3785 out[4]=out[4]+out[3];
3786 out[3]=(out[3] << 47)|(out[3] >> 17);
3787 out[3]=out[4]^out[3];
3788 out[6]=out[6]+out[1];
3789 out[1]=(out[1] << 46)|(out[1] >> 18);
3790 out[1]=out[6]^out[1];
3791 out[12]=out[12]+out[15];
3792 out[15]=(out[15] << 19)|(out[15] >> 45);
3793 out[15]=out[12]^out[15];
3794 out[14]=out[14]+out[13];
3795 out[13]=(out[13] << 42)|(out[13] >> 22);
3796 out[13]=out[14]^out[13];
3797 out[8]=out[8]+out[11];
3798 out[11]=(out[11] << 44)|(out[11] >> 20);
3799 out[11]=out[8]^out[11];
3800 out[10]=out[10]+out[9];
3801 out[9]=(out[9] << 25)|(out[9] >> 39);
3802 out[9]=out[10]^out[9];
3803 out[0]=out[0]+out[15];
3804 out[15]=(out[15] << 9)|(out[15] >> 55);
3805 out[15]=out[0]^out[15];
3806 out[2]=out[2]+out[11];
3807 out[11]=(out[11] << 48)|(out[11] >> 16);
3808 out[11]=out[2]^out[11];
3809 out[6]=out[6]+out[13];
3810 out[13]=(out[13] << 35)|(out[13] >> 29);
3811 out[13]=out[6]^out[13];
3812 out[4]=out[4]+out[9];
3813 out[9]=(out[9] << 52)|(out[9] >> 12);
3814 out[9]=out[4]^out[9];
3815 out[14]=out[14]+out[1];
3816 out[1]=(out[1] << 23)|(out[1] >> 41);
3817 out[1]=out[14]^out[1];
3818 out[8]=out[8]+out[5];
3819 out[5]=(out[5] << 31)|(out[5] >> 33);
3820 out[5]=out[8]^out[5];
3821 out[10]=out[10]+out[3];
3822 out[3]=(out[3] << 37)|(out[3] >> 27);
3823 out[3]=out[10]^out[3];
3824 out[12]=out[12]+out[7];
3825 out[7]=(out[7] << 20)|(out[7] >> 44);
3826 out[7]=out[12]^out[7];
3841 out[14]+=key[0]+tweak[0];
3843 out[0]=in[0]^out[0];
3844 out[1]=in[1]^out[1];
3845 out[2]=in[2]^out[2];
3846 out[3]=in[3]^out[3];
3847 out[4]=in[4]^out[4];
3848 out[5]=in[5]^out[5];
3849 out[6]=in[6]^out[6];
3850 out[7]=in[7]^out[7];
3851 out[8]=in[8]^out[8];
3852 out[9]=in[9]^out[9];
3853 out[10]=in[10]^out[10];
3854 out[11]=in[11]^out[11];
3855 out[12]=in[12]^out[12];
3856 out[13]=in[13]^out[13];
3857 out[14]=in[14]^out[14];
3858 out[15]=in[15]^out[15];
3861 asm volatile("" : : "r"(&k) : "memory");
3862 asm volatile("" : : "r"(&t) : "memory");