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