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 static void skein512_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
525 uint64_t k=key[0]^key[1]^key[2]^key[3]^key[4]^key[5]^key[6]^key[7]^0x1BD11BDAA9FC1A22ULL;
526 uint64_t t=tweak[0]^tweak[1];
540 out[5]+=key[5]+tweak[0];
541 out[6]+=key[6]+tweak[1];
543 out[0]=out[0]+out[1];
544 out[1]=(out[1] << 46)|(out[1] >> 18);
545 out[1]=out[0]^out[1];
546 out[2]=out[2]+out[3];
547 out[3]=(out[3] << 36)|(out[3] >> 28);
548 out[3]=out[2]^out[3];
549 out[4]=out[4]+out[5];
550 out[5]=(out[5] << 19)|(out[5] >> 45);
551 out[5]=out[4]^out[5];
552 out[6]=out[6]+out[7];
553 out[7]=(out[7] << 37)|(out[7] >> 27);
554 out[7]=out[6]^out[7];
555 out[2]=out[2]+out[1];
556 out[1]=(out[1] << 33)|(out[1] >> 31);
557 out[1]=out[2]^out[1];
558 out[4]=out[4]+out[7];
559 out[7]=(out[7] << 27)|(out[7] >> 37);
560 out[7]=out[4]^out[7];
561 out[6]=out[6]+out[5];
562 out[5]=(out[5] << 14)|(out[5] >> 50);
563 out[5]=out[6]^out[5];
564 out[0]=out[0]+out[3];
565 out[3]=(out[3] << 42)|(out[3] >> 22);
566 out[3]=out[0]^out[3];
567 out[4]=out[4]+out[1];
568 out[1]=(out[1] << 17)|(out[1] >> 47);
569 out[1]=out[4]^out[1];
570 out[6]=out[6]+out[3];
571 out[3]=(out[3] << 49)|(out[3] >> 15);
572 out[3]=out[6]^out[3];
573 out[0]=out[0]+out[5];
574 out[5]=(out[5] << 36)|(out[5] >> 28);
575 out[5]=out[0]^out[5];
576 out[2]=out[2]+out[7];
577 out[7]=(out[7] << 39)|(out[7] >> 25);
578 out[7]=out[2]^out[7];
579 out[6]=out[6]+out[1];
580 out[1]=(out[1] << 44)|(out[1] >> 20);
581 out[1]=out[6]^out[1];
582 out[0]=out[0]+out[7];
583 out[7]=(out[7] << 9)|(out[7] >> 55);
584 out[7]=out[0]^out[7];
585 out[2]=out[2]+out[5];
586 out[5]=(out[5] << 54)|(out[5] >> 10);
587 out[5]=out[2]^out[5];
588 out[4]=out[4]+out[3];
589 out[3]=(out[3] << 56)|(out[3] >> 8);
590 out[3]=out[4]^out[3];
596 out[5]+=key[6]+tweak[1];
599 out[0]=out[0]+out[1];
600 out[1]=(out[1] << 39)|(out[1] >> 25);
601 out[1]=out[0]^out[1];
602 out[2]=out[2]+out[3];
603 out[3]=(out[3] << 30)|(out[3] >> 34);
604 out[3]=out[2]^out[3];
605 out[4]=out[4]+out[5];
606 out[5]=(out[5] << 34)|(out[5] >> 30);
607 out[5]=out[4]^out[5];
608 out[6]=out[6]+out[7];
609 out[7]=(out[7] << 24)|(out[7] >> 40);
610 out[7]=out[6]^out[7];
611 out[2]=out[2]+out[1];
612 out[1]=(out[1] << 13)|(out[1] >> 51);
613 out[1]=out[2]^out[1];
614 out[4]=out[4]+out[7];
615 out[7]=(out[7] << 50)|(out[7] >> 14);
616 out[7]=out[4]^out[7];
617 out[6]=out[6]+out[5];
618 out[5]=(out[5] << 10)|(out[5] >> 54);
619 out[5]=out[6]^out[5];
620 out[0]=out[0]+out[3];
621 out[3]=(out[3] << 17)|(out[3] >> 47);
622 out[3]=out[0]^out[3];
623 out[4]=out[4]+out[1];
624 out[1]=(out[1] << 25)|(out[1] >> 39);
625 out[1]=out[4]^out[1];
626 out[6]=out[6]+out[3];
627 out[3]=(out[3] << 29)|(out[3] >> 35);
628 out[3]=out[6]^out[3];
629 out[0]=out[0]+out[5];
630 out[5]=(out[5] << 39)|(out[5] >> 25);
631 out[5]=out[0]^out[5];
632 out[2]=out[2]+out[7];
633 out[7]=(out[7] << 43)|(out[7] >> 21);
634 out[7]=out[2]^out[7];
635 out[6]=out[6]+out[1];
636 out[1]=(out[1] << 8)|(out[1] >> 56);
637 out[1]=out[6]^out[1];
638 out[0]=out[0]+out[7];
639 out[7]=(out[7] << 35)|(out[7] >> 29);
640 out[7]=out[0]^out[7];
641 out[2]=out[2]+out[5];
642 out[5]=(out[5] << 56)|(out[5] >> 8);
643 out[5]=out[2]^out[5];
644 out[4]=out[4]+out[3];
645 out[3]=(out[3] << 22)|(out[3] >> 42);
646 out[3]=out[4]^out[3];
655 out[0]=out[0]+out[1];
656 out[1]=(out[1] << 46)|(out[1] >> 18);
657 out[1]=out[0]^out[1];
658 out[2]=out[2]+out[3];
659 out[3]=(out[3] << 36)|(out[3] >> 28);
660 out[3]=out[2]^out[3];
661 out[4]=out[4]+out[5];
662 out[5]=(out[5] << 19)|(out[5] >> 45);
663 out[5]=out[4]^out[5];
664 out[6]=out[6]+out[7];
665 out[7]=(out[7] << 37)|(out[7] >> 27);
666 out[7]=out[6]^out[7];
667 out[2]=out[2]+out[1];
668 out[1]=(out[1] << 33)|(out[1] >> 31);
669 out[1]=out[2]^out[1];
670 out[4]=out[4]+out[7];
671 out[7]=(out[7] << 27)|(out[7] >> 37);
672 out[7]=out[4]^out[7];
673 out[6]=out[6]+out[5];
674 out[5]=(out[5] << 14)|(out[5] >> 50);
675 out[5]=out[6]^out[5];
676 out[0]=out[0]+out[3];
677 out[3]=(out[3] << 42)|(out[3] >> 22);
678 out[3]=out[0]^out[3];
679 out[4]=out[4]+out[1];
680 out[1]=(out[1] << 17)|(out[1] >> 47);
681 out[1]=out[4]^out[1];
682 out[6]=out[6]+out[3];
683 out[3]=(out[3] << 49)|(out[3] >> 15);
684 out[3]=out[6]^out[3];
685 out[0]=out[0]+out[5];
686 out[5]=(out[5] << 36)|(out[5] >> 28);
687 out[5]=out[0]^out[5];
688 out[2]=out[2]+out[7];
689 out[7]=(out[7] << 39)|(out[7] >> 25);
690 out[7]=out[2]^out[7];
691 out[6]=out[6]+out[1];
692 out[1]=(out[1] << 44)|(out[1] >> 20);
693 out[1]=out[6]^out[1];
694 out[0]=out[0]+out[7];
695 out[7]=(out[7] << 9)|(out[7] >> 55);
696 out[7]=out[0]^out[7];
697 out[2]=out[2]+out[5];
698 out[5]=(out[5] << 54)|(out[5] >> 10);
699 out[5]=out[2]^out[5];
700 out[4]=out[4]+out[3];
701 out[3]=(out[3] << 56)|(out[3] >> 8);
702 out[3]=out[4]^out[3];
709 out[6]+=key[0]+tweak[1];
711 out[0]=out[0]+out[1];
712 out[1]=(out[1] << 39)|(out[1] >> 25);
713 out[1]=out[0]^out[1];
714 out[2]=out[2]+out[3];
715 out[3]=(out[3] << 30)|(out[3] >> 34);
716 out[3]=out[2]^out[3];
717 out[4]=out[4]+out[5];
718 out[5]=(out[5] << 34)|(out[5] >> 30);
719 out[5]=out[4]^out[5];
720 out[6]=out[6]+out[7];
721 out[7]=(out[7] << 24)|(out[7] >> 40);
722 out[7]=out[6]^out[7];
723 out[2]=out[2]+out[1];
724 out[1]=(out[1] << 13)|(out[1] >> 51);
725 out[1]=out[2]^out[1];
726 out[4]=out[4]+out[7];
727 out[7]=(out[7] << 50)|(out[7] >> 14);
728 out[7]=out[4]^out[7];
729 out[6]=out[6]+out[5];
730 out[5]=(out[5] << 10)|(out[5] >> 54);
731 out[5]=out[6]^out[5];
732 out[0]=out[0]+out[3];
733 out[3]=(out[3] << 17)|(out[3] >> 47);
734 out[3]=out[0]^out[3];
735 out[4]=out[4]+out[1];
736 out[1]=(out[1] << 25)|(out[1] >> 39);
737 out[1]=out[4]^out[1];
738 out[6]=out[6]+out[3];
739 out[3]=(out[3] << 29)|(out[3] >> 35);
740 out[3]=out[6]^out[3];
741 out[0]=out[0]+out[5];
742 out[5]=(out[5] << 39)|(out[5] >> 25);
743 out[5]=out[0]^out[5];
744 out[2]=out[2]+out[7];
745 out[7]=(out[7] << 43)|(out[7] >> 21);
746 out[7]=out[2]^out[7];
747 out[6]=out[6]+out[1];
748 out[1]=(out[1] << 8)|(out[1] >> 56);
749 out[1]=out[6]^out[1];
750 out[0]=out[0]+out[7];
751 out[7]=(out[7] << 35)|(out[7] >> 29);
752 out[7]=out[0]^out[7];
753 out[2]=out[2]+out[5];
754 out[5]=(out[5] << 56)|(out[5] >> 8);
755 out[5]=out[2]^out[5];
756 out[4]=out[4]+out[3];
757 out[3]=(out[3] << 22)|(out[3] >> 42);
758 out[3]=out[4]^out[3];
764 out[5]+=key[0]+tweak[1];
767 out[0]=out[0]+out[1];
768 out[1]=(out[1] << 46)|(out[1] >> 18);
769 out[1]=out[0]^out[1];
770 out[2]=out[2]+out[3];
771 out[3]=(out[3] << 36)|(out[3] >> 28);
772 out[3]=out[2]^out[3];
773 out[4]=out[4]+out[5];
774 out[5]=(out[5] << 19)|(out[5] >> 45);
775 out[5]=out[4]^out[5];
776 out[6]=out[6]+out[7];
777 out[7]=(out[7] << 37)|(out[7] >> 27);
778 out[7]=out[6]^out[7];
779 out[2]=out[2]+out[1];
780 out[1]=(out[1] << 33)|(out[1] >> 31);
781 out[1]=out[2]^out[1];
782 out[4]=out[4]+out[7];
783 out[7]=(out[7] << 27)|(out[7] >> 37);
784 out[7]=out[4]^out[7];
785 out[6]=out[6]+out[5];
786 out[5]=(out[5] << 14)|(out[5] >> 50);
787 out[5]=out[6]^out[5];
788 out[0]=out[0]+out[3];
789 out[3]=(out[3] << 42)|(out[3] >> 22);
790 out[3]=out[0]^out[3];
791 out[4]=out[4]+out[1];
792 out[1]=(out[1] << 17)|(out[1] >> 47);
793 out[1]=out[4]^out[1];
794 out[6]=out[6]+out[3];
795 out[3]=(out[3] << 49)|(out[3] >> 15);
796 out[3]=out[6]^out[3];
797 out[0]=out[0]+out[5];
798 out[5]=(out[5] << 36)|(out[5] >> 28);
799 out[5]=out[0]^out[5];
800 out[2]=out[2]+out[7];
801 out[7]=(out[7] << 39)|(out[7] >> 25);
802 out[7]=out[2]^out[7];
803 out[6]=out[6]+out[1];
804 out[1]=(out[1] << 44)|(out[1] >> 20);
805 out[1]=out[6]^out[1];
806 out[0]=out[0]+out[7];
807 out[7]=(out[7] << 9)|(out[7] >> 55);
808 out[7]=out[0]^out[7];
809 out[2]=out[2]+out[5];
810 out[5]=(out[5] << 54)|(out[5] >> 10);
811 out[5]=out[2]^out[5];
812 out[4]=out[4]+out[3];
813 out[3]=(out[3] << 56)|(out[3] >> 8);
814 out[3]=out[4]^out[3];
821 out[6]+=key[2]+tweak[0];
823 out[0]=out[0]+out[1];
824 out[1]=(out[1] << 39)|(out[1] >> 25);
825 out[1]=out[0]^out[1];
826 out[2]=out[2]+out[3];
827 out[3]=(out[3] << 30)|(out[3] >> 34);
828 out[3]=out[2]^out[3];
829 out[4]=out[4]+out[5];
830 out[5]=(out[5] << 34)|(out[5] >> 30);
831 out[5]=out[4]^out[5];
832 out[6]=out[6]+out[7];
833 out[7]=(out[7] << 24)|(out[7] >> 40);
834 out[7]=out[6]^out[7];
835 out[2]=out[2]+out[1];
836 out[1]=(out[1] << 13)|(out[1] >> 51);
837 out[1]=out[2]^out[1];
838 out[4]=out[4]+out[7];
839 out[7]=(out[7] << 50)|(out[7] >> 14);
840 out[7]=out[4]^out[7];
841 out[6]=out[6]+out[5];
842 out[5]=(out[5] << 10)|(out[5] >> 54);
843 out[5]=out[6]^out[5];
844 out[0]=out[0]+out[3];
845 out[3]=(out[3] << 17)|(out[3] >> 47);
846 out[3]=out[0]^out[3];
847 out[4]=out[4]+out[1];
848 out[1]=(out[1] << 25)|(out[1] >> 39);
849 out[1]=out[4]^out[1];
850 out[6]=out[6]+out[3];
851 out[3]=(out[3] << 29)|(out[3] >> 35);
852 out[3]=out[6]^out[3];
853 out[0]=out[0]+out[5];
854 out[5]=(out[5] << 39)|(out[5] >> 25);
855 out[5]=out[0]^out[5];
856 out[2]=out[2]+out[7];
857 out[7]=(out[7] << 43)|(out[7] >> 21);
858 out[7]=out[2]^out[7];
859 out[6]=out[6]+out[1];
860 out[1]=(out[1] << 8)|(out[1] >> 56);
861 out[1]=out[6]^out[1];
862 out[0]=out[0]+out[7];
863 out[7]=(out[7] << 35)|(out[7] >> 29);
864 out[7]=out[0]^out[7];
865 out[2]=out[2]+out[5];
866 out[5]=(out[5] << 56)|(out[5] >> 8);
867 out[5]=out[2]^out[5];
868 out[4]=out[4]+out[3];
869 out[3]=(out[3] << 22)|(out[3] >> 42);
870 out[3]=out[4]^out[3];
876 out[5]+=key[2]+tweak[0];
877 out[6]+=key[3]+tweak[1];
879 out[0]=out[0]+out[1];
880 out[1]=(out[1] << 46)|(out[1] >> 18);
881 out[1]=out[0]^out[1];
882 out[2]=out[2]+out[3];
883 out[3]=(out[3] << 36)|(out[3] >> 28);
884 out[3]=out[2]^out[3];
885 out[4]=out[4]+out[5];
886 out[5]=(out[5] << 19)|(out[5] >> 45);
887 out[5]=out[4]^out[5];
888 out[6]=out[6]+out[7];
889 out[7]=(out[7] << 37)|(out[7] >> 27);
890 out[7]=out[6]^out[7];
891 out[2]=out[2]+out[1];
892 out[1]=(out[1] << 33)|(out[1] >> 31);
893 out[1]=out[2]^out[1];
894 out[4]=out[4]+out[7];
895 out[7]=(out[7] << 27)|(out[7] >> 37);
896 out[7]=out[4]^out[7];
897 out[6]=out[6]+out[5];
898 out[5]=(out[5] << 14)|(out[5] >> 50);
899 out[5]=out[6]^out[5];
900 out[0]=out[0]+out[3];
901 out[3]=(out[3] << 42)|(out[3] >> 22);
902 out[3]=out[0]^out[3];
903 out[4]=out[4]+out[1];
904 out[1]=(out[1] << 17)|(out[1] >> 47);
905 out[1]=out[4]^out[1];
906 out[6]=out[6]+out[3];
907 out[3]=(out[3] << 49)|(out[3] >> 15);
908 out[3]=out[6]^out[3];
909 out[0]=out[0]+out[5];
910 out[5]=(out[5] << 36)|(out[5] >> 28);
911 out[5]=out[0]^out[5];
912 out[2]=out[2]+out[7];
913 out[7]=(out[7] << 39)|(out[7] >> 25);
914 out[7]=out[2]^out[7];
915 out[6]=out[6]+out[1];
916 out[1]=(out[1] << 44)|(out[1] >> 20);
917 out[1]=out[6]^out[1];
918 out[0]=out[0]+out[7];
919 out[7]=(out[7] << 9)|(out[7] >> 55);
920 out[7]=out[0]^out[7];
921 out[2]=out[2]+out[5];
922 out[5]=(out[5] << 54)|(out[5] >> 10);
923 out[5]=out[2]^out[5];
924 out[4]=out[4]+out[3];
925 out[3]=(out[3] << 56)|(out[3] >> 8);
926 out[3]=out[4]^out[3];
932 out[5]+=key[3]+tweak[1];
935 out[0]=out[0]+out[1];
936 out[1]=(out[1] << 39)|(out[1] >> 25);
937 out[1]=out[0]^out[1];
938 out[2]=out[2]+out[3];
939 out[3]=(out[3] << 30)|(out[3] >> 34);
940 out[3]=out[2]^out[3];
941 out[4]=out[4]+out[5];
942 out[5]=(out[5] << 34)|(out[5] >> 30);
943 out[5]=out[4]^out[5];
944 out[6]=out[6]+out[7];
945 out[7]=(out[7] << 24)|(out[7] >> 40);
946 out[7]=out[6]^out[7];
947 out[2]=out[2]+out[1];
948 out[1]=(out[1] << 13)|(out[1] >> 51);
949 out[1]=out[2]^out[1];
950 out[4]=out[4]+out[7];
951 out[7]=(out[7] << 50)|(out[7] >> 14);
952 out[7]=out[4]^out[7];
953 out[6]=out[6]+out[5];
954 out[5]=(out[5] << 10)|(out[5] >> 54);
955 out[5]=out[6]^out[5];
956 out[0]=out[0]+out[3];
957 out[3]=(out[3] << 17)|(out[3] >> 47);
958 out[3]=out[0]^out[3];
959 out[4]=out[4]+out[1];
960 out[1]=(out[1] << 25)|(out[1] >> 39);
961 out[1]=out[4]^out[1];
962 out[6]=out[6]+out[3];
963 out[3]=(out[3] << 29)|(out[3] >> 35);
964 out[3]=out[6]^out[3];
965 out[0]=out[0]+out[5];
966 out[5]=(out[5] << 39)|(out[5] >> 25);
967 out[5]=out[0]^out[5];
968 out[2]=out[2]+out[7];
969 out[7]=(out[7] << 43)|(out[7] >> 21);
970 out[7]=out[2]^out[7];
971 out[6]=out[6]+out[1];
972 out[1]=(out[1] << 8)|(out[1] >> 56);
973 out[1]=out[6]^out[1];
974 out[0]=out[0]+out[7];
975 out[7]=(out[7] << 35)|(out[7] >> 29);
976 out[7]=out[0]^out[7];
977 out[2]=out[2]+out[5];
978 out[5]=(out[5] << 56)|(out[5] >> 8);
979 out[5]=out[2]^out[5];
980 out[4]=out[4]+out[3];
981 out[3]=(out[3] << 22)|(out[3] >> 42);
982 out[3]=out[4]^out[3];
989 out[6]+=key[5]+tweak[0];
991 out[0]=out[0]+out[1];
992 out[1]=(out[1] << 46)|(out[1] >> 18);
993 out[1]=out[0]^out[1];
994 out[2]=out[2]+out[3];
995 out[3]=(out[3] << 36)|(out[3] >> 28);
996 out[3]=out[2]^out[3];
997 out[4]=out[4]+out[5];
998 out[5]=(out[5] << 19)|(out[5] >> 45);
999 out[5]=out[4]^out[5];
1000 out[6]=out[6]+out[7];
1001 out[7]=(out[7] << 37)|(out[7] >> 27);
1002 out[7]=out[6]^out[7];
1003 out[2]=out[2]+out[1];
1004 out[1]=(out[1] << 33)|(out[1] >> 31);
1005 out[1]=out[2]^out[1];
1006 out[4]=out[4]+out[7];
1007 out[7]=(out[7] << 27)|(out[7] >> 37);
1008 out[7]=out[4]^out[7];
1009 out[6]=out[6]+out[5];
1010 out[5]=(out[5] << 14)|(out[5] >> 50);
1011 out[5]=out[6]^out[5];
1012 out[0]=out[0]+out[3];
1013 out[3]=(out[3] << 42)|(out[3] >> 22);
1014 out[3]=out[0]^out[3];
1015 out[4]=out[4]+out[1];
1016 out[1]=(out[1] << 17)|(out[1] >> 47);
1017 out[1]=out[4]^out[1];
1018 out[6]=out[6]+out[3];
1019 out[3]=(out[3] << 49)|(out[3] >> 15);
1020 out[3]=out[6]^out[3];
1021 out[0]=out[0]+out[5];
1022 out[5]=(out[5] << 36)|(out[5] >> 28);
1023 out[5]=out[0]^out[5];
1024 out[2]=out[2]+out[7];
1025 out[7]=(out[7] << 39)|(out[7] >> 25);
1026 out[7]=out[2]^out[7];
1027 out[6]=out[6]+out[1];
1028 out[1]=(out[1] << 44)|(out[1] >> 20);
1029 out[1]=out[6]^out[1];
1030 out[0]=out[0]+out[7];
1031 out[7]=(out[7] << 9)|(out[7] >> 55);
1032 out[7]=out[0]^out[7];
1033 out[2]=out[2]+out[5];
1034 out[5]=(out[5] << 54)|(out[5] >> 10);
1035 out[5]=out[2]^out[5];
1036 out[4]=out[4]+out[3];
1037 out[3]=(out[3] << 56)|(out[3] >> 8);
1038 out[3]=out[4]^out[3];
1044 out[5]+=key[5]+tweak[0];
1045 out[6]+=key[6]+tweak[1];
1047 out[0]=out[0]+out[1];
1048 out[1]=(out[1] << 39)|(out[1] >> 25);
1049 out[1]=out[0]^out[1];
1050 out[2]=out[2]+out[3];
1051 out[3]=(out[3] << 30)|(out[3] >> 34);
1052 out[3]=out[2]^out[3];
1053 out[4]=out[4]+out[5];
1054 out[5]=(out[5] << 34)|(out[5] >> 30);
1055 out[5]=out[4]^out[5];
1056 out[6]=out[6]+out[7];
1057 out[7]=(out[7] << 24)|(out[7] >> 40);
1058 out[7]=out[6]^out[7];
1059 out[2]=out[2]+out[1];
1060 out[1]=(out[1] << 13)|(out[1] >> 51);
1061 out[1]=out[2]^out[1];
1062 out[4]=out[4]+out[7];
1063 out[7]=(out[7] << 50)|(out[7] >> 14);
1064 out[7]=out[4]^out[7];
1065 out[6]=out[6]+out[5];
1066 out[5]=(out[5] << 10)|(out[5] >> 54);
1067 out[5]=out[6]^out[5];
1068 out[0]=out[0]+out[3];
1069 out[3]=(out[3] << 17)|(out[3] >> 47);
1070 out[3]=out[0]^out[3];
1071 out[4]=out[4]+out[1];
1072 out[1]=(out[1] << 25)|(out[1] >> 39);
1073 out[1]=out[4]^out[1];
1074 out[6]=out[6]+out[3];
1075 out[3]=(out[3] << 29)|(out[3] >> 35);
1076 out[3]=out[6]^out[3];
1077 out[0]=out[0]+out[5];
1078 out[5]=(out[5] << 39)|(out[5] >> 25);
1079 out[5]=out[0]^out[5];
1080 out[2]=out[2]+out[7];
1081 out[7]=(out[7] << 43)|(out[7] >> 21);
1082 out[7]=out[2]^out[7];
1083 out[6]=out[6]+out[1];
1084 out[1]=(out[1] << 8)|(out[1] >> 56);
1085 out[1]=out[6]^out[1];
1086 out[0]=out[0]+out[7];
1087 out[7]=(out[7] << 35)|(out[7] >> 29);
1088 out[7]=out[0]^out[7];
1089 out[2]=out[2]+out[5];
1090 out[5]=(out[5] << 56)|(out[5] >> 8);
1091 out[5]=out[2]^out[5];
1092 out[4]=out[4]+out[3];
1093 out[3]=(out[3] << 22)|(out[3] >> 42);
1094 out[3]=out[4]^out[3];
1100 out[5]+=key[6]+tweak[1];
1103 out[0]=out[0]+out[1];
1104 out[1]=(out[1] << 46)|(out[1] >> 18);
1105 out[1]=out[0]^out[1];
1106 out[2]=out[2]+out[3];
1107 out[3]=(out[3] << 36)|(out[3] >> 28);
1108 out[3]=out[2]^out[3];
1109 out[4]=out[4]+out[5];
1110 out[5]=(out[5] << 19)|(out[5] >> 45);
1111 out[5]=out[4]^out[5];
1112 out[6]=out[6]+out[7];
1113 out[7]=(out[7] << 37)|(out[7] >> 27);
1114 out[7]=out[6]^out[7];
1115 out[2]=out[2]+out[1];
1116 out[1]=(out[1] << 33)|(out[1] >> 31);
1117 out[1]=out[2]^out[1];
1118 out[4]=out[4]+out[7];
1119 out[7]=(out[7] << 27)|(out[7] >> 37);
1120 out[7]=out[4]^out[7];
1121 out[6]=out[6]+out[5];
1122 out[5]=(out[5] << 14)|(out[5] >> 50);
1123 out[5]=out[6]^out[5];
1124 out[0]=out[0]+out[3];
1125 out[3]=(out[3] << 42)|(out[3] >> 22);
1126 out[3]=out[0]^out[3];
1127 out[4]=out[4]+out[1];
1128 out[1]=(out[1] << 17)|(out[1] >> 47);
1129 out[1]=out[4]^out[1];
1130 out[6]=out[6]+out[3];
1131 out[3]=(out[3] << 49)|(out[3] >> 15);
1132 out[3]=out[6]^out[3];
1133 out[0]=out[0]+out[5];
1134 out[5]=(out[5] << 36)|(out[5] >> 28);
1135 out[5]=out[0]^out[5];
1136 out[2]=out[2]+out[7];
1137 out[7]=(out[7] << 39)|(out[7] >> 25);
1138 out[7]=out[2]^out[7];
1139 out[6]=out[6]+out[1];
1140 out[1]=(out[1] << 44)|(out[1] >> 20);
1141 out[1]=out[6]^out[1];
1142 out[0]=out[0]+out[7];
1143 out[7]=(out[7] << 9)|(out[7] >> 55);
1144 out[7]=out[0]^out[7];
1145 out[2]=out[2]+out[5];
1146 out[5]=(out[5] << 54)|(out[5] >> 10);
1147 out[5]=out[2]^out[5];
1148 out[4]=out[4]+out[3];
1149 out[3]=(out[3] << 56)|(out[3] >> 8);
1150 out[3]=out[4]^out[3];
1159 out[0]=out[0]+out[1];
1160 out[1]=(out[1] << 39)|(out[1] >> 25);
1161 out[1]=out[0]^out[1];
1162 out[2]=out[2]+out[3];
1163 out[3]=(out[3] << 30)|(out[3] >> 34);
1164 out[3]=out[2]^out[3];
1165 out[4]=out[4]+out[5];
1166 out[5]=(out[5] << 34)|(out[5] >> 30);
1167 out[5]=out[4]^out[5];
1168 out[6]=out[6]+out[7];
1169 out[7]=(out[7] << 24)|(out[7] >> 40);
1170 out[7]=out[6]^out[7];
1171 out[2]=out[2]+out[1];
1172 out[1]=(out[1] << 13)|(out[1] >> 51);
1173 out[1]=out[2]^out[1];
1174 out[4]=out[4]+out[7];
1175 out[7]=(out[7] << 50)|(out[7] >> 14);
1176 out[7]=out[4]^out[7];
1177 out[6]=out[6]+out[5];
1178 out[5]=(out[5] << 10)|(out[5] >> 54);
1179 out[5]=out[6]^out[5];
1180 out[0]=out[0]+out[3];
1181 out[3]=(out[3] << 17)|(out[3] >> 47);
1182 out[3]=out[0]^out[3];
1183 out[4]=out[4]+out[1];
1184 out[1]=(out[1] << 25)|(out[1] >> 39);
1185 out[1]=out[4]^out[1];
1186 out[6]=out[6]+out[3];
1187 out[3]=(out[3] << 29)|(out[3] >> 35);
1188 out[3]=out[6]^out[3];
1189 out[0]=out[0]+out[5];
1190 out[5]=(out[5] << 39)|(out[5] >> 25);
1191 out[5]=out[0]^out[5];
1192 out[2]=out[2]+out[7];
1193 out[7]=(out[7] << 43)|(out[7] >> 21);
1194 out[7]=out[2]^out[7];
1195 out[6]=out[6]+out[1];
1196 out[1]=(out[1] << 8)|(out[1] >> 56);
1197 out[1]=out[6]^out[1];
1198 out[0]=out[0]+out[7];
1199 out[7]=(out[7] << 35)|(out[7] >> 29);
1200 out[7]=out[0]^out[7];
1201 out[2]=out[2]+out[5];
1202 out[5]=(out[5] << 56)|(out[5] >> 8);
1203 out[5]=out[2]^out[5];
1204 out[4]=out[4]+out[3];
1205 out[3]=(out[3] << 22)|(out[3] >> 42);
1206 out[3]=out[4]^out[3];
1213 out[6]+=key[0]+tweak[1];
1215 out[0]=out[0]+out[1];
1216 out[1]=(out[1] << 46)|(out[1] >> 18);
1217 out[1]=out[0]^out[1];
1218 out[2]=out[2]+out[3];
1219 out[3]=(out[3] << 36)|(out[3] >> 28);
1220 out[3]=out[2]^out[3];
1221 out[4]=out[4]+out[5];
1222 out[5]=(out[5] << 19)|(out[5] >> 45);
1223 out[5]=out[4]^out[5];
1224 out[6]=out[6]+out[7];
1225 out[7]=(out[7] << 37)|(out[7] >> 27);
1226 out[7]=out[6]^out[7];
1227 out[2]=out[2]+out[1];
1228 out[1]=(out[1] << 33)|(out[1] >> 31);
1229 out[1]=out[2]^out[1];
1230 out[4]=out[4]+out[7];
1231 out[7]=(out[7] << 27)|(out[7] >> 37);
1232 out[7]=out[4]^out[7];
1233 out[6]=out[6]+out[5];
1234 out[5]=(out[5] << 14)|(out[5] >> 50);
1235 out[5]=out[6]^out[5];
1236 out[0]=out[0]+out[3];
1237 out[3]=(out[3] << 42)|(out[3] >> 22);
1238 out[3]=out[0]^out[3];
1239 out[4]=out[4]+out[1];
1240 out[1]=(out[1] << 17)|(out[1] >> 47);
1241 out[1]=out[4]^out[1];
1242 out[6]=out[6]+out[3];
1243 out[3]=(out[3] << 49)|(out[3] >> 15);
1244 out[3]=out[6]^out[3];
1245 out[0]=out[0]+out[5];
1246 out[5]=(out[5] << 36)|(out[5] >> 28);
1247 out[5]=out[0]^out[5];
1248 out[2]=out[2]+out[7];
1249 out[7]=(out[7] << 39)|(out[7] >> 25);
1250 out[7]=out[2]^out[7];
1251 out[6]=out[6]+out[1];
1252 out[1]=(out[1] << 44)|(out[1] >> 20);
1253 out[1]=out[6]^out[1];
1254 out[0]=out[0]+out[7];
1255 out[7]=(out[7] << 9)|(out[7] >> 55);
1256 out[7]=out[0]^out[7];
1257 out[2]=out[2]+out[5];
1258 out[5]=(out[5] << 54)|(out[5] >> 10);
1259 out[5]=out[2]^out[5];
1260 out[4]=out[4]+out[3];
1261 out[3]=(out[3] << 56)|(out[3] >> 8);
1262 out[3]=out[4]^out[3];
1268 out[5]+=key[0]+tweak[1];
1271 out[0]=out[0]+out[1];
1272 out[1]=(out[1] << 39)|(out[1] >> 25);
1273 out[1]=out[0]^out[1];
1274 out[2]=out[2]+out[3];
1275 out[3]=(out[3] << 30)|(out[3] >> 34);
1276 out[3]=out[2]^out[3];
1277 out[4]=out[4]+out[5];
1278 out[5]=(out[5] << 34)|(out[5] >> 30);
1279 out[5]=out[4]^out[5];
1280 out[6]=out[6]+out[7];
1281 out[7]=(out[7] << 24)|(out[7] >> 40);
1282 out[7]=out[6]^out[7];
1283 out[2]=out[2]+out[1];
1284 out[1]=(out[1] << 13)|(out[1] >> 51);
1285 out[1]=out[2]^out[1];
1286 out[4]=out[4]+out[7];
1287 out[7]=(out[7] << 50)|(out[7] >> 14);
1288 out[7]=out[4]^out[7];
1289 out[6]=out[6]+out[5];
1290 out[5]=(out[5] << 10)|(out[5] >> 54);
1291 out[5]=out[6]^out[5];
1292 out[0]=out[0]+out[3];
1293 out[3]=(out[3] << 17)|(out[3] >> 47);
1294 out[3]=out[0]^out[3];
1295 out[4]=out[4]+out[1];
1296 out[1]=(out[1] << 25)|(out[1] >> 39);
1297 out[1]=out[4]^out[1];
1298 out[6]=out[6]+out[3];
1299 out[3]=(out[3] << 29)|(out[3] >> 35);
1300 out[3]=out[6]^out[3];
1301 out[0]=out[0]+out[5];
1302 out[5]=(out[5] << 39)|(out[5] >> 25);
1303 out[5]=out[0]^out[5];
1304 out[2]=out[2]+out[7];
1305 out[7]=(out[7] << 43)|(out[7] >> 21);
1306 out[7]=out[2]^out[7];
1307 out[6]=out[6]+out[1];
1308 out[1]=(out[1] << 8)|(out[1] >> 56);
1309 out[1]=out[6]^out[1];
1310 out[0]=out[0]+out[7];
1311 out[7]=(out[7] << 35)|(out[7] >> 29);
1312 out[7]=out[0]^out[7];
1313 out[2]=out[2]+out[5];
1314 out[5]=(out[5] << 56)|(out[5] >> 8);
1315 out[5]=out[2]^out[5];
1316 out[4]=out[4]+out[3];
1317 out[3]=(out[3] << 22)|(out[3] >> 42);
1318 out[3]=out[4]^out[3];
1325 out[6]+=key[2]+tweak[0];
1327 out[0]=out[0]+out[1];
1328 out[1]=(out[1] << 46)|(out[1] >> 18);
1329 out[1]=out[0]^out[1];
1330 out[2]=out[2]+out[3];
1331 out[3]=(out[3] << 36)|(out[3] >> 28);
1332 out[3]=out[2]^out[3];
1333 out[4]=out[4]+out[5];
1334 out[5]=(out[5] << 19)|(out[5] >> 45);
1335 out[5]=out[4]^out[5];
1336 out[6]=out[6]+out[7];
1337 out[7]=(out[7] << 37)|(out[7] >> 27);
1338 out[7]=out[6]^out[7];
1339 out[2]=out[2]+out[1];
1340 out[1]=(out[1] << 33)|(out[1] >> 31);
1341 out[1]=out[2]^out[1];
1342 out[4]=out[4]+out[7];
1343 out[7]=(out[7] << 27)|(out[7] >> 37);
1344 out[7]=out[4]^out[7];
1345 out[6]=out[6]+out[5];
1346 out[5]=(out[5] << 14)|(out[5] >> 50);
1347 out[5]=out[6]^out[5];
1348 out[0]=out[0]+out[3];
1349 out[3]=(out[3] << 42)|(out[3] >> 22);
1350 out[3]=out[0]^out[3];
1351 out[4]=out[4]+out[1];
1352 out[1]=(out[1] << 17)|(out[1] >> 47);
1353 out[1]=out[4]^out[1];
1354 out[6]=out[6]+out[3];
1355 out[3]=(out[3] << 49)|(out[3] >> 15);
1356 out[3]=out[6]^out[3];
1357 out[0]=out[0]+out[5];
1358 out[5]=(out[5] << 36)|(out[5] >> 28);
1359 out[5]=out[0]^out[5];
1360 out[2]=out[2]+out[7];
1361 out[7]=(out[7] << 39)|(out[7] >> 25);
1362 out[7]=out[2]^out[7];
1363 out[6]=out[6]+out[1];
1364 out[1]=(out[1] << 44)|(out[1] >> 20);
1365 out[1]=out[6]^out[1];
1366 out[0]=out[0]+out[7];
1367 out[7]=(out[7] << 9)|(out[7] >> 55);
1368 out[7]=out[0]^out[7];
1369 out[2]=out[2]+out[5];
1370 out[5]=(out[5] << 54)|(out[5] >> 10);
1371 out[5]=out[2]^out[5];
1372 out[4]=out[4]+out[3];
1373 out[3]=(out[3] << 56)|(out[3] >> 8);
1374 out[3]=out[4]^out[3];
1380 out[5]+=key[2]+tweak[0];
1381 out[6]+=key[3]+tweak[1];
1383 out[0]=out[0]+out[1];
1384 out[1]=(out[1] << 39)|(out[1] >> 25);
1385 out[1]=out[0]^out[1];
1386 out[2]=out[2]+out[3];
1387 out[3]=(out[3] << 30)|(out[3] >> 34);
1388 out[3]=out[2]^out[3];
1389 out[4]=out[4]+out[5];
1390 out[5]=(out[5] << 34)|(out[5] >> 30);
1391 out[5]=out[4]^out[5];
1392 out[6]=out[6]+out[7];
1393 out[7]=(out[7] << 24)|(out[7] >> 40);
1394 out[7]=out[6]^out[7];
1395 out[2]=out[2]+out[1];
1396 out[1]=(out[1] << 13)|(out[1] >> 51);
1397 out[1]=out[2]^out[1];
1398 out[4]=out[4]+out[7];
1399 out[7]=(out[7] << 50)|(out[7] >> 14);
1400 out[7]=out[4]^out[7];
1401 out[6]=out[6]+out[5];
1402 out[5]=(out[5] << 10)|(out[5] >> 54);
1403 out[5]=out[6]^out[5];
1404 out[0]=out[0]+out[3];
1405 out[3]=(out[3] << 17)|(out[3] >> 47);
1406 out[3]=out[0]^out[3];
1407 out[4]=out[4]+out[1];
1408 out[1]=(out[1] << 25)|(out[1] >> 39);
1409 out[1]=out[4]^out[1];
1410 out[6]=out[6]+out[3];
1411 out[3]=(out[3] << 29)|(out[3] >> 35);
1412 out[3]=out[6]^out[3];
1413 out[0]=out[0]+out[5];
1414 out[5]=(out[5] << 39)|(out[5] >> 25);
1415 out[5]=out[0]^out[5];
1416 out[2]=out[2]+out[7];
1417 out[7]=(out[7] << 43)|(out[7] >> 21);
1418 out[7]=out[2]^out[7];
1419 out[6]=out[6]+out[1];
1420 out[1]=(out[1] << 8)|(out[1] >> 56);
1421 out[1]=out[6]^out[1];
1422 out[0]=out[0]+out[7];
1423 out[7]=(out[7] << 35)|(out[7] >> 29);
1424 out[7]=out[0]^out[7];
1425 out[2]=out[2]+out[5];
1426 out[5]=(out[5] << 56)|(out[5] >> 8);
1427 out[5]=out[2]^out[5];
1428 out[4]=out[4]+out[3];
1429 out[3]=(out[3] << 22)|(out[3] >> 42);
1430 out[3]=out[4]^out[3];
1436 out[5]+=key[3]+tweak[1];
1439 out[0]=out[0]+out[1];
1440 out[1]=(out[1] << 46)|(out[1] >> 18);
1441 out[1]=out[0]^out[1];
1442 out[2]=out[2]+out[3];
1443 out[3]=(out[3] << 36)|(out[3] >> 28);
1444 out[3]=out[2]^out[3];
1445 out[4]=out[4]+out[5];
1446 out[5]=(out[5] << 19)|(out[5] >> 45);
1447 out[5]=out[4]^out[5];
1448 out[6]=out[6]+out[7];
1449 out[7]=(out[7] << 37)|(out[7] >> 27);
1450 out[7]=out[6]^out[7];
1451 out[2]=out[2]+out[1];
1452 out[1]=(out[1] << 33)|(out[1] >> 31);
1453 out[1]=out[2]^out[1];
1454 out[4]=out[4]+out[7];
1455 out[7]=(out[7] << 27)|(out[7] >> 37);
1456 out[7]=out[4]^out[7];
1457 out[6]=out[6]+out[5];
1458 out[5]=(out[5] << 14)|(out[5] >> 50);
1459 out[5]=out[6]^out[5];
1460 out[0]=out[0]+out[3];
1461 out[3]=(out[3] << 42)|(out[3] >> 22);
1462 out[3]=out[0]^out[3];
1463 out[4]=out[4]+out[1];
1464 out[1]=(out[1] << 17)|(out[1] >> 47);
1465 out[1]=out[4]^out[1];
1466 out[6]=out[6]+out[3];
1467 out[3]=(out[3] << 49)|(out[3] >> 15);
1468 out[3]=out[6]^out[3];
1469 out[0]=out[0]+out[5];
1470 out[5]=(out[5] << 36)|(out[5] >> 28);
1471 out[5]=out[0]^out[5];
1472 out[2]=out[2]+out[7];
1473 out[7]=(out[7] << 39)|(out[7] >> 25);
1474 out[7]=out[2]^out[7];
1475 out[6]=out[6]+out[1];
1476 out[1]=(out[1] << 44)|(out[1] >> 20);
1477 out[1]=out[6]^out[1];
1478 out[0]=out[0]+out[7];
1479 out[7]=(out[7] << 9)|(out[7] >> 55);
1480 out[7]=out[0]^out[7];
1481 out[2]=out[2]+out[5];
1482 out[5]=(out[5] << 54)|(out[5] >> 10);
1483 out[5]=out[2]^out[5];
1484 out[4]=out[4]+out[3];
1485 out[3]=(out[3] << 56)|(out[3] >> 8);
1486 out[3]=out[4]^out[3];
1493 out[6]+=key[5]+tweak[0];
1495 out[0]=out[0]+out[1];
1496 out[1]=(out[1] << 39)|(out[1] >> 25);
1497 out[1]=out[0]^out[1];
1498 out[2]=out[2]+out[3];
1499 out[3]=(out[3] << 30)|(out[3] >> 34);
1500 out[3]=out[2]^out[3];
1501 out[4]=out[4]+out[5];
1502 out[5]=(out[5] << 34)|(out[5] >> 30);
1503 out[5]=out[4]^out[5];
1504 out[6]=out[6]+out[7];
1505 out[7]=(out[7] << 24)|(out[7] >> 40);
1506 out[7]=out[6]^out[7];
1507 out[2]=out[2]+out[1];
1508 out[1]=(out[1] << 13)|(out[1] >> 51);
1509 out[1]=out[2]^out[1];
1510 out[4]=out[4]+out[7];
1511 out[7]=(out[7] << 50)|(out[7] >> 14);
1512 out[7]=out[4]^out[7];
1513 out[6]=out[6]+out[5];
1514 out[5]=(out[5] << 10)|(out[5] >> 54);
1515 out[5]=out[6]^out[5];
1516 out[0]=out[0]+out[3];
1517 out[3]=(out[3] << 17)|(out[3] >> 47);
1518 out[3]=out[0]^out[3];
1519 out[4]=out[4]+out[1];
1520 out[1]=(out[1] << 25)|(out[1] >> 39);
1521 out[1]=out[4]^out[1];
1522 out[6]=out[6]+out[3];
1523 out[3]=(out[3] << 29)|(out[3] >> 35);
1524 out[3]=out[6]^out[3];
1525 out[0]=out[0]+out[5];
1526 out[5]=(out[5] << 39)|(out[5] >> 25);
1527 out[5]=out[0]^out[5];
1528 out[2]=out[2]+out[7];
1529 out[7]=(out[7] << 43)|(out[7] >> 21);
1530 out[7]=out[2]^out[7];
1531 out[6]=out[6]+out[1];
1532 out[1]=(out[1] << 8)|(out[1] >> 56);
1533 out[1]=out[6]^out[1];
1534 out[0]=out[0]+out[7];
1535 out[7]=(out[7] << 35)|(out[7] >> 29);
1536 out[7]=out[0]^out[7];
1537 out[2]=out[2]+out[5];
1538 out[5]=(out[5] << 56)|(out[5] >> 8);
1539 out[5]=out[2]^out[5];
1540 out[4]=out[4]+out[3];
1541 out[3]=(out[3] << 22)|(out[3] >> 42);
1542 out[3]=out[4]^out[3];
1548 out[5]+=key[5]+tweak[0];
1549 out[6]+=key[6]+tweak[1];
1551 out[0]=in[0]^out[0];
1552 out[1]=in[1]^out[1];
1553 out[2]=in[2]^out[2];
1554 out[3]=in[3]^out[3];
1555 out[4]=in[4]^out[4];
1556 out[5]=in[5]^out[5];
1557 out[6]=in[6]^out[6];
1558 out[7]=in[7]^out[7];
1559 out[8]=in[8]^out[8];
1561 static void skein1024_compress(uint64_t* out, const uint64_t* in, const uint64_t* key, const uint64_t* tweak)
1563 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;
1564 uint64_t t=tweak[0]^tweak[1];
1594 out[13]+=key[13]+tweak[0];
1595 out[14]+=key[14]+tweak[1];
1597 out[0]=out[0]+out[1];
1598 out[1]=(out[1] << 24)|(out[1] >> 40);
1599 out[1]=out[0]^out[1];
1600 out[2]=out[2]+out[3];
1601 out[3]=(out[3] << 13)|(out[3] >> 51);
1602 out[3]=out[2]^out[3];
1603 out[4]=out[4]+out[5];
1604 out[5]=(out[5] << 8)|(out[5] >> 56);
1605 out[5]=out[4]^out[5];
1606 out[6]=out[6]+out[7];
1607 out[7]=(out[7] << 47)|(out[7] >> 17);
1608 out[7]=out[6]^out[7];
1609 out[8]=out[8]+out[9];
1610 out[9]=(out[9] << 8)|(out[9] >> 56);
1611 out[9]=out[8]^out[9];
1612 out[10]=out[10]+out[11];
1613 out[11]=(out[11] << 17)|(out[11] >> 47);
1614 out[11]=out[10]^out[11];
1615 out[12]=out[12]+out[13];
1616 out[13]=(out[13] << 22)|(out[13] >> 42);
1617 out[13]=out[12]^out[13];
1618 out[14]=out[14]+out[15];
1619 out[15]=(out[15] << 37)|(out[15] >> 27);
1620 out[15]=out[14]^out[15];
1621 out[0]=out[0]+out[9];
1622 out[9]=(out[9] << 38)|(out[9] >> 26);
1623 out[9]=out[0]^out[9];
1624 out[2]=out[2]+out[13];
1625 out[13]=(out[13] << 19)|(out[13] >> 45);
1626 out[13]=out[2]^out[13];
1627 out[6]=out[6]+out[11];
1628 out[11]=(out[11] << 10)|(out[11] >> 54);
1629 out[11]=out[6]^out[11];
1630 out[4]=out[4]+out[15];
1631 out[15]=(out[15] << 55)|(out[15] >> 9);
1632 out[15]=out[4]^out[15];
1633 out[10]=out[10]+out[7];
1634 out[7]=(out[7] << 49)|(out[7] >> 15);
1635 out[7]=out[10]^out[7];
1636 out[12]=out[12]+out[3];
1637 out[3]=(out[3] << 18)|(out[3] >> 46);
1638 out[3]=out[12]^out[3];
1639 out[14]=out[14]+out[5];
1640 out[5]=(out[5] << 23)|(out[5] >> 41);
1641 out[5]=out[14]^out[5];
1642 out[8]=out[8]+out[1];
1643 out[1]=(out[1] << 52)|(out[1] >> 12);
1644 out[1]=out[8]^out[1];
1645 out[0]=out[0]+out[7];
1646 out[7]=(out[7] << 33)|(out[7] >> 31);
1647 out[7]=out[0]^out[7];
1648 out[2]=out[2]+out[5];
1649 out[5]=(out[5] << 4)|(out[5] >> 60);
1650 out[5]=out[2]^out[5];
1651 out[4]=out[4]+out[3];
1652 out[3]=(out[3] << 51)|(out[3] >> 13);
1653 out[3]=out[4]^out[3];
1654 out[6]=out[6]+out[1];
1655 out[1]=(out[1] << 13)|(out[1] >> 51);
1656 out[1]=out[6]^out[1];
1657 out[12]=out[12]+out[15];
1658 out[15]=(out[15] << 34)|(out[15] >> 30);
1659 out[15]=out[12]^out[15];
1660 out[14]=out[14]+out[13];
1661 out[13]=(out[13] << 41)|(out[13] >> 23);
1662 out[13]=out[14]^out[13];
1663 out[8]=out[8]+out[11];
1664 out[11]=(out[11] << 59)|(out[11] >> 5);
1665 out[11]=out[8]^out[11];
1666 out[10]=out[10]+out[9];
1667 out[9]=(out[9] << 17)|(out[9] >> 47);
1668 out[9]=out[10]^out[9];
1669 out[0]=out[0]+out[15];
1670 out[15]=(out[15] << 5)|(out[15] >> 59);
1671 out[15]=out[0]^out[15];
1672 out[2]=out[2]+out[11];
1673 out[11]=(out[11] << 20)|(out[11] >> 44);
1674 out[11]=out[2]^out[11];
1675 out[6]=out[6]+out[13];
1676 out[13]=(out[13] << 48)|(out[13] >> 16);
1677 out[13]=out[6]^out[13];
1678 out[4]=out[4]+out[9];
1679 out[9]=(out[9] << 41)|(out[9] >> 23);
1680 out[9]=out[4]^out[9];
1681 out[14]=out[14]+out[1];
1682 out[1]=(out[1] << 47)|(out[1] >> 17);
1683 out[1]=out[14]^out[1];
1684 out[8]=out[8]+out[5];
1685 out[5]=(out[5] << 28)|(out[5] >> 36);
1686 out[5]=out[8]^out[5];
1687 out[10]=out[10]+out[3];
1688 out[3]=(out[3] << 16)|(out[3] >> 48);
1689 out[3]=out[10]^out[3];
1690 out[12]=out[12]+out[7];
1691 out[7]=(out[7] << 25)|(out[7] >> 39);
1692 out[7]=out[12]^out[7];
1706 out[13]+=key[14]+tweak[1];
1709 out[0]=out[0]+out[1];
1710 out[1]=(out[1] << 41)|(out[1] >> 23);
1711 out[1]=out[0]^out[1];
1712 out[2]=out[2]+out[3];
1713 out[3]=(out[3] << 9)|(out[3] >> 55);
1714 out[3]=out[2]^out[3];
1715 out[4]=out[4]+out[5];
1716 out[5]=(out[5] << 37)|(out[5] >> 27);
1717 out[5]=out[4]^out[5];
1718 out[6]=out[6]+out[7];
1719 out[7]=(out[7] << 31)|(out[7] >> 33);
1720 out[7]=out[6]^out[7];
1721 out[8]=out[8]+out[9];
1722 out[9]=(out[9] << 12)|(out[9] >> 52);
1723 out[9]=out[8]^out[9];
1724 out[10]=out[10]+out[11];
1725 out[11]=(out[11] << 47)|(out[11] >> 17);
1726 out[11]=out[10]^out[11];
1727 out[12]=out[12]+out[13];
1728 out[13]=(out[13] << 44)|(out[13] >> 20);
1729 out[13]=out[12]^out[13];
1730 out[14]=out[14]+out[15];
1731 out[15]=(out[15] << 30)|(out[15] >> 34);
1732 out[15]=out[14]^out[15];
1733 out[0]=out[0]+out[9];
1734 out[9]=(out[9] << 16)|(out[9] >> 48);
1735 out[9]=out[0]^out[9];
1736 out[2]=out[2]+out[13];
1737 out[13]=(out[13] << 34)|(out[13] >> 30);
1738 out[13]=out[2]^out[13];
1739 out[6]=out[6]+out[11];
1740 out[11]=(out[11] << 56)|(out[11] >> 8);
1741 out[11]=out[6]^out[11];
1742 out[4]=out[4]+out[15];
1743 out[15]=(out[15] << 51)|(out[15] >> 13);
1744 out[15]=out[4]^out[15];
1745 out[10]=out[10]+out[7];
1746 out[7]=(out[7] << 4)|(out[7] >> 60);
1747 out[7]=out[10]^out[7];
1748 out[12]=out[12]+out[3];
1749 out[3]=(out[3] << 53)|(out[3] >> 11);
1750 out[3]=out[12]^out[3];
1751 out[14]=out[14]+out[5];
1752 out[5]=(out[5] << 42)|(out[5] >> 22);
1753 out[5]=out[14]^out[5];
1754 out[8]=out[8]+out[1];
1755 out[1]=(out[1] << 41)|(out[1] >> 23);
1756 out[1]=out[8]^out[1];
1757 out[0]=out[0]+out[7];
1758 out[7]=(out[7] << 31)|(out[7] >> 33);
1759 out[7]=out[0]^out[7];
1760 out[2]=out[2]+out[5];
1761 out[5]=(out[5] << 44)|(out[5] >> 20);
1762 out[5]=out[2]^out[5];
1763 out[4]=out[4]+out[3];
1764 out[3]=(out[3] << 47)|(out[3] >> 17);
1765 out[3]=out[4]^out[3];
1766 out[6]=out[6]+out[1];
1767 out[1]=(out[1] << 46)|(out[1] >> 18);
1768 out[1]=out[6]^out[1];
1769 out[12]=out[12]+out[15];
1770 out[15]=(out[15] << 19)|(out[15] >> 45);
1771 out[15]=out[12]^out[15];
1772 out[14]=out[14]+out[13];
1773 out[13]=(out[13] << 42)|(out[13] >> 22);
1774 out[13]=out[14]^out[13];
1775 out[8]=out[8]+out[11];
1776 out[11]=(out[11] << 44)|(out[11] >> 20);
1777 out[11]=out[8]^out[11];
1778 out[10]=out[10]+out[9];
1779 out[9]=(out[9] << 25)|(out[9] >> 39);
1780 out[9]=out[10]^out[9];
1781 out[0]=out[0]+out[15];
1782 out[15]=(out[15] << 9)|(out[15] >> 55);
1783 out[15]=out[0]^out[15];
1784 out[2]=out[2]+out[11];
1785 out[11]=(out[11] << 48)|(out[11] >> 16);
1786 out[11]=out[2]^out[11];
1787 out[6]=out[6]+out[13];
1788 out[13]=(out[13] << 35)|(out[13] >> 29);
1789 out[13]=out[6]^out[13];
1790 out[4]=out[4]+out[9];
1791 out[9]=(out[9] << 52)|(out[9] >> 12);
1792 out[9]=out[4]^out[9];
1793 out[14]=out[14]+out[1];
1794 out[1]=(out[1] << 23)|(out[1] >> 41);
1795 out[1]=out[14]^out[1];
1796 out[8]=out[8]+out[5];
1797 out[5]=(out[5] << 31)|(out[5] >> 33);
1798 out[5]=out[8]^out[5];
1799 out[10]=out[10]+out[3];
1800 out[3]=(out[3] << 37)|(out[3] >> 27);
1801 out[3]=out[10]^out[3];
1802 out[12]=out[12]+out[7];
1803 out[7]=(out[7] << 20)|(out[7] >> 44);
1804 out[7]=out[12]^out[7];
1819 out[14]+=k+tweak[0];
1821 out[0]=out[0]+out[1];
1822 out[1]=(out[1] << 24)|(out[1] >> 40);
1823 out[1]=out[0]^out[1];
1824 out[2]=out[2]+out[3];
1825 out[3]=(out[3] << 13)|(out[3] >> 51);
1826 out[3]=out[2]^out[3];
1827 out[4]=out[4]+out[5];
1828 out[5]=(out[5] << 8)|(out[5] >> 56);
1829 out[5]=out[4]^out[5];
1830 out[6]=out[6]+out[7];
1831 out[7]=(out[7] << 47)|(out[7] >> 17);
1832 out[7]=out[6]^out[7];
1833 out[8]=out[8]+out[9];
1834 out[9]=(out[9] << 8)|(out[9] >> 56);
1835 out[9]=out[8]^out[9];
1836 out[10]=out[10]+out[11];
1837 out[11]=(out[11] << 17)|(out[11] >> 47);
1838 out[11]=out[10]^out[11];
1839 out[12]=out[12]+out[13];
1840 out[13]=(out[13] << 22)|(out[13] >> 42);
1841 out[13]=out[12]^out[13];
1842 out[14]=out[14]+out[15];
1843 out[15]=(out[15] << 37)|(out[15] >> 27);
1844 out[15]=out[14]^out[15];
1845 out[0]=out[0]+out[9];
1846 out[9]=(out[9] << 38)|(out[9] >> 26);
1847 out[9]=out[0]^out[9];
1848 out[2]=out[2]+out[13];
1849 out[13]=(out[13] << 19)|(out[13] >> 45);
1850 out[13]=out[2]^out[13];
1851 out[6]=out[6]+out[11];
1852 out[11]=(out[11] << 10)|(out[11] >> 54);
1853 out[11]=out[6]^out[11];
1854 out[4]=out[4]+out[15];
1855 out[15]=(out[15] << 55)|(out[15] >> 9);
1856 out[15]=out[4]^out[15];
1857 out[10]=out[10]+out[7];
1858 out[7]=(out[7] << 49)|(out[7] >> 15);
1859 out[7]=out[10]^out[7];
1860 out[12]=out[12]+out[3];
1861 out[3]=(out[3] << 18)|(out[3] >> 46);
1862 out[3]=out[12]^out[3];
1863 out[14]=out[14]+out[5];
1864 out[5]=(out[5] << 23)|(out[5] >> 41);
1865 out[5]=out[14]^out[5];
1866 out[8]=out[8]+out[1];
1867 out[1]=(out[1] << 52)|(out[1] >> 12);
1868 out[1]=out[8]^out[1];
1869 out[0]=out[0]+out[7];
1870 out[7]=(out[7] << 33)|(out[7] >> 31);
1871 out[7]=out[0]^out[7];
1872 out[2]=out[2]+out[5];
1873 out[5]=(out[5] << 4)|(out[5] >> 60);
1874 out[5]=out[2]^out[5];
1875 out[4]=out[4]+out[3];
1876 out[3]=(out[3] << 51)|(out[3] >> 13);
1877 out[3]=out[4]^out[3];
1878 out[6]=out[6]+out[1];
1879 out[1]=(out[1] << 13)|(out[1] >> 51);
1880 out[1]=out[6]^out[1];
1881 out[12]=out[12]+out[15];
1882 out[15]=(out[15] << 34)|(out[15] >> 30);
1883 out[15]=out[12]^out[15];
1884 out[14]=out[14]+out[13];
1885 out[13]=(out[13] << 41)|(out[13] >> 23);
1886 out[13]=out[14]^out[13];
1887 out[8]=out[8]+out[11];
1888 out[11]=(out[11] << 59)|(out[11] >> 5);
1889 out[11]=out[8]^out[11];
1890 out[10]=out[10]+out[9];
1891 out[9]=(out[9] << 17)|(out[9] >> 47);
1892 out[9]=out[10]^out[9];
1893 out[0]=out[0]+out[15];
1894 out[15]=(out[15] << 5)|(out[15] >> 59);
1895 out[15]=out[0]^out[15];
1896 out[2]=out[2]+out[11];
1897 out[11]=(out[11] << 20)|(out[11] >> 44);
1898 out[11]=out[2]^out[11];
1899 out[6]=out[6]+out[13];
1900 out[13]=(out[13] << 48)|(out[13] >> 16);
1901 out[13]=out[6]^out[13];
1902 out[4]=out[4]+out[9];
1903 out[9]=(out[9] << 41)|(out[9] >> 23);
1904 out[9]=out[4]^out[9];
1905 out[14]=out[14]+out[1];
1906 out[1]=(out[1] << 47)|(out[1] >> 17);
1907 out[1]=out[14]^out[1];
1908 out[8]=out[8]+out[5];
1909 out[5]=(out[5] << 28)|(out[5] >> 36);
1910 out[5]=out[8]^out[5];
1911 out[10]=out[10]+out[3];
1912 out[3]=(out[3] << 16)|(out[3] >> 48);
1913 out[3]=out[10]^out[3];
1914 out[12]=out[12]+out[7];
1915 out[7]=(out[7] << 25)|(out[7] >> 39);
1916 out[7]=out[12]^out[7];
1930 out[13]+=k+tweak[0];
1931 out[14]+=key[0]+tweak[1];
1933 out[0]=out[0]+out[1];
1934 out[1]=(out[1] << 41)|(out[1] >> 23);
1935 out[1]=out[0]^out[1];
1936 out[2]=out[2]+out[3];
1937 out[3]=(out[3] << 9)|(out[3] >> 55);
1938 out[3]=out[2]^out[3];
1939 out[4]=out[4]+out[5];
1940 out[5]=(out[5] << 37)|(out[5] >> 27);
1941 out[5]=out[4]^out[5];
1942 out[6]=out[6]+out[7];
1943 out[7]=(out[7] << 31)|(out[7] >> 33);
1944 out[7]=out[6]^out[7];
1945 out[8]=out[8]+out[9];
1946 out[9]=(out[9] << 12)|(out[9] >> 52);
1947 out[9]=out[8]^out[9];
1948 out[10]=out[10]+out[11];
1949 out[11]=(out[11] << 47)|(out[11] >> 17);
1950 out[11]=out[10]^out[11];
1951 out[12]=out[12]+out[13];
1952 out[13]=(out[13] << 44)|(out[13] >> 20);
1953 out[13]=out[12]^out[13];
1954 out[14]=out[14]+out[15];
1955 out[15]=(out[15] << 30)|(out[15] >> 34);
1956 out[15]=out[14]^out[15];
1957 out[0]=out[0]+out[9];
1958 out[9]=(out[9] << 16)|(out[9] >> 48);
1959 out[9]=out[0]^out[9];
1960 out[2]=out[2]+out[13];
1961 out[13]=(out[13] << 34)|(out[13] >> 30);
1962 out[13]=out[2]^out[13];
1963 out[6]=out[6]+out[11];
1964 out[11]=(out[11] << 56)|(out[11] >> 8);
1965 out[11]=out[6]^out[11];
1966 out[4]=out[4]+out[15];
1967 out[15]=(out[15] << 51)|(out[15] >> 13);
1968 out[15]=out[4]^out[15];
1969 out[10]=out[10]+out[7];
1970 out[7]=(out[7] << 4)|(out[7] >> 60);
1971 out[7]=out[10]^out[7];
1972 out[12]=out[12]+out[3];
1973 out[3]=(out[3] << 53)|(out[3] >> 11);
1974 out[3]=out[12]^out[3];
1975 out[14]=out[14]+out[5];
1976 out[5]=(out[5] << 42)|(out[5] >> 22);
1977 out[5]=out[14]^out[5];
1978 out[8]=out[8]+out[1];
1979 out[1]=(out[1] << 41)|(out[1] >> 23);
1980 out[1]=out[8]^out[1];
1981 out[0]=out[0]+out[7];
1982 out[7]=(out[7] << 31)|(out[7] >> 33);
1983 out[7]=out[0]^out[7];
1984 out[2]=out[2]+out[5];
1985 out[5]=(out[5] << 44)|(out[5] >> 20);
1986 out[5]=out[2]^out[5];
1987 out[4]=out[4]+out[3];
1988 out[3]=(out[3] << 47)|(out[3] >> 17);
1989 out[3]=out[4]^out[3];
1990 out[6]=out[6]+out[1];
1991 out[1]=(out[1] << 46)|(out[1] >> 18);
1992 out[1]=out[6]^out[1];
1993 out[12]=out[12]+out[15];
1994 out[15]=(out[15] << 19)|(out[15] >> 45);
1995 out[15]=out[12]^out[15];
1996 out[14]=out[14]+out[13];
1997 out[13]=(out[13] << 42)|(out[13] >> 22);
1998 out[13]=out[14]^out[13];
1999 out[8]=out[8]+out[11];
2000 out[11]=(out[11] << 44)|(out[11] >> 20);
2001 out[11]=out[8]^out[11];
2002 out[10]=out[10]+out[9];
2003 out[9]=(out[9] << 25)|(out[9] >> 39);
2004 out[9]=out[10]^out[9];
2005 out[0]=out[0]+out[15];
2006 out[15]=(out[15] << 9)|(out[15] >> 55);
2007 out[15]=out[0]^out[15];
2008 out[2]=out[2]+out[11];
2009 out[11]=(out[11] << 48)|(out[11] >> 16);
2010 out[11]=out[2]^out[11];
2011 out[6]=out[6]+out[13];
2012 out[13]=(out[13] << 35)|(out[13] >> 29);
2013 out[13]=out[6]^out[13];
2014 out[4]=out[4]+out[9];
2015 out[9]=(out[9] << 52)|(out[9] >> 12);
2016 out[9]=out[4]^out[9];
2017 out[14]=out[14]+out[1];
2018 out[1]=(out[1] << 23)|(out[1] >> 41);
2019 out[1]=out[14]^out[1];
2020 out[8]=out[8]+out[5];
2021 out[5]=(out[5] << 31)|(out[5] >> 33);
2022 out[5]=out[8]^out[5];
2023 out[10]=out[10]+out[3];
2024 out[3]=(out[3] << 37)|(out[3] >> 27);
2025 out[3]=out[10]^out[3];
2026 out[12]=out[12]+out[7];
2027 out[7]=(out[7] << 20)|(out[7] >> 44);
2028 out[7]=out[12]^out[7];
2042 out[13]+=key[0]+tweak[1];
2045 out[0]=out[0]+out[1];
2046 out[1]=(out[1] << 24)|(out[1] >> 40);
2047 out[1]=out[0]^out[1];
2048 out[2]=out[2]+out[3];
2049 out[3]=(out[3] << 13)|(out[3] >> 51);
2050 out[3]=out[2]^out[3];
2051 out[4]=out[4]+out[5];
2052 out[5]=(out[5] << 8)|(out[5] >> 56);
2053 out[5]=out[4]^out[5];
2054 out[6]=out[6]+out[7];
2055 out[7]=(out[7] << 47)|(out[7] >> 17);
2056 out[7]=out[6]^out[7];
2057 out[8]=out[8]+out[9];
2058 out[9]=(out[9] << 8)|(out[9] >> 56);
2059 out[9]=out[8]^out[9];
2060 out[10]=out[10]+out[11];
2061 out[11]=(out[11] << 17)|(out[11] >> 47);
2062 out[11]=out[10]^out[11];
2063 out[12]=out[12]+out[13];
2064 out[13]=(out[13] << 22)|(out[13] >> 42);
2065 out[13]=out[12]^out[13];
2066 out[14]=out[14]+out[15];
2067 out[15]=(out[15] << 37)|(out[15] >> 27);
2068 out[15]=out[14]^out[15];
2069 out[0]=out[0]+out[9];
2070 out[9]=(out[9] << 38)|(out[9] >> 26);
2071 out[9]=out[0]^out[9];
2072 out[2]=out[2]+out[13];
2073 out[13]=(out[13] << 19)|(out[13] >> 45);
2074 out[13]=out[2]^out[13];
2075 out[6]=out[6]+out[11];
2076 out[11]=(out[11] << 10)|(out[11] >> 54);
2077 out[11]=out[6]^out[11];
2078 out[4]=out[4]+out[15];
2079 out[15]=(out[15] << 55)|(out[15] >> 9);
2080 out[15]=out[4]^out[15];
2081 out[10]=out[10]+out[7];
2082 out[7]=(out[7] << 49)|(out[7] >> 15);
2083 out[7]=out[10]^out[7];
2084 out[12]=out[12]+out[3];
2085 out[3]=(out[3] << 18)|(out[3] >> 46);
2086 out[3]=out[12]^out[3];
2087 out[14]=out[14]+out[5];
2088 out[5]=(out[5] << 23)|(out[5] >> 41);
2089 out[5]=out[14]^out[5];
2090 out[8]=out[8]+out[1];
2091 out[1]=(out[1] << 52)|(out[1] >> 12);
2092 out[1]=out[8]^out[1];
2093 out[0]=out[0]+out[7];
2094 out[7]=(out[7] << 33)|(out[7] >> 31);
2095 out[7]=out[0]^out[7];
2096 out[2]=out[2]+out[5];
2097 out[5]=(out[5] << 4)|(out[5] >> 60);
2098 out[5]=out[2]^out[5];
2099 out[4]=out[4]+out[3];
2100 out[3]=(out[3] << 51)|(out[3] >> 13);
2101 out[3]=out[4]^out[3];
2102 out[6]=out[6]+out[1];
2103 out[1]=(out[1] << 13)|(out[1] >> 51);
2104 out[1]=out[6]^out[1];
2105 out[12]=out[12]+out[15];
2106 out[15]=(out[15] << 34)|(out[15] >> 30);
2107 out[15]=out[12]^out[15];
2108 out[14]=out[14]+out[13];
2109 out[13]=(out[13] << 41)|(out[13] >> 23);
2110 out[13]=out[14]^out[13];
2111 out[8]=out[8]+out[11];
2112 out[11]=(out[11] << 59)|(out[11] >> 5);
2113 out[11]=out[8]^out[11];
2114 out[10]=out[10]+out[9];
2115 out[9]=(out[9] << 17)|(out[9] >> 47);
2116 out[9]=out[10]^out[9];
2117 out[0]=out[0]+out[15];
2118 out[15]=(out[15] << 5)|(out[15] >> 59);
2119 out[15]=out[0]^out[15];
2120 out[2]=out[2]+out[11];
2121 out[11]=(out[11] << 20)|(out[11] >> 44);
2122 out[11]=out[2]^out[11];
2123 out[6]=out[6]+out[13];
2124 out[13]=(out[13] << 48)|(out[13] >> 16);
2125 out[13]=out[6]^out[13];
2126 out[4]=out[4]+out[9];
2127 out[9]=(out[9] << 41)|(out[9] >> 23);
2128 out[9]=out[4]^out[9];
2129 out[14]=out[14]+out[1];
2130 out[1]=(out[1] << 47)|(out[1] >> 17);
2131 out[1]=out[14]^out[1];
2132 out[8]=out[8]+out[5];
2133 out[5]=(out[5] << 28)|(out[5] >> 36);
2134 out[5]=out[8]^out[5];
2135 out[10]=out[10]+out[3];
2136 out[3]=(out[3] << 16)|(out[3] >> 48);
2137 out[3]=out[10]^out[3];
2138 out[12]=out[12]+out[7];
2139 out[7]=(out[7] << 25)|(out[7] >> 39);
2140 out[7]=out[12]^out[7];
2155 out[14]+=key[2]+tweak[0];
2157 out[0]=out[0]+out[1];
2158 out[1]=(out[1] << 41)|(out[1] >> 23);
2159 out[1]=out[0]^out[1];
2160 out[2]=out[2]+out[3];
2161 out[3]=(out[3] << 9)|(out[3] >> 55);
2162 out[3]=out[2]^out[3];
2163 out[4]=out[4]+out[5];
2164 out[5]=(out[5] << 37)|(out[5] >> 27);
2165 out[5]=out[4]^out[5];
2166 out[6]=out[6]+out[7];
2167 out[7]=(out[7] << 31)|(out[7] >> 33);
2168 out[7]=out[6]^out[7];
2169 out[8]=out[8]+out[9];
2170 out[9]=(out[9] << 12)|(out[9] >> 52);
2171 out[9]=out[8]^out[9];
2172 out[10]=out[10]+out[11];
2173 out[11]=(out[11] << 47)|(out[11] >> 17);
2174 out[11]=out[10]^out[11];
2175 out[12]=out[12]+out[13];
2176 out[13]=(out[13] << 44)|(out[13] >> 20);
2177 out[13]=out[12]^out[13];
2178 out[14]=out[14]+out[15];
2179 out[15]=(out[15] << 30)|(out[15] >> 34);
2180 out[15]=out[14]^out[15];
2181 out[0]=out[0]+out[9];
2182 out[9]=(out[9] << 16)|(out[9] >> 48);
2183 out[9]=out[0]^out[9];
2184 out[2]=out[2]+out[13];
2185 out[13]=(out[13] << 34)|(out[13] >> 30);
2186 out[13]=out[2]^out[13];
2187 out[6]=out[6]+out[11];
2188 out[11]=(out[11] << 56)|(out[11] >> 8);
2189 out[11]=out[6]^out[11];
2190 out[4]=out[4]+out[15];
2191 out[15]=(out[15] << 51)|(out[15] >> 13);
2192 out[15]=out[4]^out[15];
2193 out[10]=out[10]+out[7];
2194 out[7]=(out[7] << 4)|(out[7] >> 60);
2195 out[7]=out[10]^out[7];
2196 out[12]=out[12]+out[3];
2197 out[3]=(out[3] << 53)|(out[3] >> 11);
2198 out[3]=out[12]^out[3];
2199 out[14]=out[14]+out[5];
2200 out[5]=(out[5] << 42)|(out[5] >> 22);
2201 out[5]=out[14]^out[5];
2202 out[8]=out[8]+out[1];
2203 out[1]=(out[1] << 41)|(out[1] >> 23);
2204 out[1]=out[8]^out[1];
2205 out[0]=out[0]+out[7];
2206 out[7]=(out[7] << 31)|(out[7] >> 33);
2207 out[7]=out[0]^out[7];
2208 out[2]=out[2]+out[5];
2209 out[5]=(out[5] << 44)|(out[5] >> 20);
2210 out[5]=out[2]^out[5];
2211 out[4]=out[4]+out[3];
2212 out[3]=(out[3] << 47)|(out[3] >> 17);
2213 out[3]=out[4]^out[3];
2214 out[6]=out[6]+out[1];
2215 out[1]=(out[1] << 46)|(out[1] >> 18);
2216 out[1]=out[6]^out[1];
2217 out[12]=out[12]+out[15];
2218 out[15]=(out[15] << 19)|(out[15] >> 45);
2219 out[15]=out[12]^out[15];
2220 out[14]=out[14]+out[13];
2221 out[13]=(out[13] << 42)|(out[13] >> 22);
2222 out[13]=out[14]^out[13];
2223 out[8]=out[8]+out[11];
2224 out[11]=(out[11] << 44)|(out[11] >> 20);
2225 out[11]=out[8]^out[11];
2226 out[10]=out[10]+out[9];
2227 out[9]=(out[9] << 25)|(out[9] >> 39);
2228 out[9]=out[10]^out[9];
2229 out[0]=out[0]+out[15];
2230 out[15]=(out[15] << 9)|(out[15] >> 55);
2231 out[15]=out[0]^out[15];
2232 out[2]=out[2]+out[11];
2233 out[11]=(out[11] << 48)|(out[11] >> 16);
2234 out[11]=out[2]^out[11];
2235 out[6]=out[6]+out[13];
2236 out[13]=(out[13] << 35)|(out[13] >> 29);
2237 out[13]=out[6]^out[13];
2238 out[4]=out[4]+out[9];
2239 out[9]=(out[9] << 52)|(out[9] >> 12);
2240 out[9]=out[4]^out[9];
2241 out[14]=out[14]+out[1];
2242 out[1]=(out[1] << 23)|(out[1] >> 41);
2243 out[1]=out[14]^out[1];
2244 out[8]=out[8]+out[5];
2245 out[5]=(out[5] << 31)|(out[5] >> 33);
2246 out[5]=out[8]^out[5];
2247 out[10]=out[10]+out[3];
2248 out[3]=(out[3] << 37)|(out[3] >> 27);
2249 out[3]=out[10]^out[3];
2250 out[12]=out[12]+out[7];
2251 out[7]=(out[7] << 20)|(out[7] >> 44);
2252 out[7]=out[12]^out[7];
2266 out[13]+=key[2]+tweak[0];
2267 out[14]+=key[3]+tweak[1];
2269 out[0]=out[0]+out[1];
2270 out[1]=(out[1] << 24)|(out[1] >> 40);
2271 out[1]=out[0]^out[1];
2272 out[2]=out[2]+out[3];
2273 out[3]=(out[3] << 13)|(out[3] >> 51);
2274 out[3]=out[2]^out[3];
2275 out[4]=out[4]+out[5];
2276 out[5]=(out[5] << 8)|(out[5] >> 56);
2277 out[5]=out[4]^out[5];
2278 out[6]=out[6]+out[7];
2279 out[7]=(out[7] << 47)|(out[7] >> 17);
2280 out[7]=out[6]^out[7];
2281 out[8]=out[8]+out[9];
2282 out[9]=(out[9] << 8)|(out[9] >> 56);
2283 out[9]=out[8]^out[9];
2284 out[10]=out[10]+out[11];
2285 out[11]=(out[11] << 17)|(out[11] >> 47);
2286 out[11]=out[10]^out[11];
2287 out[12]=out[12]+out[13];
2288 out[13]=(out[13] << 22)|(out[13] >> 42);
2289 out[13]=out[12]^out[13];
2290 out[14]=out[14]+out[15];
2291 out[15]=(out[15] << 37)|(out[15] >> 27);
2292 out[15]=out[14]^out[15];
2293 out[0]=out[0]+out[9];
2294 out[9]=(out[9] << 38)|(out[9] >> 26);
2295 out[9]=out[0]^out[9];
2296 out[2]=out[2]+out[13];
2297 out[13]=(out[13] << 19)|(out[13] >> 45);
2298 out[13]=out[2]^out[13];
2299 out[6]=out[6]+out[11];
2300 out[11]=(out[11] << 10)|(out[11] >> 54);
2301 out[11]=out[6]^out[11];
2302 out[4]=out[4]+out[15];
2303 out[15]=(out[15] << 55)|(out[15] >> 9);
2304 out[15]=out[4]^out[15];
2305 out[10]=out[10]+out[7];
2306 out[7]=(out[7] << 49)|(out[7] >> 15);
2307 out[7]=out[10]^out[7];
2308 out[12]=out[12]+out[3];
2309 out[3]=(out[3] << 18)|(out[3] >> 46);
2310 out[3]=out[12]^out[3];
2311 out[14]=out[14]+out[5];
2312 out[5]=(out[5] << 23)|(out[5] >> 41);
2313 out[5]=out[14]^out[5];
2314 out[8]=out[8]+out[1];
2315 out[1]=(out[1] << 52)|(out[1] >> 12);
2316 out[1]=out[8]^out[1];
2317 out[0]=out[0]+out[7];
2318 out[7]=(out[7] << 33)|(out[7] >> 31);
2319 out[7]=out[0]^out[7];
2320 out[2]=out[2]+out[5];
2321 out[5]=(out[5] << 4)|(out[5] >> 60);
2322 out[5]=out[2]^out[5];
2323 out[4]=out[4]+out[3];
2324 out[3]=(out[3] << 51)|(out[3] >> 13);
2325 out[3]=out[4]^out[3];
2326 out[6]=out[6]+out[1];
2327 out[1]=(out[1] << 13)|(out[1] >> 51);
2328 out[1]=out[6]^out[1];
2329 out[12]=out[12]+out[15];
2330 out[15]=(out[15] << 34)|(out[15] >> 30);
2331 out[15]=out[12]^out[15];
2332 out[14]=out[14]+out[13];
2333 out[13]=(out[13] << 41)|(out[13] >> 23);
2334 out[13]=out[14]^out[13];
2335 out[8]=out[8]+out[11];
2336 out[11]=(out[11] << 59)|(out[11] >> 5);
2337 out[11]=out[8]^out[11];
2338 out[10]=out[10]+out[9];
2339 out[9]=(out[9] << 17)|(out[9] >> 47);
2340 out[9]=out[10]^out[9];
2341 out[0]=out[0]+out[15];
2342 out[15]=(out[15] << 5)|(out[15] >> 59);
2343 out[15]=out[0]^out[15];
2344 out[2]=out[2]+out[11];
2345 out[11]=(out[11] << 20)|(out[11] >> 44);
2346 out[11]=out[2]^out[11];
2347 out[6]=out[6]+out[13];
2348 out[13]=(out[13] << 48)|(out[13] >> 16);
2349 out[13]=out[6]^out[13];
2350 out[4]=out[4]+out[9];
2351 out[9]=(out[9] << 41)|(out[9] >> 23);
2352 out[9]=out[4]^out[9];
2353 out[14]=out[14]+out[1];
2354 out[1]=(out[1] << 47)|(out[1] >> 17);
2355 out[1]=out[14]^out[1];
2356 out[8]=out[8]+out[5];
2357 out[5]=(out[5] << 28)|(out[5] >> 36);
2358 out[5]=out[8]^out[5];
2359 out[10]=out[10]+out[3];
2360 out[3]=(out[3] << 16)|(out[3] >> 48);
2361 out[3]=out[10]^out[3];
2362 out[12]=out[12]+out[7];
2363 out[7]=(out[7] << 25)|(out[7] >> 39);
2364 out[7]=out[12]^out[7];
2378 out[13]+=key[3]+tweak[1];
2381 out[0]=out[0]+out[1];
2382 out[1]=(out[1] << 41)|(out[1] >> 23);
2383 out[1]=out[0]^out[1];
2384 out[2]=out[2]+out[3];
2385 out[3]=(out[3] << 9)|(out[3] >> 55);
2386 out[3]=out[2]^out[3];
2387 out[4]=out[4]+out[5];
2388 out[5]=(out[5] << 37)|(out[5] >> 27);
2389 out[5]=out[4]^out[5];
2390 out[6]=out[6]+out[7];
2391 out[7]=(out[7] << 31)|(out[7] >> 33);
2392 out[7]=out[6]^out[7];
2393 out[8]=out[8]+out[9];
2394 out[9]=(out[9] << 12)|(out[9] >> 52);
2395 out[9]=out[8]^out[9];
2396 out[10]=out[10]+out[11];
2397 out[11]=(out[11] << 47)|(out[11] >> 17);
2398 out[11]=out[10]^out[11];
2399 out[12]=out[12]+out[13];
2400 out[13]=(out[13] << 44)|(out[13] >> 20);
2401 out[13]=out[12]^out[13];
2402 out[14]=out[14]+out[15];
2403 out[15]=(out[15] << 30)|(out[15] >> 34);
2404 out[15]=out[14]^out[15];
2405 out[0]=out[0]+out[9];
2406 out[9]=(out[9] << 16)|(out[9] >> 48);
2407 out[9]=out[0]^out[9];
2408 out[2]=out[2]+out[13];
2409 out[13]=(out[13] << 34)|(out[13] >> 30);
2410 out[13]=out[2]^out[13];
2411 out[6]=out[6]+out[11];
2412 out[11]=(out[11] << 56)|(out[11] >> 8);
2413 out[11]=out[6]^out[11];
2414 out[4]=out[4]+out[15];
2415 out[15]=(out[15] << 51)|(out[15] >> 13);
2416 out[15]=out[4]^out[15];
2417 out[10]=out[10]+out[7];
2418 out[7]=(out[7] << 4)|(out[7] >> 60);
2419 out[7]=out[10]^out[7];
2420 out[12]=out[12]+out[3];
2421 out[3]=(out[3] << 53)|(out[3] >> 11);
2422 out[3]=out[12]^out[3];
2423 out[14]=out[14]+out[5];
2424 out[5]=(out[5] << 42)|(out[5] >> 22);
2425 out[5]=out[14]^out[5];
2426 out[8]=out[8]+out[1];
2427 out[1]=(out[1] << 41)|(out[1] >> 23);
2428 out[1]=out[8]^out[1];
2429 out[0]=out[0]+out[7];
2430 out[7]=(out[7] << 31)|(out[7] >> 33);
2431 out[7]=out[0]^out[7];
2432 out[2]=out[2]+out[5];
2433 out[5]=(out[5] << 44)|(out[5] >> 20);
2434 out[5]=out[2]^out[5];
2435 out[4]=out[4]+out[3];
2436 out[3]=(out[3] << 47)|(out[3] >> 17);
2437 out[3]=out[4]^out[3];
2438 out[6]=out[6]+out[1];
2439 out[1]=(out[1] << 46)|(out[1] >> 18);
2440 out[1]=out[6]^out[1];
2441 out[12]=out[12]+out[15];
2442 out[15]=(out[15] << 19)|(out[15] >> 45);
2443 out[15]=out[12]^out[15];
2444 out[14]=out[14]+out[13];
2445 out[13]=(out[13] << 42)|(out[13] >> 22);
2446 out[13]=out[14]^out[13];
2447 out[8]=out[8]+out[11];
2448 out[11]=(out[11] << 44)|(out[11] >> 20);
2449 out[11]=out[8]^out[11];
2450 out[10]=out[10]+out[9];
2451 out[9]=(out[9] << 25)|(out[9] >> 39);
2452 out[9]=out[10]^out[9];
2453 out[0]=out[0]+out[15];
2454 out[15]=(out[15] << 9)|(out[15] >> 55);
2455 out[15]=out[0]^out[15];
2456 out[2]=out[2]+out[11];
2457 out[11]=(out[11] << 48)|(out[11] >> 16);
2458 out[11]=out[2]^out[11];
2459 out[6]=out[6]+out[13];
2460 out[13]=(out[13] << 35)|(out[13] >> 29);
2461 out[13]=out[6]^out[13];
2462 out[4]=out[4]+out[9];
2463 out[9]=(out[9] << 52)|(out[9] >> 12);
2464 out[9]=out[4]^out[9];
2465 out[14]=out[14]+out[1];
2466 out[1]=(out[1] << 23)|(out[1] >> 41);
2467 out[1]=out[14]^out[1];
2468 out[8]=out[8]+out[5];
2469 out[5]=(out[5] << 31)|(out[5] >> 33);
2470 out[5]=out[8]^out[5];
2471 out[10]=out[10]+out[3];
2472 out[3]=(out[3] << 37)|(out[3] >> 27);
2473 out[3]=out[10]^out[3];
2474 out[12]=out[12]+out[7];
2475 out[7]=(out[7] << 20)|(out[7] >> 44);
2476 out[7]=out[12]^out[7];
2491 out[14]+=key[5]+tweak[0];
2493 out[0]=out[0]+out[1];
2494 out[1]=(out[1] << 24)|(out[1] >> 40);
2495 out[1]=out[0]^out[1];
2496 out[2]=out[2]+out[3];
2497 out[3]=(out[3] << 13)|(out[3] >> 51);
2498 out[3]=out[2]^out[3];
2499 out[4]=out[4]+out[5];
2500 out[5]=(out[5] << 8)|(out[5] >> 56);
2501 out[5]=out[4]^out[5];
2502 out[6]=out[6]+out[7];
2503 out[7]=(out[7] << 47)|(out[7] >> 17);
2504 out[7]=out[6]^out[7];
2505 out[8]=out[8]+out[9];
2506 out[9]=(out[9] << 8)|(out[9] >> 56);
2507 out[9]=out[8]^out[9];
2508 out[10]=out[10]+out[11];
2509 out[11]=(out[11] << 17)|(out[11] >> 47);
2510 out[11]=out[10]^out[11];
2511 out[12]=out[12]+out[13];
2512 out[13]=(out[13] << 22)|(out[13] >> 42);
2513 out[13]=out[12]^out[13];
2514 out[14]=out[14]+out[15];
2515 out[15]=(out[15] << 37)|(out[15] >> 27);
2516 out[15]=out[14]^out[15];
2517 out[0]=out[0]+out[9];
2518 out[9]=(out[9] << 38)|(out[9] >> 26);
2519 out[9]=out[0]^out[9];
2520 out[2]=out[2]+out[13];
2521 out[13]=(out[13] << 19)|(out[13] >> 45);
2522 out[13]=out[2]^out[13];
2523 out[6]=out[6]+out[11];
2524 out[11]=(out[11] << 10)|(out[11] >> 54);
2525 out[11]=out[6]^out[11];
2526 out[4]=out[4]+out[15];
2527 out[15]=(out[15] << 55)|(out[15] >> 9);
2528 out[15]=out[4]^out[15];
2529 out[10]=out[10]+out[7];
2530 out[7]=(out[7] << 49)|(out[7] >> 15);
2531 out[7]=out[10]^out[7];
2532 out[12]=out[12]+out[3];
2533 out[3]=(out[3] << 18)|(out[3] >> 46);
2534 out[3]=out[12]^out[3];
2535 out[14]=out[14]+out[5];
2536 out[5]=(out[5] << 23)|(out[5] >> 41);
2537 out[5]=out[14]^out[5];
2538 out[8]=out[8]+out[1];
2539 out[1]=(out[1] << 52)|(out[1] >> 12);
2540 out[1]=out[8]^out[1];
2541 out[0]=out[0]+out[7];
2542 out[7]=(out[7] << 33)|(out[7] >> 31);
2543 out[7]=out[0]^out[7];
2544 out[2]=out[2]+out[5];
2545 out[5]=(out[5] << 4)|(out[5] >> 60);
2546 out[5]=out[2]^out[5];
2547 out[4]=out[4]+out[3];
2548 out[3]=(out[3] << 51)|(out[3] >> 13);
2549 out[3]=out[4]^out[3];
2550 out[6]=out[6]+out[1];
2551 out[1]=(out[1] << 13)|(out[1] >> 51);
2552 out[1]=out[6]^out[1];
2553 out[12]=out[12]+out[15];
2554 out[15]=(out[15] << 34)|(out[15] >> 30);
2555 out[15]=out[12]^out[15];
2556 out[14]=out[14]+out[13];
2557 out[13]=(out[13] << 41)|(out[13] >> 23);
2558 out[13]=out[14]^out[13];
2559 out[8]=out[8]+out[11];
2560 out[11]=(out[11] << 59)|(out[11] >> 5);
2561 out[11]=out[8]^out[11];
2562 out[10]=out[10]+out[9];
2563 out[9]=(out[9] << 17)|(out[9] >> 47);
2564 out[9]=out[10]^out[9];
2565 out[0]=out[0]+out[15];
2566 out[15]=(out[15] << 5)|(out[15] >> 59);
2567 out[15]=out[0]^out[15];
2568 out[2]=out[2]+out[11];
2569 out[11]=(out[11] << 20)|(out[11] >> 44);
2570 out[11]=out[2]^out[11];
2571 out[6]=out[6]+out[13];
2572 out[13]=(out[13] << 48)|(out[13] >> 16);
2573 out[13]=out[6]^out[13];
2574 out[4]=out[4]+out[9];
2575 out[9]=(out[9] << 41)|(out[9] >> 23);
2576 out[9]=out[4]^out[9];
2577 out[14]=out[14]+out[1];
2578 out[1]=(out[1] << 47)|(out[1] >> 17);
2579 out[1]=out[14]^out[1];
2580 out[8]=out[8]+out[5];
2581 out[5]=(out[5] << 28)|(out[5] >> 36);
2582 out[5]=out[8]^out[5];
2583 out[10]=out[10]+out[3];
2584 out[3]=(out[3] << 16)|(out[3] >> 48);
2585 out[3]=out[10]^out[3];
2586 out[12]=out[12]+out[7];
2587 out[7]=(out[7] << 25)|(out[7] >> 39);
2588 out[7]=out[12]^out[7];
2602 out[13]+=key[5]+tweak[0];
2603 out[14]+=key[6]+tweak[1];
2605 out[0]=out[0]+out[1];
2606 out[1]=(out[1] << 41)|(out[1] >> 23);
2607 out[1]=out[0]^out[1];
2608 out[2]=out[2]+out[3];
2609 out[3]=(out[3] << 9)|(out[3] >> 55);
2610 out[3]=out[2]^out[3];
2611 out[4]=out[4]+out[5];
2612 out[5]=(out[5] << 37)|(out[5] >> 27);
2613 out[5]=out[4]^out[5];
2614 out[6]=out[6]+out[7];
2615 out[7]=(out[7] << 31)|(out[7] >> 33);
2616 out[7]=out[6]^out[7];
2617 out[8]=out[8]+out[9];
2618 out[9]=(out[9] << 12)|(out[9] >> 52);
2619 out[9]=out[8]^out[9];
2620 out[10]=out[10]+out[11];
2621 out[11]=(out[11] << 47)|(out[11] >> 17);
2622 out[11]=out[10]^out[11];
2623 out[12]=out[12]+out[13];
2624 out[13]=(out[13] << 44)|(out[13] >> 20);
2625 out[13]=out[12]^out[13];
2626 out[14]=out[14]+out[15];
2627 out[15]=(out[15] << 30)|(out[15] >> 34);
2628 out[15]=out[14]^out[15];
2629 out[0]=out[0]+out[9];
2630 out[9]=(out[9] << 16)|(out[9] >> 48);
2631 out[9]=out[0]^out[9];
2632 out[2]=out[2]+out[13];
2633 out[13]=(out[13] << 34)|(out[13] >> 30);
2634 out[13]=out[2]^out[13];
2635 out[6]=out[6]+out[11];
2636 out[11]=(out[11] << 56)|(out[11] >> 8);
2637 out[11]=out[6]^out[11];
2638 out[4]=out[4]+out[15];
2639 out[15]=(out[15] << 51)|(out[15] >> 13);
2640 out[15]=out[4]^out[15];
2641 out[10]=out[10]+out[7];
2642 out[7]=(out[7] << 4)|(out[7] >> 60);
2643 out[7]=out[10]^out[7];
2644 out[12]=out[12]+out[3];
2645 out[3]=(out[3] << 53)|(out[3] >> 11);
2646 out[3]=out[12]^out[3];
2647 out[14]=out[14]+out[5];
2648 out[5]=(out[5] << 42)|(out[5] >> 22);
2649 out[5]=out[14]^out[5];
2650 out[8]=out[8]+out[1];
2651 out[1]=(out[1] << 41)|(out[1] >> 23);
2652 out[1]=out[8]^out[1];
2653 out[0]=out[0]+out[7];
2654 out[7]=(out[7] << 31)|(out[7] >> 33);
2655 out[7]=out[0]^out[7];
2656 out[2]=out[2]+out[5];
2657 out[5]=(out[5] << 44)|(out[5] >> 20);
2658 out[5]=out[2]^out[5];
2659 out[4]=out[4]+out[3];
2660 out[3]=(out[3] << 47)|(out[3] >> 17);
2661 out[3]=out[4]^out[3];
2662 out[6]=out[6]+out[1];
2663 out[1]=(out[1] << 46)|(out[1] >> 18);
2664 out[1]=out[6]^out[1];
2665 out[12]=out[12]+out[15];
2666 out[15]=(out[15] << 19)|(out[15] >> 45);
2667 out[15]=out[12]^out[15];
2668 out[14]=out[14]+out[13];
2669 out[13]=(out[13] << 42)|(out[13] >> 22);
2670 out[13]=out[14]^out[13];
2671 out[8]=out[8]+out[11];
2672 out[11]=(out[11] << 44)|(out[11] >> 20);
2673 out[11]=out[8]^out[11];
2674 out[10]=out[10]+out[9];
2675 out[9]=(out[9] << 25)|(out[9] >> 39);
2676 out[9]=out[10]^out[9];
2677 out[0]=out[0]+out[15];
2678 out[15]=(out[15] << 9)|(out[15] >> 55);
2679 out[15]=out[0]^out[15];
2680 out[2]=out[2]+out[11];
2681 out[11]=(out[11] << 48)|(out[11] >> 16);
2682 out[11]=out[2]^out[11];
2683 out[6]=out[6]+out[13];
2684 out[13]=(out[13] << 35)|(out[13] >> 29);
2685 out[13]=out[6]^out[13];
2686 out[4]=out[4]+out[9];
2687 out[9]=(out[9] << 52)|(out[9] >> 12);
2688 out[9]=out[4]^out[9];
2689 out[14]=out[14]+out[1];
2690 out[1]=(out[1] << 23)|(out[1] >> 41);
2691 out[1]=out[14]^out[1];
2692 out[8]=out[8]+out[5];
2693 out[5]=(out[5] << 31)|(out[5] >> 33);
2694 out[5]=out[8]^out[5];
2695 out[10]=out[10]+out[3];
2696 out[3]=(out[3] << 37)|(out[3] >> 27);
2697 out[3]=out[10]^out[3];
2698 out[12]=out[12]+out[7];
2699 out[7]=(out[7] << 20)|(out[7] >> 44);
2700 out[7]=out[12]^out[7];
2714 out[13]+=key[6]+tweak[1];
2717 out[0]=out[0]+out[1];
2718 out[1]=(out[1] << 24)|(out[1] >> 40);
2719 out[1]=out[0]^out[1];
2720 out[2]=out[2]+out[3];
2721 out[3]=(out[3] << 13)|(out[3] >> 51);
2722 out[3]=out[2]^out[3];
2723 out[4]=out[4]+out[5];
2724 out[5]=(out[5] << 8)|(out[5] >> 56);
2725 out[5]=out[4]^out[5];
2726 out[6]=out[6]+out[7];
2727 out[7]=(out[7] << 47)|(out[7] >> 17);
2728 out[7]=out[6]^out[7];
2729 out[8]=out[8]+out[9];
2730 out[9]=(out[9] << 8)|(out[9] >> 56);
2731 out[9]=out[8]^out[9];
2732 out[10]=out[10]+out[11];
2733 out[11]=(out[11] << 17)|(out[11] >> 47);
2734 out[11]=out[10]^out[11];
2735 out[12]=out[12]+out[13];
2736 out[13]=(out[13] << 22)|(out[13] >> 42);
2737 out[13]=out[12]^out[13];
2738 out[14]=out[14]+out[15];
2739 out[15]=(out[15] << 37)|(out[15] >> 27);
2740 out[15]=out[14]^out[15];
2741 out[0]=out[0]+out[9];
2742 out[9]=(out[9] << 38)|(out[9] >> 26);
2743 out[9]=out[0]^out[9];
2744 out[2]=out[2]+out[13];
2745 out[13]=(out[13] << 19)|(out[13] >> 45);
2746 out[13]=out[2]^out[13];
2747 out[6]=out[6]+out[11];
2748 out[11]=(out[11] << 10)|(out[11] >> 54);
2749 out[11]=out[6]^out[11];
2750 out[4]=out[4]+out[15];
2751 out[15]=(out[15] << 55)|(out[15] >> 9);
2752 out[15]=out[4]^out[15];
2753 out[10]=out[10]+out[7];
2754 out[7]=(out[7] << 49)|(out[7] >> 15);
2755 out[7]=out[10]^out[7];
2756 out[12]=out[12]+out[3];
2757 out[3]=(out[3] << 18)|(out[3] >> 46);
2758 out[3]=out[12]^out[3];
2759 out[14]=out[14]+out[5];
2760 out[5]=(out[5] << 23)|(out[5] >> 41);
2761 out[5]=out[14]^out[5];
2762 out[8]=out[8]+out[1];
2763 out[1]=(out[1] << 52)|(out[1] >> 12);
2764 out[1]=out[8]^out[1];
2765 out[0]=out[0]+out[7];
2766 out[7]=(out[7] << 33)|(out[7] >> 31);
2767 out[7]=out[0]^out[7];
2768 out[2]=out[2]+out[5];
2769 out[5]=(out[5] << 4)|(out[5] >> 60);
2770 out[5]=out[2]^out[5];
2771 out[4]=out[4]+out[3];
2772 out[3]=(out[3] << 51)|(out[3] >> 13);
2773 out[3]=out[4]^out[3];
2774 out[6]=out[6]+out[1];
2775 out[1]=(out[1] << 13)|(out[1] >> 51);
2776 out[1]=out[6]^out[1];
2777 out[12]=out[12]+out[15];
2778 out[15]=(out[15] << 34)|(out[15] >> 30);
2779 out[15]=out[12]^out[15];
2780 out[14]=out[14]+out[13];
2781 out[13]=(out[13] << 41)|(out[13] >> 23);
2782 out[13]=out[14]^out[13];
2783 out[8]=out[8]+out[11];
2784 out[11]=(out[11] << 59)|(out[11] >> 5);
2785 out[11]=out[8]^out[11];
2786 out[10]=out[10]+out[9];
2787 out[9]=(out[9] << 17)|(out[9] >> 47);
2788 out[9]=out[10]^out[9];
2789 out[0]=out[0]+out[15];
2790 out[15]=(out[15] << 5)|(out[15] >> 59);
2791 out[15]=out[0]^out[15];
2792 out[2]=out[2]+out[11];
2793 out[11]=(out[11] << 20)|(out[11] >> 44);
2794 out[11]=out[2]^out[11];
2795 out[6]=out[6]+out[13];
2796 out[13]=(out[13] << 48)|(out[13] >> 16);
2797 out[13]=out[6]^out[13];
2798 out[4]=out[4]+out[9];
2799 out[9]=(out[9] << 41)|(out[9] >> 23);
2800 out[9]=out[4]^out[9];
2801 out[14]=out[14]+out[1];
2802 out[1]=(out[1] << 47)|(out[1] >> 17);
2803 out[1]=out[14]^out[1];
2804 out[8]=out[8]+out[5];
2805 out[5]=(out[5] << 28)|(out[5] >> 36);
2806 out[5]=out[8]^out[5];
2807 out[10]=out[10]+out[3];
2808 out[3]=(out[3] << 16)|(out[3] >> 48);
2809 out[3]=out[10]^out[3];
2810 out[12]=out[12]+out[7];
2811 out[7]=(out[7] << 25)|(out[7] >> 39);
2812 out[7]=out[12]^out[7];
2827 out[14]+=key[8]+tweak[0];
2829 out[0]=out[0]+out[1];
2830 out[1]=(out[1] << 41)|(out[1] >> 23);
2831 out[1]=out[0]^out[1];
2832 out[2]=out[2]+out[3];
2833 out[3]=(out[3] << 9)|(out[3] >> 55);
2834 out[3]=out[2]^out[3];
2835 out[4]=out[4]+out[5];
2836 out[5]=(out[5] << 37)|(out[5] >> 27);
2837 out[5]=out[4]^out[5];
2838 out[6]=out[6]+out[7];
2839 out[7]=(out[7] << 31)|(out[7] >> 33);
2840 out[7]=out[6]^out[7];
2841 out[8]=out[8]+out[9];
2842 out[9]=(out[9] << 12)|(out[9] >> 52);
2843 out[9]=out[8]^out[9];
2844 out[10]=out[10]+out[11];
2845 out[11]=(out[11] << 47)|(out[11] >> 17);
2846 out[11]=out[10]^out[11];
2847 out[12]=out[12]+out[13];
2848 out[13]=(out[13] << 44)|(out[13] >> 20);
2849 out[13]=out[12]^out[13];
2850 out[14]=out[14]+out[15];
2851 out[15]=(out[15] << 30)|(out[15] >> 34);
2852 out[15]=out[14]^out[15];
2853 out[0]=out[0]+out[9];
2854 out[9]=(out[9] << 16)|(out[9] >> 48);
2855 out[9]=out[0]^out[9];
2856 out[2]=out[2]+out[13];
2857 out[13]=(out[13] << 34)|(out[13] >> 30);
2858 out[13]=out[2]^out[13];
2859 out[6]=out[6]+out[11];
2860 out[11]=(out[11] << 56)|(out[11] >> 8);
2861 out[11]=out[6]^out[11];
2862 out[4]=out[4]+out[15];
2863 out[15]=(out[15] << 51)|(out[15] >> 13);
2864 out[15]=out[4]^out[15];
2865 out[10]=out[10]+out[7];
2866 out[7]=(out[7] << 4)|(out[7] >> 60);
2867 out[7]=out[10]^out[7];
2868 out[12]=out[12]+out[3];
2869 out[3]=(out[3] << 53)|(out[3] >> 11);
2870 out[3]=out[12]^out[3];
2871 out[14]=out[14]+out[5];
2872 out[5]=(out[5] << 42)|(out[5] >> 22);
2873 out[5]=out[14]^out[5];
2874 out[8]=out[8]+out[1];
2875 out[1]=(out[1] << 41)|(out[1] >> 23);
2876 out[1]=out[8]^out[1];
2877 out[0]=out[0]+out[7];
2878 out[7]=(out[7] << 31)|(out[7] >> 33);
2879 out[7]=out[0]^out[7];
2880 out[2]=out[2]+out[5];
2881 out[5]=(out[5] << 44)|(out[5] >> 20);
2882 out[5]=out[2]^out[5];
2883 out[4]=out[4]+out[3];
2884 out[3]=(out[3] << 47)|(out[3] >> 17);
2885 out[3]=out[4]^out[3];
2886 out[6]=out[6]+out[1];
2887 out[1]=(out[1] << 46)|(out[1] >> 18);
2888 out[1]=out[6]^out[1];
2889 out[12]=out[12]+out[15];
2890 out[15]=(out[15] << 19)|(out[15] >> 45);
2891 out[15]=out[12]^out[15];
2892 out[14]=out[14]+out[13];
2893 out[13]=(out[13] << 42)|(out[13] >> 22);
2894 out[13]=out[14]^out[13];
2895 out[8]=out[8]+out[11];
2896 out[11]=(out[11] << 44)|(out[11] >> 20);
2897 out[11]=out[8]^out[11];
2898 out[10]=out[10]+out[9];
2899 out[9]=(out[9] << 25)|(out[9] >> 39);
2900 out[9]=out[10]^out[9];
2901 out[0]=out[0]+out[15];
2902 out[15]=(out[15] << 9)|(out[15] >> 55);
2903 out[15]=out[0]^out[15];
2904 out[2]=out[2]+out[11];
2905 out[11]=(out[11] << 48)|(out[11] >> 16);
2906 out[11]=out[2]^out[11];
2907 out[6]=out[6]+out[13];
2908 out[13]=(out[13] << 35)|(out[13] >> 29);
2909 out[13]=out[6]^out[13];
2910 out[4]=out[4]+out[9];
2911 out[9]=(out[9] << 52)|(out[9] >> 12);
2912 out[9]=out[4]^out[9];
2913 out[14]=out[14]+out[1];
2914 out[1]=(out[1] << 23)|(out[1] >> 41);
2915 out[1]=out[14]^out[1];
2916 out[8]=out[8]+out[5];
2917 out[5]=(out[5] << 31)|(out[5] >> 33);
2918 out[5]=out[8]^out[5];
2919 out[10]=out[10]+out[3];
2920 out[3]=(out[3] << 37)|(out[3] >> 27);
2921 out[3]=out[10]^out[3];
2922 out[12]=out[12]+out[7];
2923 out[7]=(out[7] << 20)|(out[7] >> 44);
2924 out[7]=out[12]^out[7];
2938 out[13]+=key[8]+tweak[0];
2939 out[14]+=key[9]+tweak[1];
2940 out[15]+=key[10]+12;
2941 out[0]=out[0]+out[1];
2942 out[1]=(out[1] << 24)|(out[1] >> 40);
2943 out[1]=out[0]^out[1];
2944 out[2]=out[2]+out[3];
2945 out[3]=(out[3] << 13)|(out[3] >> 51);
2946 out[3]=out[2]^out[3];
2947 out[4]=out[4]+out[5];
2948 out[5]=(out[5] << 8)|(out[5] >> 56);
2949 out[5]=out[4]^out[5];
2950 out[6]=out[6]+out[7];
2951 out[7]=(out[7] << 47)|(out[7] >> 17);
2952 out[7]=out[6]^out[7];
2953 out[8]=out[8]+out[9];
2954 out[9]=(out[9] << 8)|(out[9] >> 56);
2955 out[9]=out[8]^out[9];
2956 out[10]=out[10]+out[11];
2957 out[11]=(out[11] << 17)|(out[11] >> 47);
2958 out[11]=out[10]^out[11];
2959 out[12]=out[12]+out[13];
2960 out[13]=(out[13] << 22)|(out[13] >> 42);
2961 out[13]=out[12]^out[13];
2962 out[14]=out[14]+out[15];
2963 out[15]=(out[15] << 37)|(out[15] >> 27);
2964 out[15]=out[14]^out[15];
2965 out[0]=out[0]+out[9];
2966 out[9]=(out[9] << 38)|(out[9] >> 26);
2967 out[9]=out[0]^out[9];
2968 out[2]=out[2]+out[13];
2969 out[13]=(out[13] << 19)|(out[13] >> 45);
2970 out[13]=out[2]^out[13];
2971 out[6]=out[6]+out[11];
2972 out[11]=(out[11] << 10)|(out[11] >> 54);
2973 out[11]=out[6]^out[11];
2974 out[4]=out[4]+out[15];
2975 out[15]=(out[15] << 55)|(out[15] >> 9);
2976 out[15]=out[4]^out[15];
2977 out[10]=out[10]+out[7];
2978 out[7]=(out[7] << 49)|(out[7] >> 15);
2979 out[7]=out[10]^out[7];
2980 out[12]=out[12]+out[3];
2981 out[3]=(out[3] << 18)|(out[3] >> 46);
2982 out[3]=out[12]^out[3];
2983 out[14]=out[14]+out[5];
2984 out[5]=(out[5] << 23)|(out[5] >> 41);
2985 out[5]=out[14]^out[5];
2986 out[8]=out[8]+out[1];
2987 out[1]=(out[1] << 52)|(out[1] >> 12);
2988 out[1]=out[8]^out[1];
2989 out[0]=out[0]+out[7];
2990 out[7]=(out[7] << 33)|(out[7] >> 31);
2991 out[7]=out[0]^out[7];
2992 out[2]=out[2]+out[5];
2993 out[5]=(out[5] << 4)|(out[5] >> 60);
2994 out[5]=out[2]^out[5];
2995 out[4]=out[4]+out[3];
2996 out[3]=(out[3] << 51)|(out[3] >> 13);
2997 out[3]=out[4]^out[3];
2998 out[6]=out[6]+out[1];
2999 out[1]=(out[1] << 13)|(out[1] >> 51);
3000 out[1]=out[6]^out[1];
3001 out[12]=out[12]+out[15];
3002 out[15]=(out[15] << 34)|(out[15] >> 30);
3003 out[15]=out[12]^out[15];
3004 out[14]=out[14]+out[13];
3005 out[13]=(out[13] << 41)|(out[13] >> 23);
3006 out[13]=out[14]^out[13];
3007 out[8]=out[8]+out[11];
3008 out[11]=(out[11] << 59)|(out[11] >> 5);
3009 out[11]=out[8]^out[11];
3010 out[10]=out[10]+out[9];
3011 out[9]=(out[9] << 17)|(out[9] >> 47);
3012 out[9]=out[10]^out[9];
3013 out[0]=out[0]+out[15];
3014 out[15]=(out[15] << 5)|(out[15] >> 59);
3015 out[15]=out[0]^out[15];
3016 out[2]=out[2]+out[11];
3017 out[11]=(out[11] << 20)|(out[11] >> 44);
3018 out[11]=out[2]^out[11];
3019 out[6]=out[6]+out[13];
3020 out[13]=(out[13] << 48)|(out[13] >> 16);
3021 out[13]=out[6]^out[13];
3022 out[4]=out[4]+out[9];
3023 out[9]=(out[9] << 41)|(out[9] >> 23);
3024 out[9]=out[4]^out[9];
3025 out[14]=out[14]+out[1];
3026 out[1]=(out[1] << 47)|(out[1] >> 17);
3027 out[1]=out[14]^out[1];
3028 out[8]=out[8]+out[5];
3029 out[5]=(out[5] << 28)|(out[5] >> 36);
3030 out[5]=out[8]^out[5];
3031 out[10]=out[10]+out[3];
3032 out[3]=(out[3] << 16)|(out[3] >> 48);
3033 out[3]=out[10]^out[3];
3034 out[12]=out[12]+out[7];
3035 out[7]=(out[7] << 25)|(out[7] >> 39);
3036 out[7]=out[12]^out[7];
3050 out[13]+=key[9]+tweak[1];
3052 out[15]+=key[11]+13;
3053 out[0]=out[0]+out[1];
3054 out[1]=(out[1] << 41)|(out[1] >> 23);
3055 out[1]=out[0]^out[1];
3056 out[2]=out[2]+out[3];
3057 out[3]=(out[3] << 9)|(out[3] >> 55);
3058 out[3]=out[2]^out[3];
3059 out[4]=out[4]+out[5];
3060 out[5]=(out[5] << 37)|(out[5] >> 27);
3061 out[5]=out[4]^out[5];
3062 out[6]=out[6]+out[7];
3063 out[7]=(out[7] << 31)|(out[7] >> 33);
3064 out[7]=out[6]^out[7];
3065 out[8]=out[8]+out[9];
3066 out[9]=(out[9] << 12)|(out[9] >> 52);
3067 out[9]=out[8]^out[9];
3068 out[10]=out[10]+out[11];
3069 out[11]=(out[11] << 47)|(out[11] >> 17);
3070 out[11]=out[10]^out[11];
3071 out[12]=out[12]+out[13];
3072 out[13]=(out[13] << 44)|(out[13] >> 20);
3073 out[13]=out[12]^out[13];
3074 out[14]=out[14]+out[15];
3075 out[15]=(out[15] << 30)|(out[15] >> 34);
3076 out[15]=out[14]^out[15];
3077 out[0]=out[0]+out[9];
3078 out[9]=(out[9] << 16)|(out[9] >> 48);
3079 out[9]=out[0]^out[9];
3080 out[2]=out[2]+out[13];
3081 out[13]=(out[13] << 34)|(out[13] >> 30);
3082 out[13]=out[2]^out[13];
3083 out[6]=out[6]+out[11];
3084 out[11]=(out[11] << 56)|(out[11] >> 8);
3085 out[11]=out[6]^out[11];
3086 out[4]=out[4]+out[15];
3087 out[15]=(out[15] << 51)|(out[15] >> 13);
3088 out[15]=out[4]^out[15];
3089 out[10]=out[10]+out[7];
3090 out[7]=(out[7] << 4)|(out[7] >> 60);
3091 out[7]=out[10]^out[7];
3092 out[12]=out[12]+out[3];
3093 out[3]=(out[3] << 53)|(out[3] >> 11);
3094 out[3]=out[12]^out[3];
3095 out[14]=out[14]+out[5];
3096 out[5]=(out[5] << 42)|(out[5] >> 22);
3097 out[5]=out[14]^out[5];
3098 out[8]=out[8]+out[1];
3099 out[1]=(out[1] << 41)|(out[1] >> 23);
3100 out[1]=out[8]^out[1];
3101 out[0]=out[0]+out[7];
3102 out[7]=(out[7] << 31)|(out[7] >> 33);
3103 out[7]=out[0]^out[7];
3104 out[2]=out[2]+out[5];
3105 out[5]=(out[5] << 44)|(out[5] >> 20);
3106 out[5]=out[2]^out[5];
3107 out[4]=out[4]+out[3];
3108 out[3]=(out[3] << 47)|(out[3] >> 17);
3109 out[3]=out[4]^out[3];
3110 out[6]=out[6]+out[1];
3111 out[1]=(out[1] << 46)|(out[1] >> 18);
3112 out[1]=out[6]^out[1];
3113 out[12]=out[12]+out[15];
3114 out[15]=(out[15] << 19)|(out[15] >> 45);
3115 out[15]=out[12]^out[15];
3116 out[14]=out[14]+out[13];
3117 out[13]=(out[13] << 42)|(out[13] >> 22);
3118 out[13]=out[14]^out[13];
3119 out[8]=out[8]+out[11];
3120 out[11]=(out[11] << 44)|(out[11] >> 20);
3121 out[11]=out[8]^out[11];
3122 out[10]=out[10]+out[9];
3123 out[9]=(out[9] << 25)|(out[9] >> 39);
3124 out[9]=out[10]^out[9];
3125 out[0]=out[0]+out[15];
3126 out[15]=(out[15] << 9)|(out[15] >> 55);
3127 out[15]=out[0]^out[15];
3128 out[2]=out[2]+out[11];
3129 out[11]=(out[11] << 48)|(out[11] >> 16);
3130 out[11]=out[2]^out[11];
3131 out[6]=out[6]+out[13];
3132 out[13]=(out[13] << 35)|(out[13] >> 29);
3133 out[13]=out[6]^out[13];
3134 out[4]=out[4]+out[9];
3135 out[9]=(out[9] << 52)|(out[9] >> 12);
3136 out[9]=out[4]^out[9];
3137 out[14]=out[14]+out[1];
3138 out[1]=(out[1] << 23)|(out[1] >> 41);
3139 out[1]=out[14]^out[1];
3140 out[8]=out[8]+out[5];
3141 out[5]=(out[5] << 31)|(out[5] >> 33);
3142 out[5]=out[8]^out[5];
3143 out[10]=out[10]+out[3];
3144 out[3]=(out[3] << 37)|(out[3] >> 27);
3145 out[3]=out[10]^out[3];
3146 out[12]=out[12]+out[7];
3147 out[7]=(out[7] << 20)|(out[7] >> 44);
3148 out[7]=out[12]^out[7];
3163 out[14]+=key[11]+tweak[0];
3164 out[15]+=key[12]+14;
3165 out[0]=out[0]+out[1];
3166 out[1]=(out[1] << 24)|(out[1] >> 40);
3167 out[1]=out[0]^out[1];
3168 out[2]=out[2]+out[3];
3169 out[3]=(out[3] << 13)|(out[3] >> 51);
3170 out[3]=out[2]^out[3];
3171 out[4]=out[4]+out[5];
3172 out[5]=(out[5] << 8)|(out[5] >> 56);
3173 out[5]=out[4]^out[5];
3174 out[6]=out[6]+out[7];
3175 out[7]=(out[7] << 47)|(out[7] >> 17);
3176 out[7]=out[6]^out[7];
3177 out[8]=out[8]+out[9];
3178 out[9]=(out[9] << 8)|(out[9] >> 56);
3179 out[9]=out[8]^out[9];
3180 out[10]=out[10]+out[11];
3181 out[11]=(out[11] << 17)|(out[11] >> 47);
3182 out[11]=out[10]^out[11];
3183 out[12]=out[12]+out[13];
3184 out[13]=(out[13] << 22)|(out[13] >> 42);
3185 out[13]=out[12]^out[13];
3186 out[14]=out[14]+out[15];
3187 out[15]=(out[15] << 37)|(out[15] >> 27);
3188 out[15]=out[14]^out[15];
3189 out[0]=out[0]+out[9];
3190 out[9]=(out[9] << 38)|(out[9] >> 26);
3191 out[9]=out[0]^out[9];
3192 out[2]=out[2]+out[13];
3193 out[13]=(out[13] << 19)|(out[13] >> 45);
3194 out[13]=out[2]^out[13];
3195 out[6]=out[6]+out[11];
3196 out[11]=(out[11] << 10)|(out[11] >> 54);
3197 out[11]=out[6]^out[11];
3198 out[4]=out[4]+out[15];
3199 out[15]=(out[15] << 55)|(out[15] >> 9);
3200 out[15]=out[4]^out[15];
3201 out[10]=out[10]+out[7];
3202 out[7]=(out[7] << 49)|(out[7] >> 15);
3203 out[7]=out[10]^out[7];
3204 out[12]=out[12]+out[3];
3205 out[3]=(out[3] << 18)|(out[3] >> 46);
3206 out[3]=out[12]^out[3];
3207 out[14]=out[14]+out[5];
3208 out[5]=(out[5] << 23)|(out[5] >> 41);
3209 out[5]=out[14]^out[5];
3210 out[8]=out[8]+out[1];
3211 out[1]=(out[1] << 52)|(out[1] >> 12);
3212 out[1]=out[8]^out[1];
3213 out[0]=out[0]+out[7];
3214 out[7]=(out[7] << 33)|(out[7] >> 31);
3215 out[7]=out[0]^out[7];
3216 out[2]=out[2]+out[5];
3217 out[5]=(out[5] << 4)|(out[5] >> 60);
3218 out[5]=out[2]^out[5];
3219 out[4]=out[4]+out[3];
3220 out[3]=(out[3] << 51)|(out[3] >> 13);
3221 out[3]=out[4]^out[3];
3222 out[6]=out[6]+out[1];
3223 out[1]=(out[1] << 13)|(out[1] >> 51);
3224 out[1]=out[6]^out[1];
3225 out[12]=out[12]+out[15];
3226 out[15]=(out[15] << 34)|(out[15] >> 30);
3227 out[15]=out[12]^out[15];
3228 out[14]=out[14]+out[13];
3229 out[13]=(out[13] << 41)|(out[13] >> 23);
3230 out[13]=out[14]^out[13];
3231 out[8]=out[8]+out[11];
3232 out[11]=(out[11] << 59)|(out[11] >> 5);
3233 out[11]=out[8]^out[11];
3234 out[10]=out[10]+out[9];
3235 out[9]=(out[9] << 17)|(out[9] >> 47);
3236 out[9]=out[10]^out[9];
3237 out[0]=out[0]+out[15];
3238 out[15]=(out[15] << 5)|(out[15] >> 59);
3239 out[15]=out[0]^out[15];
3240 out[2]=out[2]+out[11];
3241 out[11]=(out[11] << 20)|(out[11] >> 44);
3242 out[11]=out[2]^out[11];
3243 out[6]=out[6]+out[13];
3244 out[13]=(out[13] << 48)|(out[13] >> 16);
3245 out[13]=out[6]^out[13];
3246 out[4]=out[4]+out[9];
3247 out[9]=(out[9] << 41)|(out[9] >> 23);
3248 out[9]=out[4]^out[9];
3249 out[14]=out[14]+out[1];
3250 out[1]=(out[1] << 47)|(out[1] >> 17);
3251 out[1]=out[14]^out[1];
3252 out[8]=out[8]+out[5];
3253 out[5]=(out[5] << 28)|(out[5] >> 36);
3254 out[5]=out[8]^out[5];
3255 out[10]=out[10]+out[3];
3256 out[3]=(out[3] << 16)|(out[3] >> 48);
3257 out[3]=out[10]^out[3];
3258 out[12]=out[12]+out[7];
3259 out[7]=(out[7] << 25)|(out[7] >> 39);
3260 out[7]=out[12]^out[7];
3274 out[13]+=key[11]+tweak[0];
3275 out[14]+=key[12]+tweak[1];
3276 out[15]+=key[13]+15;
3277 out[0]=out[0]+out[1];
3278 out[1]=(out[1] << 41)|(out[1] >> 23);
3279 out[1]=out[0]^out[1];
3280 out[2]=out[2]+out[3];
3281 out[3]=(out[3] << 9)|(out[3] >> 55);
3282 out[3]=out[2]^out[3];
3283 out[4]=out[4]+out[5];
3284 out[5]=(out[5] << 37)|(out[5] >> 27);
3285 out[5]=out[4]^out[5];
3286 out[6]=out[6]+out[7];
3287 out[7]=(out[7] << 31)|(out[7] >> 33);
3288 out[7]=out[6]^out[7];
3289 out[8]=out[8]+out[9];
3290 out[9]=(out[9] << 12)|(out[9] >> 52);
3291 out[9]=out[8]^out[9];
3292 out[10]=out[10]+out[11];
3293 out[11]=(out[11] << 47)|(out[11] >> 17);
3294 out[11]=out[10]^out[11];
3295 out[12]=out[12]+out[13];
3296 out[13]=(out[13] << 44)|(out[13] >> 20);
3297 out[13]=out[12]^out[13];
3298 out[14]=out[14]+out[15];
3299 out[15]=(out[15] << 30)|(out[15] >> 34);
3300 out[15]=out[14]^out[15];
3301 out[0]=out[0]+out[9];
3302 out[9]=(out[9] << 16)|(out[9] >> 48);
3303 out[9]=out[0]^out[9];
3304 out[2]=out[2]+out[13];
3305 out[13]=(out[13] << 34)|(out[13] >> 30);
3306 out[13]=out[2]^out[13];
3307 out[6]=out[6]+out[11];
3308 out[11]=(out[11] << 56)|(out[11] >> 8);
3309 out[11]=out[6]^out[11];
3310 out[4]=out[4]+out[15];
3311 out[15]=(out[15] << 51)|(out[15] >> 13);
3312 out[15]=out[4]^out[15];
3313 out[10]=out[10]+out[7];
3314 out[7]=(out[7] << 4)|(out[7] >> 60);
3315 out[7]=out[10]^out[7];
3316 out[12]=out[12]+out[3];
3317 out[3]=(out[3] << 53)|(out[3] >> 11);
3318 out[3]=out[12]^out[3];
3319 out[14]=out[14]+out[5];
3320 out[5]=(out[5] << 42)|(out[5] >> 22);
3321 out[5]=out[14]^out[5];
3322 out[8]=out[8]+out[1];
3323 out[1]=(out[1] << 41)|(out[1] >> 23);
3324 out[1]=out[8]^out[1];
3325 out[0]=out[0]+out[7];
3326 out[7]=(out[7] << 31)|(out[7] >> 33);
3327 out[7]=out[0]^out[7];
3328 out[2]=out[2]+out[5];
3329 out[5]=(out[5] << 44)|(out[5] >> 20);
3330 out[5]=out[2]^out[5];
3331 out[4]=out[4]+out[3];
3332 out[3]=(out[3] << 47)|(out[3] >> 17);
3333 out[3]=out[4]^out[3];
3334 out[6]=out[6]+out[1];
3335 out[1]=(out[1] << 46)|(out[1] >> 18);
3336 out[1]=out[6]^out[1];
3337 out[12]=out[12]+out[15];
3338 out[15]=(out[15] << 19)|(out[15] >> 45);
3339 out[15]=out[12]^out[15];
3340 out[14]=out[14]+out[13];
3341 out[13]=(out[13] << 42)|(out[13] >> 22);
3342 out[13]=out[14]^out[13];
3343 out[8]=out[8]+out[11];
3344 out[11]=(out[11] << 44)|(out[11] >> 20);
3345 out[11]=out[8]^out[11];
3346 out[10]=out[10]+out[9];
3347 out[9]=(out[9] << 25)|(out[9] >> 39);
3348 out[9]=out[10]^out[9];
3349 out[0]=out[0]+out[15];
3350 out[15]=(out[15] << 9)|(out[15] >> 55);
3351 out[15]=out[0]^out[15];
3352 out[2]=out[2]+out[11];
3353 out[11]=(out[11] << 48)|(out[11] >> 16);
3354 out[11]=out[2]^out[11];
3355 out[6]=out[6]+out[13];
3356 out[13]=(out[13] << 35)|(out[13] >> 29);
3357 out[13]=out[6]^out[13];
3358 out[4]=out[4]+out[9];
3359 out[9]=(out[9] << 52)|(out[9] >> 12);
3360 out[9]=out[4]^out[9];
3361 out[14]=out[14]+out[1];
3362 out[1]=(out[1] << 23)|(out[1] >> 41);
3363 out[1]=out[14]^out[1];
3364 out[8]=out[8]+out[5];
3365 out[5]=(out[5] << 31)|(out[5] >> 33);
3366 out[5]=out[8]^out[5];
3367 out[10]=out[10]+out[3];
3368 out[3]=(out[3] << 37)|(out[3] >> 27);
3369 out[3]=out[10]^out[3];
3370 out[12]=out[12]+out[7];
3371 out[7]=(out[7] << 20)|(out[7] >> 44);
3372 out[7]=out[12]^out[7];
3386 out[13]+=key[12]+tweak[1];
3388 out[15]+=key[14]+16;
3389 out[0]=out[0]+out[1];
3390 out[1]=(out[1] << 24)|(out[1] >> 40);
3391 out[1]=out[0]^out[1];
3392 out[2]=out[2]+out[3];
3393 out[3]=(out[3] << 13)|(out[3] >> 51);
3394 out[3]=out[2]^out[3];
3395 out[4]=out[4]+out[5];
3396 out[5]=(out[5] << 8)|(out[5] >> 56);
3397 out[5]=out[4]^out[5];
3398 out[6]=out[6]+out[7];
3399 out[7]=(out[7] << 47)|(out[7] >> 17);
3400 out[7]=out[6]^out[7];
3401 out[8]=out[8]+out[9];
3402 out[9]=(out[9] << 8)|(out[9] >> 56);
3403 out[9]=out[8]^out[9];
3404 out[10]=out[10]+out[11];
3405 out[11]=(out[11] << 17)|(out[11] >> 47);
3406 out[11]=out[10]^out[11];
3407 out[12]=out[12]+out[13];
3408 out[13]=(out[13] << 22)|(out[13] >> 42);
3409 out[13]=out[12]^out[13];
3410 out[14]=out[14]+out[15];
3411 out[15]=(out[15] << 37)|(out[15] >> 27);
3412 out[15]=out[14]^out[15];
3413 out[0]=out[0]+out[9];
3414 out[9]=(out[9] << 38)|(out[9] >> 26);
3415 out[9]=out[0]^out[9];
3416 out[2]=out[2]+out[13];
3417 out[13]=(out[13] << 19)|(out[13] >> 45);
3418 out[13]=out[2]^out[13];
3419 out[6]=out[6]+out[11];
3420 out[11]=(out[11] << 10)|(out[11] >> 54);
3421 out[11]=out[6]^out[11];
3422 out[4]=out[4]+out[15];
3423 out[15]=(out[15] << 55)|(out[15] >> 9);
3424 out[15]=out[4]^out[15];
3425 out[10]=out[10]+out[7];
3426 out[7]=(out[7] << 49)|(out[7] >> 15);
3427 out[7]=out[10]^out[7];
3428 out[12]=out[12]+out[3];
3429 out[3]=(out[3] << 18)|(out[3] >> 46);
3430 out[3]=out[12]^out[3];
3431 out[14]=out[14]+out[5];
3432 out[5]=(out[5] << 23)|(out[5] >> 41);
3433 out[5]=out[14]^out[5];
3434 out[8]=out[8]+out[1];
3435 out[1]=(out[1] << 52)|(out[1] >> 12);
3436 out[1]=out[8]^out[1];
3437 out[0]=out[0]+out[7];
3438 out[7]=(out[7] << 33)|(out[7] >> 31);
3439 out[7]=out[0]^out[7];
3440 out[2]=out[2]+out[5];
3441 out[5]=(out[5] << 4)|(out[5] >> 60);
3442 out[5]=out[2]^out[5];
3443 out[4]=out[4]+out[3];
3444 out[3]=(out[3] << 51)|(out[3] >> 13);
3445 out[3]=out[4]^out[3];
3446 out[6]=out[6]+out[1];
3447 out[1]=(out[1] << 13)|(out[1] >> 51);
3448 out[1]=out[6]^out[1];
3449 out[12]=out[12]+out[15];
3450 out[15]=(out[15] << 34)|(out[15] >> 30);
3451 out[15]=out[12]^out[15];
3452 out[14]=out[14]+out[13];
3453 out[13]=(out[13] << 41)|(out[13] >> 23);
3454 out[13]=out[14]^out[13];
3455 out[8]=out[8]+out[11];
3456 out[11]=(out[11] << 59)|(out[11] >> 5);
3457 out[11]=out[8]^out[11];
3458 out[10]=out[10]+out[9];
3459 out[9]=(out[9] << 17)|(out[9] >> 47);
3460 out[9]=out[10]^out[9];
3461 out[0]=out[0]+out[15];
3462 out[15]=(out[15] << 5)|(out[15] >> 59);
3463 out[15]=out[0]^out[15];
3464 out[2]=out[2]+out[11];
3465 out[11]=(out[11] << 20)|(out[11] >> 44);
3466 out[11]=out[2]^out[11];
3467 out[6]=out[6]+out[13];
3468 out[13]=(out[13] << 48)|(out[13] >> 16);
3469 out[13]=out[6]^out[13];
3470 out[4]=out[4]+out[9];
3471 out[9]=(out[9] << 41)|(out[9] >> 23);
3472 out[9]=out[4]^out[9];
3473 out[14]=out[14]+out[1];
3474 out[1]=(out[1] << 47)|(out[1] >> 17);
3475 out[1]=out[14]^out[1];
3476 out[8]=out[8]+out[5];
3477 out[5]=(out[5] << 28)|(out[5] >> 36);
3478 out[5]=out[8]^out[5];
3479 out[10]=out[10]+out[3];
3480 out[3]=(out[3] << 16)|(out[3] >> 48);
3481 out[3]=out[10]^out[3];
3482 out[12]=out[12]+out[7];
3483 out[7]=(out[7] << 25)|(out[7] >> 39);
3484 out[7]=out[12]^out[7];
3499 out[14]+=key[14]+tweak[0];
3500 out[15]+=key[15]+17;
3501 out[0]=out[0]+out[1];
3502 out[1]=(out[1] << 41)|(out[1] >> 23);
3503 out[1]=out[0]^out[1];
3504 out[2]=out[2]+out[3];
3505 out[3]=(out[3] << 9)|(out[3] >> 55);
3506 out[3]=out[2]^out[3];
3507 out[4]=out[4]+out[5];
3508 out[5]=(out[5] << 37)|(out[5] >> 27);
3509 out[5]=out[4]^out[5];
3510 out[6]=out[6]+out[7];
3511 out[7]=(out[7] << 31)|(out[7] >> 33);
3512 out[7]=out[6]^out[7];
3513 out[8]=out[8]+out[9];
3514 out[9]=(out[9] << 12)|(out[9] >> 52);
3515 out[9]=out[8]^out[9];
3516 out[10]=out[10]+out[11];
3517 out[11]=(out[11] << 47)|(out[11] >> 17);
3518 out[11]=out[10]^out[11];
3519 out[12]=out[12]+out[13];
3520 out[13]=(out[13] << 44)|(out[13] >> 20);
3521 out[13]=out[12]^out[13];
3522 out[14]=out[14]+out[15];
3523 out[15]=(out[15] << 30)|(out[15] >> 34);
3524 out[15]=out[14]^out[15];
3525 out[0]=out[0]+out[9];
3526 out[9]=(out[9] << 16)|(out[9] >> 48);
3527 out[9]=out[0]^out[9];
3528 out[2]=out[2]+out[13];
3529 out[13]=(out[13] << 34)|(out[13] >> 30);
3530 out[13]=out[2]^out[13];
3531 out[6]=out[6]+out[11];
3532 out[11]=(out[11] << 56)|(out[11] >> 8);
3533 out[11]=out[6]^out[11];
3534 out[4]=out[4]+out[15];
3535 out[15]=(out[15] << 51)|(out[15] >> 13);
3536 out[15]=out[4]^out[15];
3537 out[10]=out[10]+out[7];
3538 out[7]=(out[7] << 4)|(out[7] >> 60);
3539 out[7]=out[10]^out[7];
3540 out[12]=out[12]+out[3];
3541 out[3]=(out[3] << 53)|(out[3] >> 11);
3542 out[3]=out[12]^out[3];
3543 out[14]=out[14]+out[5];
3544 out[5]=(out[5] << 42)|(out[5] >> 22);
3545 out[5]=out[14]^out[5];
3546 out[8]=out[8]+out[1];
3547 out[1]=(out[1] << 41)|(out[1] >> 23);
3548 out[1]=out[8]^out[1];
3549 out[0]=out[0]+out[7];
3550 out[7]=(out[7] << 31)|(out[7] >> 33);
3551 out[7]=out[0]^out[7];
3552 out[2]=out[2]+out[5];
3553 out[5]=(out[5] << 44)|(out[5] >> 20);
3554 out[5]=out[2]^out[5];
3555 out[4]=out[4]+out[3];
3556 out[3]=(out[3] << 47)|(out[3] >> 17);
3557 out[3]=out[4]^out[3];
3558 out[6]=out[6]+out[1];
3559 out[1]=(out[1] << 46)|(out[1] >> 18);
3560 out[1]=out[6]^out[1];
3561 out[12]=out[12]+out[15];
3562 out[15]=(out[15] << 19)|(out[15] >> 45);
3563 out[15]=out[12]^out[15];
3564 out[14]=out[14]+out[13];
3565 out[13]=(out[13] << 42)|(out[13] >> 22);
3566 out[13]=out[14]^out[13];
3567 out[8]=out[8]+out[11];
3568 out[11]=(out[11] << 44)|(out[11] >> 20);
3569 out[11]=out[8]^out[11];
3570 out[10]=out[10]+out[9];
3571 out[9]=(out[9] << 25)|(out[9] >> 39);
3572 out[9]=out[10]^out[9];
3573 out[0]=out[0]+out[15];
3574 out[15]=(out[15] << 9)|(out[15] >> 55);
3575 out[15]=out[0]^out[15];
3576 out[2]=out[2]+out[11];
3577 out[11]=(out[11] << 48)|(out[11] >> 16);
3578 out[11]=out[2]^out[11];
3579 out[6]=out[6]+out[13];
3580 out[13]=(out[13] << 35)|(out[13] >> 29);
3581 out[13]=out[6]^out[13];
3582 out[4]=out[4]+out[9];
3583 out[9]=(out[9] << 52)|(out[9] >> 12);
3584 out[9]=out[4]^out[9];
3585 out[14]=out[14]+out[1];
3586 out[1]=(out[1] << 23)|(out[1] >> 41);
3587 out[1]=out[14]^out[1];
3588 out[8]=out[8]+out[5];
3589 out[5]=(out[5] << 31)|(out[5] >> 33);
3590 out[5]=out[8]^out[5];
3591 out[10]=out[10]+out[3];
3592 out[3]=(out[3] << 37)|(out[3] >> 27);
3593 out[3]=out[10]^out[3];
3594 out[12]=out[12]+out[7];
3595 out[7]=(out[7] << 20)|(out[7] >> 44);
3596 out[7]=out[12]^out[7];
3610 out[13]+=key[14]+tweak[0];
3611 out[14]+=key[15]+tweak[1];
3613 out[0]=out[0]+out[1];
3614 out[1]=(out[1] << 24)|(out[1] >> 40);
3615 out[1]=out[0]^out[1];
3616 out[2]=out[2]+out[3];
3617 out[3]=(out[3] << 13)|(out[3] >> 51);
3618 out[3]=out[2]^out[3];
3619 out[4]=out[4]+out[5];
3620 out[5]=(out[5] << 8)|(out[5] >> 56);
3621 out[5]=out[4]^out[5];
3622 out[6]=out[6]+out[7];
3623 out[7]=(out[7] << 47)|(out[7] >> 17);
3624 out[7]=out[6]^out[7];
3625 out[8]=out[8]+out[9];
3626 out[9]=(out[9] << 8)|(out[9] >> 56);
3627 out[9]=out[8]^out[9];
3628 out[10]=out[10]+out[11];
3629 out[11]=(out[11] << 17)|(out[11] >> 47);
3630 out[11]=out[10]^out[11];
3631 out[12]=out[12]+out[13];
3632 out[13]=(out[13] << 22)|(out[13] >> 42);
3633 out[13]=out[12]^out[13];
3634 out[14]=out[14]+out[15];
3635 out[15]=(out[15] << 37)|(out[15] >> 27);
3636 out[15]=out[14]^out[15];
3637 out[0]=out[0]+out[9];
3638 out[9]=(out[9] << 38)|(out[9] >> 26);
3639 out[9]=out[0]^out[9];
3640 out[2]=out[2]+out[13];
3641 out[13]=(out[13] << 19)|(out[13] >> 45);
3642 out[13]=out[2]^out[13];
3643 out[6]=out[6]+out[11];
3644 out[11]=(out[11] << 10)|(out[11] >> 54);
3645 out[11]=out[6]^out[11];
3646 out[4]=out[4]+out[15];
3647 out[15]=(out[15] << 55)|(out[15] >> 9);
3648 out[15]=out[4]^out[15];
3649 out[10]=out[10]+out[7];
3650 out[7]=(out[7] << 49)|(out[7] >> 15);
3651 out[7]=out[10]^out[7];
3652 out[12]=out[12]+out[3];
3653 out[3]=(out[3] << 18)|(out[3] >> 46);
3654 out[3]=out[12]^out[3];
3655 out[14]=out[14]+out[5];
3656 out[5]=(out[5] << 23)|(out[5] >> 41);
3657 out[5]=out[14]^out[5];
3658 out[8]=out[8]+out[1];
3659 out[1]=(out[1] << 52)|(out[1] >> 12);
3660 out[1]=out[8]^out[1];
3661 out[0]=out[0]+out[7];
3662 out[7]=(out[7] << 33)|(out[7] >> 31);
3663 out[7]=out[0]^out[7];
3664 out[2]=out[2]+out[5];
3665 out[5]=(out[5] << 4)|(out[5] >> 60);
3666 out[5]=out[2]^out[5];
3667 out[4]=out[4]+out[3];
3668 out[3]=(out[3] << 51)|(out[3] >> 13);
3669 out[3]=out[4]^out[3];
3670 out[6]=out[6]+out[1];
3671 out[1]=(out[1] << 13)|(out[1] >> 51);
3672 out[1]=out[6]^out[1];
3673 out[12]=out[12]+out[15];
3674 out[15]=(out[15] << 34)|(out[15] >> 30);
3675 out[15]=out[12]^out[15];
3676 out[14]=out[14]+out[13];
3677 out[13]=(out[13] << 41)|(out[13] >> 23);
3678 out[13]=out[14]^out[13];
3679 out[8]=out[8]+out[11];
3680 out[11]=(out[11] << 59)|(out[11] >> 5);
3681 out[11]=out[8]^out[11];
3682 out[10]=out[10]+out[9];
3683 out[9]=(out[9] << 17)|(out[9] >> 47);
3684 out[9]=out[10]^out[9];
3685 out[0]=out[0]+out[15];
3686 out[15]=(out[15] << 5)|(out[15] >> 59);
3687 out[15]=out[0]^out[15];
3688 out[2]=out[2]+out[11];
3689 out[11]=(out[11] << 20)|(out[11] >> 44);
3690 out[11]=out[2]^out[11];
3691 out[6]=out[6]+out[13];
3692 out[13]=(out[13] << 48)|(out[13] >> 16);
3693 out[13]=out[6]^out[13];
3694 out[4]=out[4]+out[9];
3695 out[9]=(out[9] << 41)|(out[9] >> 23);
3696 out[9]=out[4]^out[9];
3697 out[14]=out[14]+out[1];
3698 out[1]=(out[1] << 47)|(out[1] >> 17);
3699 out[1]=out[14]^out[1];
3700 out[8]=out[8]+out[5];
3701 out[5]=(out[5] << 28)|(out[5] >> 36);
3702 out[5]=out[8]^out[5];
3703 out[10]=out[10]+out[3];
3704 out[3]=(out[3] << 16)|(out[3] >> 48);
3705 out[3]=out[10]^out[3];
3706 out[12]=out[12]+out[7];
3707 out[7]=(out[7] << 25)|(out[7] >> 39);
3708 out[7]=out[12]^out[7];
3722 out[13]+=key[15]+tweak[1];
3725 out[0]=out[0]+out[1];
3726 out[1]=(out[1] << 41)|(out[1] >> 23);
3727 out[1]=out[0]^out[1];
3728 out[2]=out[2]+out[3];
3729 out[3]=(out[3] << 9)|(out[3] >> 55);
3730 out[3]=out[2]^out[3];
3731 out[4]=out[4]+out[5];
3732 out[5]=(out[5] << 37)|(out[5] >> 27);
3733 out[5]=out[4]^out[5];
3734 out[6]=out[6]+out[7];
3735 out[7]=(out[7] << 31)|(out[7] >> 33);
3736 out[7]=out[6]^out[7];
3737 out[8]=out[8]+out[9];
3738 out[9]=(out[9] << 12)|(out[9] >> 52);
3739 out[9]=out[8]^out[9];
3740 out[10]=out[10]+out[11];
3741 out[11]=(out[11] << 47)|(out[11] >> 17);
3742 out[11]=out[10]^out[11];
3743 out[12]=out[12]+out[13];
3744 out[13]=(out[13] << 44)|(out[13] >> 20);
3745 out[13]=out[12]^out[13];
3746 out[14]=out[14]+out[15];
3747 out[15]=(out[15] << 30)|(out[15] >> 34);
3748 out[15]=out[14]^out[15];
3749 out[0]=out[0]+out[9];
3750 out[9]=(out[9] << 16)|(out[9] >> 48);
3751 out[9]=out[0]^out[9];
3752 out[2]=out[2]+out[13];
3753 out[13]=(out[13] << 34)|(out[13] >> 30);
3754 out[13]=out[2]^out[13];
3755 out[6]=out[6]+out[11];
3756 out[11]=(out[11] << 56)|(out[11] >> 8);
3757 out[11]=out[6]^out[11];
3758 out[4]=out[4]+out[15];
3759 out[15]=(out[15] << 51)|(out[15] >> 13);
3760 out[15]=out[4]^out[15];
3761 out[10]=out[10]+out[7];
3762 out[7]=(out[7] << 4)|(out[7] >> 60);
3763 out[7]=out[10]^out[7];
3764 out[12]=out[12]+out[3];
3765 out[3]=(out[3] << 53)|(out[3] >> 11);
3766 out[3]=out[12]^out[3];
3767 out[14]=out[14]+out[5];
3768 out[5]=(out[5] << 42)|(out[5] >> 22);
3769 out[5]=out[14]^out[5];
3770 out[8]=out[8]+out[1];
3771 out[1]=(out[1] << 41)|(out[1] >> 23);
3772 out[1]=out[8]^out[1];
3773 out[0]=out[0]+out[7];
3774 out[7]=(out[7] << 31)|(out[7] >> 33);
3775 out[7]=out[0]^out[7];
3776 out[2]=out[2]+out[5];
3777 out[5]=(out[5] << 44)|(out[5] >> 20);
3778 out[5]=out[2]^out[5];
3779 out[4]=out[4]+out[3];
3780 out[3]=(out[3] << 47)|(out[3] >> 17);
3781 out[3]=out[4]^out[3];
3782 out[6]=out[6]+out[1];
3783 out[1]=(out[1] << 46)|(out[1] >> 18);
3784 out[1]=out[6]^out[1];
3785 out[12]=out[12]+out[15];
3786 out[15]=(out[15] << 19)|(out[15] >> 45);
3787 out[15]=out[12]^out[15];
3788 out[14]=out[14]+out[13];
3789 out[13]=(out[13] << 42)|(out[13] >> 22);
3790 out[13]=out[14]^out[13];
3791 out[8]=out[8]+out[11];
3792 out[11]=(out[11] << 44)|(out[11] >> 20);
3793 out[11]=out[8]^out[11];
3794 out[10]=out[10]+out[9];
3795 out[9]=(out[9] << 25)|(out[9] >> 39);
3796 out[9]=out[10]^out[9];
3797 out[0]=out[0]+out[15];
3798 out[15]=(out[15] << 9)|(out[15] >> 55);
3799 out[15]=out[0]^out[15];
3800 out[2]=out[2]+out[11];
3801 out[11]=(out[11] << 48)|(out[11] >> 16);
3802 out[11]=out[2]^out[11];
3803 out[6]=out[6]+out[13];
3804 out[13]=(out[13] << 35)|(out[13] >> 29);
3805 out[13]=out[6]^out[13];
3806 out[4]=out[4]+out[9];
3807 out[9]=(out[9] << 52)|(out[9] >> 12);
3808 out[9]=out[4]^out[9];
3809 out[14]=out[14]+out[1];
3810 out[1]=(out[1] << 23)|(out[1] >> 41);
3811 out[1]=out[14]^out[1];
3812 out[8]=out[8]+out[5];
3813 out[5]=(out[5] << 31)|(out[5] >> 33);
3814 out[5]=out[8]^out[5];
3815 out[10]=out[10]+out[3];
3816 out[3]=(out[3] << 37)|(out[3] >> 27);
3817 out[3]=out[10]^out[3];
3818 out[12]=out[12]+out[7];
3819 out[7]=(out[7] << 20)|(out[7] >> 44);
3820 out[7]=out[12]^out[7];
3835 out[14]+=key[0]+tweak[0];
3837 out[0]=in[0]^out[0];
3838 out[1]=in[1]^out[1];
3839 out[2]=in[2]^out[2];
3840 out[3]=in[3]^out[3];
3841 out[4]=in[4]^out[4];
3842 out[5]=in[5]^out[5];
3843 out[6]=in[6]^out[6];
3844 out[7]=in[7]^out[7];
3845 out[8]=in[8]^out[8];
3846 out[9]=in[9]^out[9];
3847 out[10]=in[10]^out[10];
3848 out[11]=in[11]^out[11];
3849 out[12]=in[12]^out[12];
3850 out[13]=in[13]^out[13];
3851 out[14]=in[14]^out[14];
3852 out[15]=in[15]^out[15];
3853 out[16]=in[16]^out[16];