]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/staging/skein/threefish_block.c
Merge branches 'pm-cpufreq', 'pm-cpuidle' and 'acpi-cppc'
[mirror_ubuntu-bionic-kernel.git] / drivers / staging / skein / threefish_block.c
1 #include <linux/bitops.h>
2 #include "threefish_api.h"
3
4 void threefish_encrypt_256(struct threefish_key *key_ctx, u64 *input,
5 u64 *output)
6 {
7 u64 b0 = input[0], b1 = input[1],
8 b2 = input[2], b3 = input[3];
9 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
10 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
11 k4 = key_ctx->key[4];
12 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
13 t2 = key_ctx->tweak[2];
14
15 b1 += k1 + t0;
16 b0 += b1 + k0;
17 b1 = rol64(b1, 14) ^ b0;
18
19 b3 += k3;
20 b2 += b3 + k2 + t1;
21 b3 = rol64(b3, 16) ^ b2;
22
23 b0 += b3;
24 b3 = rol64(b3, 52) ^ b0;
25
26 b2 += b1;
27 b1 = rol64(b1, 57) ^ b2;
28
29 b0 += b1;
30 b1 = rol64(b1, 23) ^ b0;
31
32 b2 += b3;
33 b3 = rol64(b3, 40) ^ b2;
34
35 b0 += b3;
36 b3 = rol64(b3, 5) ^ b0;
37
38 b2 += b1;
39 b1 = rol64(b1, 37) ^ b2;
40
41 b1 += k2 + t1;
42 b0 += b1 + k1;
43 b1 = rol64(b1, 25) ^ b0;
44
45 b3 += k4 + 1;
46 b2 += b3 + k3 + t2;
47 b3 = rol64(b3, 33) ^ b2;
48
49 b0 += b3;
50 b3 = rol64(b3, 46) ^ b0;
51
52 b2 += b1;
53 b1 = rol64(b1, 12) ^ b2;
54
55 b0 += b1;
56 b1 = rol64(b1, 58) ^ b0;
57
58 b2 += b3;
59 b3 = rol64(b3, 22) ^ b2;
60
61 b0 += b3;
62 b3 = rol64(b3, 32) ^ b0;
63
64 b2 += b1;
65 b1 = rol64(b1, 32) ^ b2;
66
67
68 b1 += k3 + t2;
69 b0 += b1 + k2;
70 b1 = rol64(b1, 14) ^ b0;
71
72 b3 += k0 + 2;
73 b2 += b3 + k4 + t0;
74 b3 = rol64(b3, 16) ^ b2;
75
76 b0 += b3;
77 b3 = rol64(b3, 52) ^ b0;
78
79 b2 += b1;
80 b1 = rol64(b1, 57) ^ b2;
81
82 b0 += b1;
83 b1 = rol64(b1, 23) ^ b0;
84
85 b2 += b3;
86 b3 = rol64(b3, 40) ^ b2;
87
88 b0 += b3;
89 b3 = rol64(b3, 5) ^ b0;
90
91 b2 += b1;
92 b1 = rol64(b1, 37) ^ b2;
93
94 b1 += k4 + t0;
95 b0 += b1 + k3;
96 b1 = rol64(b1, 25) ^ b0;
97
98 b3 += k1 + 3;
99 b2 += b3 + k0 + t1;
100 b3 = rol64(b3, 33) ^ b2;
101
102 b0 += b3;
103 b3 = rol64(b3, 46) ^ b0;
104
105 b2 += b1;
106 b1 = rol64(b1, 12) ^ b2;
107
108 b0 += b1;
109 b1 = rol64(b1, 58) ^ b0;
110
111 b2 += b3;
112 b3 = rol64(b3, 22) ^ b2;
113
114 b0 += b3;
115 b3 = rol64(b3, 32) ^ b0;
116
117 b2 += b1;
118 b1 = rol64(b1, 32) ^ b2;
119
120
121 b1 += k0 + t1;
122 b0 += b1 + k4;
123 b1 = rol64(b1, 14) ^ b0;
124
125 b3 += k2 + 4;
126 b2 += b3 + k1 + t2;
127 b3 = rol64(b3, 16) ^ b2;
128
129 b0 += b3;
130 b3 = rol64(b3, 52) ^ b0;
131
132 b2 += b1;
133 b1 = rol64(b1, 57) ^ b2;
134
135 b0 += b1;
136 b1 = rol64(b1, 23) ^ b0;
137
138 b2 += b3;
139 b3 = rol64(b3, 40) ^ b2;
140
141 b0 += b3;
142 b3 = rol64(b3, 5) ^ b0;
143
144 b2 += b1;
145 b1 = rol64(b1, 37) ^ b2;
146
147 b1 += k1 + t2;
148 b0 += b1 + k0;
149 b1 = rol64(b1, 25) ^ b0;
150
151 b3 += k3 + 5;
152 b2 += b3 + k2 + t0;
153 b3 = rol64(b3, 33) ^ b2;
154
155 b0 += b3;
156 b3 = rol64(b3, 46) ^ b0;
157
158 b2 += b1;
159 b1 = rol64(b1, 12) ^ b2;
160
161 b0 += b1;
162 b1 = rol64(b1, 58) ^ b0;
163
164 b2 += b3;
165 b3 = rol64(b3, 22) ^ b2;
166
167 b0 += b3;
168 b3 = rol64(b3, 32) ^ b0;
169
170 b2 += b1;
171 b1 = rol64(b1, 32) ^ b2;
172
173
174 b1 += k2 + t0;
175 b0 += b1 + k1;
176 b1 = rol64(b1, 14) ^ b0;
177
178 b3 += k4 + 6;
179 b2 += b3 + k3 + t1;
180 b3 = rol64(b3, 16) ^ b2;
181
182 b0 += b3;
183 b3 = rol64(b3, 52) ^ b0;
184
185 b2 += b1;
186 b1 = rol64(b1, 57) ^ b2;
187
188 b0 += b1;
189 b1 = rol64(b1, 23) ^ b0;
190
191 b2 += b3;
192 b3 = rol64(b3, 40) ^ b2;
193
194 b0 += b3;
195 b3 = rol64(b3, 5) ^ b0;
196
197 b2 += b1;
198 b1 = rol64(b1, 37) ^ b2;
199
200 b1 += k3 + t1;
201 b0 += b1 + k2;
202 b1 = rol64(b1, 25) ^ b0;
203
204 b3 += k0 + 7;
205 b2 += b3 + k4 + t2;
206 b3 = rol64(b3, 33) ^ b2;
207
208 b0 += b3;
209 b3 = rol64(b3, 46) ^ b0;
210
211 b2 += b1;
212 b1 = rol64(b1, 12) ^ b2;
213
214 b0 += b1;
215 b1 = rol64(b1, 58) ^ b0;
216
217 b2 += b3;
218 b3 = rol64(b3, 22) ^ b2;
219
220 b0 += b3;
221 b3 = rol64(b3, 32) ^ b0;
222
223 b2 += b1;
224 b1 = rol64(b1, 32) ^ b2;
225
226
227 b1 += k4 + t2;
228 b0 += b1 + k3;
229 b1 = rol64(b1, 14) ^ b0;
230
231 b3 += k1 + 8;
232 b2 += b3 + k0 + t0;
233 b3 = rol64(b3, 16) ^ b2;
234
235 b0 += b3;
236 b3 = rol64(b3, 52) ^ b0;
237
238 b2 += b1;
239 b1 = rol64(b1, 57) ^ b2;
240
241 b0 += b1;
242 b1 = rol64(b1, 23) ^ b0;
243
244 b2 += b3;
245 b3 = rol64(b3, 40) ^ b2;
246
247 b0 += b3;
248 b3 = rol64(b3, 5) ^ b0;
249
250 b2 += b1;
251 b1 = rol64(b1, 37) ^ b2;
252
253 b1 += k0 + t0;
254 b0 += b1 + k4;
255 b1 = rol64(b1, 25) ^ b0;
256
257 b3 += k2 + 9;
258 b2 += b3 + k1 + t1;
259 b3 = rol64(b3, 33) ^ b2;
260
261 b0 += b3;
262 b3 = rol64(b3, 46) ^ b0;
263
264 b2 += b1;
265 b1 = rol64(b1, 12) ^ b2;
266
267 b0 += b1;
268 b1 = rol64(b1, 58) ^ b0;
269
270 b2 += b3;
271 b3 = rol64(b3, 22) ^ b2;
272
273 b0 += b3;
274 b3 = rol64(b3, 32) ^ b0;
275
276 b2 += b1;
277 b1 = rol64(b1, 32) ^ b2;
278
279
280 b1 += k1 + t1;
281 b0 += b1 + k0;
282 b1 = rol64(b1, 14) ^ b0;
283
284 b3 += k3 + 10;
285 b2 += b3 + k2 + t2;
286 b3 = rol64(b3, 16) ^ b2;
287
288 b0 += b3;
289 b3 = rol64(b3, 52) ^ b0;
290
291 b2 += b1;
292 b1 = rol64(b1, 57) ^ b2;
293
294 b0 += b1;
295 b1 = rol64(b1, 23) ^ b0;
296
297 b2 += b3;
298 b3 = rol64(b3, 40) ^ b2;
299
300 b0 += b3;
301 b3 = rol64(b3, 5) ^ b0;
302
303 b2 += b1;
304 b1 = rol64(b1, 37) ^ b2;
305
306 b1 += k2 + t2;
307 b0 += b1 + k1;
308 b1 = rol64(b1, 25) ^ b0;
309
310 b3 += k4 + 11;
311 b2 += b3 + k3 + t0;
312 b3 = rol64(b3, 33) ^ b2;
313
314 b0 += b3;
315 b3 = rol64(b3, 46) ^ b0;
316
317 b2 += b1;
318 b1 = rol64(b1, 12) ^ b2;
319
320 b0 += b1;
321 b1 = rol64(b1, 58) ^ b0;
322
323 b2 += b3;
324 b3 = rol64(b3, 22) ^ b2;
325
326 b0 += b3;
327 b3 = rol64(b3, 32) ^ b0;
328
329 b2 += b1;
330 b1 = rol64(b1, 32) ^ b2;
331
332
333 b1 += k3 + t0;
334 b0 += b1 + k2;
335 b1 = rol64(b1, 14) ^ b0;
336
337 b3 += k0 + 12;
338 b2 += b3 + k4 + t1;
339 b3 = rol64(b3, 16) ^ b2;
340
341 b0 += b3;
342 b3 = rol64(b3, 52) ^ b0;
343
344 b2 += b1;
345 b1 = rol64(b1, 57) ^ b2;
346
347 b0 += b1;
348 b1 = rol64(b1, 23) ^ b0;
349
350 b2 += b3;
351 b3 = rol64(b3, 40) ^ b2;
352
353 b0 += b3;
354 b3 = rol64(b3, 5) ^ b0;
355
356 b2 += b1;
357 b1 = rol64(b1, 37) ^ b2;
358
359 b1 += k4 + t1;
360 b0 += b1 + k3;
361 b1 = rol64(b1, 25) ^ b0;
362
363 b3 += k1 + 13;
364 b2 += b3 + k0 + t2;
365 b3 = rol64(b3, 33) ^ b2;
366
367 b0 += b3;
368 b3 = rol64(b3, 46) ^ b0;
369
370 b2 += b1;
371 b1 = rol64(b1, 12) ^ b2;
372
373 b0 += b1;
374 b1 = rol64(b1, 58) ^ b0;
375
376 b2 += b3;
377 b3 = rol64(b3, 22) ^ b2;
378
379 b0 += b3;
380 b3 = rol64(b3, 32) ^ b0;
381
382 b2 += b1;
383 b1 = rol64(b1, 32) ^ b2;
384
385
386 b1 += k0 + t2;
387 b0 += b1 + k4;
388 b1 = rol64(b1, 14) ^ b0;
389
390 b3 += k2 + 14;
391 b2 += b3 + k1 + t0;
392 b3 = rol64(b3, 16) ^ b2;
393
394 b0 += b3;
395 b3 = rol64(b3, 52) ^ b0;
396
397 b2 += b1;
398 b1 = rol64(b1, 57) ^ b2;
399
400 b0 += b1;
401 b1 = rol64(b1, 23) ^ b0;
402
403 b2 += b3;
404 b3 = rol64(b3, 40) ^ b2;
405
406 b0 += b3;
407 b3 = rol64(b3, 5) ^ b0;
408
409 b2 += b1;
410 b1 = rol64(b1, 37) ^ b2;
411
412 b1 += k1 + t0;
413 b0 += b1 + k0;
414 b1 = rol64(b1, 25) ^ b0;
415
416 b3 += k3 + 15;
417 b2 += b3 + k2 + t1;
418 b3 = rol64(b3, 33) ^ b2;
419
420 b0 += b3;
421 b3 = rol64(b3, 46) ^ b0;
422
423 b2 += b1;
424 b1 = rol64(b1, 12) ^ b2;
425
426 b0 += b1;
427 b1 = rol64(b1, 58) ^ b0;
428
429 b2 += b3;
430 b3 = rol64(b3, 22) ^ b2;
431
432 b0 += b3;
433 b3 = rol64(b3, 32) ^ b0;
434
435 b2 += b1;
436 b1 = rol64(b1, 32) ^ b2;
437
438
439 b1 += k2 + t1;
440 b0 += b1 + k1;
441 b1 = rol64(b1, 14) ^ b0;
442
443 b3 += k4 + 16;
444 b2 += b3 + k3 + t2;
445 b3 = rol64(b3, 16) ^ b2;
446
447 b0 += b3;
448 b3 = rol64(b3, 52) ^ b0;
449
450 b2 += b1;
451 b1 = rol64(b1, 57) ^ b2;
452
453 b0 += b1;
454 b1 = rol64(b1, 23) ^ b0;
455
456 b2 += b3;
457 b3 = rol64(b3, 40) ^ b2;
458
459 b0 += b3;
460 b3 = rol64(b3, 5) ^ b0;
461
462 b2 += b1;
463 b1 = rol64(b1, 37) ^ b2;
464
465 b1 += k3 + t2;
466 b0 += b1 + k2;
467 b1 = rol64(b1, 25) ^ b0;
468
469 b3 += k0 + 17;
470 b2 += b3 + k4 + t0;
471 b3 = rol64(b3, 33) ^ b2;
472
473 b0 += b3;
474 b3 = rol64(b3, 46) ^ b0;
475
476 b2 += b1;
477 b1 = rol64(b1, 12) ^ b2;
478
479 b0 += b1;
480 b1 = rol64(b1, 58) ^ b0;
481
482 b2 += b3;
483 b3 = rol64(b3, 22) ^ b2;
484
485 b0 += b3;
486 b3 = rol64(b3, 32) ^ b0;
487
488 b2 += b1;
489 b1 = rol64(b1, 32) ^ b2;
490
491 output[0] = b0 + k3;
492 output[1] = b1 + k4 + t0;
493 output[2] = b2 + k0 + t1;
494 output[3] = b3 + k1 + 18;
495 }
496
497 void threefish_decrypt_256(struct threefish_key *key_ctx, u64 *input,
498 u64 *output)
499 {
500 u64 b0 = input[0], b1 = input[1],
501 b2 = input[2], b3 = input[3];
502 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
503 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
504 k4 = key_ctx->key[4];
505 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
506 t2 = key_ctx->tweak[2];
507
508 u64 tmp;
509
510 b0 -= k3;
511 b1 -= k4 + t0;
512 b2 -= k0 + t1;
513 b3 -= k1 + 18;
514 tmp = b3 ^ b0;
515 b3 = (tmp >> 32) | (tmp << (64 - 32));
516 b0 -= b3;
517
518 tmp = b1 ^ b2;
519 b1 = (tmp >> 32) | (tmp << (64 - 32));
520 b2 -= b1;
521
522 tmp = b1 ^ b0;
523 b1 = (tmp >> 58) | (tmp << (64 - 58));
524 b0 -= b1;
525
526 tmp = b3 ^ b2;
527 b3 = (tmp >> 22) | (tmp << (64 - 22));
528 b2 -= b3;
529
530 tmp = b3 ^ b0;
531 b3 = (tmp >> 46) | (tmp << (64 - 46));
532 b0 -= b3;
533
534 tmp = b1 ^ b2;
535 b1 = (tmp >> 12) | (tmp << (64 - 12));
536 b2 -= b1;
537
538 tmp = b1 ^ b0;
539 b1 = (tmp >> 25) | (tmp << (64 - 25));
540 b0 -= b1 + k2;
541 b1 -= k3 + t2;
542
543 tmp = b3 ^ b2;
544 b3 = (tmp >> 33) | (tmp << (64 - 33));
545 b2 -= b3 + k4 + t0;
546 b3 -= k0 + 17;
547
548 tmp = b3 ^ b0;
549 b3 = (tmp >> 5) | (tmp << (64 - 5));
550 b0 -= b3;
551
552 tmp = b1 ^ b2;
553 b1 = (tmp >> 37) | (tmp << (64 - 37));
554 b2 -= b1;
555
556 tmp = b1 ^ b0;
557 b1 = (tmp >> 23) | (tmp << (64 - 23));
558 b0 -= b1;
559
560 tmp = b3 ^ b2;
561 b3 = (tmp >> 40) | (tmp << (64 - 40));
562 b2 -= b3;
563
564 tmp = b3 ^ b0;
565 b3 = (tmp >> 52) | (tmp << (64 - 52));
566 b0 -= b3;
567
568 tmp = b1 ^ b2;
569 b1 = (tmp >> 57) | (tmp << (64 - 57));
570 b2 -= b1;
571
572 tmp = b1 ^ b0;
573 b1 = (tmp >> 14) | (tmp << (64 - 14));
574 b0 -= b1 + k1;
575 b1 -= k2 + t1;
576
577 tmp = b3 ^ b2;
578 b3 = (tmp >> 16) | (tmp << (64 - 16));
579 b2 -= b3 + k3 + t2;
580 b3 -= k4 + 16;
581
582
583 tmp = b3 ^ b0;
584 b3 = (tmp >> 32) | (tmp << (64 - 32));
585 b0 -= b3;
586
587 tmp = b1 ^ b2;
588 b1 = (tmp >> 32) | (tmp << (64 - 32));
589 b2 -= b1;
590
591 tmp = b1 ^ b0;
592 b1 = (tmp >> 58) | (tmp << (64 - 58));
593 b0 -= b1;
594
595 tmp = b3 ^ b2;
596 b3 = (tmp >> 22) | (tmp << (64 - 22));
597 b2 -= b3;
598
599 tmp = b3 ^ b0;
600 b3 = (tmp >> 46) | (tmp << (64 - 46));
601 b0 -= b3;
602
603 tmp = b1 ^ b2;
604 b1 = (tmp >> 12) | (tmp << (64 - 12));
605 b2 -= b1;
606
607 tmp = b1 ^ b0;
608 b1 = (tmp >> 25) | (tmp << (64 - 25));
609 b0 -= b1 + k0;
610 b1 -= k1 + t0;
611
612 tmp = b3 ^ b2;
613 b3 = (tmp >> 33) | (tmp << (64 - 33));
614 b2 -= b3 + k2 + t1;
615 b3 -= k3 + 15;
616
617 tmp = b3 ^ b0;
618 b3 = (tmp >> 5) | (tmp << (64 - 5));
619 b0 -= b3;
620
621 tmp = b1 ^ b2;
622 b1 = (tmp >> 37) | (tmp << (64 - 37));
623 b2 -= b1;
624
625 tmp = b1 ^ b0;
626 b1 = (tmp >> 23) | (tmp << (64 - 23));
627 b0 -= b1;
628
629 tmp = b3 ^ b2;
630 b3 = (tmp >> 40) | (tmp << (64 - 40));
631 b2 -= b3;
632
633 tmp = b3 ^ b0;
634 b3 = (tmp >> 52) | (tmp << (64 - 52));
635 b0 -= b3;
636
637 tmp = b1 ^ b2;
638 b1 = (tmp >> 57) | (tmp << (64 - 57));
639 b2 -= b1;
640
641 tmp = b1 ^ b0;
642 b1 = (tmp >> 14) | (tmp << (64 - 14));
643 b0 -= b1 + k4;
644 b1 -= k0 + t2;
645
646 tmp = b3 ^ b2;
647 b3 = (tmp >> 16) | (tmp << (64 - 16));
648 b2 -= b3 + k1 + t0;
649 b3 -= k2 + 14;
650
651
652 tmp = b3 ^ b0;
653 b3 = (tmp >> 32) | (tmp << (64 - 32));
654 b0 -= b3;
655
656 tmp = b1 ^ b2;
657 b1 = (tmp >> 32) | (tmp << (64 - 32));
658 b2 -= b1;
659
660 tmp = b1 ^ b0;
661 b1 = (tmp >> 58) | (tmp << (64 - 58));
662 b0 -= b1;
663
664 tmp = b3 ^ b2;
665 b3 = (tmp >> 22) | (tmp << (64 - 22));
666 b2 -= b3;
667
668 tmp = b3 ^ b0;
669 b3 = (tmp >> 46) | (tmp << (64 - 46));
670 b0 -= b3;
671
672 tmp = b1 ^ b2;
673 b1 = (tmp >> 12) | (tmp << (64 - 12));
674 b2 -= b1;
675
676 tmp = b1 ^ b0;
677 b1 = (tmp >> 25) | (tmp << (64 - 25));
678 b0 -= b1 + k3;
679 b1 -= k4 + t1;
680
681 tmp = b3 ^ b2;
682 b3 = (tmp >> 33) | (tmp << (64 - 33));
683 b2 -= b3 + k0 + t2;
684 b3 -= k1 + 13;
685
686 tmp = b3 ^ b0;
687 b3 = (tmp >> 5) | (tmp << (64 - 5));
688 b0 -= b3;
689
690 tmp = b1 ^ b2;
691 b1 = (tmp >> 37) | (tmp << (64 - 37));
692 b2 -= b1;
693
694 tmp = b1 ^ b0;
695 b1 = (tmp >> 23) | (tmp << (64 - 23));
696 b0 -= b1;
697
698 tmp = b3 ^ b2;
699 b3 = (tmp >> 40) | (tmp << (64 - 40));
700 b2 -= b3;
701
702 tmp = b3 ^ b0;
703 b3 = (tmp >> 52) | (tmp << (64 - 52));
704 b0 -= b3;
705
706 tmp = b1 ^ b2;
707 b1 = (tmp >> 57) | (tmp << (64 - 57));
708 b2 -= b1;
709
710 tmp = b1 ^ b0;
711 b1 = (tmp >> 14) | (tmp << (64 - 14));
712 b0 -= b1 + k2;
713 b1 -= k3 + t0;
714
715 tmp = b3 ^ b2;
716 b3 = (tmp >> 16) | (tmp << (64 - 16));
717 b2 -= b3 + k4 + t1;
718 b3 -= k0 + 12;
719
720
721 tmp = b3 ^ b0;
722 b3 = (tmp >> 32) | (tmp << (64 - 32));
723 b0 -= b3;
724
725 tmp = b1 ^ b2;
726 b1 = (tmp >> 32) | (tmp << (64 - 32));
727 b2 -= b1;
728
729 tmp = b1 ^ b0;
730 b1 = (tmp >> 58) | (tmp << (64 - 58));
731 b0 -= b1;
732
733 tmp = b3 ^ b2;
734 b3 = (tmp >> 22) | (tmp << (64 - 22));
735 b2 -= b3;
736
737 tmp = b3 ^ b0;
738 b3 = (tmp >> 46) | (tmp << (64 - 46));
739 b0 -= b3;
740
741 tmp = b1 ^ b2;
742 b1 = (tmp >> 12) | (tmp << (64 - 12));
743 b2 -= b1;
744
745 tmp = b1 ^ b0;
746 b1 = (tmp >> 25) | (tmp << (64 - 25));
747 b0 -= b1 + k1;
748 b1 -= k2 + t2;
749
750 tmp = b3 ^ b2;
751 b3 = (tmp >> 33) | (tmp << (64 - 33));
752 b2 -= b3 + k3 + t0;
753 b3 -= k4 + 11;
754
755 tmp = b3 ^ b0;
756 b3 = (tmp >> 5) | (tmp << (64 - 5));
757 b0 -= b3;
758
759 tmp = b1 ^ b2;
760 b1 = (tmp >> 37) | (tmp << (64 - 37));
761 b2 -= b1;
762
763 tmp = b1 ^ b0;
764 b1 = (tmp >> 23) | (tmp << (64 - 23));
765 b0 -= b1;
766
767 tmp = b3 ^ b2;
768 b3 = (tmp >> 40) | (tmp << (64 - 40));
769 b2 -= b3;
770
771 tmp = b3 ^ b0;
772 b3 = (tmp >> 52) | (tmp << (64 - 52));
773 b0 -= b3;
774
775 tmp = b1 ^ b2;
776 b1 = (tmp >> 57) | (tmp << (64 - 57));
777 b2 -= b1;
778
779 tmp = b1 ^ b0;
780 b1 = (tmp >> 14) | (tmp << (64 - 14));
781 b0 -= b1 + k0;
782 b1 -= k1 + t1;
783
784 tmp = b3 ^ b2;
785 b3 = (tmp >> 16) | (tmp << (64 - 16));
786 b2 -= b3 + k2 + t2;
787 b3 -= k3 + 10;
788
789
790 tmp = b3 ^ b0;
791 b3 = (tmp >> 32) | (tmp << (64 - 32));
792 b0 -= b3;
793
794 tmp = b1 ^ b2;
795 b1 = (tmp >> 32) | (tmp << (64 - 32));
796 b2 -= b1;
797
798 tmp = b1 ^ b0;
799 b1 = (tmp >> 58) | (tmp << (64 - 58));
800 b0 -= b1;
801
802 tmp = b3 ^ b2;
803 b3 = (tmp >> 22) | (tmp << (64 - 22));
804 b2 -= b3;
805
806 tmp = b3 ^ b0;
807 b3 = (tmp >> 46) | (tmp << (64 - 46));
808 b0 -= b3;
809
810 tmp = b1 ^ b2;
811 b1 = (tmp >> 12) | (tmp << (64 - 12));
812 b2 -= b1;
813
814 tmp = b1 ^ b0;
815 b1 = (tmp >> 25) | (tmp << (64 - 25));
816 b0 -= b1 + k4;
817 b1 -= k0 + t0;
818
819 tmp = b3 ^ b2;
820 b3 = (tmp >> 33) | (tmp << (64 - 33));
821 b2 -= b3 + k1 + t1;
822 b3 -= k2 + 9;
823
824 tmp = b3 ^ b0;
825 b3 = (tmp >> 5) | (tmp << (64 - 5));
826 b0 -= b3;
827
828 tmp = b1 ^ b2;
829 b1 = (tmp >> 37) | (tmp << (64 - 37));
830 b2 -= b1;
831
832 tmp = b1 ^ b0;
833 b1 = (tmp >> 23) | (tmp << (64 - 23));
834 b0 -= b1;
835
836 tmp = b3 ^ b2;
837 b3 = (tmp >> 40) | (tmp << (64 - 40));
838 b2 -= b3;
839
840 tmp = b3 ^ b0;
841 b3 = (tmp >> 52) | (tmp << (64 - 52));
842 b0 -= b3;
843
844 tmp = b1 ^ b2;
845 b1 = (tmp >> 57) | (tmp << (64 - 57));
846 b2 -= b1;
847
848 tmp = b1 ^ b0;
849 b1 = (tmp >> 14) | (tmp << (64 - 14));
850 b0 -= b1 + k3;
851 b1 -= k4 + t2;
852
853 tmp = b3 ^ b2;
854 b3 = (tmp >> 16) | (tmp << (64 - 16));
855 b2 -= b3 + k0 + t0;
856 b3 -= k1 + 8;
857
858
859 tmp = b3 ^ b0;
860 b3 = (tmp >> 32) | (tmp << (64 - 32));
861 b0 -= b3;
862
863 tmp = b1 ^ b2;
864 b1 = (tmp >> 32) | (tmp << (64 - 32));
865 b2 -= b1;
866
867 tmp = b1 ^ b0;
868 b1 = (tmp >> 58) | (tmp << (64 - 58));
869 b0 -= b1;
870
871 tmp = b3 ^ b2;
872 b3 = (tmp >> 22) | (tmp << (64 - 22));
873 b2 -= b3;
874
875 tmp = b3 ^ b0;
876 b3 = (tmp >> 46) | (tmp << (64 - 46));
877 b0 -= b3;
878
879 tmp = b1 ^ b2;
880 b1 = (tmp >> 12) | (tmp << (64 - 12));
881 b2 -= b1;
882
883 tmp = b1 ^ b0;
884 b1 = (tmp >> 25) | (tmp << (64 - 25));
885 b0 -= b1 + k2;
886 b1 -= k3 + t1;
887
888 tmp = b3 ^ b2;
889 b3 = (tmp >> 33) | (tmp << (64 - 33));
890 b2 -= b3 + k4 + t2;
891 b3 -= k0 + 7;
892
893 tmp = b3 ^ b0;
894 b3 = (tmp >> 5) | (tmp << (64 - 5));
895 b0 -= b3;
896
897 tmp = b1 ^ b2;
898 b1 = (tmp >> 37) | (tmp << (64 - 37));
899 b2 -= b1;
900
901 tmp = b1 ^ b0;
902 b1 = (tmp >> 23) | (tmp << (64 - 23));
903 b0 -= b1;
904
905 tmp = b3 ^ b2;
906 b3 = (tmp >> 40) | (tmp << (64 - 40));
907 b2 -= b3;
908
909 tmp = b3 ^ b0;
910 b3 = (tmp >> 52) | (tmp << (64 - 52));
911 b0 -= b3;
912
913 tmp = b1 ^ b2;
914 b1 = (tmp >> 57) | (tmp << (64 - 57));
915 b2 -= b1;
916
917 tmp = b1 ^ b0;
918 b1 = (tmp >> 14) | (tmp << (64 - 14));
919 b0 -= b1 + k1;
920 b1 -= k2 + t0;
921
922 tmp = b3 ^ b2;
923 b3 = (tmp >> 16) | (tmp << (64 - 16));
924 b2 -= b3 + k3 + t1;
925 b3 -= k4 + 6;
926
927
928 tmp = b3 ^ b0;
929 b3 = (tmp >> 32) | (tmp << (64 - 32));
930 b0 -= b3;
931
932 tmp = b1 ^ b2;
933 b1 = (tmp >> 32) | (tmp << (64 - 32));
934 b2 -= b1;
935
936 tmp = b1 ^ b0;
937 b1 = (tmp >> 58) | (tmp << (64 - 58));
938 b0 -= b1;
939
940 tmp = b3 ^ b2;
941 b3 = (tmp >> 22) | (tmp << (64 - 22));
942 b2 -= b3;
943
944 tmp = b3 ^ b0;
945 b3 = (tmp >> 46) | (tmp << (64 - 46));
946 b0 -= b3;
947
948 tmp = b1 ^ b2;
949 b1 = (tmp >> 12) | (tmp << (64 - 12));
950 b2 -= b1;
951
952 tmp = b1 ^ b0;
953 b1 = (tmp >> 25) | (tmp << (64 - 25));
954 b0 -= b1 + k0;
955 b1 -= k1 + t2;
956
957 tmp = b3 ^ b2;
958 b3 = (tmp >> 33) | (tmp << (64 - 33));
959 b2 -= b3 + k2 + t0;
960 b3 -= k3 + 5;
961
962 tmp = b3 ^ b0;
963 b3 = (tmp >> 5) | (tmp << (64 - 5));
964 b0 -= b3;
965
966 tmp = b1 ^ b2;
967 b1 = (tmp >> 37) | (tmp << (64 - 37));
968 b2 -= b1;
969
970 tmp = b1 ^ b0;
971 b1 = (tmp >> 23) | (tmp << (64 - 23));
972 b0 -= b1;
973
974 tmp = b3 ^ b2;
975 b3 = (tmp >> 40) | (tmp << (64 - 40));
976 b2 -= b3;
977
978 tmp = b3 ^ b0;
979 b3 = (tmp >> 52) | (tmp << (64 - 52));
980 b0 -= b3;
981
982 tmp = b1 ^ b2;
983 b1 = (tmp >> 57) | (tmp << (64 - 57));
984 b2 -= b1;
985
986 tmp = b1 ^ b0;
987 b1 = (tmp >> 14) | (tmp << (64 - 14));
988 b0 -= b1 + k4;
989 b1 -= k0 + t1;
990
991 tmp = b3 ^ b2;
992 b3 = (tmp >> 16) | (tmp << (64 - 16));
993 b2 -= b3 + k1 + t2;
994 b3 -= k2 + 4;
995
996
997 tmp = b3 ^ b0;
998 b3 = (tmp >> 32) | (tmp << (64 - 32));
999 b0 -= b3;
1000
1001 tmp = b1 ^ b2;
1002 b1 = (tmp >> 32) | (tmp << (64 - 32));
1003 b2 -= b1;
1004
1005 tmp = b1 ^ b0;
1006 b1 = (tmp >> 58) | (tmp << (64 - 58));
1007 b0 -= b1;
1008
1009 tmp = b3 ^ b2;
1010 b3 = (tmp >> 22) | (tmp << (64 - 22));
1011 b2 -= b3;
1012
1013 tmp = b3 ^ b0;
1014 b3 = (tmp >> 46) | (tmp << (64 - 46));
1015 b0 -= b3;
1016
1017 tmp = b1 ^ b2;
1018 b1 = (tmp >> 12) | (tmp << (64 - 12));
1019 b2 -= b1;
1020
1021 tmp = b1 ^ b0;
1022 b1 = (tmp >> 25) | (tmp << (64 - 25));
1023 b0 -= b1 + k3;
1024 b1 -= k4 + t0;
1025
1026 tmp = b3 ^ b2;
1027 b3 = (tmp >> 33) | (tmp << (64 - 33));
1028 b2 -= b3 + k0 + t1;
1029 b3 -= k1 + 3;
1030
1031 tmp = b3 ^ b0;
1032 b3 = (tmp >> 5) | (tmp << (64 - 5));
1033 b0 -= b3;
1034
1035 tmp = b1 ^ b2;
1036 b1 = (tmp >> 37) | (tmp << (64 - 37));
1037 b2 -= b1;
1038
1039 tmp = b1 ^ b0;
1040 b1 = (tmp >> 23) | (tmp << (64 - 23));
1041 b0 -= b1;
1042
1043 tmp = b3 ^ b2;
1044 b3 = (tmp >> 40) | (tmp << (64 - 40));
1045 b2 -= b3;
1046
1047 tmp = b3 ^ b0;
1048 b3 = (tmp >> 52) | (tmp << (64 - 52));
1049 b0 -= b3;
1050
1051 tmp = b1 ^ b2;
1052 b1 = (tmp >> 57) | (tmp << (64 - 57));
1053 b2 -= b1;
1054
1055 tmp = b1 ^ b0;
1056 b1 = (tmp >> 14) | (tmp << (64 - 14));
1057 b0 -= b1 + k2;
1058 b1 -= k3 + t2;
1059
1060 tmp = b3 ^ b2;
1061 b3 = (tmp >> 16) | (tmp << (64 - 16));
1062 b2 -= b3 + k4 + t0;
1063 b3 -= k0 + 2;
1064
1065
1066 tmp = b3 ^ b0;
1067 b3 = (tmp >> 32) | (tmp << (64 - 32));
1068 b0 -= b3;
1069
1070 tmp = b1 ^ b2;
1071 b1 = (tmp >> 32) | (tmp << (64 - 32));
1072 b2 -= b1;
1073
1074 tmp = b1 ^ b0;
1075 b1 = (tmp >> 58) | (tmp << (64 - 58));
1076 b0 -= b1;
1077
1078 tmp = b3 ^ b2;
1079 b3 = (tmp >> 22) | (tmp << (64 - 22));
1080 b2 -= b3;
1081
1082 tmp = b3 ^ b0;
1083 b3 = (tmp >> 46) | (tmp << (64 - 46));
1084 b0 -= b3;
1085
1086 tmp = b1 ^ b2;
1087 b1 = (tmp >> 12) | (tmp << (64 - 12));
1088 b2 -= b1;
1089
1090 tmp = b1 ^ b0;
1091 b1 = (tmp >> 25) | (tmp << (64 - 25));
1092 b0 -= b1 + k1;
1093 b1 -= k2 + t1;
1094
1095 tmp = b3 ^ b2;
1096 b3 = (tmp >> 33) | (tmp << (64 - 33));
1097 b2 -= b3 + k3 + t2;
1098 b3 -= k4 + 1;
1099
1100 tmp = b3 ^ b0;
1101 b3 = (tmp >> 5) | (tmp << (64 - 5));
1102 b0 -= b3;
1103
1104 tmp = b1 ^ b2;
1105 b1 = (tmp >> 37) | (tmp << (64 - 37));
1106 b2 -= b1;
1107
1108 tmp = b1 ^ b0;
1109 b1 = (tmp >> 23) | (tmp << (64 - 23));
1110 b0 -= b1;
1111
1112 tmp = b3 ^ b2;
1113 b3 = (tmp >> 40) | (tmp << (64 - 40));
1114 b2 -= b3;
1115
1116 tmp = b3 ^ b0;
1117 b3 = (tmp >> 52) | (tmp << (64 - 52));
1118 b0 -= b3;
1119
1120 tmp = b1 ^ b2;
1121 b1 = (tmp >> 57) | (tmp << (64 - 57));
1122 b2 -= b1;
1123
1124 tmp = b1 ^ b0;
1125 b1 = (tmp >> 14) | (tmp << (64 - 14));
1126 b0 -= b1 + k0;
1127 b1 -= k1 + t0;
1128
1129 tmp = b3 ^ b2;
1130 b3 = (tmp >> 16) | (tmp << (64 - 16));
1131 b2 -= b3 + k2 + t1;
1132 b3 -= k3;
1133
1134 output[0] = b0;
1135 output[1] = b1;
1136 output[2] = b2;
1137 output[3] = b3;
1138 }
1139
1140 void threefish_encrypt_512(struct threefish_key *key_ctx, u64 *input,
1141 u64 *output)
1142 {
1143 u64 b0 = input[0], b1 = input[1],
1144 b2 = input[2], b3 = input[3],
1145 b4 = input[4], b5 = input[5],
1146 b6 = input[6], b7 = input[7];
1147 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
1148 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
1149 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
1150 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
1151 k8 = key_ctx->key[8];
1152 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
1153 t2 = key_ctx->tweak[2];
1154
1155 b1 += k1;
1156 b0 += b1 + k0;
1157 b1 = rol64(b1, 46) ^ b0;
1158
1159 b3 += k3;
1160 b2 += b3 + k2;
1161 b3 = rol64(b3, 36) ^ b2;
1162
1163 b5 += k5 + t0;
1164 b4 += b5 + k4;
1165 b5 = rol64(b5, 19) ^ b4;
1166
1167 b7 += k7;
1168 b6 += b7 + k6 + t1;
1169 b7 = rol64(b7, 37) ^ b6;
1170
1171 b2 += b1;
1172 b1 = rol64(b1, 33) ^ b2;
1173
1174 b4 += b7;
1175 b7 = rol64(b7, 27) ^ b4;
1176
1177 b6 += b5;
1178 b5 = rol64(b5, 14) ^ b6;
1179
1180 b0 += b3;
1181 b3 = rol64(b3, 42) ^ b0;
1182
1183 b4 += b1;
1184 b1 = rol64(b1, 17) ^ b4;
1185
1186 b6 += b3;
1187 b3 = rol64(b3, 49) ^ b6;
1188
1189 b0 += b5;
1190 b5 = rol64(b5, 36) ^ b0;
1191
1192 b2 += b7;
1193 b7 = rol64(b7, 39) ^ b2;
1194
1195 b6 += b1;
1196 b1 = rol64(b1, 44) ^ b6;
1197
1198 b0 += b7;
1199 b7 = rol64(b7, 9) ^ b0;
1200
1201 b2 += b5;
1202 b5 = rol64(b5, 54) ^ b2;
1203
1204 b4 += b3;
1205 b3 = rol64(b3, 56) ^ b4;
1206
1207 b1 += k2;
1208 b0 += b1 + k1;
1209 b1 = rol64(b1, 39) ^ b0;
1210
1211 b3 += k4;
1212 b2 += b3 + k3;
1213 b3 = rol64(b3, 30) ^ b2;
1214
1215 b5 += k6 + t1;
1216 b4 += b5 + k5;
1217 b5 = rol64(b5, 34) ^ b4;
1218
1219 b7 += k8 + 1;
1220 b6 += b7 + k7 + t2;
1221 b7 = rol64(b7, 24) ^ b6;
1222
1223 b2 += b1;
1224 b1 = rol64(b1, 13) ^ b2;
1225
1226 b4 += b7;
1227 b7 = rol64(b7, 50) ^ b4;
1228
1229 b6 += b5;
1230 b5 = rol64(b5, 10) ^ b6;
1231
1232 b0 += b3;
1233 b3 = rol64(b3, 17) ^ b0;
1234
1235 b4 += b1;
1236 b1 = rol64(b1, 25) ^ b4;
1237
1238 b6 += b3;
1239 b3 = rol64(b3, 29) ^ b6;
1240
1241 b0 += b5;
1242 b5 = rol64(b5, 39) ^ b0;
1243
1244 b2 += b7;
1245 b7 = rol64(b7, 43) ^ b2;
1246
1247 b6 += b1;
1248 b1 = rol64(b1, 8) ^ b6;
1249
1250 b0 += b7;
1251 b7 = rol64(b7, 35) ^ b0;
1252
1253 b2 += b5;
1254 b5 = rol64(b5, 56) ^ b2;
1255
1256 b4 += b3;
1257 b3 = rol64(b3, 22) ^ b4;
1258
1259 b1 += k3;
1260 b0 += b1 + k2;
1261 b1 = rol64(b1, 46) ^ b0;
1262
1263 b3 += k5;
1264 b2 += b3 + k4;
1265 b3 = rol64(b3, 36) ^ b2;
1266
1267 b5 += k7 + t2;
1268 b4 += b5 + k6;
1269 b5 = rol64(b5, 19) ^ b4;
1270
1271 b7 += k0 + 2;
1272 b6 += b7 + k8 + t0;
1273 b7 = rol64(b7, 37) ^ b6;
1274
1275 b2 += b1;
1276 b1 = rol64(b1, 33) ^ b2;
1277
1278 b4 += b7;
1279 b7 = rol64(b7, 27) ^ b4;
1280
1281 b6 += b5;
1282 b5 = rol64(b5, 14) ^ b6;
1283
1284 b0 += b3;
1285 b3 = rol64(b3, 42) ^ b0;
1286
1287 b4 += b1;
1288 b1 = rol64(b1, 17) ^ b4;
1289
1290 b6 += b3;
1291 b3 = rol64(b3, 49) ^ b6;
1292
1293 b0 += b5;
1294 b5 = rol64(b5, 36) ^ b0;
1295
1296 b2 += b7;
1297 b7 = rol64(b7, 39) ^ b2;
1298
1299 b6 += b1;
1300 b1 = rol64(b1, 44) ^ b6;
1301
1302 b0 += b7;
1303 b7 = rol64(b7, 9) ^ b0;
1304
1305 b2 += b5;
1306 b5 = rol64(b5, 54) ^ b2;
1307
1308 b4 += b3;
1309 b3 = rol64(b3, 56) ^ b4;
1310
1311 b1 += k4;
1312 b0 += b1 + k3;
1313 b1 = rol64(b1, 39) ^ b0;
1314
1315 b3 += k6;
1316 b2 += b3 + k5;
1317 b3 = rol64(b3, 30) ^ b2;
1318
1319 b5 += k8 + t0;
1320 b4 += b5 + k7;
1321 b5 = rol64(b5, 34) ^ b4;
1322
1323 b7 += k1 + 3;
1324 b6 += b7 + k0 + t1;
1325 b7 = rol64(b7, 24) ^ b6;
1326
1327 b2 += b1;
1328 b1 = rol64(b1, 13) ^ b2;
1329
1330 b4 += b7;
1331 b7 = rol64(b7, 50) ^ b4;
1332
1333 b6 += b5;
1334 b5 = rol64(b5, 10) ^ b6;
1335
1336 b0 += b3;
1337 b3 = rol64(b3, 17) ^ b0;
1338
1339 b4 += b1;
1340 b1 = rol64(b1, 25) ^ b4;
1341
1342 b6 += b3;
1343 b3 = rol64(b3, 29) ^ b6;
1344
1345 b0 += b5;
1346 b5 = rol64(b5, 39) ^ b0;
1347
1348 b2 += b7;
1349 b7 = rol64(b7, 43) ^ b2;
1350
1351 b6 += b1;
1352 b1 = rol64(b1, 8) ^ b6;
1353
1354 b0 += b7;
1355 b7 = rol64(b7, 35) ^ b0;
1356
1357 b2 += b5;
1358 b5 = rol64(b5, 56) ^ b2;
1359
1360 b4 += b3;
1361 b3 = rol64(b3, 22) ^ b4;
1362
1363 b1 += k5;
1364 b0 += b1 + k4;
1365 b1 = rol64(b1, 46) ^ b0;
1366
1367 b3 += k7;
1368 b2 += b3 + k6;
1369 b3 = rol64(b3, 36) ^ b2;
1370
1371 b5 += k0 + t1;
1372 b4 += b5 + k8;
1373 b5 = rol64(b5, 19) ^ b4;
1374
1375 b7 += k2 + 4;
1376 b6 += b7 + k1 + t2;
1377 b7 = rol64(b7, 37) ^ b6;
1378
1379 b2 += b1;
1380 b1 = rol64(b1, 33) ^ b2;
1381
1382 b4 += b7;
1383 b7 = rol64(b7, 27) ^ b4;
1384
1385 b6 += b5;
1386 b5 = rol64(b5, 14) ^ b6;
1387
1388 b0 += b3;
1389 b3 = rol64(b3, 42) ^ b0;
1390
1391 b4 += b1;
1392 b1 = rol64(b1, 17) ^ b4;
1393
1394 b6 += b3;
1395 b3 = rol64(b3, 49) ^ b6;
1396
1397 b0 += b5;
1398 b5 = rol64(b5, 36) ^ b0;
1399
1400 b2 += b7;
1401 b7 = rol64(b7, 39) ^ b2;
1402
1403 b6 += b1;
1404 b1 = rol64(b1, 44) ^ b6;
1405
1406 b0 += b7;
1407 b7 = rol64(b7, 9) ^ b0;
1408
1409 b2 += b5;
1410 b5 = rol64(b5, 54) ^ b2;
1411
1412 b4 += b3;
1413 b3 = rol64(b3, 56) ^ b4;
1414
1415 b1 += k6;
1416 b0 += b1 + k5;
1417 b1 = rol64(b1, 39) ^ b0;
1418
1419 b3 += k8;
1420 b2 += b3 + k7;
1421 b3 = rol64(b3, 30) ^ b2;
1422
1423 b5 += k1 + t2;
1424 b4 += b5 + k0;
1425 b5 = rol64(b5, 34) ^ b4;
1426
1427 b7 += k3 + 5;
1428 b6 += b7 + k2 + t0;
1429 b7 = rol64(b7, 24) ^ b6;
1430
1431 b2 += b1;
1432 b1 = rol64(b1, 13) ^ b2;
1433
1434 b4 += b7;
1435 b7 = rol64(b7, 50) ^ b4;
1436
1437 b6 += b5;
1438 b5 = rol64(b5, 10) ^ b6;
1439
1440 b0 += b3;
1441 b3 = rol64(b3, 17) ^ b0;
1442
1443 b4 += b1;
1444 b1 = rol64(b1, 25) ^ b4;
1445
1446 b6 += b3;
1447 b3 = rol64(b3, 29) ^ b6;
1448
1449 b0 += b5;
1450 b5 = rol64(b5, 39) ^ b0;
1451
1452 b2 += b7;
1453 b7 = rol64(b7, 43) ^ b2;
1454
1455 b6 += b1;
1456 b1 = rol64(b1, 8) ^ b6;
1457
1458 b0 += b7;
1459 b7 = rol64(b7, 35) ^ b0;
1460
1461 b2 += b5;
1462 b5 = rol64(b5, 56) ^ b2;
1463
1464 b4 += b3;
1465 b3 = rol64(b3, 22) ^ b4;
1466
1467 b1 += k7;
1468 b0 += b1 + k6;
1469 b1 = rol64(b1, 46) ^ b0;
1470
1471 b3 += k0;
1472 b2 += b3 + k8;
1473 b3 = rol64(b3, 36) ^ b2;
1474
1475 b5 += k2 + t0;
1476 b4 += b5 + k1;
1477 b5 = rol64(b5, 19) ^ b4;
1478
1479 b7 += k4 + 6;
1480 b6 += b7 + k3 + t1;
1481 b7 = rol64(b7, 37) ^ b6;
1482
1483 b2 += b1;
1484 b1 = rol64(b1, 33) ^ b2;
1485
1486 b4 += b7;
1487 b7 = rol64(b7, 27) ^ b4;
1488
1489 b6 += b5;
1490 b5 = rol64(b5, 14) ^ b6;
1491
1492 b0 += b3;
1493 b3 = rol64(b3, 42) ^ b0;
1494
1495 b4 += b1;
1496 b1 = rol64(b1, 17) ^ b4;
1497
1498 b6 += b3;
1499 b3 = rol64(b3, 49) ^ b6;
1500
1501 b0 += b5;
1502 b5 = rol64(b5, 36) ^ b0;
1503
1504 b2 += b7;
1505 b7 = rol64(b7, 39) ^ b2;
1506
1507 b6 += b1;
1508 b1 = rol64(b1, 44) ^ b6;
1509
1510 b0 += b7;
1511 b7 = rol64(b7, 9) ^ b0;
1512
1513 b2 += b5;
1514 b5 = rol64(b5, 54) ^ b2;
1515
1516 b4 += b3;
1517 b3 = rol64(b3, 56) ^ b4;
1518
1519 b1 += k8;
1520 b0 += b1 + k7;
1521 b1 = rol64(b1, 39) ^ b0;
1522
1523 b3 += k1;
1524 b2 += b3 + k0;
1525 b3 = rol64(b3, 30) ^ b2;
1526
1527 b5 += k3 + t1;
1528 b4 += b5 + k2;
1529 b5 = rol64(b5, 34) ^ b4;
1530
1531 b7 += k5 + 7;
1532 b6 += b7 + k4 + t2;
1533 b7 = rol64(b7, 24) ^ b6;
1534
1535 b2 += b1;
1536 b1 = rol64(b1, 13) ^ b2;
1537
1538 b4 += b7;
1539 b7 = rol64(b7, 50) ^ b4;
1540
1541 b6 += b5;
1542 b5 = rol64(b5, 10) ^ b6;
1543
1544 b0 += b3;
1545 b3 = rol64(b3, 17) ^ b0;
1546
1547 b4 += b1;
1548 b1 = rol64(b1, 25) ^ b4;
1549
1550 b6 += b3;
1551 b3 = rol64(b3, 29) ^ b6;
1552
1553 b0 += b5;
1554 b5 = rol64(b5, 39) ^ b0;
1555
1556 b2 += b7;
1557 b7 = rol64(b7, 43) ^ b2;
1558
1559 b6 += b1;
1560 b1 = rol64(b1, 8) ^ b6;
1561
1562 b0 += b7;
1563 b7 = rol64(b7, 35) ^ b0;
1564
1565 b2 += b5;
1566 b5 = rol64(b5, 56) ^ b2;
1567
1568 b4 += b3;
1569 b3 = rol64(b3, 22) ^ b4;
1570
1571 b1 += k0;
1572 b0 += b1 + k8;
1573 b1 = rol64(b1, 46) ^ b0;
1574
1575 b3 += k2;
1576 b2 += b3 + k1;
1577 b3 = rol64(b3, 36) ^ b2;
1578
1579 b5 += k4 + t2;
1580 b4 += b5 + k3;
1581 b5 = rol64(b5, 19) ^ b4;
1582
1583 b7 += k6 + 8;
1584 b6 += b7 + k5 + t0;
1585 b7 = rol64(b7, 37) ^ b6;
1586
1587 b2 += b1;
1588 b1 = rol64(b1, 33) ^ b2;
1589
1590 b4 += b7;
1591 b7 = rol64(b7, 27) ^ b4;
1592
1593 b6 += b5;
1594 b5 = rol64(b5, 14) ^ b6;
1595
1596 b0 += b3;
1597 b3 = rol64(b3, 42) ^ b0;
1598
1599 b4 += b1;
1600 b1 = rol64(b1, 17) ^ b4;
1601
1602 b6 += b3;
1603 b3 = rol64(b3, 49) ^ b6;
1604
1605 b0 += b5;
1606 b5 = rol64(b5, 36) ^ b0;
1607
1608 b2 += b7;
1609 b7 = rol64(b7, 39) ^ b2;
1610
1611 b6 += b1;
1612 b1 = rol64(b1, 44) ^ b6;
1613
1614 b0 += b7;
1615 b7 = rol64(b7, 9) ^ b0;
1616
1617 b2 += b5;
1618 b5 = rol64(b5, 54) ^ b2;
1619
1620 b4 += b3;
1621 b3 = rol64(b3, 56) ^ b4;
1622
1623 b1 += k1;
1624 b0 += b1 + k0;
1625 b1 = rol64(b1, 39) ^ b0;
1626
1627 b3 += k3;
1628 b2 += b3 + k2;
1629 b3 = rol64(b3, 30) ^ b2;
1630
1631 b5 += k5 + t0;
1632 b4 += b5 + k4;
1633 b5 = rol64(b5, 34) ^ b4;
1634
1635 b7 += k7 + 9;
1636 b6 += b7 + k6 + t1;
1637 b7 = rol64(b7, 24) ^ b6;
1638
1639 b2 += b1;
1640 b1 = rol64(b1, 13) ^ b2;
1641
1642 b4 += b7;
1643 b7 = rol64(b7, 50) ^ b4;
1644
1645 b6 += b5;
1646 b5 = rol64(b5, 10) ^ b6;
1647
1648 b0 += b3;
1649 b3 = rol64(b3, 17) ^ b0;
1650
1651 b4 += b1;
1652 b1 = rol64(b1, 25) ^ b4;
1653
1654 b6 += b3;
1655 b3 = rol64(b3, 29) ^ b6;
1656
1657 b0 += b5;
1658 b5 = rol64(b5, 39) ^ b0;
1659
1660 b2 += b7;
1661 b7 = rol64(b7, 43) ^ b2;
1662
1663 b6 += b1;
1664 b1 = rol64(b1, 8) ^ b6;
1665
1666 b0 += b7;
1667 b7 = rol64(b7, 35) ^ b0;
1668
1669 b2 += b5;
1670 b5 = rol64(b5, 56) ^ b2;
1671
1672 b4 += b3;
1673 b3 = rol64(b3, 22) ^ b4;
1674
1675 b1 += k2;
1676 b0 += b1 + k1;
1677 b1 = rol64(b1, 46) ^ b0;
1678
1679 b3 += k4;
1680 b2 += b3 + k3;
1681 b3 = rol64(b3, 36) ^ b2;
1682
1683 b5 += k6 + t1;
1684 b4 += b5 + k5;
1685 b5 = rol64(b5, 19) ^ b4;
1686
1687 b7 += k8 + 10;
1688 b6 += b7 + k7 + t2;
1689 b7 = rol64(b7, 37) ^ b6;
1690
1691 b2 += b1;
1692 b1 = rol64(b1, 33) ^ b2;
1693
1694 b4 += b7;
1695 b7 = rol64(b7, 27) ^ b4;
1696
1697 b6 += b5;
1698 b5 = rol64(b5, 14) ^ b6;
1699
1700 b0 += b3;
1701 b3 = rol64(b3, 42) ^ b0;
1702
1703 b4 += b1;
1704 b1 = rol64(b1, 17) ^ b4;
1705
1706 b6 += b3;
1707 b3 = rol64(b3, 49) ^ b6;
1708
1709 b0 += b5;
1710 b5 = rol64(b5, 36) ^ b0;
1711
1712 b2 += b7;
1713 b7 = rol64(b7, 39) ^ b2;
1714
1715 b6 += b1;
1716 b1 = rol64(b1, 44) ^ b6;
1717
1718 b0 += b7;
1719 b7 = rol64(b7, 9) ^ b0;
1720
1721 b2 += b5;
1722 b5 = rol64(b5, 54) ^ b2;
1723
1724 b4 += b3;
1725 b3 = rol64(b3, 56) ^ b4;
1726
1727 b1 += k3;
1728 b0 += b1 + k2;
1729 b1 = rol64(b1, 39) ^ b0;
1730
1731 b3 += k5;
1732 b2 += b3 + k4;
1733 b3 = rol64(b3, 30) ^ b2;
1734
1735 b5 += k7 + t2;
1736 b4 += b5 + k6;
1737 b5 = rol64(b5, 34) ^ b4;
1738
1739 b7 += k0 + 11;
1740 b6 += b7 + k8 + t0;
1741 b7 = rol64(b7, 24) ^ b6;
1742
1743 b2 += b1;
1744 b1 = rol64(b1, 13) ^ b2;
1745
1746 b4 += b7;
1747 b7 = rol64(b7, 50) ^ b4;
1748
1749 b6 += b5;
1750 b5 = rol64(b5, 10) ^ b6;
1751
1752 b0 += b3;
1753 b3 = rol64(b3, 17) ^ b0;
1754
1755 b4 += b1;
1756 b1 = rol64(b1, 25) ^ b4;
1757
1758 b6 += b3;
1759 b3 = rol64(b3, 29) ^ b6;
1760
1761 b0 += b5;
1762 b5 = rol64(b5, 39) ^ b0;
1763
1764 b2 += b7;
1765 b7 = rol64(b7, 43) ^ b2;
1766
1767 b6 += b1;
1768 b1 = rol64(b1, 8) ^ b6;
1769
1770 b0 += b7;
1771 b7 = rol64(b7, 35) ^ b0;
1772
1773 b2 += b5;
1774 b5 = rol64(b5, 56) ^ b2;
1775
1776 b4 += b3;
1777 b3 = rol64(b3, 22) ^ b4;
1778
1779 b1 += k4;
1780 b0 += b1 + k3;
1781 b1 = rol64(b1, 46) ^ b0;
1782
1783 b3 += k6;
1784 b2 += b3 + k5;
1785 b3 = rol64(b3, 36) ^ b2;
1786
1787 b5 += k8 + t0;
1788 b4 += b5 + k7;
1789 b5 = rol64(b5, 19) ^ b4;
1790
1791 b7 += k1 + 12;
1792 b6 += b7 + k0 + t1;
1793 b7 = rol64(b7, 37) ^ b6;
1794
1795 b2 += b1;
1796 b1 = rol64(b1, 33) ^ b2;
1797
1798 b4 += b7;
1799 b7 = rol64(b7, 27) ^ b4;
1800
1801 b6 += b5;
1802 b5 = rol64(b5, 14) ^ b6;
1803
1804 b0 += b3;
1805 b3 = rol64(b3, 42) ^ b0;
1806
1807 b4 += b1;
1808 b1 = rol64(b1, 17) ^ b4;
1809
1810 b6 += b3;
1811 b3 = rol64(b3, 49) ^ b6;
1812
1813 b0 += b5;
1814 b5 = rol64(b5, 36) ^ b0;
1815
1816 b2 += b7;
1817 b7 = rol64(b7, 39) ^ b2;
1818
1819 b6 += b1;
1820 b1 = rol64(b1, 44) ^ b6;
1821
1822 b0 += b7;
1823 b7 = rol64(b7, 9) ^ b0;
1824
1825 b2 += b5;
1826 b5 = rol64(b5, 54) ^ b2;
1827
1828 b4 += b3;
1829 b3 = rol64(b3, 56) ^ b4;
1830
1831 b1 += k5;
1832 b0 += b1 + k4;
1833 b1 = rol64(b1, 39) ^ b0;
1834
1835 b3 += k7;
1836 b2 += b3 + k6;
1837 b3 = rol64(b3, 30) ^ b2;
1838
1839 b5 += k0 + t1;
1840 b4 += b5 + k8;
1841 b5 = rol64(b5, 34) ^ b4;
1842
1843 b7 += k2 + 13;
1844 b6 += b7 + k1 + t2;
1845 b7 = rol64(b7, 24) ^ b6;
1846
1847 b2 += b1;
1848 b1 = rol64(b1, 13) ^ b2;
1849
1850 b4 += b7;
1851 b7 = rol64(b7, 50) ^ b4;
1852
1853 b6 += b5;
1854 b5 = rol64(b5, 10) ^ b6;
1855
1856 b0 += b3;
1857 b3 = rol64(b3, 17) ^ b0;
1858
1859 b4 += b1;
1860 b1 = rol64(b1, 25) ^ b4;
1861
1862 b6 += b3;
1863 b3 = rol64(b3, 29) ^ b6;
1864
1865 b0 += b5;
1866 b5 = rol64(b5, 39) ^ b0;
1867
1868 b2 += b7;
1869 b7 = rol64(b7, 43) ^ b2;
1870
1871 b6 += b1;
1872 b1 = rol64(b1, 8) ^ b6;
1873
1874 b0 += b7;
1875 b7 = rol64(b7, 35) ^ b0;
1876
1877 b2 += b5;
1878 b5 = rol64(b5, 56) ^ b2;
1879
1880 b4 += b3;
1881 b3 = rol64(b3, 22) ^ b4;
1882
1883 b1 += k6;
1884 b0 += b1 + k5;
1885 b1 = rol64(b1, 46) ^ b0;
1886
1887 b3 += k8;
1888 b2 += b3 + k7;
1889 b3 = rol64(b3, 36) ^ b2;
1890
1891 b5 += k1 + t2;
1892 b4 += b5 + k0;
1893 b5 = rol64(b5, 19) ^ b4;
1894
1895 b7 += k3 + 14;
1896 b6 += b7 + k2 + t0;
1897 b7 = rol64(b7, 37) ^ b6;
1898
1899 b2 += b1;
1900 b1 = rol64(b1, 33) ^ b2;
1901
1902 b4 += b7;
1903 b7 = rol64(b7, 27) ^ b4;
1904
1905 b6 += b5;
1906 b5 = rol64(b5, 14) ^ b6;
1907
1908 b0 += b3;
1909 b3 = rol64(b3, 42) ^ b0;
1910
1911 b4 += b1;
1912 b1 = rol64(b1, 17) ^ b4;
1913
1914 b6 += b3;
1915 b3 = rol64(b3, 49) ^ b6;
1916
1917 b0 += b5;
1918 b5 = rol64(b5, 36) ^ b0;
1919
1920 b2 += b7;
1921 b7 = rol64(b7, 39) ^ b2;
1922
1923 b6 += b1;
1924 b1 = rol64(b1, 44) ^ b6;
1925
1926 b0 += b7;
1927 b7 = rol64(b7, 9) ^ b0;
1928
1929 b2 += b5;
1930 b5 = rol64(b5, 54) ^ b2;
1931
1932 b4 += b3;
1933 b3 = rol64(b3, 56) ^ b4;
1934
1935 b1 += k7;
1936 b0 += b1 + k6;
1937 b1 = rol64(b1, 39) ^ b0;
1938
1939 b3 += k0;
1940 b2 += b3 + k8;
1941 b3 = rol64(b3, 30) ^ b2;
1942
1943 b5 += k2 + t0;
1944 b4 += b5 + k1;
1945 b5 = rol64(b5, 34) ^ b4;
1946
1947 b7 += k4 + 15;
1948 b6 += b7 + k3 + t1;
1949 b7 = rol64(b7, 24) ^ b6;
1950
1951 b2 += b1;
1952 b1 = rol64(b1, 13) ^ b2;
1953
1954 b4 += b7;
1955 b7 = rol64(b7, 50) ^ b4;
1956
1957 b6 += b5;
1958 b5 = rol64(b5, 10) ^ b6;
1959
1960 b0 += b3;
1961 b3 = rol64(b3, 17) ^ b0;
1962
1963 b4 += b1;
1964 b1 = rol64(b1, 25) ^ b4;
1965
1966 b6 += b3;
1967 b3 = rol64(b3, 29) ^ b6;
1968
1969 b0 += b5;
1970 b5 = rol64(b5, 39) ^ b0;
1971
1972 b2 += b7;
1973 b7 = rol64(b7, 43) ^ b2;
1974
1975 b6 += b1;
1976 b1 = rol64(b1, 8) ^ b6;
1977
1978 b0 += b7;
1979 b7 = rol64(b7, 35) ^ b0;
1980
1981 b2 += b5;
1982 b5 = rol64(b5, 56) ^ b2;
1983
1984 b4 += b3;
1985 b3 = rol64(b3, 22) ^ b4;
1986
1987 b1 += k8;
1988 b0 += b1 + k7;
1989 b1 = rol64(b1, 46) ^ b0;
1990
1991 b3 += k1;
1992 b2 += b3 + k0;
1993 b3 = rol64(b3, 36) ^ b2;
1994
1995 b5 += k3 + t1;
1996 b4 += b5 + k2;
1997 b5 = rol64(b5, 19) ^ b4;
1998
1999 b7 += k5 + 16;
2000 b6 += b7 + k4 + t2;
2001 b7 = rol64(b7, 37) ^ b6;
2002
2003 b2 += b1;
2004 b1 = rol64(b1, 33) ^ b2;
2005
2006 b4 += b7;
2007 b7 = rol64(b7, 27) ^ b4;
2008
2009 b6 += b5;
2010 b5 = rol64(b5, 14) ^ b6;
2011
2012 b0 += b3;
2013 b3 = rol64(b3, 42) ^ b0;
2014
2015 b4 += b1;
2016 b1 = rol64(b1, 17) ^ b4;
2017
2018 b6 += b3;
2019 b3 = rol64(b3, 49) ^ b6;
2020
2021 b0 += b5;
2022 b5 = rol64(b5, 36) ^ b0;
2023
2024 b2 += b7;
2025 b7 = rol64(b7, 39) ^ b2;
2026
2027 b6 += b1;
2028 b1 = rol64(b1, 44) ^ b6;
2029
2030 b0 += b7;
2031 b7 = rol64(b7, 9) ^ b0;
2032
2033 b2 += b5;
2034 b5 = rol64(b5, 54) ^ b2;
2035
2036 b4 += b3;
2037 b3 = rol64(b3, 56) ^ b4;
2038
2039 b1 += k0;
2040 b0 += b1 + k8;
2041 b1 = rol64(b1, 39) ^ b0;
2042
2043 b3 += k2;
2044 b2 += b3 + k1;
2045 b3 = rol64(b3, 30) ^ b2;
2046
2047 b5 += k4 + t2;
2048 b4 += b5 + k3;
2049 b5 = rol64(b5, 34) ^ b4;
2050
2051 b7 += k6 + 17;
2052 b6 += b7 + k5 + t0;
2053 b7 = rol64(b7, 24) ^ b6;
2054
2055 b2 += b1;
2056 b1 = rol64(b1, 13) ^ b2;
2057
2058 b4 += b7;
2059 b7 = rol64(b7, 50) ^ b4;
2060
2061 b6 += b5;
2062 b5 = rol64(b5, 10) ^ b6;
2063
2064 b0 += b3;
2065 b3 = rol64(b3, 17) ^ b0;
2066
2067 b4 += b1;
2068 b1 = rol64(b1, 25) ^ b4;
2069
2070 b6 += b3;
2071 b3 = rol64(b3, 29) ^ b6;
2072
2073 b0 += b5;
2074 b5 = rol64(b5, 39) ^ b0;
2075
2076 b2 += b7;
2077 b7 = rol64(b7, 43) ^ b2;
2078
2079 b6 += b1;
2080 b1 = rol64(b1, 8) ^ b6;
2081
2082 b0 += b7;
2083 b7 = rol64(b7, 35) ^ b0;
2084
2085 b2 += b5;
2086 b5 = rol64(b5, 56) ^ b2;
2087
2088 b4 += b3;
2089 b3 = rol64(b3, 22) ^ b4;
2090
2091 output[0] = b0 + k0;
2092 output[1] = b1 + k1;
2093 output[2] = b2 + k2;
2094 output[3] = b3 + k3;
2095 output[4] = b4 + k4;
2096 output[5] = b5 + k5 + t0;
2097 output[6] = b6 + k6 + t1;
2098 output[7] = b7 + k7 + 18;
2099 }
2100
2101 void threefish_decrypt_512(struct threefish_key *key_ctx, u64 *input,
2102 u64 *output)
2103 {
2104 u64 b0 = input[0], b1 = input[1],
2105 b2 = input[2], b3 = input[3],
2106 b4 = input[4], b5 = input[5],
2107 b6 = input[6], b7 = input[7];
2108 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
2109 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
2110 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
2111 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
2112 k8 = key_ctx->key[8];
2113 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
2114 t2 = key_ctx->tweak[2];
2115
2116 u64 tmp;
2117
2118 b0 -= k0;
2119 b1 -= k1;
2120 b2 -= k2;
2121 b3 -= k3;
2122 b4 -= k4;
2123 b5 -= k5 + t0;
2124 b6 -= k6 + t1;
2125 b7 -= k7 + 18;
2126
2127 tmp = b3 ^ b4;
2128 b3 = (tmp >> 22) | (tmp << (64 - 22));
2129 b4 -= b3;
2130
2131 tmp = b5 ^ b2;
2132 b5 = (tmp >> 56) | (tmp << (64 - 56));
2133 b2 -= b5;
2134
2135 tmp = b7 ^ b0;
2136 b7 = (tmp >> 35) | (tmp << (64 - 35));
2137 b0 -= b7;
2138
2139 tmp = b1 ^ b6;
2140 b1 = (tmp >> 8) | (tmp << (64 - 8));
2141 b6 -= b1;
2142
2143 tmp = b7 ^ b2;
2144 b7 = (tmp >> 43) | (tmp << (64 - 43));
2145 b2 -= b7;
2146
2147 tmp = b5 ^ b0;
2148 b5 = (tmp >> 39) | (tmp << (64 - 39));
2149 b0 -= b5;
2150
2151 tmp = b3 ^ b6;
2152 b3 = (tmp >> 29) | (tmp << (64 - 29));
2153 b6 -= b3;
2154
2155 tmp = b1 ^ b4;
2156 b1 = (tmp >> 25) | (tmp << (64 - 25));
2157 b4 -= b1;
2158
2159 tmp = b3 ^ b0;
2160 b3 = (tmp >> 17) | (tmp << (64 - 17));
2161 b0 -= b3;
2162
2163 tmp = b5 ^ b6;
2164 b5 = (tmp >> 10) | (tmp << (64 - 10));
2165 b6 -= b5;
2166
2167 tmp = b7 ^ b4;
2168 b7 = (tmp >> 50) | (tmp << (64 - 50));
2169 b4 -= b7;
2170
2171 tmp = b1 ^ b2;
2172 b1 = (tmp >> 13) | (tmp << (64 - 13));
2173 b2 -= b1;
2174
2175 tmp = b7 ^ b6;
2176 b7 = (tmp >> 24) | (tmp << (64 - 24));
2177 b6 -= b7 + k5 + t0;
2178 b7 -= k6 + 17;
2179
2180 tmp = b5 ^ b4;
2181 b5 = (tmp >> 34) | (tmp << (64 - 34));
2182 b4 -= b5 + k3;
2183 b5 -= k4 + t2;
2184
2185 tmp = b3 ^ b2;
2186 b3 = (tmp >> 30) | (tmp << (64 - 30));
2187 b2 -= b3 + k1;
2188 b3 -= k2;
2189
2190 tmp = b1 ^ b0;
2191 b1 = (tmp >> 39) | (tmp << (64 - 39));
2192 b0 -= b1 + k8;
2193 b1 -= k0;
2194
2195 tmp = b3 ^ b4;
2196 b3 = (tmp >> 56) | (tmp << (64 - 56));
2197 b4 -= b3;
2198
2199 tmp = b5 ^ b2;
2200 b5 = (tmp >> 54) | (tmp << (64 - 54));
2201 b2 -= b5;
2202
2203 tmp = b7 ^ b0;
2204 b7 = (tmp >> 9) | (tmp << (64 - 9));
2205 b0 -= b7;
2206
2207 tmp = b1 ^ b6;
2208 b1 = (tmp >> 44) | (tmp << (64 - 44));
2209 b6 -= b1;
2210
2211 tmp = b7 ^ b2;
2212 b7 = (tmp >> 39) | (tmp << (64 - 39));
2213 b2 -= b7;
2214
2215 tmp = b5 ^ b0;
2216 b5 = (tmp >> 36) | (tmp << (64 - 36));
2217 b0 -= b5;
2218
2219 tmp = b3 ^ b6;
2220 b3 = (tmp >> 49) | (tmp << (64 - 49));
2221 b6 -= b3;
2222
2223 tmp = b1 ^ b4;
2224 b1 = (tmp >> 17) | (tmp << (64 - 17));
2225 b4 -= b1;
2226
2227 tmp = b3 ^ b0;
2228 b3 = (tmp >> 42) | (tmp << (64 - 42));
2229 b0 -= b3;
2230
2231 tmp = b5 ^ b6;
2232 b5 = (tmp >> 14) | (tmp << (64 - 14));
2233 b6 -= b5;
2234
2235 tmp = b7 ^ b4;
2236 b7 = (tmp >> 27) | (tmp << (64 - 27));
2237 b4 -= b7;
2238
2239 tmp = b1 ^ b2;
2240 b1 = (tmp >> 33) | (tmp << (64 - 33));
2241 b2 -= b1;
2242
2243 tmp = b7 ^ b6;
2244 b7 = (tmp >> 37) | (tmp << (64 - 37));
2245 b6 -= b7 + k4 + t2;
2246 b7 -= k5 + 16;
2247
2248 tmp = b5 ^ b4;
2249 b5 = (tmp >> 19) | (tmp << (64 - 19));
2250 b4 -= b5 + k2;
2251 b5 -= k3 + t1;
2252
2253 tmp = b3 ^ b2;
2254 b3 = (tmp >> 36) | (tmp << (64 - 36));
2255 b2 -= b3 + k0;
2256 b3 -= k1;
2257
2258 tmp = b1 ^ b0;
2259 b1 = (tmp >> 46) | (tmp << (64 - 46));
2260 b0 -= b1 + k7;
2261 b1 -= k8;
2262
2263 tmp = b3 ^ b4;
2264 b3 = (tmp >> 22) | (tmp << (64 - 22));
2265 b4 -= b3;
2266
2267 tmp = b5 ^ b2;
2268 b5 = (tmp >> 56) | (tmp << (64 - 56));
2269 b2 -= b5;
2270
2271 tmp = b7 ^ b0;
2272 b7 = (tmp >> 35) | (tmp << (64 - 35));
2273 b0 -= b7;
2274
2275 tmp = b1 ^ b6;
2276 b1 = (tmp >> 8) | (tmp << (64 - 8));
2277 b6 -= b1;
2278
2279 tmp = b7 ^ b2;
2280 b7 = (tmp >> 43) | (tmp << (64 - 43));
2281 b2 -= b7;
2282
2283 tmp = b5 ^ b0;
2284 b5 = (tmp >> 39) | (tmp << (64 - 39));
2285 b0 -= b5;
2286
2287 tmp = b3 ^ b6;
2288 b3 = (tmp >> 29) | (tmp << (64 - 29));
2289 b6 -= b3;
2290
2291 tmp = b1 ^ b4;
2292 b1 = (tmp >> 25) | (tmp << (64 - 25));
2293 b4 -= b1;
2294
2295 tmp = b3 ^ b0;
2296 b3 = (tmp >> 17) | (tmp << (64 - 17));
2297 b0 -= b3;
2298
2299 tmp = b5 ^ b6;
2300 b5 = (tmp >> 10) | (tmp << (64 - 10));
2301 b6 -= b5;
2302
2303 tmp = b7 ^ b4;
2304 b7 = (tmp >> 50) | (tmp << (64 - 50));
2305 b4 -= b7;
2306
2307 tmp = b1 ^ b2;
2308 b1 = (tmp >> 13) | (tmp << (64 - 13));
2309 b2 -= b1;
2310
2311 tmp = b7 ^ b6;
2312 b7 = (tmp >> 24) | (tmp << (64 - 24));
2313 b6 -= b7 + k3 + t1;
2314 b7 -= k4 + 15;
2315
2316 tmp = b5 ^ b4;
2317 b5 = (tmp >> 34) | (tmp << (64 - 34));
2318 b4 -= b5 + k1;
2319 b5 -= k2 + t0;
2320
2321 tmp = b3 ^ b2;
2322 b3 = (tmp >> 30) | (tmp << (64 - 30));
2323 b2 -= b3 + k8;
2324 b3 -= k0;
2325
2326 tmp = b1 ^ b0;
2327 b1 = (tmp >> 39) | (tmp << (64 - 39));
2328 b0 -= b1 + k6;
2329 b1 -= k7;
2330
2331 tmp = b3 ^ b4;
2332 b3 = (tmp >> 56) | (tmp << (64 - 56));
2333 b4 -= b3;
2334
2335 tmp = b5 ^ b2;
2336 b5 = (tmp >> 54) | (tmp << (64 - 54));
2337 b2 -= b5;
2338
2339 tmp = b7 ^ b0;
2340 b7 = (tmp >> 9) | (tmp << (64 - 9));
2341 b0 -= b7;
2342
2343 tmp = b1 ^ b6;
2344 b1 = (tmp >> 44) | (tmp << (64 - 44));
2345 b6 -= b1;
2346
2347 tmp = b7 ^ b2;
2348 b7 = (tmp >> 39) | (tmp << (64 - 39));
2349 b2 -= b7;
2350
2351 tmp = b5 ^ b0;
2352 b5 = (tmp >> 36) | (tmp << (64 - 36));
2353 b0 -= b5;
2354
2355 tmp = b3 ^ b6;
2356 b3 = (tmp >> 49) | (tmp << (64 - 49));
2357 b6 -= b3;
2358
2359 tmp = b1 ^ b4;
2360 b1 = (tmp >> 17) | (tmp << (64 - 17));
2361 b4 -= b1;
2362
2363 tmp = b3 ^ b0;
2364 b3 = (tmp >> 42) | (tmp << (64 - 42));
2365 b0 -= b3;
2366
2367 tmp = b5 ^ b6;
2368 b5 = (tmp >> 14) | (tmp << (64 - 14));
2369 b6 -= b5;
2370
2371 tmp = b7 ^ b4;
2372 b7 = (tmp >> 27) | (tmp << (64 - 27));
2373 b4 -= b7;
2374
2375 tmp = b1 ^ b2;
2376 b1 = (tmp >> 33) | (tmp << (64 - 33));
2377 b2 -= b1;
2378
2379 tmp = b7 ^ b6;
2380 b7 = (tmp >> 37) | (tmp << (64 - 37));
2381 b6 -= b7 + k2 + t0;
2382 b7 -= k3 + 14;
2383
2384 tmp = b5 ^ b4;
2385 b5 = (tmp >> 19) | (tmp << (64 - 19));
2386 b4 -= b5 + k0;
2387 b5 -= k1 + t2;
2388
2389 tmp = b3 ^ b2;
2390 b3 = (tmp >> 36) | (tmp << (64 - 36));
2391 b2 -= b3 + k7;
2392 b3 -= k8;
2393
2394 tmp = b1 ^ b0;
2395 b1 = (tmp >> 46) | (tmp << (64 - 46));
2396 b0 -= b1 + k5;
2397 b1 -= k6;
2398
2399 tmp = b3 ^ b4;
2400 b3 = (tmp >> 22) | (tmp << (64 - 22));
2401 b4 -= b3;
2402
2403 tmp = b5 ^ b2;
2404 b5 = (tmp >> 56) | (tmp << (64 - 56));
2405 b2 -= b5;
2406
2407 tmp = b7 ^ b0;
2408 b7 = (tmp >> 35) | (tmp << (64 - 35));
2409 b0 -= b7;
2410
2411 tmp = b1 ^ b6;
2412 b1 = (tmp >> 8) | (tmp << (64 - 8));
2413 b6 -= b1;
2414
2415 tmp = b7 ^ b2;
2416 b7 = (tmp >> 43) | (tmp << (64 - 43));
2417 b2 -= b7;
2418
2419 tmp = b5 ^ b0;
2420 b5 = (tmp >> 39) | (tmp << (64 - 39));
2421 b0 -= b5;
2422
2423 tmp = b3 ^ b6;
2424 b3 = (tmp >> 29) | (tmp << (64 - 29));
2425 b6 -= b3;
2426
2427 tmp = b1 ^ b4;
2428 b1 = (tmp >> 25) | (tmp << (64 - 25));
2429 b4 -= b1;
2430
2431 tmp = b3 ^ b0;
2432 b3 = (tmp >> 17) | (tmp << (64 - 17));
2433 b0 -= b3;
2434
2435 tmp = b5 ^ b6;
2436 b5 = (tmp >> 10) | (tmp << (64 - 10));
2437 b6 -= b5;
2438
2439 tmp = b7 ^ b4;
2440 b7 = (tmp >> 50) | (tmp << (64 - 50));
2441 b4 -= b7;
2442
2443 tmp = b1 ^ b2;
2444 b1 = (tmp >> 13) | (tmp << (64 - 13));
2445 b2 -= b1;
2446
2447 tmp = b7 ^ b6;
2448 b7 = (tmp >> 24) | (tmp << (64 - 24));
2449 b6 -= b7 + k1 + t2;
2450 b7 -= k2 + 13;
2451
2452 tmp = b5 ^ b4;
2453 b5 = (tmp >> 34) | (tmp << (64 - 34));
2454 b4 -= b5 + k8;
2455 b5 -= k0 + t1;
2456
2457 tmp = b3 ^ b2;
2458 b3 = (tmp >> 30) | (tmp << (64 - 30));
2459 b2 -= b3 + k6;
2460 b3 -= k7;
2461
2462 tmp = b1 ^ b0;
2463 b1 = (tmp >> 39) | (tmp << (64 - 39));
2464 b0 -= b1 + k4;
2465 b1 -= k5;
2466
2467 tmp = b3 ^ b4;
2468 b3 = (tmp >> 56) | (tmp << (64 - 56));
2469 b4 -= b3;
2470
2471 tmp = b5 ^ b2;
2472 b5 = (tmp >> 54) | (tmp << (64 - 54));
2473 b2 -= b5;
2474
2475 tmp = b7 ^ b0;
2476 b7 = (tmp >> 9) | (tmp << (64 - 9));
2477 b0 -= b7;
2478
2479 tmp = b1 ^ b6;
2480 b1 = (tmp >> 44) | (tmp << (64 - 44));
2481 b6 -= b1;
2482
2483 tmp = b7 ^ b2;
2484 b7 = (tmp >> 39) | (tmp << (64 - 39));
2485 b2 -= b7;
2486
2487 tmp = b5 ^ b0;
2488 b5 = (tmp >> 36) | (tmp << (64 - 36));
2489 b0 -= b5;
2490
2491 tmp = b3 ^ b6;
2492 b3 = (tmp >> 49) | (tmp << (64 - 49));
2493 b6 -= b3;
2494
2495 tmp = b1 ^ b4;
2496 b1 = (tmp >> 17) | (tmp << (64 - 17));
2497 b4 -= b1;
2498
2499 tmp = b3 ^ b0;
2500 b3 = (tmp >> 42) | (tmp << (64 - 42));
2501 b0 -= b3;
2502
2503 tmp = b5 ^ b6;
2504 b5 = (tmp >> 14) | (tmp << (64 - 14));
2505 b6 -= b5;
2506
2507 tmp = b7 ^ b4;
2508 b7 = (tmp >> 27) | (tmp << (64 - 27));
2509 b4 -= b7;
2510
2511 tmp = b1 ^ b2;
2512 b1 = (tmp >> 33) | (tmp << (64 - 33));
2513 b2 -= b1;
2514
2515 tmp = b7 ^ b6;
2516 b7 = (tmp >> 37) | (tmp << (64 - 37));
2517 b6 -= b7 + k0 + t1;
2518 b7 -= k1 + 12;
2519
2520 tmp = b5 ^ b4;
2521 b5 = (tmp >> 19) | (tmp << (64 - 19));
2522 b4 -= b5 + k7;
2523 b5 -= k8 + t0;
2524
2525 tmp = b3 ^ b2;
2526 b3 = (tmp >> 36) | (tmp << (64 - 36));
2527 b2 -= b3 + k5;
2528 b3 -= k6;
2529
2530 tmp = b1 ^ b0;
2531 b1 = (tmp >> 46) | (tmp << (64 - 46));
2532 b0 -= b1 + k3;
2533 b1 -= k4;
2534
2535 tmp = b3 ^ b4;
2536 b3 = (tmp >> 22) | (tmp << (64 - 22));
2537 b4 -= b3;
2538
2539 tmp = b5 ^ b2;
2540 b5 = (tmp >> 56) | (tmp << (64 - 56));
2541 b2 -= b5;
2542
2543 tmp = b7 ^ b0;
2544 b7 = (tmp >> 35) | (tmp << (64 - 35));
2545 b0 -= b7;
2546
2547 tmp = b1 ^ b6;
2548 b1 = (tmp >> 8) | (tmp << (64 - 8));
2549 b6 -= b1;
2550
2551 tmp = b7 ^ b2;
2552 b7 = (tmp >> 43) | (tmp << (64 - 43));
2553 b2 -= b7;
2554
2555 tmp = b5 ^ b0;
2556 b5 = (tmp >> 39) | (tmp << (64 - 39));
2557 b0 -= b5;
2558
2559 tmp = b3 ^ b6;
2560 b3 = (tmp >> 29) | (tmp << (64 - 29));
2561 b6 -= b3;
2562
2563 tmp = b1 ^ b4;
2564 b1 = (tmp >> 25) | (tmp << (64 - 25));
2565 b4 -= b1;
2566
2567 tmp = b3 ^ b0;
2568 b3 = (tmp >> 17) | (tmp << (64 - 17));
2569 b0 -= b3;
2570
2571 tmp = b5 ^ b6;
2572 b5 = (tmp >> 10) | (tmp << (64 - 10));
2573 b6 -= b5;
2574
2575 tmp = b7 ^ b4;
2576 b7 = (tmp >> 50) | (tmp << (64 - 50));
2577 b4 -= b7;
2578
2579 tmp = b1 ^ b2;
2580 b1 = (tmp >> 13) | (tmp << (64 - 13));
2581 b2 -= b1;
2582
2583 tmp = b7 ^ b6;
2584 b7 = (tmp >> 24) | (tmp << (64 - 24));
2585 b6 -= b7 + k8 + t0;
2586 b7 -= k0 + 11;
2587
2588 tmp = b5 ^ b4;
2589 b5 = (tmp >> 34) | (tmp << (64 - 34));
2590 b4 -= b5 + k6;
2591 b5 -= k7 + t2;
2592
2593 tmp = b3 ^ b2;
2594 b3 = (tmp >> 30) | (tmp << (64 - 30));
2595 b2 -= b3 + k4;
2596 b3 -= k5;
2597
2598 tmp = b1 ^ b0;
2599 b1 = (tmp >> 39) | (tmp << (64 - 39));
2600 b0 -= b1 + k2;
2601 b1 -= k3;
2602
2603 tmp = b3 ^ b4;
2604 b3 = (tmp >> 56) | (tmp << (64 - 56));
2605 b4 -= b3;
2606
2607 tmp = b5 ^ b2;
2608 b5 = (tmp >> 54) | (tmp << (64 - 54));
2609 b2 -= b5;
2610
2611 tmp = b7 ^ b0;
2612 b7 = (tmp >> 9) | (tmp << (64 - 9));
2613 b0 -= b7;
2614
2615 tmp = b1 ^ b6;
2616 b1 = (tmp >> 44) | (tmp << (64 - 44));
2617 b6 -= b1;
2618
2619 tmp = b7 ^ b2;
2620 b7 = (tmp >> 39) | (tmp << (64 - 39));
2621 b2 -= b7;
2622
2623 tmp = b5 ^ b0;
2624 b5 = (tmp >> 36) | (tmp << (64 - 36));
2625 b0 -= b5;
2626
2627 tmp = b3 ^ b6;
2628 b3 = (tmp >> 49) | (tmp << (64 - 49));
2629 b6 -= b3;
2630
2631 tmp = b1 ^ b4;
2632 b1 = (tmp >> 17) | (tmp << (64 - 17));
2633 b4 -= b1;
2634
2635 tmp = b3 ^ b0;
2636 b3 = (tmp >> 42) | (tmp << (64 - 42));
2637 b0 -= b3;
2638
2639 tmp = b5 ^ b6;
2640 b5 = (tmp >> 14) | (tmp << (64 - 14));
2641 b6 -= b5;
2642
2643 tmp = b7 ^ b4;
2644 b7 = (tmp >> 27) | (tmp << (64 - 27));
2645 b4 -= b7;
2646
2647 tmp = b1 ^ b2;
2648 b1 = (tmp >> 33) | (tmp << (64 - 33));
2649 b2 -= b1;
2650
2651 tmp = b7 ^ b6;
2652 b7 = (tmp >> 37) | (tmp << (64 - 37));
2653 b6 -= b7 + k7 + t2;
2654 b7 -= k8 + 10;
2655
2656 tmp = b5 ^ b4;
2657 b5 = (tmp >> 19) | (tmp << (64 - 19));
2658 b4 -= b5 + k5;
2659 b5 -= k6 + t1;
2660
2661 tmp = b3 ^ b2;
2662 b3 = (tmp >> 36) | (tmp << (64 - 36));
2663 b2 -= b3 + k3;
2664 b3 -= k4;
2665
2666 tmp = b1 ^ b0;
2667 b1 = (tmp >> 46) | (tmp << (64 - 46));
2668 b0 -= b1 + k1;
2669 b1 -= k2;
2670
2671 tmp = b3 ^ b4;
2672 b3 = (tmp >> 22) | (tmp << (64 - 22));
2673 b4 -= b3;
2674
2675 tmp = b5 ^ b2;
2676 b5 = (tmp >> 56) | (tmp << (64 - 56));
2677 b2 -= b5;
2678
2679 tmp = b7 ^ b0;
2680 b7 = (tmp >> 35) | (tmp << (64 - 35));
2681 b0 -= b7;
2682
2683 tmp = b1 ^ b6;
2684 b1 = (tmp >> 8) | (tmp << (64 - 8));
2685 b6 -= b1;
2686
2687 tmp = b7 ^ b2;
2688 b7 = (tmp >> 43) | (tmp << (64 - 43));
2689 b2 -= b7;
2690
2691 tmp = b5 ^ b0;
2692 b5 = (tmp >> 39) | (tmp << (64 - 39));
2693 b0 -= b5;
2694
2695 tmp = b3 ^ b6;
2696 b3 = (tmp >> 29) | (tmp << (64 - 29));
2697 b6 -= b3;
2698
2699 tmp = b1 ^ b4;
2700 b1 = (tmp >> 25) | (tmp << (64 - 25));
2701 b4 -= b1;
2702
2703 tmp = b3 ^ b0;
2704 b3 = (tmp >> 17) | (tmp << (64 - 17));
2705 b0 -= b3;
2706
2707 tmp = b5 ^ b6;
2708 b5 = (tmp >> 10) | (tmp << (64 - 10));
2709 b6 -= b5;
2710
2711 tmp = b7 ^ b4;
2712 b7 = (tmp >> 50) | (tmp << (64 - 50));
2713 b4 -= b7;
2714
2715 tmp = b1 ^ b2;
2716 b1 = (tmp >> 13) | (tmp << (64 - 13));
2717 b2 -= b1;
2718
2719 tmp = b7 ^ b6;
2720 b7 = (tmp >> 24) | (tmp << (64 - 24));
2721 b6 -= b7 + k6 + t1;
2722 b7 -= k7 + 9;
2723
2724 tmp = b5 ^ b4;
2725 b5 = (tmp >> 34) | (tmp << (64 - 34));
2726 b4 -= b5 + k4;
2727 b5 -= k5 + t0;
2728
2729 tmp = b3 ^ b2;
2730 b3 = (tmp >> 30) | (tmp << (64 - 30));
2731 b2 -= b3 + k2;
2732 b3 -= k3;
2733
2734 tmp = b1 ^ b0;
2735 b1 = (tmp >> 39) | (tmp << (64 - 39));
2736 b0 -= b1 + k0;
2737 b1 -= k1;
2738
2739 tmp = b3 ^ b4;
2740 b3 = (tmp >> 56) | (tmp << (64 - 56));
2741 b4 -= b3;
2742
2743 tmp = b5 ^ b2;
2744 b5 = (tmp >> 54) | (tmp << (64 - 54));
2745 b2 -= b5;
2746
2747 tmp = b7 ^ b0;
2748 b7 = (tmp >> 9) | (tmp << (64 - 9));
2749 b0 -= b7;
2750
2751 tmp = b1 ^ b6;
2752 b1 = (tmp >> 44) | (tmp << (64 - 44));
2753 b6 -= b1;
2754
2755 tmp = b7 ^ b2;
2756 b7 = (tmp >> 39) | (tmp << (64 - 39));
2757 b2 -= b7;
2758
2759 tmp = b5 ^ b0;
2760 b5 = (tmp >> 36) | (tmp << (64 - 36));
2761 b0 -= b5;
2762
2763 tmp = b3 ^ b6;
2764 b3 = (tmp >> 49) | (tmp << (64 - 49));
2765 b6 -= b3;
2766
2767 tmp = b1 ^ b4;
2768 b1 = (tmp >> 17) | (tmp << (64 - 17));
2769 b4 -= b1;
2770
2771 tmp = b3 ^ b0;
2772 b3 = (tmp >> 42) | (tmp << (64 - 42));
2773 b0 -= b3;
2774
2775 tmp = b5 ^ b6;
2776 b5 = (tmp >> 14) | (tmp << (64 - 14));
2777 b6 -= b5;
2778
2779 tmp = b7 ^ b4;
2780 b7 = (tmp >> 27) | (tmp << (64 - 27));
2781 b4 -= b7;
2782
2783 tmp = b1 ^ b2;
2784 b1 = (tmp >> 33) | (tmp << (64 - 33));
2785 b2 -= b1;
2786
2787 tmp = b7 ^ b6;
2788 b7 = (tmp >> 37) | (tmp << (64 - 37));
2789 b6 -= b7 + k5 + t0;
2790 b7 -= k6 + 8;
2791
2792 tmp = b5 ^ b4;
2793 b5 = (tmp >> 19) | (tmp << (64 - 19));
2794 b4 -= b5 + k3;
2795 b5 -= k4 + t2;
2796
2797 tmp = b3 ^ b2;
2798 b3 = (tmp >> 36) | (tmp << (64 - 36));
2799 b2 -= b3 + k1;
2800 b3 -= k2;
2801
2802 tmp = b1 ^ b0;
2803 b1 = (tmp >> 46) | (tmp << (64 - 46));
2804 b0 -= b1 + k8;
2805 b1 -= k0;
2806
2807 tmp = b3 ^ b4;
2808 b3 = (tmp >> 22) | (tmp << (64 - 22));
2809 b4 -= b3;
2810
2811 tmp = b5 ^ b2;
2812 b5 = (tmp >> 56) | (tmp << (64 - 56));
2813 b2 -= b5;
2814
2815 tmp = b7 ^ b0;
2816 b7 = (tmp >> 35) | (tmp << (64 - 35));
2817 b0 -= b7;
2818
2819 tmp = b1 ^ b6;
2820 b1 = (tmp >> 8) | (tmp << (64 - 8));
2821 b6 -= b1;
2822
2823 tmp = b7 ^ b2;
2824 b7 = (tmp >> 43) | (tmp << (64 - 43));
2825 b2 -= b7;
2826
2827 tmp = b5 ^ b0;
2828 b5 = (tmp >> 39) | (tmp << (64 - 39));
2829 b0 -= b5;
2830
2831 tmp = b3 ^ b6;
2832 b3 = (tmp >> 29) | (tmp << (64 - 29));
2833 b6 -= b3;
2834
2835 tmp = b1 ^ b4;
2836 b1 = (tmp >> 25) | (tmp << (64 - 25));
2837 b4 -= b1;
2838
2839 tmp = b3 ^ b0;
2840 b3 = (tmp >> 17) | (tmp << (64 - 17));
2841 b0 -= b3;
2842
2843 tmp = b5 ^ b6;
2844 b5 = (tmp >> 10) | (tmp << (64 - 10));
2845 b6 -= b5;
2846
2847 tmp = b7 ^ b4;
2848 b7 = (tmp >> 50) | (tmp << (64 - 50));
2849 b4 -= b7;
2850
2851 tmp = b1 ^ b2;
2852 b1 = (tmp >> 13) | (tmp << (64 - 13));
2853 b2 -= b1;
2854
2855 tmp = b7 ^ b6;
2856 b7 = (tmp >> 24) | (tmp << (64 - 24));
2857 b6 -= b7 + k4 + t2;
2858 b7 -= k5 + 7;
2859
2860 tmp = b5 ^ b4;
2861 b5 = (tmp >> 34) | (tmp << (64 - 34));
2862 b4 -= b5 + k2;
2863 b5 -= k3 + t1;
2864
2865 tmp = b3 ^ b2;
2866 b3 = (tmp >> 30) | (tmp << (64 - 30));
2867 b2 -= b3 + k0;
2868 b3 -= k1;
2869
2870 tmp = b1 ^ b0;
2871 b1 = (tmp >> 39) | (tmp << (64 - 39));
2872 b0 -= b1 + k7;
2873 b1 -= k8;
2874
2875 tmp = b3 ^ b4;
2876 b3 = (tmp >> 56) | (tmp << (64 - 56));
2877 b4 -= b3;
2878
2879 tmp = b5 ^ b2;
2880 b5 = (tmp >> 54) | (tmp << (64 - 54));
2881 b2 -= b5;
2882
2883 tmp = b7 ^ b0;
2884 b7 = (tmp >> 9) | (tmp << (64 - 9));
2885 b0 -= b7;
2886
2887 tmp = b1 ^ b6;
2888 b1 = (tmp >> 44) | (tmp << (64 - 44));
2889 b6 -= b1;
2890
2891 tmp = b7 ^ b2;
2892 b7 = (tmp >> 39) | (tmp << (64 - 39));
2893 b2 -= b7;
2894
2895 tmp = b5 ^ b0;
2896 b5 = (tmp >> 36) | (tmp << (64 - 36));
2897 b0 -= b5;
2898
2899 tmp = b3 ^ b6;
2900 b3 = (tmp >> 49) | (tmp << (64 - 49));
2901 b6 -= b3;
2902
2903 tmp = b1 ^ b4;
2904 b1 = (tmp >> 17) | (tmp << (64 - 17));
2905 b4 -= b1;
2906
2907 tmp = b3 ^ b0;
2908 b3 = (tmp >> 42) | (tmp << (64 - 42));
2909 b0 -= b3;
2910
2911 tmp = b5 ^ b6;
2912 b5 = (tmp >> 14) | (tmp << (64 - 14));
2913 b6 -= b5;
2914
2915 tmp = b7 ^ b4;
2916 b7 = (tmp >> 27) | (tmp << (64 - 27));
2917 b4 -= b7;
2918
2919 tmp = b1 ^ b2;
2920 b1 = (tmp >> 33) | (tmp << (64 - 33));
2921 b2 -= b1;
2922
2923 tmp = b7 ^ b6;
2924 b7 = (tmp >> 37) | (tmp << (64 - 37));
2925 b6 -= b7 + k3 + t1;
2926 b7 -= k4 + 6;
2927
2928 tmp = b5 ^ b4;
2929 b5 = (tmp >> 19) | (tmp << (64 - 19));
2930 b4 -= b5 + k1;
2931 b5 -= k2 + t0;
2932
2933 tmp = b3 ^ b2;
2934 b3 = (tmp >> 36) | (tmp << (64 - 36));
2935 b2 -= b3 + k8;
2936 b3 -= k0;
2937
2938 tmp = b1 ^ b0;
2939 b1 = (tmp >> 46) | (tmp << (64 - 46));
2940 b0 -= b1 + k6;
2941 b1 -= k7;
2942
2943 tmp = b3 ^ b4;
2944 b3 = (tmp >> 22) | (tmp << (64 - 22));
2945 b4 -= b3;
2946
2947 tmp = b5 ^ b2;
2948 b5 = (tmp >> 56) | (tmp << (64 - 56));
2949 b2 -= b5;
2950
2951 tmp = b7 ^ b0;
2952 b7 = (tmp >> 35) | (tmp << (64 - 35));
2953 b0 -= b7;
2954
2955 tmp = b1 ^ b6;
2956 b1 = (tmp >> 8) | (tmp << (64 - 8));
2957 b6 -= b1;
2958
2959 tmp = b7 ^ b2;
2960 b7 = (tmp >> 43) | (tmp << (64 - 43));
2961 b2 -= b7;
2962
2963 tmp = b5 ^ b0;
2964 b5 = (tmp >> 39) | (tmp << (64 - 39));
2965 b0 -= b5;
2966
2967 tmp = b3 ^ b6;
2968 b3 = (tmp >> 29) | (tmp << (64 - 29));
2969 b6 -= b3;
2970
2971 tmp = b1 ^ b4;
2972 b1 = (tmp >> 25) | (tmp << (64 - 25));
2973 b4 -= b1;
2974
2975 tmp = b3 ^ b0;
2976 b3 = (tmp >> 17) | (tmp << (64 - 17));
2977 b0 -= b3;
2978
2979 tmp = b5 ^ b6;
2980 b5 = (tmp >> 10) | (tmp << (64 - 10));
2981 b6 -= b5;
2982
2983 tmp = b7 ^ b4;
2984 b7 = (tmp >> 50) | (tmp << (64 - 50));
2985 b4 -= b7;
2986
2987 tmp = b1 ^ b2;
2988 b1 = (tmp >> 13) | (tmp << (64 - 13));
2989 b2 -= b1;
2990
2991 tmp = b7 ^ b6;
2992 b7 = (tmp >> 24) | (tmp << (64 - 24));
2993 b6 -= b7 + k2 + t0;
2994 b7 -= k3 + 5;
2995
2996 tmp = b5 ^ b4;
2997 b5 = (tmp >> 34) | (tmp << (64 - 34));
2998 b4 -= b5 + k0;
2999 b5 -= k1 + t2;
3000
3001 tmp = b3 ^ b2;
3002 b3 = (tmp >> 30) | (tmp << (64 - 30));
3003 b2 -= b3 + k7;
3004 b3 -= k8;
3005
3006 tmp = b1 ^ b0;
3007 b1 = (tmp >> 39) | (tmp << (64 - 39));
3008 b0 -= b1 + k5;
3009 b1 -= k6;
3010
3011 tmp = b3 ^ b4;
3012 b3 = (tmp >> 56) | (tmp << (64 - 56));
3013 b4 -= b3;
3014
3015 tmp = b5 ^ b2;
3016 b5 = (tmp >> 54) | (tmp << (64 - 54));
3017 b2 -= b5;
3018
3019 tmp = b7 ^ b0;
3020 b7 = (tmp >> 9) | (tmp << (64 - 9));
3021 b0 -= b7;
3022
3023 tmp = b1 ^ b6;
3024 b1 = (tmp >> 44) | (tmp << (64 - 44));
3025 b6 -= b1;
3026
3027 tmp = b7 ^ b2;
3028 b7 = (tmp >> 39) | (tmp << (64 - 39));
3029 b2 -= b7;
3030
3031 tmp = b5 ^ b0;
3032 b5 = (tmp >> 36) | (tmp << (64 - 36));
3033 b0 -= b5;
3034
3035 tmp = b3 ^ b6;
3036 b3 = (tmp >> 49) | (tmp << (64 - 49));
3037 b6 -= b3;
3038
3039 tmp = b1 ^ b4;
3040 b1 = (tmp >> 17) | (tmp << (64 - 17));
3041 b4 -= b1;
3042
3043 tmp = b3 ^ b0;
3044 b3 = (tmp >> 42) | (tmp << (64 - 42));
3045 b0 -= b3;
3046
3047 tmp = b5 ^ b6;
3048 b5 = (tmp >> 14) | (tmp << (64 - 14));
3049 b6 -= b5;
3050
3051 tmp = b7 ^ b4;
3052 b7 = (tmp >> 27) | (tmp << (64 - 27));
3053 b4 -= b7;
3054
3055 tmp = b1 ^ b2;
3056 b1 = (tmp >> 33) | (tmp << (64 - 33));
3057 b2 -= b1;
3058
3059 tmp = b7 ^ b6;
3060 b7 = (tmp >> 37) | (tmp << (64 - 37));
3061 b6 -= b7 + k1 + t2;
3062 b7 -= k2 + 4;
3063
3064 tmp = b5 ^ b4;
3065 b5 = (tmp >> 19) | (tmp << (64 - 19));
3066 b4 -= b5 + k8;
3067 b5 -= k0 + t1;
3068
3069 tmp = b3 ^ b2;
3070 b3 = (tmp >> 36) | (tmp << (64 - 36));
3071 b2 -= b3 + k6;
3072 b3 -= k7;
3073
3074 tmp = b1 ^ b0;
3075 b1 = (tmp >> 46) | (tmp << (64 - 46));
3076 b0 -= b1 + k4;
3077 b1 -= k5;
3078
3079 tmp = b3 ^ b4;
3080 b3 = (tmp >> 22) | (tmp << (64 - 22));
3081 b4 -= b3;
3082
3083 tmp = b5 ^ b2;
3084 b5 = (tmp >> 56) | (tmp << (64 - 56));
3085 b2 -= b5;
3086
3087 tmp = b7 ^ b0;
3088 b7 = (tmp >> 35) | (tmp << (64 - 35));
3089 b0 -= b7;
3090
3091 tmp = b1 ^ b6;
3092 b1 = (tmp >> 8) | (tmp << (64 - 8));
3093 b6 -= b1;
3094
3095 tmp = b7 ^ b2;
3096 b7 = (tmp >> 43) | (tmp << (64 - 43));
3097 b2 -= b7;
3098
3099 tmp = b5 ^ b0;
3100 b5 = (tmp >> 39) | (tmp << (64 - 39));
3101 b0 -= b5;
3102
3103 tmp = b3 ^ b6;
3104 b3 = (tmp >> 29) | (tmp << (64 - 29));
3105 b6 -= b3;
3106
3107 tmp = b1 ^ b4;
3108 b1 = (tmp >> 25) | (tmp << (64 - 25));
3109 b4 -= b1;
3110
3111 tmp = b3 ^ b0;
3112 b3 = (tmp >> 17) | (tmp << (64 - 17));
3113 b0 -= b3;
3114
3115 tmp = b5 ^ b6;
3116 b5 = (tmp >> 10) | (tmp << (64 - 10));
3117 b6 -= b5;
3118
3119 tmp = b7 ^ b4;
3120 b7 = (tmp >> 50) | (tmp << (64 - 50));
3121 b4 -= b7;
3122
3123 tmp = b1 ^ b2;
3124 b1 = (tmp >> 13) | (tmp << (64 - 13));
3125 b2 -= b1;
3126
3127 tmp = b7 ^ b6;
3128 b7 = (tmp >> 24) | (tmp << (64 - 24));
3129 b6 -= b7 + k0 + t1;
3130 b7 -= k1 + 3;
3131
3132 tmp = b5 ^ b4;
3133 b5 = (tmp >> 34) | (tmp << (64 - 34));
3134 b4 -= b5 + k7;
3135 b5 -= k8 + t0;
3136
3137 tmp = b3 ^ b2;
3138 b3 = (tmp >> 30) | (tmp << (64 - 30));
3139 b2 -= b3 + k5;
3140 b3 -= k6;
3141
3142 tmp = b1 ^ b0;
3143 b1 = (tmp >> 39) | (tmp << (64 - 39));
3144 b0 -= b1 + k3;
3145 b1 -= k4;
3146
3147 tmp = b3 ^ b4;
3148 b3 = (tmp >> 56) | (tmp << (64 - 56));
3149 b4 -= b3;
3150
3151 tmp = b5 ^ b2;
3152 b5 = (tmp >> 54) | (tmp << (64 - 54));
3153 b2 -= b5;
3154
3155 tmp = b7 ^ b0;
3156 b7 = (tmp >> 9) | (tmp << (64 - 9));
3157 b0 -= b7;
3158
3159 tmp = b1 ^ b6;
3160 b1 = (tmp >> 44) | (tmp << (64 - 44));
3161 b6 -= b1;
3162
3163 tmp = b7 ^ b2;
3164 b7 = (tmp >> 39) | (tmp << (64 - 39));
3165 b2 -= b7;
3166
3167 tmp = b5 ^ b0;
3168 b5 = (tmp >> 36) | (tmp << (64 - 36));
3169 b0 -= b5;
3170
3171 tmp = b3 ^ b6;
3172 b3 = (tmp >> 49) | (tmp << (64 - 49));
3173 b6 -= b3;
3174
3175 tmp = b1 ^ b4;
3176 b1 = (tmp >> 17) | (tmp << (64 - 17));
3177 b4 -= b1;
3178
3179 tmp = b3 ^ b0;
3180 b3 = (tmp >> 42) | (tmp << (64 - 42));
3181 b0 -= b3;
3182
3183 tmp = b5 ^ b6;
3184 b5 = (tmp >> 14) | (tmp << (64 - 14));
3185 b6 -= b5;
3186
3187 tmp = b7 ^ b4;
3188 b7 = (tmp >> 27) | (tmp << (64 - 27));
3189 b4 -= b7;
3190
3191 tmp = b1 ^ b2;
3192 b1 = (tmp >> 33) | (tmp << (64 - 33));
3193 b2 -= b1;
3194
3195 tmp = b7 ^ b6;
3196 b7 = (tmp >> 37) | (tmp << (64 - 37));
3197 b6 -= b7 + k8 + t0;
3198 b7 -= k0 + 2;
3199
3200 tmp = b5 ^ b4;
3201 b5 = (tmp >> 19) | (tmp << (64 - 19));
3202 b4 -= b5 + k6;
3203 b5 -= k7 + t2;
3204
3205 tmp = b3 ^ b2;
3206 b3 = (tmp >> 36) | (tmp << (64 - 36));
3207 b2 -= b3 + k4;
3208 b3 -= k5;
3209
3210 tmp = b1 ^ b0;
3211 b1 = (tmp >> 46) | (tmp << (64 - 46));
3212 b0 -= b1 + k2;
3213 b1 -= k3;
3214
3215 tmp = b3 ^ b4;
3216 b3 = (tmp >> 22) | (tmp << (64 - 22));
3217 b4 -= b3;
3218
3219 tmp = b5 ^ b2;
3220 b5 = (tmp >> 56) | (tmp << (64 - 56));
3221 b2 -= b5;
3222
3223 tmp = b7 ^ b0;
3224 b7 = (tmp >> 35) | (tmp << (64 - 35));
3225 b0 -= b7;
3226
3227 tmp = b1 ^ b6;
3228 b1 = (tmp >> 8) | (tmp << (64 - 8));
3229 b6 -= b1;
3230
3231 tmp = b7 ^ b2;
3232 b7 = (tmp >> 43) | (tmp << (64 - 43));
3233 b2 -= b7;
3234
3235 tmp = b5 ^ b0;
3236 b5 = (tmp >> 39) | (tmp << (64 - 39));
3237 b0 -= b5;
3238
3239 tmp = b3 ^ b6;
3240 b3 = (tmp >> 29) | (tmp << (64 - 29));
3241 b6 -= b3;
3242
3243 tmp = b1 ^ b4;
3244 b1 = (tmp >> 25) | (tmp << (64 - 25));
3245 b4 -= b1;
3246
3247 tmp = b3 ^ b0;
3248 b3 = (tmp >> 17) | (tmp << (64 - 17));
3249 b0 -= b3;
3250
3251 tmp = b5 ^ b6;
3252 b5 = (tmp >> 10) | (tmp << (64 - 10));
3253 b6 -= b5;
3254
3255 tmp = b7 ^ b4;
3256 b7 = (tmp >> 50) | (tmp << (64 - 50));
3257 b4 -= b7;
3258
3259 tmp = b1 ^ b2;
3260 b1 = (tmp >> 13) | (tmp << (64 - 13));
3261 b2 -= b1;
3262
3263 tmp = b7 ^ b6;
3264 b7 = (tmp >> 24) | (tmp << (64 - 24));
3265 b6 -= b7 + k7 + t2;
3266 b7 -= k8 + 1;
3267
3268 tmp = b5 ^ b4;
3269 b5 = (tmp >> 34) | (tmp << (64 - 34));
3270 b4 -= b5 + k5;
3271 b5 -= k6 + t1;
3272
3273 tmp = b3 ^ b2;
3274 b3 = (tmp >> 30) | (tmp << (64 - 30));
3275 b2 -= b3 + k3;
3276 b3 -= k4;
3277
3278 tmp = b1 ^ b0;
3279 b1 = (tmp >> 39) | (tmp << (64 - 39));
3280 b0 -= b1 + k1;
3281 b1 -= k2;
3282
3283 tmp = b3 ^ b4;
3284 b3 = (tmp >> 56) | (tmp << (64 - 56));
3285 b4 -= b3;
3286
3287 tmp = b5 ^ b2;
3288 b5 = (tmp >> 54) | (tmp << (64 - 54));
3289 b2 -= b5;
3290
3291 tmp = b7 ^ b0;
3292 b7 = (tmp >> 9) | (tmp << (64 - 9));
3293 b0 -= b7;
3294
3295 tmp = b1 ^ b6;
3296 b1 = (tmp >> 44) | (tmp << (64 - 44));
3297 b6 -= b1;
3298
3299 tmp = b7 ^ b2;
3300 b7 = (tmp >> 39) | (tmp << (64 - 39));
3301 b2 -= b7;
3302
3303 tmp = b5 ^ b0;
3304 b5 = (tmp >> 36) | (tmp << (64 - 36));
3305 b0 -= b5;
3306
3307 tmp = b3 ^ b6;
3308 b3 = (tmp >> 49) | (tmp << (64 - 49));
3309 b6 -= b3;
3310
3311 tmp = b1 ^ b4;
3312 b1 = (tmp >> 17) | (tmp << (64 - 17));
3313 b4 -= b1;
3314
3315 tmp = b3 ^ b0;
3316 b3 = (tmp >> 42) | (tmp << (64 - 42));
3317 b0 -= b3;
3318
3319 tmp = b5 ^ b6;
3320 b5 = (tmp >> 14) | (tmp << (64 - 14));
3321 b6 -= b5;
3322
3323 tmp = b7 ^ b4;
3324 b7 = (tmp >> 27) | (tmp << (64 - 27));
3325 b4 -= b7;
3326
3327 tmp = b1 ^ b2;
3328 b1 = (tmp >> 33) | (tmp << (64 - 33));
3329 b2 -= b1;
3330
3331 tmp = b7 ^ b6;
3332 b7 = (tmp >> 37) | (tmp << (64 - 37));
3333 b6 -= b7 + k6 + t1;
3334 b7 -= k7;
3335
3336 tmp = b5 ^ b4;
3337 b5 = (tmp >> 19) | (tmp << (64 - 19));
3338 b4 -= b5 + k4;
3339 b5 -= k5 + t0;
3340
3341 tmp = b3 ^ b2;
3342 b3 = (tmp >> 36) | (tmp << (64 - 36));
3343 b2 -= b3 + k2;
3344 b3 -= k3;
3345
3346 tmp = b1 ^ b0;
3347 b1 = (tmp >> 46) | (tmp << (64 - 46));
3348 b0 -= b1 + k0;
3349 b1 -= k1;
3350
3351 output[0] = b0;
3352 output[1] = b1;
3353 output[2] = b2;
3354 output[3] = b3;
3355
3356 output[7] = b7;
3357 output[6] = b6;
3358 output[5] = b5;
3359 output[4] = b4;
3360 }
3361
3362 void threefish_encrypt_1024(struct threefish_key *key_ctx, u64 *input,
3363 u64 *output)
3364 {
3365 u64 b0 = input[0], b1 = input[1],
3366 b2 = input[2], b3 = input[3],
3367 b4 = input[4], b5 = input[5],
3368 b6 = input[6], b7 = input[7],
3369 b8 = input[8], b9 = input[9],
3370 b10 = input[10], b11 = input[11],
3371 b12 = input[12], b13 = input[13],
3372 b14 = input[14], b15 = input[15];
3373 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
3374 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
3375 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
3376 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
3377 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
3378 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
3379 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
3380 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
3381 k16 = key_ctx->key[16];
3382 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
3383 t2 = key_ctx->tweak[2];
3384
3385 b1 += k1;
3386 b0 += b1 + k0;
3387 b1 = rol64(b1, 24) ^ b0;
3388
3389 b3 += k3;
3390 b2 += b3 + k2;
3391 b3 = rol64(b3, 13) ^ b2;
3392
3393 b5 += k5;
3394 b4 += b5 + k4;
3395 b5 = rol64(b5, 8) ^ b4;
3396
3397 b7 += k7;
3398 b6 += b7 + k6;
3399 b7 = rol64(b7, 47) ^ b6;
3400
3401 b9 += k9;
3402 b8 += b9 + k8;
3403 b9 = rol64(b9, 8) ^ b8;
3404
3405 b11 += k11;
3406 b10 += b11 + k10;
3407 b11 = rol64(b11, 17) ^ b10;
3408
3409 b13 += k13 + t0;
3410 b12 += b13 + k12;
3411 b13 = rol64(b13, 22) ^ b12;
3412
3413 b15 += k15;
3414 b14 += b15 + k14 + t1;
3415 b15 = rol64(b15, 37) ^ b14;
3416
3417 b0 += b9;
3418 b9 = rol64(b9, 38) ^ b0;
3419
3420 b2 += b13;
3421 b13 = rol64(b13, 19) ^ b2;
3422
3423 b6 += b11;
3424 b11 = rol64(b11, 10) ^ b6;
3425
3426 b4 += b15;
3427 b15 = rol64(b15, 55) ^ b4;
3428
3429 b10 += b7;
3430 b7 = rol64(b7, 49) ^ b10;
3431
3432 b12 += b3;
3433 b3 = rol64(b3, 18) ^ b12;
3434
3435 b14 += b5;
3436 b5 = rol64(b5, 23) ^ b14;
3437
3438 b8 += b1;
3439 b1 = rol64(b1, 52) ^ b8;
3440
3441 b0 += b7;
3442 b7 = rol64(b7, 33) ^ b0;
3443
3444 b2 += b5;
3445 b5 = rol64(b5, 4) ^ b2;
3446
3447 b4 += b3;
3448 b3 = rol64(b3, 51) ^ b4;
3449
3450 b6 += b1;
3451 b1 = rol64(b1, 13) ^ b6;
3452
3453 b12 += b15;
3454 b15 = rol64(b15, 34) ^ b12;
3455
3456 b14 += b13;
3457 b13 = rol64(b13, 41) ^ b14;
3458
3459 b8 += b11;
3460 b11 = rol64(b11, 59) ^ b8;
3461
3462 b10 += b9;
3463 b9 = rol64(b9, 17) ^ b10;
3464
3465 b0 += b15;
3466 b15 = rol64(b15, 5) ^ b0;
3467
3468 b2 += b11;
3469 b11 = rol64(b11, 20) ^ b2;
3470
3471 b6 += b13;
3472 b13 = rol64(b13, 48) ^ b6;
3473
3474 b4 += b9;
3475 b9 = rol64(b9, 41) ^ b4;
3476
3477 b14 += b1;
3478 b1 = rol64(b1, 47) ^ b14;
3479
3480 b8 += b5;
3481 b5 = rol64(b5, 28) ^ b8;
3482
3483 b10 += b3;
3484 b3 = rol64(b3, 16) ^ b10;
3485
3486 b12 += b7;
3487 b7 = rol64(b7, 25) ^ b12;
3488
3489 b1 += k2;
3490 b0 += b1 + k1;
3491 b1 = rol64(b1, 41) ^ b0;
3492
3493 b3 += k4;
3494 b2 += b3 + k3;
3495 b3 = rol64(b3, 9) ^ b2;
3496
3497 b5 += k6;
3498 b4 += b5 + k5;
3499 b5 = rol64(b5, 37) ^ b4;
3500
3501 b7 += k8;
3502 b6 += b7 + k7;
3503 b7 = rol64(b7, 31) ^ b6;
3504
3505 b9 += k10;
3506 b8 += b9 + k9;
3507 b9 = rol64(b9, 12) ^ b8;
3508
3509 b11 += k12;
3510 b10 += b11 + k11;
3511 b11 = rol64(b11, 47) ^ b10;
3512
3513 b13 += k14 + t1;
3514 b12 += b13 + k13;
3515 b13 = rol64(b13, 44) ^ b12;
3516
3517 b15 += k16 + 1;
3518 b14 += b15 + k15 + t2;
3519 b15 = rol64(b15, 30) ^ b14;
3520
3521 b0 += b9;
3522 b9 = rol64(b9, 16) ^ b0;
3523
3524 b2 += b13;
3525 b13 = rol64(b13, 34) ^ b2;
3526
3527 b6 += b11;
3528 b11 = rol64(b11, 56) ^ b6;
3529
3530 b4 += b15;
3531 b15 = rol64(b15, 51) ^ b4;
3532
3533 b10 += b7;
3534 b7 = rol64(b7, 4) ^ b10;
3535
3536 b12 += b3;
3537 b3 = rol64(b3, 53) ^ b12;
3538
3539 b14 += b5;
3540 b5 = rol64(b5, 42) ^ b14;
3541
3542 b8 += b1;
3543 b1 = rol64(b1, 41) ^ b8;
3544
3545 b0 += b7;
3546 b7 = rol64(b7, 31) ^ b0;
3547
3548 b2 += b5;
3549 b5 = rol64(b5, 44) ^ b2;
3550
3551 b4 += b3;
3552 b3 = rol64(b3, 47) ^ b4;
3553
3554 b6 += b1;
3555 b1 = rol64(b1, 46) ^ b6;
3556
3557 b12 += b15;
3558 b15 = rol64(b15, 19) ^ b12;
3559
3560 b14 += b13;
3561 b13 = rol64(b13, 42) ^ b14;
3562
3563 b8 += b11;
3564 b11 = rol64(b11, 44) ^ b8;
3565
3566 b10 += b9;
3567 b9 = rol64(b9, 25) ^ b10;
3568
3569 b0 += b15;
3570 b15 = rol64(b15, 9) ^ b0;
3571
3572 b2 += b11;
3573 b11 = rol64(b11, 48) ^ b2;
3574
3575 b6 += b13;
3576 b13 = rol64(b13, 35) ^ b6;
3577
3578 b4 += b9;
3579 b9 = rol64(b9, 52) ^ b4;
3580
3581 b14 += b1;
3582 b1 = rol64(b1, 23) ^ b14;
3583
3584 b8 += b5;
3585 b5 = rol64(b5, 31) ^ b8;
3586
3587 b10 += b3;
3588 b3 = rol64(b3, 37) ^ b10;
3589
3590 b12 += b7;
3591 b7 = rol64(b7, 20) ^ b12;
3592
3593 b1 += k3;
3594 b0 += b1 + k2;
3595 b1 = rol64(b1, 24) ^ b0;
3596
3597 b3 += k5;
3598 b2 += b3 + k4;
3599 b3 = rol64(b3, 13) ^ b2;
3600
3601 b5 += k7;
3602 b4 += b5 + k6;
3603 b5 = rol64(b5, 8) ^ b4;
3604
3605 b7 += k9;
3606 b6 += b7 + k8;
3607 b7 = rol64(b7, 47) ^ b6;
3608
3609 b9 += k11;
3610 b8 += b9 + k10;
3611 b9 = rol64(b9, 8) ^ b8;
3612
3613 b11 += k13;
3614 b10 += b11 + k12;
3615 b11 = rol64(b11, 17) ^ b10;
3616
3617 b13 += k15 + t2;
3618 b12 += b13 + k14;
3619 b13 = rol64(b13, 22) ^ b12;
3620
3621 b15 += k0 + 2;
3622 b14 += b15 + k16 + t0;
3623 b15 = rol64(b15, 37) ^ b14;
3624
3625 b0 += b9;
3626 b9 = rol64(b9, 38) ^ b0;
3627
3628 b2 += b13;
3629 b13 = rol64(b13, 19) ^ b2;
3630
3631 b6 += b11;
3632 b11 = rol64(b11, 10) ^ b6;
3633
3634 b4 += b15;
3635 b15 = rol64(b15, 55) ^ b4;
3636
3637 b10 += b7;
3638 b7 = rol64(b7, 49) ^ b10;
3639
3640 b12 += b3;
3641 b3 = rol64(b3, 18) ^ b12;
3642
3643 b14 += b5;
3644 b5 = rol64(b5, 23) ^ b14;
3645
3646 b8 += b1;
3647 b1 = rol64(b1, 52) ^ b8;
3648
3649 b0 += b7;
3650 b7 = rol64(b7, 33) ^ b0;
3651
3652 b2 += b5;
3653 b5 = rol64(b5, 4) ^ b2;
3654
3655 b4 += b3;
3656 b3 = rol64(b3, 51) ^ b4;
3657
3658 b6 += b1;
3659 b1 = rol64(b1, 13) ^ b6;
3660
3661 b12 += b15;
3662 b15 = rol64(b15, 34) ^ b12;
3663
3664 b14 += b13;
3665 b13 = rol64(b13, 41) ^ b14;
3666
3667 b8 += b11;
3668 b11 = rol64(b11, 59) ^ b8;
3669
3670 b10 += b9;
3671 b9 = rol64(b9, 17) ^ b10;
3672
3673 b0 += b15;
3674 b15 = rol64(b15, 5) ^ b0;
3675
3676 b2 += b11;
3677 b11 = rol64(b11, 20) ^ b2;
3678
3679 b6 += b13;
3680 b13 = rol64(b13, 48) ^ b6;
3681
3682 b4 += b9;
3683 b9 = rol64(b9, 41) ^ b4;
3684
3685 b14 += b1;
3686 b1 = rol64(b1, 47) ^ b14;
3687
3688 b8 += b5;
3689 b5 = rol64(b5, 28) ^ b8;
3690
3691 b10 += b3;
3692 b3 = rol64(b3, 16) ^ b10;
3693
3694 b12 += b7;
3695 b7 = rol64(b7, 25) ^ b12;
3696
3697 b1 += k4;
3698 b0 += b1 + k3;
3699 b1 = rol64(b1, 41) ^ b0;
3700
3701 b3 += k6;
3702 b2 += b3 + k5;
3703 b3 = rol64(b3, 9) ^ b2;
3704
3705 b5 += k8;
3706 b4 += b5 + k7;
3707 b5 = rol64(b5, 37) ^ b4;
3708
3709 b7 += k10;
3710 b6 += b7 + k9;
3711 b7 = rol64(b7, 31) ^ b6;
3712
3713 b9 += k12;
3714 b8 += b9 + k11;
3715 b9 = rol64(b9, 12) ^ b8;
3716
3717 b11 += k14;
3718 b10 += b11 + k13;
3719 b11 = rol64(b11, 47) ^ b10;
3720
3721 b13 += k16 + t0;
3722 b12 += b13 + k15;
3723 b13 = rol64(b13, 44) ^ b12;
3724
3725 b15 += k1 + 3;
3726 b14 += b15 + k0 + t1;
3727 b15 = rol64(b15, 30) ^ b14;
3728
3729 b0 += b9;
3730 b9 = rol64(b9, 16) ^ b0;
3731
3732 b2 += b13;
3733 b13 = rol64(b13, 34) ^ b2;
3734
3735 b6 += b11;
3736 b11 = rol64(b11, 56) ^ b6;
3737
3738 b4 += b15;
3739 b15 = rol64(b15, 51) ^ b4;
3740
3741 b10 += b7;
3742 b7 = rol64(b7, 4) ^ b10;
3743
3744 b12 += b3;
3745 b3 = rol64(b3, 53) ^ b12;
3746
3747 b14 += b5;
3748 b5 = rol64(b5, 42) ^ b14;
3749
3750 b8 += b1;
3751 b1 = rol64(b1, 41) ^ b8;
3752
3753 b0 += b7;
3754 b7 = rol64(b7, 31) ^ b0;
3755
3756 b2 += b5;
3757 b5 = rol64(b5, 44) ^ b2;
3758
3759 b4 += b3;
3760 b3 = rol64(b3, 47) ^ b4;
3761
3762 b6 += b1;
3763 b1 = rol64(b1, 46) ^ b6;
3764
3765 b12 += b15;
3766 b15 = rol64(b15, 19) ^ b12;
3767
3768 b14 += b13;
3769 b13 = rol64(b13, 42) ^ b14;
3770
3771 b8 += b11;
3772 b11 = rol64(b11, 44) ^ b8;
3773
3774 b10 += b9;
3775 b9 = rol64(b9, 25) ^ b10;
3776
3777 b0 += b15;
3778 b15 = rol64(b15, 9) ^ b0;
3779
3780 b2 += b11;
3781 b11 = rol64(b11, 48) ^ b2;
3782
3783 b6 += b13;
3784 b13 = rol64(b13, 35) ^ b6;
3785
3786 b4 += b9;
3787 b9 = rol64(b9, 52) ^ b4;
3788
3789 b14 += b1;
3790 b1 = rol64(b1, 23) ^ b14;
3791
3792 b8 += b5;
3793 b5 = rol64(b5, 31) ^ b8;
3794
3795 b10 += b3;
3796 b3 = rol64(b3, 37) ^ b10;
3797
3798 b12 += b7;
3799 b7 = rol64(b7, 20) ^ b12;
3800
3801 b1 += k5;
3802 b0 += b1 + k4;
3803 b1 = rol64(b1, 24) ^ b0;
3804
3805 b3 += k7;
3806 b2 += b3 + k6;
3807 b3 = rol64(b3, 13) ^ b2;
3808
3809 b5 += k9;
3810 b4 += b5 + k8;
3811 b5 = rol64(b5, 8) ^ b4;
3812
3813 b7 += k11;
3814 b6 += b7 + k10;
3815 b7 = rol64(b7, 47) ^ b6;
3816
3817 b9 += k13;
3818 b8 += b9 + k12;
3819 b9 = rol64(b9, 8) ^ b8;
3820
3821 b11 += k15;
3822 b10 += b11 + k14;
3823 b11 = rol64(b11, 17) ^ b10;
3824
3825 b13 += k0 + t1;
3826 b12 += b13 + k16;
3827 b13 = rol64(b13, 22) ^ b12;
3828
3829 b15 += k2 + 4;
3830 b14 += b15 + k1 + t2;
3831 b15 = rol64(b15, 37) ^ b14;
3832
3833 b0 += b9;
3834 b9 = rol64(b9, 38) ^ b0;
3835
3836 b2 += b13;
3837 b13 = rol64(b13, 19) ^ b2;
3838
3839 b6 += b11;
3840 b11 = rol64(b11, 10) ^ b6;
3841
3842 b4 += b15;
3843 b15 = rol64(b15, 55) ^ b4;
3844
3845 b10 += b7;
3846 b7 = rol64(b7, 49) ^ b10;
3847
3848 b12 += b3;
3849 b3 = rol64(b3, 18) ^ b12;
3850
3851 b14 += b5;
3852 b5 = rol64(b5, 23) ^ b14;
3853
3854 b8 += b1;
3855 b1 = rol64(b1, 52) ^ b8;
3856
3857 b0 += b7;
3858 b7 = rol64(b7, 33) ^ b0;
3859
3860 b2 += b5;
3861 b5 = rol64(b5, 4) ^ b2;
3862
3863 b4 += b3;
3864 b3 = rol64(b3, 51) ^ b4;
3865
3866 b6 += b1;
3867 b1 = rol64(b1, 13) ^ b6;
3868
3869 b12 += b15;
3870 b15 = rol64(b15, 34) ^ b12;
3871
3872 b14 += b13;
3873 b13 = rol64(b13, 41) ^ b14;
3874
3875 b8 += b11;
3876 b11 = rol64(b11, 59) ^ b8;
3877
3878 b10 += b9;
3879 b9 = rol64(b9, 17) ^ b10;
3880
3881 b0 += b15;
3882 b15 = rol64(b15, 5) ^ b0;
3883
3884 b2 += b11;
3885 b11 = rol64(b11, 20) ^ b2;
3886
3887 b6 += b13;
3888 b13 = rol64(b13, 48) ^ b6;
3889
3890 b4 += b9;
3891 b9 = rol64(b9, 41) ^ b4;
3892
3893 b14 += b1;
3894 b1 = rol64(b1, 47) ^ b14;
3895
3896 b8 += b5;
3897 b5 = rol64(b5, 28) ^ b8;
3898
3899 b10 += b3;
3900 b3 = rol64(b3, 16) ^ b10;
3901
3902 b12 += b7;
3903 b7 = rol64(b7, 25) ^ b12;
3904
3905 b1 += k6;
3906 b0 += b1 + k5;
3907 b1 = rol64(b1, 41) ^ b0;
3908
3909 b3 += k8;
3910 b2 += b3 + k7;
3911 b3 = rol64(b3, 9) ^ b2;
3912
3913 b5 += k10;
3914 b4 += b5 + k9;
3915 b5 = rol64(b5, 37) ^ b4;
3916
3917 b7 += k12;
3918 b6 += b7 + k11;
3919 b7 = rol64(b7, 31) ^ b6;
3920
3921 b9 += k14;
3922 b8 += b9 + k13;
3923 b9 = rol64(b9, 12) ^ b8;
3924
3925 b11 += k16;
3926 b10 += b11 + k15;
3927 b11 = rol64(b11, 47) ^ b10;
3928
3929 b13 += k1 + t2;
3930 b12 += b13 + k0;
3931 b13 = rol64(b13, 44) ^ b12;
3932
3933 b15 += k3 + 5;
3934 b14 += b15 + k2 + t0;
3935 b15 = rol64(b15, 30) ^ b14;
3936
3937 b0 += b9;
3938 b9 = rol64(b9, 16) ^ b0;
3939
3940 b2 += b13;
3941 b13 = rol64(b13, 34) ^ b2;
3942
3943 b6 += b11;
3944 b11 = rol64(b11, 56) ^ b6;
3945
3946 b4 += b15;
3947 b15 = rol64(b15, 51) ^ b4;
3948
3949 b10 += b7;
3950 b7 = rol64(b7, 4) ^ b10;
3951
3952 b12 += b3;
3953 b3 = rol64(b3, 53) ^ b12;
3954
3955 b14 += b5;
3956 b5 = rol64(b5, 42) ^ b14;
3957
3958 b8 += b1;
3959 b1 = rol64(b1, 41) ^ b8;
3960
3961 b0 += b7;
3962 b7 = rol64(b7, 31) ^ b0;
3963
3964 b2 += b5;
3965 b5 = rol64(b5, 44) ^ b2;
3966
3967 b4 += b3;
3968 b3 = rol64(b3, 47) ^ b4;
3969
3970 b6 += b1;
3971 b1 = rol64(b1, 46) ^ b6;
3972
3973 b12 += b15;
3974 b15 = rol64(b15, 19) ^ b12;
3975
3976 b14 += b13;
3977 b13 = rol64(b13, 42) ^ b14;
3978
3979 b8 += b11;
3980 b11 = rol64(b11, 44) ^ b8;
3981
3982 b10 += b9;
3983 b9 = rol64(b9, 25) ^ b10;
3984
3985 b0 += b15;
3986 b15 = rol64(b15, 9) ^ b0;
3987
3988 b2 += b11;
3989 b11 = rol64(b11, 48) ^ b2;
3990
3991 b6 += b13;
3992 b13 = rol64(b13, 35) ^ b6;
3993
3994 b4 += b9;
3995 b9 = rol64(b9, 52) ^ b4;
3996
3997 b14 += b1;
3998 b1 = rol64(b1, 23) ^ b14;
3999
4000 b8 += b5;
4001 b5 = rol64(b5, 31) ^ b8;
4002
4003 b10 += b3;
4004 b3 = rol64(b3, 37) ^ b10;
4005
4006 b12 += b7;
4007 b7 = rol64(b7, 20) ^ b12;
4008
4009 b1 += k7;
4010 b0 += b1 + k6;
4011 b1 = rol64(b1, 24) ^ b0;
4012
4013 b3 += k9;
4014 b2 += b3 + k8;
4015 b3 = rol64(b3, 13) ^ b2;
4016
4017 b5 += k11;
4018 b4 += b5 + k10;
4019 b5 = rol64(b5, 8) ^ b4;
4020
4021 b7 += k13;
4022 b6 += b7 + k12;
4023 b7 = rol64(b7, 47) ^ b6;
4024
4025 b9 += k15;
4026 b8 += b9 + k14;
4027 b9 = rol64(b9, 8) ^ b8;
4028
4029 b11 += k0;
4030 b10 += b11 + k16;
4031 b11 = rol64(b11, 17) ^ b10;
4032
4033 b13 += k2 + t0;
4034 b12 += b13 + k1;
4035 b13 = rol64(b13, 22) ^ b12;
4036
4037 b15 += k4 + 6;
4038 b14 += b15 + k3 + t1;
4039 b15 = rol64(b15, 37) ^ b14;
4040
4041 b0 += b9;
4042 b9 = rol64(b9, 38) ^ b0;
4043
4044 b2 += b13;
4045 b13 = rol64(b13, 19) ^ b2;
4046
4047 b6 += b11;
4048 b11 = rol64(b11, 10) ^ b6;
4049
4050 b4 += b15;
4051 b15 = rol64(b15, 55) ^ b4;
4052
4053 b10 += b7;
4054 b7 = rol64(b7, 49) ^ b10;
4055
4056 b12 += b3;
4057 b3 = rol64(b3, 18) ^ b12;
4058
4059 b14 += b5;
4060 b5 = rol64(b5, 23) ^ b14;
4061
4062 b8 += b1;
4063 b1 = rol64(b1, 52) ^ b8;
4064
4065 b0 += b7;
4066 b7 = rol64(b7, 33) ^ b0;
4067
4068 b2 += b5;
4069 b5 = rol64(b5, 4) ^ b2;
4070
4071 b4 += b3;
4072 b3 = rol64(b3, 51) ^ b4;
4073
4074 b6 += b1;
4075 b1 = rol64(b1, 13) ^ b6;
4076
4077 b12 += b15;
4078 b15 = rol64(b15, 34) ^ b12;
4079
4080 b14 += b13;
4081 b13 = rol64(b13, 41) ^ b14;
4082
4083 b8 += b11;
4084 b11 = rol64(b11, 59) ^ b8;
4085
4086 b10 += b9;
4087 b9 = rol64(b9, 17) ^ b10;
4088
4089 b0 += b15;
4090 b15 = rol64(b15, 5) ^ b0;
4091
4092 b2 += b11;
4093 b11 = rol64(b11, 20) ^ b2;
4094
4095 b6 += b13;
4096 b13 = rol64(b13, 48) ^ b6;
4097
4098 b4 += b9;
4099 b9 = rol64(b9, 41) ^ b4;
4100
4101 b14 += b1;
4102 b1 = rol64(b1, 47) ^ b14;
4103
4104 b8 += b5;
4105 b5 = rol64(b5, 28) ^ b8;
4106
4107 b10 += b3;
4108 b3 = rol64(b3, 16) ^ b10;
4109
4110 b12 += b7;
4111 b7 = rol64(b7, 25) ^ b12;
4112
4113 b1 += k8;
4114 b0 += b1 + k7;
4115 b1 = rol64(b1, 41) ^ b0;
4116
4117 b3 += k10;
4118 b2 += b3 + k9;
4119 b3 = rol64(b3, 9) ^ b2;
4120
4121 b5 += k12;
4122 b4 += b5 + k11;
4123 b5 = rol64(b5, 37) ^ b4;
4124
4125 b7 += k14;
4126 b6 += b7 + k13;
4127 b7 = rol64(b7, 31) ^ b6;
4128
4129 b9 += k16;
4130 b8 += b9 + k15;
4131 b9 = rol64(b9, 12) ^ b8;
4132
4133 b11 += k1;
4134 b10 += b11 + k0;
4135 b11 = rol64(b11, 47) ^ b10;
4136
4137 b13 += k3 + t1;
4138 b12 += b13 + k2;
4139 b13 = rol64(b13, 44) ^ b12;
4140
4141 b15 += k5 + 7;
4142 b14 += b15 + k4 + t2;
4143 b15 = rol64(b15, 30) ^ b14;
4144
4145 b0 += b9;
4146 b9 = rol64(b9, 16) ^ b0;
4147
4148 b2 += b13;
4149 b13 = rol64(b13, 34) ^ b2;
4150
4151 b6 += b11;
4152 b11 = rol64(b11, 56) ^ b6;
4153
4154 b4 += b15;
4155 b15 = rol64(b15, 51) ^ b4;
4156
4157 b10 += b7;
4158 b7 = rol64(b7, 4) ^ b10;
4159
4160 b12 += b3;
4161 b3 = rol64(b3, 53) ^ b12;
4162
4163 b14 += b5;
4164 b5 = rol64(b5, 42) ^ b14;
4165
4166 b8 += b1;
4167 b1 = rol64(b1, 41) ^ b8;
4168
4169 b0 += b7;
4170 b7 = rol64(b7, 31) ^ b0;
4171
4172 b2 += b5;
4173 b5 = rol64(b5, 44) ^ b2;
4174
4175 b4 += b3;
4176 b3 = rol64(b3, 47) ^ b4;
4177
4178 b6 += b1;
4179 b1 = rol64(b1, 46) ^ b6;
4180
4181 b12 += b15;
4182 b15 = rol64(b15, 19) ^ b12;
4183
4184 b14 += b13;
4185 b13 = rol64(b13, 42) ^ b14;
4186
4187 b8 += b11;
4188 b11 = rol64(b11, 44) ^ b8;
4189
4190 b10 += b9;
4191 b9 = rol64(b9, 25) ^ b10;
4192
4193 b0 += b15;
4194 b15 = rol64(b15, 9) ^ b0;
4195
4196 b2 += b11;
4197 b11 = rol64(b11, 48) ^ b2;
4198
4199 b6 += b13;
4200 b13 = rol64(b13, 35) ^ b6;
4201
4202 b4 += b9;
4203 b9 = rol64(b9, 52) ^ b4;
4204
4205 b14 += b1;
4206 b1 = rol64(b1, 23) ^ b14;
4207
4208 b8 += b5;
4209 b5 = rol64(b5, 31) ^ b8;
4210
4211 b10 += b3;
4212 b3 = rol64(b3, 37) ^ b10;
4213
4214 b12 += b7;
4215 b7 = rol64(b7, 20) ^ b12;
4216
4217 b1 += k9;
4218 b0 += b1 + k8;
4219 b1 = rol64(b1, 24) ^ b0;
4220
4221 b3 += k11;
4222 b2 += b3 + k10;
4223 b3 = rol64(b3, 13) ^ b2;
4224
4225 b5 += k13;
4226 b4 += b5 + k12;
4227 b5 = rol64(b5, 8) ^ b4;
4228
4229 b7 += k15;
4230 b6 += b7 + k14;
4231 b7 = rol64(b7, 47) ^ b6;
4232
4233 b9 += k0;
4234 b8 += b9 + k16;
4235 b9 = rol64(b9, 8) ^ b8;
4236
4237 b11 += k2;
4238 b10 += b11 + k1;
4239 b11 = rol64(b11, 17) ^ b10;
4240
4241 b13 += k4 + t2;
4242 b12 += b13 + k3;
4243 b13 = rol64(b13, 22) ^ b12;
4244
4245 b15 += k6 + 8;
4246 b14 += b15 + k5 + t0;
4247 b15 = rol64(b15, 37) ^ b14;
4248
4249 b0 += b9;
4250 b9 = rol64(b9, 38) ^ b0;
4251
4252 b2 += b13;
4253 b13 = rol64(b13, 19) ^ b2;
4254
4255 b6 += b11;
4256 b11 = rol64(b11, 10) ^ b6;
4257
4258 b4 += b15;
4259 b15 = rol64(b15, 55) ^ b4;
4260
4261 b10 += b7;
4262 b7 = rol64(b7, 49) ^ b10;
4263
4264 b12 += b3;
4265 b3 = rol64(b3, 18) ^ b12;
4266
4267 b14 += b5;
4268 b5 = rol64(b5, 23) ^ b14;
4269
4270 b8 += b1;
4271 b1 = rol64(b1, 52) ^ b8;
4272
4273 b0 += b7;
4274 b7 = rol64(b7, 33) ^ b0;
4275
4276 b2 += b5;
4277 b5 = rol64(b5, 4) ^ b2;
4278
4279 b4 += b3;
4280 b3 = rol64(b3, 51) ^ b4;
4281
4282 b6 += b1;
4283 b1 = rol64(b1, 13) ^ b6;
4284
4285 b12 += b15;
4286 b15 = rol64(b15, 34) ^ b12;
4287
4288 b14 += b13;
4289 b13 = rol64(b13, 41) ^ b14;
4290
4291 b8 += b11;
4292 b11 = rol64(b11, 59) ^ b8;
4293
4294 b10 += b9;
4295 b9 = rol64(b9, 17) ^ b10;
4296
4297 b0 += b15;
4298 b15 = rol64(b15, 5) ^ b0;
4299
4300 b2 += b11;
4301 b11 = rol64(b11, 20) ^ b2;
4302
4303 b6 += b13;
4304 b13 = rol64(b13, 48) ^ b6;
4305
4306 b4 += b9;
4307 b9 = rol64(b9, 41) ^ b4;
4308
4309 b14 += b1;
4310 b1 = rol64(b1, 47) ^ b14;
4311
4312 b8 += b5;
4313 b5 = rol64(b5, 28) ^ b8;
4314
4315 b10 += b3;
4316 b3 = rol64(b3, 16) ^ b10;
4317
4318 b12 += b7;
4319 b7 = rol64(b7, 25) ^ b12;
4320
4321 b1 += k10;
4322 b0 += b1 + k9;
4323 b1 = rol64(b1, 41) ^ b0;
4324
4325 b3 += k12;
4326 b2 += b3 + k11;
4327 b3 = rol64(b3, 9) ^ b2;
4328
4329 b5 += k14;
4330 b4 += b5 + k13;
4331 b5 = rol64(b5, 37) ^ b4;
4332
4333 b7 += k16;
4334 b6 += b7 + k15;
4335 b7 = rol64(b7, 31) ^ b6;
4336
4337 b9 += k1;
4338 b8 += b9 + k0;
4339 b9 = rol64(b9, 12) ^ b8;
4340
4341 b11 += k3;
4342 b10 += b11 + k2;
4343 b11 = rol64(b11, 47) ^ b10;
4344
4345 b13 += k5 + t0;
4346 b12 += b13 + k4;
4347 b13 = rol64(b13, 44) ^ b12;
4348
4349 b15 += k7 + 9;
4350 b14 += b15 + k6 + t1;
4351 b15 = rol64(b15, 30) ^ b14;
4352
4353 b0 += b9;
4354 b9 = rol64(b9, 16) ^ b0;
4355
4356 b2 += b13;
4357 b13 = rol64(b13, 34) ^ b2;
4358
4359 b6 += b11;
4360 b11 = rol64(b11, 56) ^ b6;
4361
4362 b4 += b15;
4363 b15 = rol64(b15, 51) ^ b4;
4364
4365 b10 += b7;
4366 b7 = rol64(b7, 4) ^ b10;
4367
4368 b12 += b3;
4369 b3 = rol64(b3, 53) ^ b12;
4370
4371 b14 += b5;
4372 b5 = rol64(b5, 42) ^ b14;
4373
4374 b8 += b1;
4375 b1 = rol64(b1, 41) ^ b8;
4376
4377 b0 += b7;
4378 b7 = rol64(b7, 31) ^ b0;
4379
4380 b2 += b5;
4381 b5 = rol64(b5, 44) ^ b2;
4382
4383 b4 += b3;
4384 b3 = rol64(b3, 47) ^ b4;
4385
4386 b6 += b1;
4387 b1 = rol64(b1, 46) ^ b6;
4388
4389 b12 += b15;
4390 b15 = rol64(b15, 19) ^ b12;
4391
4392 b14 += b13;
4393 b13 = rol64(b13, 42) ^ b14;
4394
4395 b8 += b11;
4396 b11 = rol64(b11, 44) ^ b8;
4397
4398 b10 += b9;
4399 b9 = rol64(b9, 25) ^ b10;
4400
4401 b0 += b15;
4402 b15 = rol64(b15, 9) ^ b0;
4403
4404 b2 += b11;
4405 b11 = rol64(b11, 48) ^ b2;
4406
4407 b6 += b13;
4408 b13 = rol64(b13, 35) ^ b6;
4409
4410 b4 += b9;
4411 b9 = rol64(b9, 52) ^ b4;
4412
4413 b14 += b1;
4414 b1 = rol64(b1, 23) ^ b14;
4415
4416 b8 += b5;
4417 b5 = rol64(b5, 31) ^ b8;
4418
4419 b10 += b3;
4420 b3 = rol64(b3, 37) ^ b10;
4421
4422 b12 += b7;
4423 b7 = rol64(b7, 20) ^ b12;
4424
4425 b1 += k11;
4426 b0 += b1 + k10;
4427 b1 = rol64(b1, 24) ^ b0;
4428
4429 b3 += k13;
4430 b2 += b3 + k12;
4431 b3 = rol64(b3, 13) ^ b2;
4432
4433 b5 += k15;
4434 b4 += b5 + k14;
4435 b5 = rol64(b5, 8) ^ b4;
4436
4437 b7 += k0;
4438 b6 += b7 + k16;
4439 b7 = rol64(b7, 47) ^ b6;
4440
4441 b9 += k2;
4442 b8 += b9 + k1;
4443 b9 = rol64(b9, 8) ^ b8;
4444
4445 b11 += k4;
4446 b10 += b11 + k3;
4447 b11 = rol64(b11, 17) ^ b10;
4448
4449 b13 += k6 + t1;
4450 b12 += b13 + k5;
4451 b13 = rol64(b13, 22) ^ b12;
4452
4453 b15 += k8 + 10;
4454 b14 += b15 + k7 + t2;
4455 b15 = rol64(b15, 37) ^ b14;
4456
4457 b0 += b9;
4458 b9 = rol64(b9, 38) ^ b0;
4459
4460 b2 += b13;
4461 b13 = rol64(b13, 19) ^ b2;
4462
4463 b6 += b11;
4464 b11 = rol64(b11, 10) ^ b6;
4465
4466 b4 += b15;
4467 b15 = rol64(b15, 55) ^ b4;
4468
4469 b10 += b7;
4470 b7 = rol64(b7, 49) ^ b10;
4471
4472 b12 += b3;
4473 b3 = rol64(b3, 18) ^ b12;
4474
4475 b14 += b5;
4476 b5 = rol64(b5, 23) ^ b14;
4477
4478 b8 += b1;
4479 b1 = rol64(b1, 52) ^ b8;
4480
4481 b0 += b7;
4482 b7 = rol64(b7, 33) ^ b0;
4483
4484 b2 += b5;
4485 b5 = rol64(b5, 4) ^ b2;
4486
4487 b4 += b3;
4488 b3 = rol64(b3, 51) ^ b4;
4489
4490 b6 += b1;
4491 b1 = rol64(b1, 13) ^ b6;
4492
4493 b12 += b15;
4494 b15 = rol64(b15, 34) ^ b12;
4495
4496 b14 += b13;
4497 b13 = rol64(b13, 41) ^ b14;
4498
4499 b8 += b11;
4500 b11 = rol64(b11, 59) ^ b8;
4501
4502 b10 += b9;
4503 b9 = rol64(b9, 17) ^ b10;
4504
4505 b0 += b15;
4506 b15 = rol64(b15, 5) ^ b0;
4507
4508 b2 += b11;
4509 b11 = rol64(b11, 20) ^ b2;
4510
4511 b6 += b13;
4512 b13 = rol64(b13, 48) ^ b6;
4513
4514 b4 += b9;
4515 b9 = rol64(b9, 41) ^ b4;
4516
4517 b14 += b1;
4518 b1 = rol64(b1, 47) ^ b14;
4519
4520 b8 += b5;
4521 b5 = rol64(b5, 28) ^ b8;
4522
4523 b10 += b3;
4524 b3 = rol64(b3, 16) ^ b10;
4525
4526 b12 += b7;
4527 b7 = rol64(b7, 25) ^ b12;
4528
4529 b1 += k12;
4530 b0 += b1 + k11;
4531 b1 = rol64(b1, 41) ^ b0;
4532
4533 b3 += k14;
4534 b2 += b3 + k13;
4535 b3 = rol64(b3, 9) ^ b2;
4536
4537 b5 += k16;
4538 b4 += b5 + k15;
4539 b5 = rol64(b5, 37) ^ b4;
4540
4541 b7 += k1;
4542 b6 += b7 + k0;
4543 b7 = rol64(b7, 31) ^ b6;
4544
4545 b9 += k3;
4546 b8 += b9 + k2;
4547 b9 = rol64(b9, 12) ^ b8;
4548
4549 b11 += k5;
4550 b10 += b11 + k4;
4551 b11 = rol64(b11, 47) ^ b10;
4552
4553 b13 += k7 + t2;
4554 b12 += b13 + k6;
4555 b13 = rol64(b13, 44) ^ b12;
4556
4557 b15 += k9 + 11;
4558 b14 += b15 + k8 + t0;
4559 b15 = rol64(b15, 30) ^ b14;
4560
4561 b0 += b9;
4562 b9 = rol64(b9, 16) ^ b0;
4563
4564 b2 += b13;
4565 b13 = rol64(b13, 34) ^ b2;
4566
4567 b6 += b11;
4568 b11 = rol64(b11, 56) ^ b6;
4569
4570 b4 += b15;
4571 b15 = rol64(b15, 51) ^ b4;
4572
4573 b10 += b7;
4574 b7 = rol64(b7, 4) ^ b10;
4575
4576 b12 += b3;
4577 b3 = rol64(b3, 53) ^ b12;
4578
4579 b14 += b5;
4580 b5 = rol64(b5, 42) ^ b14;
4581
4582 b8 += b1;
4583 b1 = rol64(b1, 41) ^ b8;
4584
4585 b0 += b7;
4586 b7 = rol64(b7, 31) ^ b0;
4587
4588 b2 += b5;
4589 b5 = rol64(b5, 44) ^ b2;
4590
4591 b4 += b3;
4592 b3 = rol64(b3, 47) ^ b4;
4593
4594 b6 += b1;
4595 b1 = rol64(b1, 46) ^ b6;
4596
4597 b12 += b15;
4598 b15 = rol64(b15, 19) ^ b12;
4599
4600 b14 += b13;
4601 b13 = rol64(b13, 42) ^ b14;
4602
4603 b8 += b11;
4604 b11 = rol64(b11, 44) ^ b8;
4605
4606 b10 += b9;
4607 b9 = rol64(b9, 25) ^ b10;
4608
4609 b0 += b15;
4610 b15 = rol64(b15, 9) ^ b0;
4611
4612 b2 += b11;
4613 b11 = rol64(b11, 48) ^ b2;
4614
4615 b6 += b13;
4616 b13 = rol64(b13, 35) ^ b6;
4617
4618 b4 += b9;
4619 b9 = rol64(b9, 52) ^ b4;
4620
4621 b14 += b1;
4622 b1 = rol64(b1, 23) ^ b14;
4623
4624 b8 += b5;
4625 b5 = rol64(b5, 31) ^ b8;
4626
4627 b10 += b3;
4628 b3 = rol64(b3, 37) ^ b10;
4629
4630 b12 += b7;
4631 b7 = rol64(b7, 20) ^ b12;
4632
4633 b1 += k13;
4634 b0 += b1 + k12;
4635 b1 = rol64(b1, 24) ^ b0;
4636
4637 b3 += k15;
4638 b2 += b3 + k14;
4639 b3 = rol64(b3, 13) ^ b2;
4640
4641 b5 += k0;
4642 b4 += b5 + k16;
4643 b5 = rol64(b5, 8) ^ b4;
4644
4645 b7 += k2;
4646 b6 += b7 + k1;
4647 b7 = rol64(b7, 47) ^ b6;
4648
4649 b9 += k4;
4650 b8 += b9 + k3;
4651 b9 = rol64(b9, 8) ^ b8;
4652
4653 b11 += k6;
4654 b10 += b11 + k5;
4655 b11 = rol64(b11, 17) ^ b10;
4656
4657 b13 += k8 + t0;
4658 b12 += b13 + k7;
4659 b13 = rol64(b13, 22) ^ b12;
4660
4661 b15 += k10 + 12;
4662 b14 += b15 + k9 + t1;
4663 b15 = rol64(b15, 37) ^ b14;
4664
4665 b0 += b9;
4666 b9 = rol64(b9, 38) ^ b0;
4667
4668 b2 += b13;
4669 b13 = rol64(b13, 19) ^ b2;
4670
4671 b6 += b11;
4672 b11 = rol64(b11, 10) ^ b6;
4673
4674 b4 += b15;
4675 b15 = rol64(b15, 55) ^ b4;
4676
4677 b10 += b7;
4678 b7 = rol64(b7, 49) ^ b10;
4679
4680 b12 += b3;
4681 b3 = rol64(b3, 18) ^ b12;
4682
4683 b14 += b5;
4684 b5 = rol64(b5, 23) ^ b14;
4685
4686 b8 += b1;
4687 b1 = rol64(b1, 52) ^ b8;
4688
4689 b0 += b7;
4690 b7 = rol64(b7, 33) ^ b0;
4691
4692 b2 += b5;
4693 b5 = rol64(b5, 4) ^ b2;
4694
4695 b4 += b3;
4696 b3 = rol64(b3, 51) ^ b4;
4697
4698 b6 += b1;
4699 b1 = rol64(b1, 13) ^ b6;
4700
4701 b12 += b15;
4702 b15 = rol64(b15, 34) ^ b12;
4703
4704 b14 += b13;
4705 b13 = rol64(b13, 41) ^ b14;
4706
4707 b8 += b11;
4708 b11 = rol64(b11, 59) ^ b8;
4709
4710 b10 += b9;
4711 b9 = rol64(b9, 17) ^ b10;
4712
4713 b0 += b15;
4714 b15 = rol64(b15, 5) ^ b0;
4715
4716 b2 += b11;
4717 b11 = rol64(b11, 20) ^ b2;
4718
4719 b6 += b13;
4720 b13 = rol64(b13, 48) ^ b6;
4721
4722 b4 += b9;
4723 b9 = rol64(b9, 41) ^ b4;
4724
4725 b14 += b1;
4726 b1 = rol64(b1, 47) ^ b14;
4727
4728 b8 += b5;
4729 b5 = rol64(b5, 28) ^ b8;
4730
4731 b10 += b3;
4732 b3 = rol64(b3, 16) ^ b10;
4733
4734 b12 += b7;
4735 b7 = rol64(b7, 25) ^ b12;
4736
4737 b1 += k14;
4738 b0 += b1 + k13;
4739 b1 = rol64(b1, 41) ^ b0;
4740
4741 b3 += k16;
4742 b2 += b3 + k15;
4743 b3 = rol64(b3, 9) ^ b2;
4744
4745 b5 += k1;
4746 b4 += b5 + k0;
4747 b5 = rol64(b5, 37) ^ b4;
4748
4749 b7 += k3;
4750 b6 += b7 + k2;
4751 b7 = rol64(b7, 31) ^ b6;
4752
4753 b9 += k5;
4754 b8 += b9 + k4;
4755 b9 = rol64(b9, 12) ^ b8;
4756
4757 b11 += k7;
4758 b10 += b11 + k6;
4759 b11 = rol64(b11, 47) ^ b10;
4760
4761 b13 += k9 + t1;
4762 b12 += b13 + k8;
4763 b13 = rol64(b13, 44) ^ b12;
4764
4765 b15 += k11 + 13;
4766 b14 += b15 + k10 + t2;
4767 b15 = rol64(b15, 30) ^ b14;
4768
4769 b0 += b9;
4770 b9 = rol64(b9, 16) ^ b0;
4771
4772 b2 += b13;
4773 b13 = rol64(b13, 34) ^ b2;
4774
4775 b6 += b11;
4776 b11 = rol64(b11, 56) ^ b6;
4777
4778 b4 += b15;
4779 b15 = rol64(b15, 51) ^ b4;
4780
4781 b10 += b7;
4782 b7 = rol64(b7, 4) ^ b10;
4783
4784 b12 += b3;
4785 b3 = rol64(b3, 53) ^ b12;
4786
4787 b14 += b5;
4788 b5 = rol64(b5, 42) ^ b14;
4789
4790 b8 += b1;
4791 b1 = rol64(b1, 41) ^ b8;
4792
4793 b0 += b7;
4794 b7 = rol64(b7, 31) ^ b0;
4795
4796 b2 += b5;
4797 b5 = rol64(b5, 44) ^ b2;
4798
4799 b4 += b3;
4800 b3 = rol64(b3, 47) ^ b4;
4801
4802 b6 += b1;
4803 b1 = rol64(b1, 46) ^ b6;
4804
4805 b12 += b15;
4806 b15 = rol64(b15, 19) ^ b12;
4807
4808 b14 += b13;
4809 b13 = rol64(b13, 42) ^ b14;
4810
4811 b8 += b11;
4812 b11 = rol64(b11, 44) ^ b8;
4813
4814 b10 += b9;
4815 b9 = rol64(b9, 25) ^ b10;
4816
4817 b0 += b15;
4818 b15 = rol64(b15, 9) ^ b0;
4819
4820 b2 += b11;
4821 b11 = rol64(b11, 48) ^ b2;
4822
4823 b6 += b13;
4824 b13 = rol64(b13, 35) ^ b6;
4825
4826 b4 += b9;
4827 b9 = rol64(b9, 52) ^ b4;
4828
4829 b14 += b1;
4830 b1 = rol64(b1, 23) ^ b14;
4831
4832 b8 += b5;
4833 b5 = rol64(b5, 31) ^ b8;
4834
4835 b10 += b3;
4836 b3 = rol64(b3, 37) ^ b10;
4837
4838 b12 += b7;
4839 b7 = rol64(b7, 20) ^ b12;
4840
4841 b1 += k15;
4842 b0 += b1 + k14;
4843 b1 = rol64(b1, 24) ^ b0;
4844
4845 b3 += k0;
4846 b2 += b3 + k16;
4847 b3 = rol64(b3, 13) ^ b2;
4848
4849 b5 += k2;
4850 b4 += b5 + k1;
4851 b5 = rol64(b5, 8) ^ b4;
4852
4853 b7 += k4;
4854 b6 += b7 + k3;
4855 b7 = rol64(b7, 47) ^ b6;
4856
4857 b9 += k6;
4858 b8 += b9 + k5;
4859 b9 = rol64(b9, 8) ^ b8;
4860
4861 b11 += k8;
4862 b10 += b11 + k7;
4863 b11 = rol64(b11, 17) ^ b10;
4864
4865 b13 += k10 + t2;
4866 b12 += b13 + k9;
4867 b13 = rol64(b13, 22) ^ b12;
4868
4869 b15 += k12 + 14;
4870 b14 += b15 + k11 + t0;
4871 b15 = rol64(b15, 37) ^ b14;
4872
4873 b0 += b9;
4874 b9 = rol64(b9, 38) ^ b0;
4875
4876 b2 += b13;
4877 b13 = rol64(b13, 19) ^ b2;
4878
4879 b6 += b11;
4880 b11 = rol64(b11, 10) ^ b6;
4881
4882 b4 += b15;
4883 b15 = rol64(b15, 55) ^ b4;
4884
4885 b10 += b7;
4886 b7 = rol64(b7, 49) ^ b10;
4887
4888 b12 += b3;
4889 b3 = rol64(b3, 18) ^ b12;
4890
4891 b14 += b5;
4892 b5 = rol64(b5, 23) ^ b14;
4893
4894 b8 += b1;
4895 b1 = rol64(b1, 52) ^ b8;
4896
4897 b0 += b7;
4898 b7 = rol64(b7, 33) ^ b0;
4899
4900 b2 += b5;
4901 b5 = rol64(b5, 4) ^ b2;
4902
4903 b4 += b3;
4904 b3 = rol64(b3, 51) ^ b4;
4905
4906 b6 += b1;
4907 b1 = rol64(b1, 13) ^ b6;
4908
4909 b12 += b15;
4910 b15 = rol64(b15, 34) ^ b12;
4911
4912 b14 += b13;
4913 b13 = rol64(b13, 41) ^ b14;
4914
4915 b8 += b11;
4916 b11 = rol64(b11, 59) ^ b8;
4917
4918 b10 += b9;
4919 b9 = rol64(b9, 17) ^ b10;
4920
4921 b0 += b15;
4922 b15 = rol64(b15, 5) ^ b0;
4923
4924 b2 += b11;
4925 b11 = rol64(b11, 20) ^ b2;
4926
4927 b6 += b13;
4928 b13 = rol64(b13, 48) ^ b6;
4929
4930 b4 += b9;
4931 b9 = rol64(b9, 41) ^ b4;
4932
4933 b14 += b1;
4934 b1 = rol64(b1, 47) ^ b14;
4935
4936 b8 += b5;
4937 b5 = rol64(b5, 28) ^ b8;
4938
4939 b10 += b3;
4940 b3 = rol64(b3, 16) ^ b10;
4941
4942 b12 += b7;
4943 b7 = rol64(b7, 25) ^ b12;
4944
4945 b1 += k16;
4946 b0 += b1 + k15;
4947 b1 = rol64(b1, 41) ^ b0;
4948
4949 b3 += k1;
4950 b2 += b3 + k0;
4951 b3 = rol64(b3, 9) ^ b2;
4952
4953 b5 += k3;
4954 b4 += b5 + k2;
4955 b5 = rol64(b5, 37) ^ b4;
4956
4957 b7 += k5;
4958 b6 += b7 + k4;
4959 b7 = rol64(b7, 31) ^ b6;
4960
4961 b9 += k7;
4962 b8 += b9 + k6;
4963 b9 = rol64(b9, 12) ^ b8;
4964
4965 b11 += k9;
4966 b10 += b11 + k8;
4967 b11 = rol64(b11, 47) ^ b10;
4968
4969 b13 += k11 + t0;
4970 b12 += b13 + k10;
4971 b13 = rol64(b13, 44) ^ b12;
4972
4973 b15 += k13 + 15;
4974 b14 += b15 + k12 + t1;
4975 b15 = rol64(b15, 30) ^ b14;
4976
4977 b0 += b9;
4978 b9 = rol64(b9, 16) ^ b0;
4979
4980 b2 += b13;
4981 b13 = rol64(b13, 34) ^ b2;
4982
4983 b6 += b11;
4984 b11 = rol64(b11, 56) ^ b6;
4985
4986 b4 += b15;
4987 b15 = rol64(b15, 51) ^ b4;
4988
4989 b10 += b7;
4990 b7 = rol64(b7, 4) ^ b10;
4991
4992 b12 += b3;
4993 b3 = rol64(b3, 53) ^ b12;
4994
4995 b14 += b5;
4996 b5 = rol64(b5, 42) ^ b14;
4997
4998 b8 += b1;
4999 b1 = rol64(b1, 41) ^ b8;
5000
5001 b0 += b7;
5002 b7 = rol64(b7, 31) ^ b0;
5003
5004 b2 += b5;
5005 b5 = rol64(b5, 44) ^ b2;
5006
5007 b4 += b3;
5008 b3 = rol64(b3, 47) ^ b4;
5009
5010 b6 += b1;
5011 b1 = rol64(b1, 46) ^ b6;
5012
5013 b12 += b15;
5014 b15 = rol64(b15, 19) ^ b12;
5015
5016 b14 += b13;
5017 b13 = rol64(b13, 42) ^ b14;
5018
5019 b8 += b11;
5020 b11 = rol64(b11, 44) ^ b8;
5021
5022 b10 += b9;
5023 b9 = rol64(b9, 25) ^ b10;
5024
5025 b0 += b15;
5026 b15 = rol64(b15, 9) ^ b0;
5027
5028 b2 += b11;
5029 b11 = rol64(b11, 48) ^ b2;
5030
5031 b6 += b13;
5032 b13 = rol64(b13, 35) ^ b6;
5033
5034 b4 += b9;
5035 b9 = rol64(b9, 52) ^ b4;
5036
5037 b14 += b1;
5038 b1 = rol64(b1, 23) ^ b14;
5039
5040 b8 += b5;
5041 b5 = rol64(b5, 31) ^ b8;
5042
5043 b10 += b3;
5044 b3 = rol64(b3, 37) ^ b10;
5045
5046 b12 += b7;
5047 b7 = rol64(b7, 20) ^ b12;
5048
5049 b1 += k0;
5050 b0 += b1 + k16;
5051 b1 = rol64(b1, 24) ^ b0;
5052
5053 b3 += k2;
5054 b2 += b3 + k1;
5055 b3 = rol64(b3, 13) ^ b2;
5056
5057 b5 += k4;
5058 b4 += b5 + k3;
5059 b5 = rol64(b5, 8) ^ b4;
5060
5061 b7 += k6;
5062 b6 += b7 + k5;
5063 b7 = rol64(b7, 47) ^ b6;
5064
5065 b9 += k8;
5066 b8 += b9 + k7;
5067 b9 = rol64(b9, 8) ^ b8;
5068
5069 b11 += k10;
5070 b10 += b11 + k9;
5071 b11 = rol64(b11, 17) ^ b10;
5072
5073 b13 += k12 + t1;
5074 b12 += b13 + k11;
5075 b13 = rol64(b13, 22) ^ b12;
5076
5077 b15 += k14 + 16;
5078 b14 += b15 + k13 + t2;
5079 b15 = rol64(b15, 37) ^ b14;
5080
5081 b0 += b9;
5082 b9 = rol64(b9, 38) ^ b0;
5083
5084 b2 += b13;
5085 b13 = rol64(b13, 19) ^ b2;
5086
5087 b6 += b11;
5088 b11 = rol64(b11, 10) ^ b6;
5089
5090 b4 += b15;
5091 b15 = rol64(b15, 55) ^ b4;
5092
5093 b10 += b7;
5094 b7 = rol64(b7, 49) ^ b10;
5095
5096 b12 += b3;
5097 b3 = rol64(b3, 18) ^ b12;
5098
5099 b14 += b5;
5100 b5 = rol64(b5, 23) ^ b14;
5101
5102 b8 += b1;
5103 b1 = rol64(b1, 52) ^ b8;
5104
5105 b0 += b7;
5106 b7 = rol64(b7, 33) ^ b0;
5107
5108 b2 += b5;
5109 b5 = rol64(b5, 4) ^ b2;
5110
5111 b4 += b3;
5112 b3 = rol64(b3, 51) ^ b4;
5113
5114 b6 += b1;
5115 b1 = rol64(b1, 13) ^ b6;
5116
5117 b12 += b15;
5118 b15 = rol64(b15, 34) ^ b12;
5119
5120 b14 += b13;
5121 b13 = rol64(b13, 41) ^ b14;
5122
5123 b8 += b11;
5124 b11 = rol64(b11, 59) ^ b8;
5125
5126 b10 += b9;
5127 b9 = rol64(b9, 17) ^ b10;
5128
5129 b0 += b15;
5130 b15 = rol64(b15, 5) ^ b0;
5131
5132 b2 += b11;
5133 b11 = rol64(b11, 20) ^ b2;
5134
5135 b6 += b13;
5136 b13 = rol64(b13, 48) ^ b6;
5137
5138 b4 += b9;
5139 b9 = rol64(b9, 41) ^ b4;
5140
5141 b14 += b1;
5142 b1 = rol64(b1, 47) ^ b14;
5143
5144 b8 += b5;
5145 b5 = rol64(b5, 28) ^ b8;
5146
5147 b10 += b3;
5148 b3 = rol64(b3, 16) ^ b10;
5149
5150 b12 += b7;
5151 b7 = rol64(b7, 25) ^ b12;
5152
5153 b1 += k1;
5154 b0 += b1 + k0;
5155 b1 = rol64(b1, 41) ^ b0;
5156
5157 b3 += k3;
5158 b2 += b3 + k2;
5159 b3 = rol64(b3, 9) ^ b2;
5160
5161 b5 += k5;
5162 b4 += b5 + k4;
5163 b5 = rol64(b5, 37) ^ b4;
5164
5165 b7 += k7;
5166 b6 += b7 + k6;
5167 b7 = rol64(b7, 31) ^ b6;
5168
5169 b9 += k9;
5170 b8 += b9 + k8;
5171 b9 = rol64(b9, 12) ^ b8;
5172
5173 b11 += k11;
5174 b10 += b11 + k10;
5175 b11 = rol64(b11, 47) ^ b10;
5176
5177 b13 += k13 + t2;
5178 b12 += b13 + k12;
5179 b13 = rol64(b13, 44) ^ b12;
5180
5181 b15 += k15 + 17;
5182 b14 += b15 + k14 + t0;
5183 b15 = rol64(b15, 30) ^ b14;
5184
5185 b0 += b9;
5186 b9 = rol64(b9, 16) ^ b0;
5187
5188 b2 += b13;
5189 b13 = rol64(b13, 34) ^ b2;
5190
5191 b6 += b11;
5192 b11 = rol64(b11, 56) ^ b6;
5193
5194 b4 += b15;
5195 b15 = rol64(b15, 51) ^ b4;
5196
5197 b10 += b7;
5198 b7 = rol64(b7, 4) ^ b10;
5199
5200 b12 += b3;
5201 b3 = rol64(b3, 53) ^ b12;
5202
5203 b14 += b5;
5204 b5 = rol64(b5, 42) ^ b14;
5205
5206 b8 += b1;
5207 b1 = rol64(b1, 41) ^ b8;
5208
5209 b0 += b7;
5210 b7 = rol64(b7, 31) ^ b0;
5211
5212 b2 += b5;
5213 b5 = rol64(b5, 44) ^ b2;
5214
5215 b4 += b3;
5216 b3 = rol64(b3, 47) ^ b4;
5217
5218 b6 += b1;
5219 b1 = rol64(b1, 46) ^ b6;
5220
5221 b12 += b15;
5222 b15 = rol64(b15, 19) ^ b12;
5223
5224 b14 += b13;
5225 b13 = rol64(b13, 42) ^ b14;
5226
5227 b8 += b11;
5228 b11 = rol64(b11, 44) ^ b8;
5229
5230 b10 += b9;
5231 b9 = rol64(b9, 25) ^ b10;
5232
5233 b0 += b15;
5234 b15 = rol64(b15, 9) ^ b0;
5235
5236 b2 += b11;
5237 b11 = rol64(b11, 48) ^ b2;
5238
5239 b6 += b13;
5240 b13 = rol64(b13, 35) ^ b6;
5241
5242 b4 += b9;
5243 b9 = rol64(b9, 52) ^ b4;
5244
5245 b14 += b1;
5246 b1 = rol64(b1, 23) ^ b14;
5247
5248 b8 += b5;
5249 b5 = rol64(b5, 31) ^ b8;
5250
5251 b10 += b3;
5252 b3 = rol64(b3, 37) ^ b10;
5253
5254 b12 += b7;
5255 b7 = rol64(b7, 20) ^ b12;
5256
5257 b1 += k2;
5258 b0 += b1 + k1;
5259 b1 = rol64(b1, 24) ^ b0;
5260
5261 b3 += k4;
5262 b2 += b3 + k3;
5263 b3 = rol64(b3, 13) ^ b2;
5264
5265 b5 += k6;
5266 b4 += b5 + k5;
5267 b5 = rol64(b5, 8) ^ b4;
5268
5269 b7 += k8;
5270 b6 += b7 + k7;
5271 b7 = rol64(b7, 47) ^ b6;
5272
5273 b9 += k10;
5274 b8 += b9 + k9;
5275 b9 = rol64(b9, 8) ^ b8;
5276
5277 b11 += k12;
5278 b10 += b11 + k11;
5279 b11 = rol64(b11, 17) ^ b10;
5280
5281 b13 += k14 + t0;
5282 b12 += b13 + k13;
5283 b13 = rol64(b13, 22) ^ b12;
5284
5285 b15 += k16 + 18;
5286 b14 += b15 + k15 + t1;
5287 b15 = rol64(b15, 37) ^ b14;
5288
5289 b0 += b9;
5290 b9 = rol64(b9, 38) ^ b0;
5291
5292 b2 += b13;
5293 b13 = rol64(b13, 19) ^ b2;
5294
5295 b6 += b11;
5296 b11 = rol64(b11, 10) ^ b6;
5297
5298 b4 += b15;
5299 b15 = rol64(b15, 55) ^ b4;
5300
5301 b10 += b7;
5302 b7 = rol64(b7, 49) ^ b10;
5303
5304 b12 += b3;
5305 b3 = rol64(b3, 18) ^ b12;
5306
5307 b14 += b5;
5308 b5 = rol64(b5, 23) ^ b14;
5309
5310 b8 += b1;
5311 b1 = rol64(b1, 52) ^ b8;
5312
5313 b0 += b7;
5314 b7 = rol64(b7, 33) ^ b0;
5315
5316 b2 += b5;
5317 b5 = rol64(b5, 4) ^ b2;
5318
5319 b4 += b3;
5320 b3 = rol64(b3, 51) ^ b4;
5321
5322 b6 += b1;
5323 b1 = rol64(b1, 13) ^ b6;
5324
5325 b12 += b15;
5326 b15 = rol64(b15, 34) ^ b12;
5327
5328 b14 += b13;
5329 b13 = rol64(b13, 41) ^ b14;
5330
5331 b8 += b11;
5332 b11 = rol64(b11, 59) ^ b8;
5333
5334 b10 += b9;
5335 b9 = rol64(b9, 17) ^ b10;
5336
5337 b0 += b15;
5338 b15 = rol64(b15, 5) ^ b0;
5339
5340 b2 += b11;
5341 b11 = rol64(b11, 20) ^ b2;
5342
5343 b6 += b13;
5344 b13 = rol64(b13, 48) ^ b6;
5345
5346 b4 += b9;
5347 b9 = rol64(b9, 41) ^ b4;
5348
5349 b14 += b1;
5350 b1 = rol64(b1, 47) ^ b14;
5351
5352 b8 += b5;
5353 b5 = rol64(b5, 28) ^ b8;
5354
5355 b10 += b3;
5356 b3 = rol64(b3, 16) ^ b10;
5357
5358 b12 += b7;
5359 b7 = rol64(b7, 25) ^ b12;
5360
5361 b1 += k3;
5362 b0 += b1 + k2;
5363 b1 = rol64(b1, 41) ^ b0;
5364
5365 b3 += k5;
5366 b2 += b3 + k4;
5367 b3 = rol64(b3, 9) ^ b2;
5368
5369 b5 += k7;
5370 b4 += b5 + k6;
5371 b5 = rol64(b5, 37) ^ b4;
5372
5373 b7 += k9;
5374 b6 += b7 + k8;
5375 b7 = rol64(b7, 31) ^ b6;
5376
5377 b9 += k11;
5378 b8 += b9 + k10;
5379 b9 = rol64(b9, 12) ^ b8;
5380
5381 b11 += k13;
5382 b10 += b11 + k12;
5383 b11 = rol64(b11, 47) ^ b10;
5384
5385 b13 += k15 + t1;
5386 b12 += b13 + k14;
5387 b13 = rol64(b13, 44) ^ b12;
5388
5389 b15 += k0 + 19;
5390 b14 += b15 + k16 + t2;
5391 b15 = rol64(b15, 30) ^ b14;
5392
5393 b0 += b9;
5394 b9 = rol64(b9, 16) ^ b0;
5395
5396 b2 += b13;
5397 b13 = rol64(b13, 34) ^ b2;
5398
5399 b6 += b11;
5400 b11 = rol64(b11, 56) ^ b6;
5401
5402 b4 += b15;
5403 b15 = rol64(b15, 51) ^ b4;
5404
5405 b10 += b7;
5406 b7 = rol64(b7, 4) ^ b10;
5407
5408 b12 += b3;
5409 b3 = rol64(b3, 53) ^ b12;
5410
5411 b14 += b5;
5412 b5 = rol64(b5, 42) ^ b14;
5413
5414 b8 += b1;
5415 b1 = rol64(b1, 41) ^ b8;
5416
5417 b0 += b7;
5418 b7 = rol64(b7, 31) ^ b0;
5419
5420 b2 += b5;
5421 b5 = rol64(b5, 44) ^ b2;
5422
5423 b4 += b3;
5424 b3 = rol64(b3, 47) ^ b4;
5425
5426 b6 += b1;
5427 b1 = rol64(b1, 46) ^ b6;
5428
5429 b12 += b15;
5430 b15 = rol64(b15, 19) ^ b12;
5431
5432 b14 += b13;
5433 b13 = rol64(b13, 42) ^ b14;
5434
5435 b8 += b11;
5436 b11 = rol64(b11, 44) ^ b8;
5437
5438 b10 += b9;
5439 b9 = rol64(b9, 25) ^ b10;
5440
5441 b0 += b15;
5442 b15 = rol64(b15, 9) ^ b0;
5443
5444 b2 += b11;
5445 b11 = rol64(b11, 48) ^ b2;
5446
5447 b6 += b13;
5448 b13 = rol64(b13, 35) ^ b6;
5449
5450 b4 += b9;
5451 b9 = rol64(b9, 52) ^ b4;
5452
5453 b14 += b1;
5454 b1 = rol64(b1, 23) ^ b14;
5455
5456 b8 += b5;
5457 b5 = rol64(b5, 31) ^ b8;
5458
5459 b10 += b3;
5460 b3 = rol64(b3, 37) ^ b10;
5461
5462 b12 += b7;
5463 b7 = rol64(b7, 20) ^ b12;
5464
5465 output[0] = b0 + k3;
5466 output[1] = b1 + k4;
5467 output[2] = b2 + k5;
5468 output[3] = b3 + k6;
5469 output[4] = b4 + k7;
5470 output[5] = b5 + k8;
5471 output[6] = b6 + k9;
5472 output[7] = b7 + k10;
5473 output[8] = b8 + k11;
5474 output[9] = b9 + k12;
5475 output[10] = b10 + k13;
5476 output[11] = b11 + k14;
5477 output[12] = b12 + k15;
5478 output[13] = b13 + k16 + t2;
5479 output[14] = b14 + k0 + t0;
5480 output[15] = b15 + k1 + 20;
5481 }
5482
5483 void threefish_decrypt_1024(struct threefish_key *key_ctx, u64 *input,
5484 u64 *output)
5485 {
5486 u64 b0 = input[0], b1 = input[1],
5487 b2 = input[2], b3 = input[3],
5488 b4 = input[4], b5 = input[5],
5489 b6 = input[6], b7 = input[7],
5490 b8 = input[8], b9 = input[9],
5491 b10 = input[10], b11 = input[11],
5492 b12 = input[12], b13 = input[13],
5493 b14 = input[14], b15 = input[15];
5494 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
5495 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
5496 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
5497 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
5498 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
5499 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
5500 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
5501 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
5502 k16 = key_ctx->key[16];
5503 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
5504 t2 = key_ctx->tweak[2];
5505 u64 tmp;
5506
5507 b0 -= k3;
5508 b1 -= k4;
5509 b2 -= k5;
5510 b3 -= k6;
5511 b4 -= k7;
5512 b5 -= k8;
5513 b6 -= k9;
5514 b7 -= k10;
5515 b8 -= k11;
5516 b9 -= k12;
5517 b10 -= k13;
5518 b11 -= k14;
5519 b12 -= k15;
5520 b13 -= k16 + t2;
5521 b14 -= k0 + t0;
5522 b15 -= k1 + 20;
5523 tmp = b7 ^ b12;
5524 b7 = (tmp >> 20) | (tmp << (64 - 20));
5525 b12 -= b7;
5526
5527 tmp = b3 ^ b10;
5528 b3 = (tmp >> 37) | (tmp << (64 - 37));
5529 b10 -= b3;
5530
5531 tmp = b5 ^ b8;
5532 b5 = (tmp >> 31) | (tmp << (64 - 31));
5533 b8 -= b5;
5534
5535 tmp = b1 ^ b14;
5536 b1 = (tmp >> 23) | (tmp << (64 - 23));
5537 b14 -= b1;
5538
5539 tmp = b9 ^ b4;
5540 b9 = (tmp >> 52) | (tmp << (64 - 52));
5541 b4 -= b9;
5542
5543 tmp = b13 ^ b6;
5544 b13 = (tmp >> 35) | (tmp << (64 - 35));
5545 b6 -= b13;
5546
5547 tmp = b11 ^ b2;
5548 b11 = (tmp >> 48) | (tmp << (64 - 48));
5549 b2 -= b11;
5550
5551 tmp = b15 ^ b0;
5552 b15 = (tmp >> 9) | (tmp << (64 - 9));
5553 b0 -= b15;
5554
5555 tmp = b9 ^ b10;
5556 b9 = (tmp >> 25) | (tmp << (64 - 25));
5557 b10 -= b9;
5558
5559 tmp = b11 ^ b8;
5560 b11 = (tmp >> 44) | (tmp << (64 - 44));
5561 b8 -= b11;
5562
5563 tmp = b13 ^ b14;
5564 b13 = (tmp >> 42) | (tmp << (64 - 42));
5565 b14 -= b13;
5566
5567 tmp = b15 ^ b12;
5568 b15 = (tmp >> 19) | (tmp << (64 - 19));
5569 b12 -= b15;
5570
5571 tmp = b1 ^ b6;
5572 b1 = (tmp >> 46) | (tmp << (64 - 46));
5573 b6 -= b1;
5574
5575 tmp = b3 ^ b4;
5576 b3 = (tmp >> 47) | (tmp << (64 - 47));
5577 b4 -= b3;
5578
5579 tmp = b5 ^ b2;
5580 b5 = (tmp >> 44) | (tmp << (64 - 44));
5581 b2 -= b5;
5582
5583 tmp = b7 ^ b0;
5584 b7 = (tmp >> 31) | (tmp << (64 - 31));
5585 b0 -= b7;
5586
5587 tmp = b1 ^ b8;
5588 b1 = (tmp >> 41) | (tmp << (64 - 41));
5589 b8 -= b1;
5590
5591 tmp = b5 ^ b14;
5592 b5 = (tmp >> 42) | (tmp << (64 - 42));
5593 b14 -= b5;
5594
5595 tmp = b3 ^ b12;
5596 b3 = (tmp >> 53) | (tmp << (64 - 53));
5597 b12 -= b3;
5598
5599 tmp = b7 ^ b10;
5600 b7 = (tmp >> 4) | (tmp << (64 - 4));
5601 b10 -= b7;
5602
5603 tmp = b15 ^ b4;
5604 b15 = (tmp >> 51) | (tmp << (64 - 51));
5605 b4 -= b15;
5606
5607 tmp = b11 ^ b6;
5608 b11 = (tmp >> 56) | (tmp << (64 - 56));
5609 b6 -= b11;
5610
5611 tmp = b13 ^ b2;
5612 b13 = (tmp >> 34) | (tmp << (64 - 34));
5613 b2 -= b13;
5614
5615 tmp = b9 ^ b0;
5616 b9 = (tmp >> 16) | (tmp << (64 - 16));
5617 b0 -= b9;
5618
5619 tmp = b15 ^ b14;
5620 b15 = (tmp >> 30) | (tmp << (64 - 30));
5621 b14 -= b15 + k16 + t2;
5622 b15 -= k0 + 19;
5623
5624 tmp = b13 ^ b12;
5625 b13 = (tmp >> 44) | (tmp << (64 - 44));
5626 b12 -= b13 + k14;
5627 b13 -= k15 + t1;
5628
5629 tmp = b11 ^ b10;
5630 b11 = (tmp >> 47) | (tmp << (64 - 47));
5631 b10 -= b11 + k12;
5632 b11 -= k13;
5633
5634 tmp = b9 ^ b8;
5635 b9 = (tmp >> 12) | (tmp << (64 - 12));
5636 b8 -= b9 + k10;
5637 b9 -= k11;
5638
5639 tmp = b7 ^ b6;
5640 b7 = (tmp >> 31) | (tmp << (64 - 31));
5641 b6 -= b7 + k8;
5642 b7 -= k9;
5643
5644 tmp = b5 ^ b4;
5645 b5 = (tmp >> 37) | (tmp << (64 - 37));
5646 b4 -= b5 + k6;
5647 b5 -= k7;
5648
5649 tmp = b3 ^ b2;
5650 b3 = (tmp >> 9) | (tmp << (64 - 9));
5651 b2 -= b3 + k4;
5652 b3 -= k5;
5653
5654 tmp = b1 ^ b0;
5655 b1 = (tmp >> 41) | (tmp << (64 - 41));
5656 b0 -= b1 + k2;
5657 b1 -= k3;
5658
5659 tmp = b7 ^ b12;
5660 b7 = (tmp >> 25) | (tmp << (64 - 25));
5661 b12 -= b7;
5662
5663 tmp = b3 ^ b10;
5664 b3 = (tmp >> 16) | (tmp << (64 - 16));
5665 b10 -= b3;
5666
5667 tmp = b5 ^ b8;
5668 b5 = (tmp >> 28) | (tmp << (64 - 28));
5669 b8 -= b5;
5670
5671 tmp = b1 ^ b14;
5672 b1 = (tmp >> 47) | (tmp << (64 - 47));
5673 b14 -= b1;
5674
5675 tmp = b9 ^ b4;
5676 b9 = (tmp >> 41) | (tmp << (64 - 41));
5677 b4 -= b9;
5678
5679 tmp = b13 ^ b6;
5680 b13 = (tmp >> 48) | (tmp << (64 - 48));
5681 b6 -= b13;
5682
5683 tmp = b11 ^ b2;
5684 b11 = (tmp >> 20) | (tmp << (64 - 20));
5685 b2 -= b11;
5686
5687 tmp = b15 ^ b0;
5688 b15 = (tmp >> 5) | (tmp << (64 - 5));
5689 b0 -= b15;
5690
5691 tmp = b9 ^ b10;
5692 b9 = (tmp >> 17) | (tmp << (64 - 17));
5693 b10 -= b9;
5694
5695 tmp = b11 ^ b8;
5696 b11 = (tmp >> 59) | (tmp << (64 - 59));
5697 b8 -= b11;
5698
5699 tmp = b13 ^ b14;
5700 b13 = (tmp >> 41) | (tmp << (64 - 41));
5701 b14 -= b13;
5702
5703 tmp = b15 ^ b12;
5704 b15 = (tmp >> 34) | (tmp << (64 - 34));
5705 b12 -= b15;
5706
5707 tmp = b1 ^ b6;
5708 b1 = (tmp >> 13) | (tmp << (64 - 13));
5709 b6 -= b1;
5710
5711 tmp = b3 ^ b4;
5712 b3 = (tmp >> 51) | (tmp << (64 - 51));
5713 b4 -= b3;
5714
5715 tmp = b5 ^ b2;
5716 b5 = (tmp >> 4) | (tmp << (64 - 4));
5717 b2 -= b5;
5718
5719 tmp = b7 ^ b0;
5720 b7 = (tmp >> 33) | (tmp << (64 - 33));
5721 b0 -= b7;
5722
5723 tmp = b1 ^ b8;
5724 b1 = (tmp >> 52) | (tmp << (64 - 52));
5725 b8 -= b1;
5726
5727 tmp = b5 ^ b14;
5728 b5 = (tmp >> 23) | (tmp << (64 - 23));
5729 b14 -= b5;
5730
5731 tmp = b3 ^ b12;
5732 b3 = (tmp >> 18) | (tmp << (64 - 18));
5733 b12 -= b3;
5734
5735 tmp = b7 ^ b10;
5736 b7 = (tmp >> 49) | (tmp << (64 - 49));
5737 b10 -= b7;
5738
5739 tmp = b15 ^ b4;
5740 b15 = (tmp >> 55) | (tmp << (64 - 55));
5741 b4 -= b15;
5742
5743 tmp = b11 ^ b6;
5744 b11 = (tmp >> 10) | (tmp << (64 - 10));
5745 b6 -= b11;
5746
5747 tmp = b13 ^ b2;
5748 b13 = (tmp >> 19) | (tmp << (64 - 19));
5749 b2 -= b13;
5750
5751 tmp = b9 ^ b0;
5752 b9 = (tmp >> 38) | (tmp << (64 - 38));
5753 b0 -= b9;
5754
5755 tmp = b15 ^ b14;
5756 b15 = (tmp >> 37) | (tmp << (64 - 37));
5757 b14 -= b15 + k15 + t1;
5758 b15 -= k16 + 18;
5759
5760 tmp = b13 ^ b12;
5761 b13 = (tmp >> 22) | (tmp << (64 - 22));
5762 b12 -= b13 + k13;
5763 b13 -= k14 + t0;
5764
5765 tmp = b11 ^ b10;
5766 b11 = (tmp >> 17) | (tmp << (64 - 17));
5767 b10 -= b11 + k11;
5768 b11 -= k12;
5769
5770 tmp = b9 ^ b8;
5771 b9 = (tmp >> 8) | (tmp << (64 - 8));
5772 b8 -= b9 + k9;
5773 b9 -= k10;
5774
5775 tmp = b7 ^ b6;
5776 b7 = (tmp >> 47) | (tmp << (64 - 47));
5777 b6 -= b7 + k7;
5778 b7 -= k8;
5779
5780 tmp = b5 ^ b4;
5781 b5 = (tmp >> 8) | (tmp << (64 - 8));
5782 b4 -= b5 + k5;
5783 b5 -= k6;
5784
5785 tmp = b3 ^ b2;
5786 b3 = (tmp >> 13) | (tmp << (64 - 13));
5787 b2 -= b3 + k3;
5788 b3 -= k4;
5789
5790 tmp = b1 ^ b0;
5791 b1 = (tmp >> 24) | (tmp << (64 - 24));
5792 b0 -= b1 + k1;
5793 b1 -= k2;
5794
5795 tmp = b7 ^ b12;
5796 b7 = (tmp >> 20) | (tmp << (64 - 20));
5797 b12 -= b7;
5798
5799 tmp = b3 ^ b10;
5800 b3 = (tmp >> 37) | (tmp << (64 - 37));
5801 b10 -= b3;
5802
5803 tmp = b5 ^ b8;
5804 b5 = (tmp >> 31) | (tmp << (64 - 31));
5805 b8 -= b5;
5806
5807 tmp = b1 ^ b14;
5808 b1 = (tmp >> 23) | (tmp << (64 - 23));
5809 b14 -= b1;
5810
5811 tmp = b9 ^ b4;
5812 b9 = (tmp >> 52) | (tmp << (64 - 52));
5813 b4 -= b9;
5814
5815 tmp = b13 ^ b6;
5816 b13 = (tmp >> 35) | (tmp << (64 - 35));
5817 b6 -= b13;
5818
5819 tmp = b11 ^ b2;
5820 b11 = (tmp >> 48) | (tmp << (64 - 48));
5821 b2 -= b11;
5822
5823 tmp = b15 ^ b0;
5824 b15 = (tmp >> 9) | (tmp << (64 - 9));
5825 b0 -= b15;
5826
5827 tmp = b9 ^ b10;
5828 b9 = (tmp >> 25) | (tmp << (64 - 25));
5829 b10 -= b9;
5830
5831 tmp = b11 ^ b8;
5832 b11 = (tmp >> 44) | (tmp << (64 - 44));
5833 b8 -= b11;
5834
5835 tmp = b13 ^ b14;
5836 b13 = (tmp >> 42) | (tmp << (64 - 42));
5837 b14 -= b13;
5838
5839 tmp = b15 ^ b12;
5840 b15 = (tmp >> 19) | (tmp << (64 - 19));
5841 b12 -= b15;
5842
5843 tmp = b1 ^ b6;
5844 b1 = (tmp >> 46) | (tmp << (64 - 46));
5845 b6 -= b1;
5846
5847 tmp = b3 ^ b4;
5848 b3 = (tmp >> 47) | (tmp << (64 - 47));
5849 b4 -= b3;
5850
5851 tmp = b5 ^ b2;
5852 b5 = (tmp >> 44) | (tmp << (64 - 44));
5853 b2 -= b5;
5854
5855 tmp = b7 ^ b0;
5856 b7 = (tmp >> 31) | (tmp << (64 - 31));
5857 b0 -= b7;
5858
5859 tmp = b1 ^ b8;
5860 b1 = (tmp >> 41) | (tmp << (64 - 41));
5861 b8 -= b1;
5862
5863 tmp = b5 ^ b14;
5864 b5 = (tmp >> 42) | (tmp << (64 - 42));
5865 b14 -= b5;
5866
5867 tmp = b3 ^ b12;
5868 b3 = (tmp >> 53) | (tmp << (64 - 53));
5869 b12 -= b3;
5870
5871 tmp = b7 ^ b10;
5872 b7 = (tmp >> 4) | (tmp << (64 - 4));
5873 b10 -= b7;
5874
5875 tmp = b15 ^ b4;
5876 b15 = (tmp >> 51) | (tmp << (64 - 51));
5877 b4 -= b15;
5878
5879 tmp = b11 ^ b6;
5880 b11 = (tmp >> 56) | (tmp << (64 - 56));
5881 b6 -= b11;
5882
5883 tmp = b13 ^ b2;
5884 b13 = (tmp >> 34) | (tmp << (64 - 34));
5885 b2 -= b13;
5886
5887 tmp = b9 ^ b0;
5888 b9 = (tmp >> 16) | (tmp << (64 - 16));
5889 b0 -= b9;
5890
5891 tmp = b15 ^ b14;
5892 b15 = (tmp >> 30) | (tmp << (64 - 30));
5893 b14 -= b15 + k14 + t0;
5894 b15 -= k15 + 17;
5895
5896 tmp = b13 ^ b12;
5897 b13 = (tmp >> 44) | (tmp << (64 - 44));
5898 b12 -= b13 + k12;
5899 b13 -= k13 + t2;
5900
5901 tmp = b11 ^ b10;
5902 b11 = (tmp >> 47) | (tmp << (64 - 47));
5903 b10 -= b11 + k10;
5904 b11 -= k11;
5905
5906 tmp = b9 ^ b8;
5907 b9 = (tmp >> 12) | (tmp << (64 - 12));
5908 b8 -= b9 + k8;
5909 b9 -= k9;
5910
5911 tmp = b7 ^ b6;
5912 b7 = (tmp >> 31) | (tmp << (64 - 31));
5913 b6 -= b7 + k6;
5914 b7 -= k7;
5915
5916 tmp = b5 ^ b4;
5917 b5 = (tmp >> 37) | (tmp << (64 - 37));
5918 b4 -= b5 + k4;
5919 b5 -= k5;
5920
5921 tmp = b3 ^ b2;
5922 b3 = (tmp >> 9) | (tmp << (64 - 9));
5923 b2 -= b3 + k2;
5924 b3 -= k3;
5925
5926 tmp = b1 ^ b0;
5927 b1 = (tmp >> 41) | (tmp << (64 - 41));
5928 b0 -= b1 + k0;
5929 b1 -= k1;
5930
5931 tmp = b7 ^ b12;
5932 b7 = (tmp >> 25) | (tmp << (64 - 25));
5933 b12 -= b7;
5934
5935 tmp = b3 ^ b10;
5936 b3 = (tmp >> 16) | (tmp << (64 - 16));
5937 b10 -= b3;
5938
5939 tmp = b5 ^ b8;
5940 b5 = (tmp >> 28) | (tmp << (64 - 28));
5941 b8 -= b5;
5942
5943 tmp = b1 ^ b14;
5944 b1 = (tmp >> 47) | (tmp << (64 - 47));
5945 b14 -= b1;
5946
5947 tmp = b9 ^ b4;
5948 b9 = (tmp >> 41) | (tmp << (64 - 41));
5949 b4 -= b9;
5950
5951 tmp = b13 ^ b6;
5952 b13 = (tmp >> 48) | (tmp << (64 - 48));
5953 b6 -= b13;
5954
5955 tmp = b11 ^ b2;
5956 b11 = (tmp >> 20) | (tmp << (64 - 20));
5957 b2 -= b11;
5958
5959 tmp = b15 ^ b0;
5960 b15 = (tmp >> 5) | (tmp << (64 - 5));
5961 b0 -= b15;
5962
5963 tmp = b9 ^ b10;
5964 b9 = (tmp >> 17) | (tmp << (64 - 17));
5965 b10 -= b9;
5966
5967 tmp = b11 ^ b8;
5968 b11 = (tmp >> 59) | (tmp << (64 - 59));
5969 b8 -= b11;
5970
5971 tmp = b13 ^ b14;
5972 b13 = (tmp >> 41) | (tmp << (64 - 41));
5973 b14 -= b13;
5974
5975 tmp = b15 ^ b12;
5976 b15 = (tmp >> 34) | (tmp << (64 - 34));
5977 b12 -= b15;
5978
5979 tmp = b1 ^ b6;
5980 b1 = (tmp >> 13) | (tmp << (64 - 13));
5981 b6 -= b1;
5982
5983 tmp = b3 ^ b4;
5984 b3 = (tmp >> 51) | (tmp << (64 - 51));
5985 b4 -= b3;
5986
5987 tmp = b5 ^ b2;
5988 b5 = (tmp >> 4) | (tmp << (64 - 4));
5989 b2 -= b5;
5990
5991 tmp = b7 ^ b0;
5992 b7 = (tmp >> 33) | (tmp << (64 - 33));
5993 b0 -= b7;
5994
5995 tmp = b1 ^ b8;
5996 b1 = (tmp >> 52) | (tmp << (64 - 52));
5997 b8 -= b1;
5998
5999 tmp = b5 ^ b14;
6000 b5 = (tmp >> 23) | (tmp << (64 - 23));
6001 b14 -= b5;
6002
6003 tmp = b3 ^ b12;
6004 b3 = (tmp >> 18) | (tmp << (64 - 18));
6005 b12 -= b3;
6006
6007 tmp = b7 ^ b10;
6008 b7 = (tmp >> 49) | (tmp << (64 - 49));
6009 b10 -= b7;
6010
6011 tmp = b15 ^ b4;
6012 b15 = (tmp >> 55) | (tmp << (64 - 55));
6013 b4 -= b15;
6014
6015 tmp = b11 ^ b6;
6016 b11 = (tmp >> 10) | (tmp << (64 - 10));
6017 b6 -= b11;
6018
6019 tmp = b13 ^ b2;
6020 b13 = (tmp >> 19) | (tmp << (64 - 19));
6021 b2 -= b13;
6022
6023 tmp = b9 ^ b0;
6024 b9 = (tmp >> 38) | (tmp << (64 - 38));
6025 b0 -= b9;
6026
6027 tmp = b15 ^ b14;
6028 b15 = (tmp >> 37) | (tmp << (64 - 37));
6029 b14 -= b15 + k13 + t2;
6030 b15 -= k14 + 16;
6031
6032 tmp = b13 ^ b12;
6033 b13 = (tmp >> 22) | (tmp << (64 - 22));
6034 b12 -= b13 + k11;
6035 b13 -= k12 + t1;
6036
6037 tmp = b11 ^ b10;
6038 b11 = (tmp >> 17) | (tmp << (64 - 17));
6039 b10 -= b11 + k9;
6040 b11 -= k10;
6041
6042 tmp = b9 ^ b8;
6043 b9 = (tmp >> 8) | (tmp << (64 - 8));
6044 b8 -= b9 + k7;
6045 b9 -= k8;
6046
6047 tmp = b7 ^ b6;
6048 b7 = (tmp >> 47) | (tmp << (64 - 47));
6049 b6 -= b7 + k5;
6050 b7 -= k6;
6051
6052 tmp = b5 ^ b4;
6053 b5 = (tmp >> 8) | (tmp << (64 - 8));
6054 b4 -= b5 + k3;
6055 b5 -= k4;
6056
6057 tmp = b3 ^ b2;
6058 b3 = (tmp >> 13) | (tmp << (64 - 13));
6059 b2 -= b3 + k1;
6060 b3 -= k2;
6061
6062 tmp = b1 ^ b0;
6063 b1 = (tmp >> 24) | (tmp << (64 - 24));
6064 b0 -= b1 + k16;
6065 b1 -= k0;
6066
6067 tmp = b7 ^ b12;
6068 b7 = (tmp >> 20) | (tmp << (64 - 20));
6069 b12 -= b7;
6070
6071 tmp = b3 ^ b10;
6072 b3 = (tmp >> 37) | (tmp << (64 - 37));
6073 b10 -= b3;
6074
6075 tmp = b5 ^ b8;
6076 b5 = (tmp >> 31) | (tmp << (64 - 31));
6077 b8 -= b5;
6078
6079 tmp = b1 ^ b14;
6080 b1 = (tmp >> 23) | (tmp << (64 - 23));
6081 b14 -= b1;
6082
6083 tmp = b9 ^ b4;
6084 b9 = (tmp >> 52) | (tmp << (64 - 52));
6085 b4 -= b9;
6086
6087 tmp = b13 ^ b6;
6088 b13 = (tmp >> 35) | (tmp << (64 - 35));
6089 b6 -= b13;
6090
6091 tmp = b11 ^ b2;
6092 b11 = (tmp >> 48) | (tmp << (64 - 48));
6093 b2 -= b11;
6094
6095 tmp = b15 ^ b0;
6096 b15 = (tmp >> 9) | (tmp << (64 - 9));
6097 b0 -= b15;
6098
6099 tmp = b9 ^ b10;
6100 b9 = (tmp >> 25) | (tmp << (64 - 25));
6101 b10 -= b9;
6102
6103 tmp = b11 ^ b8;
6104 b11 = (tmp >> 44) | (tmp << (64 - 44));
6105 b8 -= b11;
6106
6107 tmp = b13 ^ b14;
6108 b13 = (tmp >> 42) | (tmp << (64 - 42));
6109 b14 -= b13;
6110
6111 tmp = b15 ^ b12;
6112 b15 = (tmp >> 19) | (tmp << (64 - 19));
6113 b12 -= b15;
6114
6115 tmp = b1 ^ b6;
6116 b1 = (tmp >> 46) | (tmp << (64 - 46));
6117 b6 -= b1;
6118
6119 tmp = b3 ^ b4;
6120 b3 = (tmp >> 47) | (tmp << (64 - 47));
6121 b4 -= b3;
6122
6123 tmp = b5 ^ b2;
6124 b5 = (tmp >> 44) | (tmp << (64 - 44));
6125 b2 -= b5;
6126
6127 tmp = b7 ^ b0;
6128 b7 = (tmp >> 31) | (tmp << (64 - 31));
6129 b0 -= b7;
6130
6131 tmp = b1 ^ b8;
6132 b1 = (tmp >> 41) | (tmp << (64 - 41));
6133 b8 -= b1;
6134
6135 tmp = b5 ^ b14;
6136 b5 = (tmp >> 42) | (tmp << (64 - 42));
6137 b14 -= b5;
6138
6139 tmp = b3 ^ b12;
6140 b3 = (tmp >> 53) | (tmp << (64 - 53));
6141 b12 -= b3;
6142
6143 tmp = b7 ^ b10;
6144 b7 = (tmp >> 4) | (tmp << (64 - 4));
6145 b10 -= b7;
6146
6147 tmp = b15 ^ b4;
6148 b15 = (tmp >> 51) | (tmp << (64 - 51));
6149 b4 -= b15;
6150
6151 tmp = b11 ^ b6;
6152 b11 = (tmp >> 56) | (tmp << (64 - 56));
6153 b6 -= b11;
6154
6155 tmp = b13 ^ b2;
6156 b13 = (tmp >> 34) | (tmp << (64 - 34));
6157 b2 -= b13;
6158
6159 tmp = b9 ^ b0;
6160 b9 = (tmp >> 16) | (tmp << (64 - 16));
6161 b0 -= b9;
6162
6163 tmp = b15 ^ b14;
6164 b15 = (tmp >> 30) | (tmp << (64 - 30));
6165 b14 -= b15 + k12 + t1;
6166 b15 -= k13 + 15;
6167
6168 tmp = b13 ^ b12;
6169 b13 = (tmp >> 44) | (tmp << (64 - 44));
6170 b12 -= b13 + k10;
6171 b13 -= k11 + t0;
6172
6173 tmp = b11 ^ b10;
6174 b11 = (tmp >> 47) | (tmp << (64 - 47));
6175 b10 -= b11 + k8;
6176 b11 -= k9;
6177
6178 tmp = b9 ^ b8;
6179 b9 = (tmp >> 12) | (tmp << (64 - 12));
6180 b8 -= b9 + k6;
6181 b9 -= k7;
6182
6183 tmp = b7 ^ b6;
6184 b7 = (tmp >> 31) | (tmp << (64 - 31));
6185 b6 -= b7 + k4;
6186 b7 -= k5;
6187
6188 tmp = b5 ^ b4;
6189 b5 = (tmp >> 37) | (tmp << (64 - 37));
6190 b4 -= b5 + k2;
6191 b5 -= k3;
6192
6193 tmp = b3 ^ b2;
6194 b3 = (tmp >> 9) | (tmp << (64 - 9));
6195 b2 -= b3 + k0;
6196 b3 -= k1;
6197
6198 tmp = b1 ^ b0;
6199 b1 = (tmp >> 41) | (tmp << (64 - 41));
6200 b0 -= b1 + k15;
6201 b1 -= k16;
6202
6203 tmp = b7 ^ b12;
6204 b7 = (tmp >> 25) | (tmp << (64 - 25));
6205 b12 -= b7;
6206
6207 tmp = b3 ^ b10;
6208 b3 = (tmp >> 16) | (tmp << (64 - 16));
6209 b10 -= b3;
6210
6211 tmp = b5 ^ b8;
6212 b5 = (tmp >> 28) | (tmp << (64 - 28));
6213 b8 -= b5;
6214
6215 tmp = b1 ^ b14;
6216 b1 = (tmp >> 47) | (tmp << (64 - 47));
6217 b14 -= b1;
6218
6219 tmp = b9 ^ b4;
6220 b9 = (tmp >> 41) | (tmp << (64 - 41));
6221 b4 -= b9;
6222
6223 tmp = b13 ^ b6;
6224 b13 = (tmp >> 48) | (tmp << (64 - 48));
6225 b6 -= b13;
6226
6227 tmp = b11 ^ b2;
6228 b11 = (tmp >> 20) | (tmp << (64 - 20));
6229 b2 -= b11;
6230
6231 tmp = b15 ^ b0;
6232 b15 = (tmp >> 5) | (tmp << (64 - 5));
6233 b0 -= b15;
6234
6235 tmp = b9 ^ b10;
6236 b9 = (tmp >> 17) | (tmp << (64 - 17));
6237 b10 -= b9;
6238
6239 tmp = b11 ^ b8;
6240 b11 = (tmp >> 59) | (tmp << (64 - 59));
6241 b8 -= b11;
6242
6243 tmp = b13 ^ b14;
6244 b13 = (tmp >> 41) | (tmp << (64 - 41));
6245 b14 -= b13;
6246
6247 tmp = b15 ^ b12;
6248 b15 = (tmp >> 34) | (tmp << (64 - 34));
6249 b12 -= b15;
6250
6251 tmp = b1 ^ b6;
6252 b1 = (tmp >> 13) | (tmp << (64 - 13));
6253 b6 -= b1;
6254
6255 tmp = b3 ^ b4;
6256 b3 = (tmp >> 51) | (tmp << (64 - 51));
6257 b4 -= b3;
6258
6259 tmp = b5 ^ b2;
6260 b5 = (tmp >> 4) | (tmp << (64 - 4));
6261 b2 -= b5;
6262
6263 tmp = b7 ^ b0;
6264 b7 = (tmp >> 33) | (tmp << (64 - 33));
6265 b0 -= b7;
6266
6267 tmp = b1 ^ b8;
6268 b1 = (tmp >> 52) | (tmp << (64 - 52));
6269 b8 -= b1;
6270
6271 tmp = b5 ^ b14;
6272 b5 = (tmp >> 23) | (tmp << (64 - 23));
6273 b14 -= b5;
6274
6275 tmp = b3 ^ b12;
6276 b3 = (tmp >> 18) | (tmp << (64 - 18));
6277 b12 -= b3;
6278
6279 tmp = b7 ^ b10;
6280 b7 = (tmp >> 49) | (tmp << (64 - 49));
6281 b10 -= b7;
6282
6283 tmp = b15 ^ b4;
6284 b15 = (tmp >> 55) | (tmp << (64 - 55));
6285 b4 -= b15;
6286
6287 tmp = b11 ^ b6;
6288 b11 = (tmp >> 10) | (tmp << (64 - 10));
6289 b6 -= b11;
6290
6291 tmp = b13 ^ b2;
6292 b13 = (tmp >> 19) | (tmp << (64 - 19));
6293 b2 -= b13;
6294
6295 tmp = b9 ^ b0;
6296 b9 = (tmp >> 38) | (tmp << (64 - 38));
6297 b0 -= b9;
6298
6299 tmp = b15 ^ b14;
6300 b15 = (tmp >> 37) | (tmp << (64 - 37));
6301 b14 -= b15 + k11 + t0;
6302 b15 -= k12 + 14;
6303
6304 tmp = b13 ^ b12;
6305 b13 = (tmp >> 22) | (tmp << (64 - 22));
6306 b12 -= b13 + k9;
6307 b13 -= k10 + t2;
6308
6309 tmp = b11 ^ b10;
6310 b11 = (tmp >> 17) | (tmp << (64 - 17));
6311 b10 -= b11 + k7;
6312 b11 -= k8;
6313
6314 tmp = b9 ^ b8;
6315 b9 = (tmp >> 8) | (tmp << (64 - 8));
6316 b8 -= b9 + k5;
6317 b9 -= k6;
6318
6319 tmp = b7 ^ b6;
6320 b7 = (tmp >> 47) | (tmp << (64 - 47));
6321 b6 -= b7 + k3;
6322 b7 -= k4;
6323
6324 tmp = b5 ^ b4;
6325 b5 = (tmp >> 8) | (tmp << (64 - 8));
6326 b4 -= b5 + k1;
6327 b5 -= k2;
6328
6329 tmp = b3 ^ b2;
6330 b3 = (tmp >> 13) | (tmp << (64 - 13));
6331 b2 -= b3 + k16;
6332 b3 -= k0;
6333
6334 tmp = b1 ^ b0;
6335 b1 = (tmp >> 24) | (tmp << (64 - 24));
6336 b0 -= b1 + k14;
6337 b1 -= k15;
6338
6339 tmp = b7 ^ b12;
6340 b7 = (tmp >> 20) | (tmp << (64 - 20));
6341 b12 -= b7;
6342
6343 tmp = b3 ^ b10;
6344 b3 = (tmp >> 37) | (tmp << (64 - 37));
6345 b10 -= b3;
6346
6347 tmp = b5 ^ b8;
6348 b5 = (tmp >> 31) | (tmp << (64 - 31));
6349 b8 -= b5;
6350
6351 tmp = b1 ^ b14;
6352 b1 = (tmp >> 23) | (tmp << (64 - 23));
6353 b14 -= b1;
6354
6355 tmp = b9 ^ b4;
6356 b9 = (tmp >> 52) | (tmp << (64 - 52));
6357 b4 -= b9;
6358
6359 tmp = b13 ^ b6;
6360 b13 = (tmp >> 35) | (tmp << (64 - 35));
6361 b6 -= b13;
6362
6363 tmp = b11 ^ b2;
6364 b11 = (tmp >> 48) | (tmp << (64 - 48));
6365 b2 -= b11;
6366
6367 tmp = b15 ^ b0;
6368 b15 = (tmp >> 9) | (tmp << (64 - 9));
6369 b0 -= b15;
6370
6371 tmp = b9 ^ b10;
6372 b9 = (tmp >> 25) | (tmp << (64 - 25));
6373 b10 -= b9;
6374
6375 tmp = b11 ^ b8;
6376 b11 = (tmp >> 44) | (tmp << (64 - 44));
6377 b8 -= b11;
6378
6379 tmp = b13 ^ b14;
6380 b13 = (tmp >> 42) | (tmp << (64 - 42));
6381 b14 -= b13;
6382
6383 tmp = b15 ^ b12;
6384 b15 = (tmp >> 19) | (tmp << (64 - 19));
6385 b12 -= b15;
6386
6387 tmp = b1 ^ b6;
6388 b1 = (tmp >> 46) | (tmp << (64 - 46));
6389 b6 -= b1;
6390
6391 tmp = b3 ^ b4;
6392 b3 = (tmp >> 47) | (tmp << (64 - 47));
6393 b4 -= b3;
6394
6395 tmp = b5 ^ b2;
6396 b5 = (tmp >> 44) | (tmp << (64 - 44));
6397 b2 -= b5;
6398
6399 tmp = b7 ^ b0;
6400 b7 = (tmp >> 31) | (tmp << (64 - 31));
6401 b0 -= b7;
6402
6403 tmp = b1 ^ b8;
6404 b1 = (tmp >> 41) | (tmp << (64 - 41));
6405 b8 -= b1;
6406
6407 tmp = b5 ^ b14;
6408 b5 = (tmp >> 42) | (tmp << (64 - 42));
6409 b14 -= b5;
6410
6411 tmp = b3 ^ b12;
6412 b3 = (tmp >> 53) | (tmp << (64 - 53));
6413 b12 -= b3;
6414
6415 tmp = b7 ^ b10;
6416 b7 = (tmp >> 4) | (tmp << (64 - 4));
6417 b10 -= b7;
6418
6419 tmp = b15 ^ b4;
6420 b15 = (tmp >> 51) | (tmp << (64 - 51));
6421 b4 -= b15;
6422
6423 tmp = b11 ^ b6;
6424 b11 = (tmp >> 56) | (tmp << (64 - 56));
6425 b6 -= b11;
6426
6427 tmp = b13 ^ b2;
6428 b13 = (tmp >> 34) | (tmp << (64 - 34));
6429 b2 -= b13;
6430
6431 tmp = b9 ^ b0;
6432 b9 = (tmp >> 16) | (tmp << (64 - 16));
6433 b0 -= b9;
6434
6435 tmp = b15 ^ b14;
6436 b15 = (tmp >> 30) | (tmp << (64 - 30));
6437 b14 -= b15 + k10 + t2;
6438 b15 -= k11 + 13;
6439
6440 tmp = b13 ^ b12;
6441 b13 = (tmp >> 44) | (tmp << (64 - 44));
6442 b12 -= b13 + k8;
6443 b13 -= k9 + t1;
6444
6445 tmp = b11 ^ b10;
6446 b11 = (tmp >> 47) | (tmp << (64 - 47));
6447 b10 -= b11 + k6;
6448 b11 -= k7;
6449
6450 tmp = b9 ^ b8;
6451 b9 = (tmp >> 12) | (tmp << (64 - 12));
6452 b8 -= b9 + k4;
6453 b9 -= k5;
6454
6455 tmp = b7 ^ b6;
6456 b7 = (tmp >> 31) | (tmp << (64 - 31));
6457 b6 -= b7 + k2;
6458 b7 -= k3;
6459
6460 tmp = b5 ^ b4;
6461 b5 = (tmp >> 37) | (tmp << (64 - 37));
6462 b4 -= b5 + k0;
6463 b5 -= k1;
6464
6465 tmp = b3 ^ b2;
6466 b3 = (tmp >> 9) | (tmp << (64 - 9));
6467 b2 -= b3 + k15;
6468 b3 -= k16;
6469
6470 tmp = b1 ^ b0;
6471 b1 = (tmp >> 41) | (tmp << (64 - 41));
6472 b0 -= b1 + k13;
6473 b1 -= k14;
6474
6475 tmp = b7 ^ b12;
6476 b7 = (tmp >> 25) | (tmp << (64 - 25));
6477 b12 -= b7;
6478
6479 tmp = b3 ^ b10;
6480 b3 = (tmp >> 16) | (tmp << (64 - 16));
6481 b10 -= b3;
6482
6483 tmp = b5 ^ b8;
6484 b5 = (tmp >> 28) | (tmp << (64 - 28));
6485 b8 -= b5;
6486
6487 tmp = b1 ^ b14;
6488 b1 = (tmp >> 47) | (tmp << (64 - 47));
6489 b14 -= b1;
6490
6491 tmp = b9 ^ b4;
6492 b9 = (tmp >> 41) | (tmp << (64 - 41));
6493 b4 -= b9;
6494
6495 tmp = b13 ^ b6;
6496 b13 = (tmp >> 48) | (tmp << (64 - 48));
6497 b6 -= b13;
6498
6499 tmp = b11 ^ b2;
6500 b11 = (tmp >> 20) | (tmp << (64 - 20));
6501 b2 -= b11;
6502
6503 tmp = b15 ^ b0;
6504 b15 = (tmp >> 5) | (tmp << (64 - 5));
6505 b0 -= b15;
6506
6507 tmp = b9 ^ b10;
6508 b9 = (tmp >> 17) | (tmp << (64 - 17));
6509 b10 -= b9;
6510
6511 tmp = b11 ^ b8;
6512 b11 = (tmp >> 59) | (tmp << (64 - 59));
6513 b8 -= b11;
6514
6515 tmp = b13 ^ b14;
6516 b13 = (tmp >> 41) | (tmp << (64 - 41));
6517 b14 -= b13;
6518
6519 tmp = b15 ^ b12;
6520 b15 = (tmp >> 34) | (tmp << (64 - 34));
6521 b12 -= b15;
6522
6523 tmp = b1 ^ b6;
6524 b1 = (tmp >> 13) | (tmp << (64 - 13));
6525 b6 -= b1;
6526
6527 tmp = b3 ^ b4;
6528 b3 = (tmp >> 51) | (tmp << (64 - 51));
6529 b4 -= b3;
6530
6531 tmp = b5 ^ b2;
6532 b5 = (tmp >> 4) | (tmp << (64 - 4));
6533 b2 -= b5;
6534
6535 tmp = b7 ^ b0;
6536 b7 = (tmp >> 33) | (tmp << (64 - 33));
6537 b0 -= b7;
6538
6539 tmp = b1 ^ b8;
6540 b1 = (tmp >> 52) | (tmp << (64 - 52));
6541 b8 -= b1;
6542
6543 tmp = b5 ^ b14;
6544 b5 = (tmp >> 23) | (tmp << (64 - 23));
6545 b14 -= b5;
6546
6547 tmp = b3 ^ b12;
6548 b3 = (tmp >> 18) | (tmp << (64 - 18));
6549 b12 -= b3;
6550
6551 tmp = b7 ^ b10;
6552 b7 = (tmp >> 49) | (tmp << (64 - 49));
6553 b10 -= b7;
6554
6555 tmp = b15 ^ b4;
6556 b15 = (tmp >> 55) | (tmp << (64 - 55));
6557 b4 -= b15;
6558
6559 tmp = b11 ^ b6;
6560 b11 = (tmp >> 10) | (tmp << (64 - 10));
6561 b6 -= b11;
6562
6563 tmp = b13 ^ b2;
6564 b13 = (tmp >> 19) | (tmp << (64 - 19));
6565 b2 -= b13;
6566
6567 tmp = b9 ^ b0;
6568 b9 = (tmp >> 38) | (tmp << (64 - 38));
6569 b0 -= b9;
6570
6571 tmp = b15 ^ b14;
6572 b15 = (tmp >> 37) | (tmp << (64 - 37));
6573 b14 -= b15 + k9 + t1;
6574 b15 -= k10 + 12;
6575
6576 tmp = b13 ^ b12;
6577 b13 = (tmp >> 22) | (tmp << (64 - 22));
6578 b12 -= b13 + k7;
6579 b13 -= k8 + t0;
6580
6581 tmp = b11 ^ b10;
6582 b11 = (tmp >> 17) | (tmp << (64 - 17));
6583 b10 -= b11 + k5;
6584 b11 -= k6;
6585
6586 tmp = b9 ^ b8;
6587 b9 = (tmp >> 8) | (tmp << (64 - 8));
6588 b8 -= b9 + k3;
6589 b9 -= k4;
6590
6591 tmp = b7 ^ b6;
6592 b7 = (tmp >> 47) | (tmp << (64 - 47));
6593 b6 -= b7 + k1;
6594 b7 -= k2;
6595
6596 tmp = b5 ^ b4;
6597 b5 = (tmp >> 8) | (tmp << (64 - 8));
6598 b4 -= b5 + k16;
6599 b5 -= k0;
6600
6601 tmp = b3 ^ b2;
6602 b3 = (tmp >> 13) | (tmp << (64 - 13));
6603 b2 -= b3 + k14;
6604 b3 -= k15;
6605
6606 tmp = b1 ^ b0;
6607 b1 = (tmp >> 24) | (tmp << (64 - 24));
6608 b0 -= b1 + k12;
6609 b1 -= k13;
6610
6611 tmp = b7 ^ b12;
6612 b7 = (tmp >> 20) | (tmp << (64 - 20));
6613 b12 -= b7;
6614
6615 tmp = b3 ^ b10;
6616 b3 = (tmp >> 37) | (tmp << (64 - 37));
6617 b10 -= b3;
6618
6619 tmp = b5 ^ b8;
6620 b5 = (tmp >> 31) | (tmp << (64 - 31));
6621 b8 -= b5;
6622
6623 tmp = b1 ^ b14;
6624 b1 = (tmp >> 23) | (tmp << (64 - 23));
6625 b14 -= b1;
6626
6627 tmp = b9 ^ b4;
6628 b9 = (tmp >> 52) | (tmp << (64 - 52));
6629 b4 -= b9;
6630
6631 tmp = b13 ^ b6;
6632 b13 = (tmp >> 35) | (tmp << (64 - 35));
6633 b6 -= b13;
6634
6635 tmp = b11 ^ b2;
6636 b11 = (tmp >> 48) | (tmp << (64 - 48));
6637 b2 -= b11;
6638
6639 tmp = b15 ^ b0;
6640 b15 = (tmp >> 9) | (tmp << (64 - 9));
6641 b0 -= b15;
6642
6643 tmp = b9 ^ b10;
6644 b9 = (tmp >> 25) | (tmp << (64 - 25));
6645 b10 -= b9;
6646
6647 tmp = b11 ^ b8;
6648 b11 = (tmp >> 44) | (tmp << (64 - 44));
6649 b8 -= b11;
6650
6651 tmp = b13 ^ b14;
6652 b13 = (tmp >> 42) | (tmp << (64 - 42));
6653 b14 -= b13;
6654
6655 tmp = b15 ^ b12;
6656 b15 = (tmp >> 19) | (tmp << (64 - 19));
6657 b12 -= b15;
6658
6659 tmp = b1 ^ b6;
6660 b1 = (tmp >> 46) | (tmp << (64 - 46));
6661 b6 -= b1;
6662
6663 tmp = b3 ^ b4;
6664 b3 = (tmp >> 47) | (tmp << (64 - 47));
6665 b4 -= b3;
6666
6667 tmp = b5 ^ b2;
6668 b5 = (tmp >> 44) | (tmp << (64 - 44));
6669 b2 -= b5;
6670
6671 tmp = b7 ^ b0;
6672 b7 = (tmp >> 31) | (tmp << (64 - 31));
6673 b0 -= b7;
6674
6675 tmp = b1 ^ b8;
6676 b1 = (tmp >> 41) | (tmp << (64 - 41));
6677 b8 -= b1;
6678
6679 tmp = b5 ^ b14;
6680 b5 = (tmp >> 42) | (tmp << (64 - 42));
6681 b14 -= b5;
6682
6683 tmp = b3 ^ b12;
6684 b3 = (tmp >> 53) | (tmp << (64 - 53));
6685 b12 -= b3;
6686
6687 tmp = b7 ^ b10;
6688 b7 = (tmp >> 4) | (tmp << (64 - 4));
6689 b10 -= b7;
6690
6691 tmp = b15 ^ b4;
6692 b15 = (tmp >> 51) | (tmp << (64 - 51));
6693 b4 -= b15;
6694
6695 tmp = b11 ^ b6;
6696 b11 = (tmp >> 56) | (tmp << (64 - 56));
6697 b6 -= b11;
6698
6699 tmp = b13 ^ b2;
6700 b13 = (tmp >> 34) | (tmp << (64 - 34));
6701 b2 -= b13;
6702
6703 tmp = b9 ^ b0;
6704 b9 = (tmp >> 16) | (tmp << (64 - 16));
6705 b0 -= b9;
6706
6707 tmp = b15 ^ b14;
6708 b15 = (tmp >> 30) | (tmp << (64 - 30));
6709 b14 -= b15 + k8 + t0;
6710 b15 -= k9 + 11;
6711
6712 tmp = b13 ^ b12;
6713 b13 = (tmp >> 44) | (tmp << (64 - 44));
6714 b12 -= b13 + k6;
6715 b13 -= k7 + t2;
6716
6717 tmp = b11 ^ b10;
6718 b11 = (tmp >> 47) | (tmp << (64 - 47));
6719 b10 -= b11 + k4;
6720 b11 -= k5;
6721
6722 tmp = b9 ^ b8;
6723 b9 = (tmp >> 12) | (tmp << (64 - 12));
6724 b8 -= b9 + k2;
6725 b9 -= k3;
6726
6727 tmp = b7 ^ b6;
6728 b7 = (tmp >> 31) | (tmp << (64 - 31));
6729 b6 -= b7 + k0;
6730 b7 -= k1;
6731
6732 tmp = b5 ^ b4;
6733 b5 = (tmp >> 37) | (tmp << (64 - 37));
6734 b4 -= b5 + k15;
6735 b5 -= k16;
6736
6737 tmp = b3 ^ b2;
6738 b3 = (tmp >> 9) | (tmp << (64 - 9));
6739 b2 -= b3 + k13;
6740 b3 -= k14;
6741
6742 tmp = b1 ^ b0;
6743 b1 = (tmp >> 41) | (tmp << (64 - 41));
6744 b0 -= b1 + k11;
6745 b1 -= k12;
6746
6747 tmp = b7 ^ b12;
6748 b7 = (tmp >> 25) | (tmp << (64 - 25));
6749 b12 -= b7;
6750
6751 tmp = b3 ^ b10;
6752 b3 = (tmp >> 16) | (tmp << (64 - 16));
6753 b10 -= b3;
6754
6755 tmp = b5 ^ b8;
6756 b5 = (tmp >> 28) | (tmp << (64 - 28));
6757 b8 -= b5;
6758
6759 tmp = b1 ^ b14;
6760 b1 = (tmp >> 47) | (tmp << (64 - 47));
6761 b14 -= b1;
6762
6763 tmp = b9 ^ b4;
6764 b9 = (tmp >> 41) | (tmp << (64 - 41));
6765 b4 -= b9;
6766
6767 tmp = b13 ^ b6;
6768 b13 = (tmp >> 48) | (tmp << (64 - 48));
6769 b6 -= b13;
6770
6771 tmp = b11 ^ b2;
6772 b11 = (tmp >> 20) | (tmp << (64 - 20));
6773 b2 -= b11;
6774
6775 tmp = b15 ^ b0;
6776 b15 = (tmp >> 5) | (tmp << (64 - 5));
6777 b0 -= b15;
6778
6779 tmp = b9 ^ b10;
6780 b9 = (tmp >> 17) | (tmp << (64 - 17));
6781 b10 -= b9;
6782
6783 tmp = b11 ^ b8;
6784 b11 = (tmp >> 59) | (tmp << (64 - 59));
6785 b8 -= b11;
6786
6787 tmp = b13 ^ b14;
6788 b13 = (tmp >> 41) | (tmp << (64 - 41));
6789 b14 -= b13;
6790
6791 tmp = b15 ^ b12;
6792 b15 = (tmp >> 34) | (tmp << (64 - 34));
6793 b12 -= b15;
6794
6795 tmp = b1 ^ b6;
6796 b1 = (tmp >> 13) | (tmp << (64 - 13));
6797 b6 -= b1;
6798
6799 tmp = b3 ^ b4;
6800 b3 = (tmp >> 51) | (tmp << (64 - 51));
6801 b4 -= b3;
6802
6803 tmp = b5 ^ b2;
6804 b5 = (tmp >> 4) | (tmp << (64 - 4));
6805 b2 -= b5;
6806
6807 tmp = b7 ^ b0;
6808 b7 = (tmp >> 33) | (tmp << (64 - 33));
6809 b0 -= b7;
6810
6811 tmp = b1 ^ b8;
6812 b1 = (tmp >> 52) | (tmp << (64 - 52));
6813 b8 -= b1;
6814
6815 tmp = b5 ^ b14;
6816 b5 = (tmp >> 23) | (tmp << (64 - 23));
6817 b14 -= b5;
6818
6819 tmp = b3 ^ b12;
6820 b3 = (tmp >> 18) | (tmp << (64 - 18));
6821 b12 -= b3;
6822
6823 tmp = b7 ^ b10;
6824 b7 = (tmp >> 49) | (tmp << (64 - 49));
6825 b10 -= b7;
6826
6827 tmp = b15 ^ b4;
6828 b15 = (tmp >> 55) | (tmp << (64 - 55));
6829 b4 -= b15;
6830
6831 tmp = b11 ^ b6;
6832 b11 = (tmp >> 10) | (tmp << (64 - 10));
6833 b6 -= b11;
6834
6835 tmp = b13 ^ b2;
6836 b13 = (tmp >> 19) | (tmp << (64 - 19));
6837 b2 -= b13;
6838
6839 tmp = b9 ^ b0;
6840 b9 = (tmp >> 38) | (tmp << (64 - 38));
6841 b0 -= b9;
6842
6843 tmp = b15 ^ b14;
6844 b15 = (tmp >> 37) | (tmp << (64 - 37));
6845 b14 -= b15 + k7 + t2;
6846 b15 -= k8 + 10;
6847
6848 tmp = b13 ^ b12;
6849 b13 = (tmp >> 22) | (tmp << (64 - 22));
6850 b12 -= b13 + k5;
6851 b13 -= k6 + t1;
6852
6853 tmp = b11 ^ b10;
6854 b11 = (tmp >> 17) | (tmp << (64 - 17));
6855 b10 -= b11 + k3;
6856 b11 -= k4;
6857
6858 tmp = b9 ^ b8;
6859 b9 = (tmp >> 8) | (tmp << (64 - 8));
6860 b8 -= b9 + k1;
6861 b9 -= k2;
6862
6863 tmp = b7 ^ b6;
6864 b7 = (tmp >> 47) | (tmp << (64 - 47));
6865 b6 -= b7 + k16;
6866 b7 -= k0;
6867
6868 tmp = b5 ^ b4;
6869 b5 = (tmp >> 8) | (tmp << (64 - 8));
6870 b4 -= b5 + k14;
6871 b5 -= k15;
6872
6873 tmp = b3 ^ b2;
6874 b3 = (tmp >> 13) | (tmp << (64 - 13));
6875 b2 -= b3 + k12;
6876 b3 -= k13;
6877
6878 tmp = b1 ^ b0;
6879 b1 = (tmp >> 24) | (tmp << (64 - 24));
6880 b0 -= b1 + k10;
6881 b1 -= k11;
6882
6883 tmp = b7 ^ b12;
6884 b7 = (tmp >> 20) | (tmp << (64 - 20));
6885 b12 -= b7;
6886
6887 tmp = b3 ^ b10;
6888 b3 = (tmp >> 37) | (tmp << (64 - 37));
6889 b10 -= b3;
6890
6891 tmp = b5 ^ b8;
6892 b5 = (tmp >> 31) | (tmp << (64 - 31));
6893 b8 -= b5;
6894
6895 tmp = b1 ^ b14;
6896 b1 = (tmp >> 23) | (tmp << (64 - 23));
6897 b14 -= b1;
6898
6899 tmp = b9 ^ b4;
6900 b9 = (tmp >> 52) | (tmp << (64 - 52));
6901 b4 -= b9;
6902
6903 tmp = b13 ^ b6;
6904 b13 = (tmp >> 35) | (tmp << (64 - 35));
6905 b6 -= b13;
6906
6907 tmp = b11 ^ b2;
6908 b11 = (tmp >> 48) | (tmp << (64 - 48));
6909 b2 -= b11;
6910
6911 tmp = b15 ^ b0;
6912 b15 = (tmp >> 9) | (tmp << (64 - 9));
6913 b0 -= b15;
6914
6915 tmp = b9 ^ b10;
6916 b9 = (tmp >> 25) | (tmp << (64 - 25));
6917 b10 -= b9;
6918
6919 tmp = b11 ^ b8;
6920 b11 = (tmp >> 44) | (tmp << (64 - 44));
6921 b8 -= b11;
6922
6923 tmp = b13 ^ b14;
6924 b13 = (tmp >> 42) | (tmp << (64 - 42));
6925 b14 -= b13;
6926
6927 tmp = b15 ^ b12;
6928 b15 = (tmp >> 19) | (tmp << (64 - 19));
6929 b12 -= b15;
6930
6931 tmp = b1 ^ b6;
6932 b1 = (tmp >> 46) | (tmp << (64 - 46));
6933 b6 -= b1;
6934
6935 tmp = b3 ^ b4;
6936 b3 = (tmp >> 47) | (tmp << (64 - 47));
6937 b4 -= b3;
6938
6939 tmp = b5 ^ b2;
6940 b5 = (tmp >> 44) | (tmp << (64 - 44));
6941 b2 -= b5;
6942
6943 tmp = b7 ^ b0;
6944 b7 = (tmp >> 31) | (tmp << (64 - 31));
6945 b0 -= b7;
6946
6947 tmp = b1 ^ b8;
6948 b1 = (tmp >> 41) | (tmp << (64 - 41));
6949 b8 -= b1;
6950
6951 tmp = b5 ^ b14;
6952 b5 = (tmp >> 42) | (tmp << (64 - 42));
6953 b14 -= b5;
6954
6955 tmp = b3 ^ b12;
6956 b3 = (tmp >> 53) | (tmp << (64 - 53));
6957 b12 -= b3;
6958
6959 tmp = b7 ^ b10;
6960 b7 = (tmp >> 4) | (tmp << (64 - 4));
6961 b10 -= b7;
6962
6963 tmp = b15 ^ b4;
6964 b15 = (tmp >> 51) | (tmp << (64 - 51));
6965 b4 -= b15;
6966
6967 tmp = b11 ^ b6;
6968 b11 = (tmp >> 56) | (tmp << (64 - 56));
6969 b6 -= b11;
6970
6971 tmp = b13 ^ b2;
6972 b13 = (tmp >> 34) | (tmp << (64 - 34));
6973 b2 -= b13;
6974
6975 tmp = b9 ^ b0;
6976 b9 = (tmp >> 16) | (tmp << (64 - 16));
6977 b0 -= b9;
6978
6979 tmp = b15 ^ b14;
6980 b15 = (tmp >> 30) | (tmp << (64 - 30));
6981 b14 -= b15 + k6 + t1;
6982 b15 -= k7 + 9;
6983
6984 tmp = b13 ^ b12;
6985 b13 = (tmp >> 44) | (tmp << (64 - 44));
6986 b12 -= b13 + k4;
6987 b13 -= k5 + t0;
6988
6989 tmp = b11 ^ b10;
6990 b11 = (tmp >> 47) | (tmp << (64 - 47));
6991 b10 -= b11 + k2;
6992 b11 -= k3;
6993
6994 tmp = b9 ^ b8;
6995 b9 = (tmp >> 12) | (tmp << (64 - 12));
6996 b8 -= b9 + k0;
6997 b9 -= k1;
6998
6999 tmp = b7 ^ b6;
7000 b7 = (tmp >> 31) | (tmp << (64 - 31));
7001 b6 -= b7 + k15;
7002 b7 -= k16;
7003
7004 tmp = b5 ^ b4;
7005 b5 = (tmp >> 37) | (tmp << (64 - 37));
7006 b4 -= b5 + k13;
7007 b5 -= k14;
7008
7009 tmp = b3 ^ b2;
7010 b3 = (tmp >> 9) | (tmp << (64 - 9));
7011 b2 -= b3 + k11;
7012 b3 -= k12;
7013
7014 tmp = b1 ^ b0;
7015 b1 = (tmp >> 41) | (tmp << (64 - 41));
7016 b0 -= b1 + k9;
7017 b1 -= k10;
7018
7019 tmp = b7 ^ b12;
7020 b7 = (tmp >> 25) | (tmp << (64 - 25));
7021 b12 -= b7;
7022
7023 tmp = b3 ^ b10;
7024 b3 = (tmp >> 16) | (tmp << (64 - 16));
7025 b10 -= b3;
7026
7027 tmp = b5 ^ b8;
7028 b5 = (tmp >> 28) | (tmp << (64 - 28));
7029 b8 -= b5;
7030
7031 tmp = b1 ^ b14;
7032 b1 = (tmp >> 47) | (tmp << (64 - 47));
7033 b14 -= b1;
7034
7035 tmp = b9 ^ b4;
7036 b9 = (tmp >> 41) | (tmp << (64 - 41));
7037 b4 -= b9;
7038
7039 tmp = b13 ^ b6;
7040 b13 = (tmp >> 48) | (tmp << (64 - 48));
7041 b6 -= b13;
7042
7043 tmp = b11 ^ b2;
7044 b11 = (tmp >> 20) | (tmp << (64 - 20));
7045 b2 -= b11;
7046
7047 tmp = b15 ^ b0;
7048 b15 = (tmp >> 5) | (tmp << (64 - 5));
7049 b0 -= b15;
7050
7051 tmp = b9 ^ b10;
7052 b9 = (tmp >> 17) | (tmp << (64 - 17));
7053 b10 -= b9;
7054
7055 tmp = b11 ^ b8;
7056 b11 = (tmp >> 59) | (tmp << (64 - 59));
7057 b8 -= b11;
7058
7059 tmp = b13 ^ b14;
7060 b13 = (tmp >> 41) | (tmp << (64 - 41));
7061 b14 -= b13;
7062
7063 tmp = b15 ^ b12;
7064 b15 = (tmp >> 34) | (tmp << (64 - 34));
7065 b12 -= b15;
7066
7067 tmp = b1 ^ b6;
7068 b1 = (tmp >> 13) | (tmp << (64 - 13));
7069 b6 -= b1;
7070
7071 tmp = b3 ^ b4;
7072 b3 = (tmp >> 51) | (tmp << (64 - 51));
7073 b4 -= b3;
7074
7075 tmp = b5 ^ b2;
7076 b5 = (tmp >> 4) | (tmp << (64 - 4));
7077 b2 -= b5;
7078
7079 tmp = b7 ^ b0;
7080 b7 = (tmp >> 33) | (tmp << (64 - 33));
7081 b0 -= b7;
7082
7083 tmp = b1 ^ b8;
7084 b1 = (tmp >> 52) | (tmp << (64 - 52));
7085 b8 -= b1;
7086
7087 tmp = b5 ^ b14;
7088 b5 = (tmp >> 23) | (tmp << (64 - 23));
7089 b14 -= b5;
7090
7091 tmp = b3 ^ b12;
7092 b3 = (tmp >> 18) | (tmp << (64 - 18));
7093 b12 -= b3;
7094
7095 tmp = b7 ^ b10;
7096 b7 = (tmp >> 49) | (tmp << (64 - 49));
7097 b10 -= b7;
7098
7099 tmp = b15 ^ b4;
7100 b15 = (tmp >> 55) | (tmp << (64 - 55));
7101 b4 -= b15;
7102
7103 tmp = b11 ^ b6;
7104 b11 = (tmp >> 10) | (tmp << (64 - 10));
7105 b6 -= b11;
7106
7107 tmp = b13 ^ b2;
7108 b13 = (tmp >> 19) | (tmp << (64 - 19));
7109 b2 -= b13;
7110
7111 tmp = b9 ^ b0;
7112 b9 = (tmp >> 38) | (tmp << (64 - 38));
7113 b0 -= b9;
7114
7115 tmp = b15 ^ b14;
7116 b15 = (tmp >> 37) | (tmp << (64 - 37));
7117 b14 -= b15 + k5 + t0;
7118 b15 -= k6 + 8;
7119
7120 tmp = b13 ^ b12;
7121 b13 = (tmp >> 22) | (tmp << (64 - 22));
7122 b12 -= b13 + k3;
7123 b13 -= k4 + t2;
7124
7125 tmp = b11 ^ b10;
7126 b11 = (tmp >> 17) | (tmp << (64 - 17));
7127 b10 -= b11 + k1;
7128 b11 -= k2;
7129
7130 tmp = b9 ^ b8;
7131 b9 = (tmp >> 8) | (tmp << (64 - 8));
7132 b8 -= b9 + k16;
7133 b9 -= k0;
7134
7135 tmp = b7 ^ b6;
7136 b7 = (tmp >> 47) | (tmp << (64 - 47));
7137 b6 -= b7 + k14;
7138 b7 -= k15;
7139
7140 tmp = b5 ^ b4;
7141 b5 = (tmp >> 8) | (tmp << (64 - 8));
7142 b4 -= b5 + k12;
7143 b5 -= k13;
7144
7145 tmp = b3 ^ b2;
7146 b3 = (tmp >> 13) | (tmp << (64 - 13));
7147 b2 -= b3 + k10;
7148 b3 -= k11;
7149
7150 tmp = b1 ^ b0;
7151 b1 = (tmp >> 24) | (tmp << (64 - 24));
7152 b0 -= b1 + k8;
7153 b1 -= k9;
7154
7155 tmp = b7 ^ b12;
7156 b7 = (tmp >> 20) | (tmp << (64 - 20));
7157 b12 -= b7;
7158
7159 tmp = b3 ^ b10;
7160 b3 = (tmp >> 37) | (tmp << (64 - 37));
7161 b10 -= b3;
7162
7163 tmp = b5 ^ b8;
7164 b5 = (tmp >> 31) | (tmp << (64 - 31));
7165 b8 -= b5;
7166
7167 tmp = b1 ^ b14;
7168 b1 = (tmp >> 23) | (tmp << (64 - 23));
7169 b14 -= b1;
7170
7171 tmp = b9 ^ b4;
7172 b9 = (tmp >> 52) | (tmp << (64 - 52));
7173 b4 -= b9;
7174
7175 tmp = b13 ^ b6;
7176 b13 = (tmp >> 35) | (tmp << (64 - 35));
7177 b6 -= b13;
7178
7179 tmp = b11 ^ b2;
7180 b11 = (tmp >> 48) | (tmp << (64 - 48));
7181 b2 -= b11;
7182
7183 tmp = b15 ^ b0;
7184 b15 = (tmp >> 9) | (tmp << (64 - 9));
7185 b0 -= b15;
7186
7187 tmp = b9 ^ b10;
7188 b9 = (tmp >> 25) | (tmp << (64 - 25));
7189 b10 -= b9;
7190
7191 tmp = b11 ^ b8;
7192 b11 = (tmp >> 44) | (tmp << (64 - 44));
7193 b8 -= b11;
7194
7195 tmp = b13 ^ b14;
7196 b13 = (tmp >> 42) | (tmp << (64 - 42));
7197 b14 -= b13;
7198
7199 tmp = b15 ^ b12;
7200 b15 = (tmp >> 19) | (tmp << (64 - 19));
7201 b12 -= b15;
7202
7203 tmp = b1 ^ b6;
7204 b1 = (tmp >> 46) | (tmp << (64 - 46));
7205 b6 -= b1;
7206
7207 tmp = b3 ^ b4;
7208 b3 = (tmp >> 47) | (tmp << (64 - 47));
7209 b4 -= b3;
7210
7211 tmp = b5 ^ b2;
7212 b5 = (tmp >> 44) | (tmp << (64 - 44));
7213 b2 -= b5;
7214
7215 tmp = b7 ^ b0;
7216 b7 = (tmp >> 31) | (tmp << (64 - 31));
7217 b0 -= b7;
7218
7219 tmp = b1 ^ b8;
7220 b1 = (tmp >> 41) | (tmp << (64 - 41));
7221 b8 -= b1;
7222
7223 tmp = b5 ^ b14;
7224 b5 = (tmp >> 42) | (tmp << (64 - 42));
7225 b14 -= b5;
7226
7227 tmp = b3 ^ b12;
7228 b3 = (tmp >> 53) | (tmp << (64 - 53));
7229 b12 -= b3;
7230
7231 tmp = b7 ^ b10;
7232 b7 = (tmp >> 4) | (tmp << (64 - 4));
7233 b10 -= b7;
7234
7235 tmp = b15 ^ b4;
7236 b15 = (tmp >> 51) | (tmp << (64 - 51));
7237 b4 -= b15;
7238
7239 tmp = b11 ^ b6;
7240 b11 = (tmp >> 56) | (tmp << (64 - 56));
7241 b6 -= b11;
7242
7243 tmp = b13 ^ b2;
7244 b13 = (tmp >> 34) | (tmp << (64 - 34));
7245 b2 -= b13;
7246
7247 tmp = b9 ^ b0;
7248 b9 = (tmp >> 16) | (tmp << (64 - 16));
7249 b0 -= b9;
7250
7251 tmp = b15 ^ b14;
7252 b15 = (tmp >> 30) | (tmp << (64 - 30));
7253 b14 -= b15 + k4 + t2;
7254 b15 -= k5 + 7;
7255
7256 tmp = b13 ^ b12;
7257 b13 = (tmp >> 44) | (tmp << (64 - 44));
7258 b12 -= b13 + k2;
7259 b13 -= k3 + t1;
7260
7261 tmp = b11 ^ b10;
7262 b11 = (tmp >> 47) | (tmp << (64 - 47));
7263 b10 -= b11 + k0;
7264 b11 -= k1;
7265
7266 tmp = b9 ^ b8;
7267 b9 = (tmp >> 12) | (tmp << (64 - 12));
7268 b8 -= b9 + k15;
7269 b9 -= k16;
7270
7271 tmp = b7 ^ b6;
7272 b7 = (tmp >> 31) | (tmp << (64 - 31));
7273 b6 -= b7 + k13;
7274 b7 -= k14;
7275
7276 tmp = b5 ^ b4;
7277 b5 = (tmp >> 37) | (tmp << (64 - 37));
7278 b4 -= b5 + k11;
7279 b5 -= k12;
7280
7281 tmp = b3 ^ b2;
7282 b3 = (tmp >> 9) | (tmp << (64 - 9));
7283 b2 -= b3 + k9;
7284 b3 -= k10;
7285
7286 tmp = b1 ^ b0;
7287 b1 = (tmp >> 41) | (tmp << (64 - 41));
7288 b0 -= b1 + k7;
7289 b1 -= k8;
7290
7291 tmp = b7 ^ b12;
7292 b7 = (tmp >> 25) | (tmp << (64 - 25));
7293 b12 -= b7;
7294
7295 tmp = b3 ^ b10;
7296 b3 = (tmp >> 16) | (tmp << (64 - 16));
7297 b10 -= b3;
7298
7299 tmp = b5 ^ b8;
7300 b5 = (tmp >> 28) | (tmp << (64 - 28));
7301 b8 -= b5;
7302
7303 tmp = b1 ^ b14;
7304 b1 = (tmp >> 47) | (tmp << (64 - 47));
7305 b14 -= b1;
7306
7307 tmp = b9 ^ b4;
7308 b9 = (tmp >> 41) | (tmp << (64 - 41));
7309 b4 -= b9;
7310
7311 tmp = b13 ^ b6;
7312 b13 = (tmp >> 48) | (tmp << (64 - 48));
7313 b6 -= b13;
7314
7315 tmp = b11 ^ b2;
7316 b11 = (tmp >> 20) | (tmp << (64 - 20));
7317 b2 -= b11;
7318
7319 tmp = b15 ^ b0;
7320 b15 = (tmp >> 5) | (tmp << (64 - 5));
7321 b0 -= b15;
7322
7323 tmp = b9 ^ b10;
7324 b9 = (tmp >> 17) | (tmp << (64 - 17));
7325 b10 -= b9;
7326
7327 tmp = b11 ^ b8;
7328 b11 = (tmp >> 59) | (tmp << (64 - 59));
7329 b8 -= b11;
7330
7331 tmp = b13 ^ b14;
7332 b13 = (tmp >> 41) | (tmp << (64 - 41));
7333 b14 -= b13;
7334
7335 tmp = b15 ^ b12;
7336 b15 = (tmp >> 34) | (tmp << (64 - 34));
7337 b12 -= b15;
7338
7339 tmp = b1 ^ b6;
7340 b1 = (tmp >> 13) | (tmp << (64 - 13));
7341 b6 -= b1;
7342
7343 tmp = b3 ^ b4;
7344 b3 = (tmp >> 51) | (tmp << (64 - 51));
7345 b4 -= b3;
7346
7347 tmp = b5 ^ b2;
7348 b5 = (tmp >> 4) | (tmp << (64 - 4));
7349 b2 -= b5;
7350
7351 tmp = b7 ^ b0;
7352 b7 = (tmp >> 33) | (tmp << (64 - 33));
7353 b0 -= b7;
7354
7355 tmp = b1 ^ b8;
7356 b1 = (tmp >> 52) | (tmp << (64 - 52));
7357 b8 -= b1;
7358
7359 tmp = b5 ^ b14;
7360 b5 = (tmp >> 23) | (tmp << (64 - 23));
7361 b14 -= b5;
7362
7363 tmp = b3 ^ b12;
7364 b3 = (tmp >> 18) | (tmp << (64 - 18));
7365 b12 -= b3;
7366
7367 tmp = b7 ^ b10;
7368 b7 = (tmp >> 49) | (tmp << (64 - 49));
7369 b10 -= b7;
7370
7371 tmp = b15 ^ b4;
7372 b15 = (tmp >> 55) | (tmp << (64 - 55));
7373 b4 -= b15;
7374
7375 tmp = b11 ^ b6;
7376 b11 = (tmp >> 10) | (tmp << (64 - 10));
7377 b6 -= b11;
7378
7379 tmp = b13 ^ b2;
7380 b13 = (tmp >> 19) | (tmp << (64 - 19));
7381 b2 -= b13;
7382
7383 tmp = b9 ^ b0;
7384 b9 = (tmp >> 38) | (tmp << (64 - 38));
7385 b0 -= b9;
7386
7387 tmp = b15 ^ b14;
7388 b15 = (tmp >> 37) | (tmp << (64 - 37));
7389 b14 -= b15 + k3 + t1;
7390 b15 -= k4 + 6;
7391
7392 tmp = b13 ^ b12;
7393 b13 = (tmp >> 22) | (tmp << (64 - 22));
7394 b12 -= b13 + k1;
7395 b13 -= k2 + t0;
7396
7397 tmp = b11 ^ b10;
7398 b11 = (tmp >> 17) | (tmp << (64 - 17));
7399 b10 -= b11 + k16;
7400 b11 -= k0;
7401
7402 tmp = b9 ^ b8;
7403 b9 = (tmp >> 8) | (tmp << (64 - 8));
7404 b8 -= b9 + k14;
7405 b9 -= k15;
7406
7407 tmp = b7 ^ b6;
7408 b7 = (tmp >> 47) | (tmp << (64 - 47));
7409 b6 -= b7 + k12;
7410 b7 -= k13;
7411
7412 tmp = b5 ^ b4;
7413 b5 = (tmp >> 8) | (tmp << (64 - 8));
7414 b4 -= b5 + k10;
7415 b5 -= k11;
7416
7417 tmp = b3 ^ b2;
7418 b3 = (tmp >> 13) | (tmp << (64 - 13));
7419 b2 -= b3 + k8;
7420 b3 -= k9;
7421
7422 tmp = b1 ^ b0;
7423 b1 = (tmp >> 24) | (tmp << (64 - 24));
7424 b0 -= b1 + k6;
7425 b1 -= k7;
7426
7427 tmp = b7 ^ b12;
7428 b7 = (tmp >> 20) | (tmp << (64 - 20));
7429 b12 -= b7;
7430
7431 tmp = b3 ^ b10;
7432 b3 = (tmp >> 37) | (tmp << (64 - 37));
7433 b10 -= b3;
7434
7435 tmp = b5 ^ b8;
7436 b5 = (tmp >> 31) | (tmp << (64 - 31));
7437 b8 -= b5;
7438
7439 tmp = b1 ^ b14;
7440 b1 = (tmp >> 23) | (tmp << (64 - 23));
7441 b14 -= b1;
7442
7443 tmp = b9 ^ b4;
7444 b9 = (tmp >> 52) | (tmp << (64 - 52));
7445 b4 -= b9;
7446
7447 tmp = b13 ^ b6;
7448 b13 = (tmp >> 35) | (tmp << (64 - 35));
7449 b6 -= b13;
7450
7451 tmp = b11 ^ b2;
7452 b11 = (tmp >> 48) | (tmp << (64 - 48));
7453 b2 -= b11;
7454
7455 tmp = b15 ^ b0;
7456 b15 = (tmp >> 9) | (tmp << (64 - 9));
7457 b0 -= b15;
7458
7459 tmp = b9 ^ b10;
7460 b9 = (tmp >> 25) | (tmp << (64 - 25));
7461 b10 -= b9;
7462
7463 tmp = b11 ^ b8;
7464 b11 = (tmp >> 44) | (tmp << (64 - 44));
7465 b8 -= b11;
7466
7467 tmp = b13 ^ b14;
7468 b13 = (tmp >> 42) | (tmp << (64 - 42));
7469 b14 -= b13;
7470
7471 tmp = b15 ^ b12;
7472 b15 = (tmp >> 19) | (tmp << (64 - 19));
7473 b12 -= b15;
7474
7475 tmp = b1 ^ b6;
7476 b1 = (tmp >> 46) | (tmp << (64 - 46));
7477 b6 -= b1;
7478
7479 tmp = b3 ^ b4;
7480 b3 = (tmp >> 47) | (tmp << (64 - 47));
7481 b4 -= b3;
7482
7483 tmp = b5 ^ b2;
7484 b5 = (tmp >> 44) | (tmp << (64 - 44));
7485 b2 -= b5;
7486
7487 tmp = b7 ^ b0;
7488 b7 = (tmp >> 31) | (tmp << (64 - 31));
7489 b0 -= b7;
7490
7491 tmp = b1 ^ b8;
7492 b1 = (tmp >> 41) | (tmp << (64 - 41));
7493 b8 -= b1;
7494
7495 tmp = b5 ^ b14;
7496 b5 = (tmp >> 42) | (tmp << (64 - 42));
7497 b14 -= b5;
7498
7499 tmp = b3 ^ b12;
7500 b3 = (tmp >> 53) | (tmp << (64 - 53));
7501 b12 -= b3;
7502
7503 tmp = b7 ^ b10;
7504 b7 = (tmp >> 4) | (tmp << (64 - 4));
7505 b10 -= b7;
7506
7507 tmp = b15 ^ b4;
7508 b15 = (tmp >> 51) | (tmp << (64 - 51));
7509 b4 -= b15;
7510
7511 tmp = b11 ^ b6;
7512 b11 = (tmp >> 56) | (tmp << (64 - 56));
7513 b6 -= b11;
7514
7515 tmp = b13 ^ b2;
7516 b13 = (tmp >> 34) | (tmp << (64 - 34));
7517 b2 -= b13;
7518
7519 tmp = b9 ^ b0;
7520 b9 = (tmp >> 16) | (tmp << (64 - 16));
7521 b0 -= b9;
7522
7523 tmp = b15 ^ b14;
7524 b15 = (tmp >> 30) | (tmp << (64 - 30));
7525 b14 -= b15 + k2 + t0;
7526 b15 -= k3 + 5;
7527
7528 tmp = b13 ^ b12;
7529 b13 = (tmp >> 44) | (tmp << (64 - 44));
7530 b12 -= b13 + k0;
7531 b13 -= k1 + t2;
7532
7533 tmp = b11 ^ b10;
7534 b11 = (tmp >> 47) | (tmp << (64 - 47));
7535 b10 -= b11 + k15;
7536 b11 -= k16;
7537
7538 tmp = b9 ^ b8;
7539 b9 = (tmp >> 12) | (tmp << (64 - 12));
7540 b8 -= b9 + k13;
7541 b9 -= k14;
7542
7543 tmp = b7 ^ b6;
7544 b7 = (tmp >> 31) | (tmp << (64 - 31));
7545 b6 -= b7 + k11;
7546 b7 -= k12;
7547
7548 tmp = b5 ^ b4;
7549 b5 = (tmp >> 37) | (tmp << (64 - 37));
7550 b4 -= b5 + k9;
7551 b5 -= k10;
7552
7553 tmp = b3 ^ b2;
7554 b3 = (tmp >> 9) | (tmp << (64 - 9));
7555 b2 -= b3 + k7;
7556 b3 -= k8;
7557
7558 tmp = b1 ^ b0;
7559 b1 = (tmp >> 41) | (tmp << (64 - 41));
7560 b0 -= b1 + k5;
7561 b1 -= k6;
7562
7563 tmp = b7 ^ b12;
7564 b7 = (tmp >> 25) | (tmp << (64 - 25));
7565 b12 -= b7;
7566
7567 tmp = b3 ^ b10;
7568 b3 = (tmp >> 16) | (tmp << (64 - 16));
7569 b10 -= b3;
7570
7571 tmp = b5 ^ b8;
7572 b5 = (tmp >> 28) | (tmp << (64 - 28));
7573 b8 -= b5;
7574
7575 tmp = b1 ^ b14;
7576 b1 = (tmp >> 47) | (tmp << (64 - 47));
7577 b14 -= b1;
7578
7579 tmp = b9 ^ b4;
7580 b9 = (tmp >> 41) | (tmp << (64 - 41));
7581 b4 -= b9;
7582
7583 tmp = b13 ^ b6;
7584 b13 = (tmp >> 48) | (tmp << (64 - 48));
7585 b6 -= b13;
7586
7587 tmp = b11 ^ b2;
7588 b11 = (tmp >> 20) | (tmp << (64 - 20));
7589 b2 -= b11;
7590
7591 tmp = b15 ^ b0;
7592 b15 = (tmp >> 5) | (tmp << (64 - 5));
7593 b0 -= b15;
7594
7595 tmp = b9 ^ b10;
7596 b9 = (tmp >> 17) | (tmp << (64 - 17));
7597 b10 -= b9;
7598
7599 tmp = b11 ^ b8;
7600 b11 = (tmp >> 59) | (tmp << (64 - 59));
7601 b8 -= b11;
7602
7603 tmp = b13 ^ b14;
7604 b13 = (tmp >> 41) | (tmp << (64 - 41));
7605 b14 -= b13;
7606
7607 tmp = b15 ^ b12;
7608 b15 = (tmp >> 34) | (tmp << (64 - 34));
7609 b12 -= b15;
7610
7611 tmp = b1 ^ b6;
7612 b1 = (tmp >> 13) | (tmp << (64 - 13));
7613 b6 -= b1;
7614
7615 tmp = b3 ^ b4;
7616 b3 = (tmp >> 51) | (tmp << (64 - 51));
7617 b4 -= b3;
7618
7619 tmp = b5 ^ b2;
7620 b5 = (tmp >> 4) | (tmp << (64 - 4));
7621 b2 -= b5;
7622
7623 tmp = b7 ^ b0;
7624 b7 = (tmp >> 33) | (tmp << (64 - 33));
7625 b0 -= b7;
7626
7627 tmp = b1 ^ b8;
7628 b1 = (tmp >> 52) | (tmp << (64 - 52));
7629 b8 -= b1;
7630
7631 tmp = b5 ^ b14;
7632 b5 = (tmp >> 23) | (tmp << (64 - 23));
7633 b14 -= b5;
7634
7635 tmp = b3 ^ b12;
7636 b3 = (tmp >> 18) | (tmp << (64 - 18));
7637 b12 -= b3;
7638
7639 tmp = b7 ^ b10;
7640 b7 = (tmp >> 49) | (tmp << (64 - 49));
7641 b10 -= b7;
7642
7643 tmp = b15 ^ b4;
7644 b15 = (tmp >> 55) | (tmp << (64 - 55));
7645 b4 -= b15;
7646
7647 tmp = b11 ^ b6;
7648 b11 = (tmp >> 10) | (tmp << (64 - 10));
7649 b6 -= b11;
7650
7651 tmp = b13 ^ b2;
7652 b13 = (tmp >> 19) | (tmp << (64 - 19));
7653 b2 -= b13;
7654
7655 tmp = b9 ^ b0;
7656 b9 = (tmp >> 38) | (tmp << (64 - 38));
7657 b0 -= b9;
7658
7659 tmp = b15 ^ b14;
7660 b15 = (tmp >> 37) | (tmp << (64 - 37));
7661 b14 -= b15 + k1 + t2;
7662 b15 -= k2 + 4;
7663
7664 tmp = b13 ^ b12;
7665 b13 = (tmp >> 22) | (tmp << (64 - 22));
7666 b12 -= b13 + k16;
7667 b13 -= k0 + t1;
7668
7669 tmp = b11 ^ b10;
7670 b11 = (tmp >> 17) | (tmp << (64 - 17));
7671 b10 -= b11 + k14;
7672 b11 -= k15;
7673
7674 tmp = b9 ^ b8;
7675 b9 = (tmp >> 8) | (tmp << (64 - 8));
7676 b8 -= b9 + k12;
7677 b9 -= k13;
7678
7679 tmp = b7 ^ b6;
7680 b7 = (tmp >> 47) | (tmp << (64 - 47));
7681 b6 -= b7 + k10;
7682 b7 -= k11;
7683
7684 tmp = b5 ^ b4;
7685 b5 = (tmp >> 8) | (tmp << (64 - 8));
7686 b4 -= b5 + k8;
7687 b5 -= k9;
7688
7689 tmp = b3 ^ b2;
7690 b3 = (tmp >> 13) | (tmp << (64 - 13));
7691 b2 -= b3 + k6;
7692 b3 -= k7;
7693
7694 tmp = b1 ^ b0;
7695 b1 = (tmp >> 24) | (tmp << (64 - 24));
7696 b0 -= b1 + k4;
7697 b1 -= k5;
7698
7699 tmp = b7 ^ b12;
7700 b7 = (tmp >> 20) | (tmp << (64 - 20));
7701 b12 -= b7;
7702
7703 tmp = b3 ^ b10;
7704 b3 = (tmp >> 37) | (tmp << (64 - 37));
7705 b10 -= b3;
7706
7707 tmp = b5 ^ b8;
7708 b5 = (tmp >> 31) | (tmp << (64 - 31));
7709 b8 -= b5;
7710
7711 tmp = b1 ^ b14;
7712 b1 = (tmp >> 23) | (tmp << (64 - 23));
7713 b14 -= b1;
7714
7715 tmp = b9 ^ b4;
7716 b9 = (tmp >> 52) | (tmp << (64 - 52));
7717 b4 -= b9;
7718
7719 tmp = b13 ^ b6;
7720 b13 = (tmp >> 35) | (tmp << (64 - 35));
7721 b6 -= b13;
7722
7723 tmp = b11 ^ b2;
7724 b11 = (tmp >> 48) | (tmp << (64 - 48));
7725 b2 -= b11;
7726
7727 tmp = b15 ^ b0;
7728 b15 = (tmp >> 9) | (tmp << (64 - 9));
7729 b0 -= b15;
7730
7731 tmp = b9 ^ b10;
7732 b9 = (tmp >> 25) | (tmp << (64 - 25));
7733 b10 -= b9;
7734
7735 tmp = b11 ^ b8;
7736 b11 = (tmp >> 44) | (tmp << (64 - 44));
7737 b8 -= b11;
7738
7739 tmp = b13 ^ b14;
7740 b13 = (tmp >> 42) | (tmp << (64 - 42));
7741 b14 -= b13;
7742
7743 tmp = b15 ^ b12;
7744 b15 = (tmp >> 19) | (tmp << (64 - 19));
7745 b12 -= b15;
7746
7747 tmp = b1 ^ b6;
7748 b1 = (tmp >> 46) | (tmp << (64 - 46));
7749 b6 -= b1;
7750
7751 tmp = b3 ^ b4;
7752 b3 = (tmp >> 47) | (tmp << (64 - 47));
7753 b4 -= b3;
7754
7755 tmp = b5 ^ b2;
7756 b5 = (tmp >> 44) | (tmp << (64 - 44));
7757 b2 -= b5;
7758
7759 tmp = b7 ^ b0;
7760 b7 = (tmp >> 31) | (tmp << (64 - 31));
7761 b0 -= b7;
7762
7763 tmp = b1 ^ b8;
7764 b1 = (tmp >> 41) | (tmp << (64 - 41));
7765 b8 -= b1;
7766
7767 tmp = b5 ^ b14;
7768 b5 = (tmp >> 42) | (tmp << (64 - 42));
7769 b14 -= b5;
7770
7771 tmp = b3 ^ b12;
7772 b3 = (tmp >> 53) | (tmp << (64 - 53));
7773 b12 -= b3;
7774
7775 tmp = b7 ^ b10;
7776 b7 = (tmp >> 4) | (tmp << (64 - 4));
7777 b10 -= b7;
7778
7779 tmp = b15 ^ b4;
7780 b15 = (tmp >> 51) | (tmp << (64 - 51));
7781 b4 -= b15;
7782
7783 tmp = b11 ^ b6;
7784 b11 = (tmp >> 56) | (tmp << (64 - 56));
7785 b6 -= b11;
7786
7787 tmp = b13 ^ b2;
7788 b13 = (tmp >> 34) | (tmp << (64 - 34));
7789 b2 -= b13;
7790
7791 tmp = b9 ^ b0;
7792 b9 = (tmp >> 16) | (tmp << (64 - 16));
7793 b0 -= b9;
7794
7795 tmp = b15 ^ b14;
7796 b15 = (tmp >> 30) | (tmp << (64 - 30));
7797 b14 -= b15 + k0 + t1;
7798 b15 -= k1 + 3;
7799
7800 tmp = b13 ^ b12;
7801 b13 = (tmp >> 44) | (tmp << (64 - 44));
7802 b12 -= b13 + k15;
7803 b13 -= k16 + t0;
7804
7805 tmp = b11 ^ b10;
7806 b11 = (tmp >> 47) | (tmp << (64 - 47));
7807 b10 -= b11 + k13;
7808 b11 -= k14;
7809
7810 tmp = b9 ^ b8;
7811 b9 = (tmp >> 12) | (tmp << (64 - 12));
7812 b8 -= b9 + k11;
7813 b9 -= k12;
7814
7815 tmp = b7 ^ b6;
7816 b7 = (tmp >> 31) | (tmp << (64 - 31));
7817 b6 -= b7 + k9;
7818 b7 -= k10;
7819
7820 tmp = b5 ^ b4;
7821 b5 = (tmp >> 37) | (tmp << (64 - 37));
7822 b4 -= b5 + k7;
7823 b5 -= k8;
7824
7825 tmp = b3 ^ b2;
7826 b3 = (tmp >> 9) | (tmp << (64 - 9));
7827 b2 -= b3 + k5;
7828 b3 -= k6;
7829
7830 tmp = b1 ^ b0;
7831 b1 = (tmp >> 41) | (tmp << (64 - 41));
7832 b0 -= b1 + k3;
7833 b1 -= k4;
7834
7835 tmp = b7 ^ b12;
7836 b7 = (tmp >> 25) | (tmp << (64 - 25));
7837 b12 -= b7;
7838
7839 tmp = b3 ^ b10;
7840 b3 = (tmp >> 16) | (tmp << (64 - 16));
7841 b10 -= b3;
7842
7843 tmp = b5 ^ b8;
7844 b5 = (tmp >> 28) | (tmp << (64 - 28));
7845 b8 -= b5;
7846
7847 tmp = b1 ^ b14;
7848 b1 = (tmp >> 47) | (tmp << (64 - 47));
7849 b14 -= b1;
7850
7851 tmp = b9 ^ b4;
7852 b9 = (tmp >> 41) | (tmp << (64 - 41));
7853 b4 -= b9;
7854
7855 tmp = b13 ^ b6;
7856 b13 = (tmp >> 48) | (tmp << (64 - 48));
7857 b6 -= b13;
7858
7859 tmp = b11 ^ b2;
7860 b11 = (tmp >> 20) | (tmp << (64 - 20));
7861 b2 -= b11;
7862
7863 tmp = b15 ^ b0;
7864 b15 = (tmp >> 5) | (tmp << (64 - 5));
7865 b0 -= b15;
7866
7867 tmp = b9 ^ b10;
7868 b9 = (tmp >> 17) | (tmp << (64 - 17));
7869 b10 -= b9;
7870
7871 tmp = b11 ^ b8;
7872 b11 = (tmp >> 59) | (tmp << (64 - 59));
7873 b8 -= b11;
7874
7875 tmp = b13 ^ b14;
7876 b13 = (tmp >> 41) | (tmp << (64 - 41));
7877 b14 -= b13;
7878
7879 tmp = b15 ^ b12;
7880 b15 = (tmp >> 34) | (tmp << (64 - 34));
7881 b12 -= b15;
7882
7883 tmp = b1 ^ b6;
7884 b1 = (tmp >> 13) | (tmp << (64 - 13));
7885 b6 -= b1;
7886
7887 tmp = b3 ^ b4;
7888 b3 = (tmp >> 51) | (tmp << (64 - 51));
7889 b4 -= b3;
7890
7891 tmp = b5 ^ b2;
7892 b5 = (tmp >> 4) | (tmp << (64 - 4));
7893 b2 -= b5;
7894
7895 tmp = b7 ^ b0;
7896 b7 = (tmp >> 33) | (tmp << (64 - 33));
7897 b0 -= b7;
7898
7899 tmp = b1 ^ b8;
7900 b1 = (tmp >> 52) | (tmp << (64 - 52));
7901 b8 -= b1;
7902
7903 tmp = b5 ^ b14;
7904 b5 = (tmp >> 23) | (tmp << (64 - 23));
7905 b14 -= b5;
7906
7907 tmp = b3 ^ b12;
7908 b3 = (tmp >> 18) | (tmp << (64 - 18));
7909 b12 -= b3;
7910
7911 tmp = b7 ^ b10;
7912 b7 = (tmp >> 49) | (tmp << (64 - 49));
7913 b10 -= b7;
7914
7915 tmp = b15 ^ b4;
7916 b15 = (tmp >> 55) | (tmp << (64 - 55));
7917 b4 -= b15;
7918
7919 tmp = b11 ^ b6;
7920 b11 = (tmp >> 10) | (tmp << (64 - 10));
7921 b6 -= b11;
7922
7923 tmp = b13 ^ b2;
7924 b13 = (tmp >> 19) | (tmp << (64 - 19));
7925 b2 -= b13;
7926
7927 tmp = b9 ^ b0;
7928 b9 = (tmp >> 38) | (tmp << (64 - 38));
7929 b0 -= b9;
7930
7931 tmp = b15 ^ b14;
7932 b15 = (tmp >> 37) | (tmp << (64 - 37));
7933 b14 -= b15 + k16 + t0;
7934 b15 -= k0 + 2;
7935
7936 tmp = b13 ^ b12;
7937 b13 = (tmp >> 22) | (tmp << (64 - 22));
7938 b12 -= b13 + k14;
7939 b13 -= k15 + t2;
7940
7941 tmp = b11 ^ b10;
7942 b11 = (tmp >> 17) | (tmp << (64 - 17));
7943 b10 -= b11 + k12;
7944 b11 -= k13;
7945
7946 tmp = b9 ^ b8;
7947 b9 = (tmp >> 8) | (tmp << (64 - 8));
7948 b8 -= b9 + k10;
7949 b9 -= k11;
7950
7951 tmp = b7 ^ b6;
7952 b7 = (tmp >> 47) | (tmp << (64 - 47));
7953 b6 -= b7 + k8;
7954 b7 -= k9;
7955
7956 tmp = b5 ^ b4;
7957 b5 = (tmp >> 8) | (tmp << (64 - 8));
7958 b4 -= b5 + k6;
7959 b5 -= k7;
7960
7961 tmp = b3 ^ b2;
7962 b3 = (tmp >> 13) | (tmp << (64 - 13));
7963 b2 -= b3 + k4;
7964 b3 -= k5;
7965
7966 tmp = b1 ^ b0;
7967 b1 = (tmp >> 24) | (tmp << (64 - 24));
7968 b0 -= b1 + k2;
7969 b1 -= k3;
7970
7971 tmp = b7 ^ b12;
7972 b7 = (tmp >> 20) | (tmp << (64 - 20));
7973 b12 -= b7;
7974
7975 tmp = b3 ^ b10;
7976 b3 = (tmp >> 37) | (tmp << (64 - 37));
7977 b10 -= b3;
7978
7979 tmp = b5 ^ b8;
7980 b5 = (tmp >> 31) | (tmp << (64 - 31));
7981 b8 -= b5;
7982
7983 tmp = b1 ^ b14;
7984 b1 = (tmp >> 23) | (tmp << (64 - 23));
7985 b14 -= b1;
7986
7987 tmp = b9 ^ b4;
7988 b9 = (tmp >> 52) | (tmp << (64 - 52));
7989 b4 -= b9;
7990
7991 tmp = b13 ^ b6;
7992 b13 = (tmp >> 35) | (tmp << (64 - 35));
7993 b6 -= b13;
7994
7995 tmp = b11 ^ b2;
7996 b11 = (tmp >> 48) | (tmp << (64 - 48));
7997 b2 -= b11;
7998
7999 tmp = b15 ^ b0;
8000 b15 = (tmp >> 9) | (tmp << (64 - 9));
8001 b0 -= b15;
8002
8003 tmp = b9 ^ b10;
8004 b9 = (tmp >> 25) | (tmp << (64 - 25));
8005 b10 -= b9;
8006
8007 tmp = b11 ^ b8;
8008 b11 = (tmp >> 44) | (tmp << (64 - 44));
8009 b8 -= b11;
8010
8011 tmp = b13 ^ b14;
8012 b13 = (tmp >> 42) | (tmp << (64 - 42));
8013 b14 -= b13;
8014
8015 tmp = b15 ^ b12;
8016 b15 = (tmp >> 19) | (tmp << (64 - 19));
8017 b12 -= b15;
8018
8019 tmp = b1 ^ b6;
8020 b1 = (tmp >> 46) | (tmp << (64 - 46));
8021 b6 -= b1;
8022
8023 tmp = b3 ^ b4;
8024 b3 = (tmp >> 47) | (tmp << (64 - 47));
8025 b4 -= b3;
8026
8027 tmp = b5 ^ b2;
8028 b5 = (tmp >> 44) | (tmp << (64 - 44));
8029 b2 -= b5;
8030
8031 tmp = b7 ^ b0;
8032 b7 = (tmp >> 31) | (tmp << (64 - 31));
8033 b0 -= b7;
8034
8035 tmp = b1 ^ b8;
8036 b1 = (tmp >> 41) | (tmp << (64 - 41));
8037 b8 -= b1;
8038
8039 tmp = b5 ^ b14;
8040 b5 = (tmp >> 42) | (tmp << (64 - 42));
8041 b14 -= b5;
8042
8043 tmp = b3 ^ b12;
8044 b3 = (tmp >> 53) | (tmp << (64 - 53));
8045 b12 -= b3;
8046
8047 tmp = b7 ^ b10;
8048 b7 = (tmp >> 4) | (tmp << (64 - 4));
8049 b10 -= b7;
8050
8051 tmp = b15 ^ b4;
8052 b15 = (tmp >> 51) | (tmp << (64 - 51));
8053 b4 -= b15;
8054
8055 tmp = b11 ^ b6;
8056 b11 = (tmp >> 56) | (tmp << (64 - 56));
8057 b6 -= b11;
8058
8059 tmp = b13 ^ b2;
8060 b13 = (tmp >> 34) | (tmp << (64 - 34));
8061 b2 -= b13;
8062
8063 tmp = b9 ^ b0;
8064 b9 = (tmp >> 16) | (tmp << (64 - 16));
8065 b0 -= b9;
8066
8067 tmp = b15 ^ b14;
8068 b15 = (tmp >> 30) | (tmp << (64 - 30));
8069 b14 -= b15 + k15 + t2;
8070 b15 -= k16 + 1;
8071
8072 tmp = b13 ^ b12;
8073 b13 = (tmp >> 44) | (tmp << (64 - 44));
8074 b12 -= b13 + k13;
8075 b13 -= k14 + t1;
8076
8077 tmp = b11 ^ b10;
8078 b11 = (tmp >> 47) | (tmp << (64 - 47));
8079 b10 -= b11 + k11;
8080 b11 -= k12;
8081
8082 tmp = b9 ^ b8;
8083 b9 = (tmp >> 12) | (tmp << (64 - 12));
8084 b8 -= b9 + k9;
8085 b9 -= k10;
8086
8087 tmp = b7 ^ b6;
8088 b7 = (tmp >> 31) | (tmp << (64 - 31));
8089 b6 -= b7 + k7;
8090 b7 -= k8;
8091
8092 tmp = b5 ^ b4;
8093 b5 = (tmp >> 37) | (tmp << (64 - 37));
8094 b4 -= b5 + k5;
8095 b5 -= k6;
8096
8097 tmp = b3 ^ b2;
8098 b3 = (tmp >> 9) | (tmp << (64 - 9));
8099 b2 -= b3 + k3;
8100 b3 -= k4;
8101
8102 tmp = b1 ^ b0;
8103 b1 = (tmp >> 41) | (tmp << (64 - 41));
8104 b0 -= b1 + k1;
8105 b1 -= k2;
8106
8107 tmp = b7 ^ b12;
8108 b7 = (tmp >> 25) | (tmp << (64 - 25));
8109 b12 -= b7;
8110
8111 tmp = b3 ^ b10;
8112 b3 = (tmp >> 16) | (tmp << (64 - 16));
8113 b10 -= b3;
8114
8115 tmp = b5 ^ b8;
8116 b5 = (tmp >> 28) | (tmp << (64 - 28));
8117 b8 -= b5;
8118
8119 tmp = b1 ^ b14;
8120 b1 = (tmp >> 47) | (tmp << (64 - 47));
8121 b14 -= b1;
8122
8123 tmp = b9 ^ b4;
8124 b9 = (tmp >> 41) | (tmp << (64 - 41));
8125 b4 -= b9;
8126
8127 tmp = b13 ^ b6;
8128 b13 = (tmp >> 48) | (tmp << (64 - 48));
8129 b6 -= b13;
8130
8131 tmp = b11 ^ b2;
8132 b11 = (tmp >> 20) | (tmp << (64 - 20));
8133 b2 -= b11;
8134
8135 tmp = b15 ^ b0;
8136 b15 = (tmp >> 5) | (tmp << (64 - 5));
8137 b0 -= b15;
8138
8139 tmp = b9 ^ b10;
8140 b9 = (tmp >> 17) | (tmp << (64 - 17));
8141 b10 -= b9;
8142
8143 tmp = b11 ^ b8;
8144 b11 = (tmp >> 59) | (tmp << (64 - 59));
8145 b8 -= b11;
8146
8147 tmp = b13 ^ b14;
8148 b13 = (tmp >> 41) | (tmp << (64 - 41));
8149 b14 -= b13;
8150
8151 tmp = b15 ^ b12;
8152 b15 = (tmp >> 34) | (tmp << (64 - 34));
8153 b12 -= b15;
8154
8155 tmp = b1 ^ b6;
8156 b1 = (tmp >> 13) | (tmp << (64 - 13));
8157 b6 -= b1;
8158
8159 tmp = b3 ^ b4;
8160 b3 = (tmp >> 51) | (tmp << (64 - 51));
8161 b4 -= b3;
8162
8163 tmp = b5 ^ b2;
8164 b5 = (tmp >> 4) | (tmp << (64 - 4));
8165 b2 -= b5;
8166
8167 tmp = b7 ^ b0;
8168 b7 = (tmp >> 33) | (tmp << (64 - 33));
8169 b0 -= b7;
8170
8171 tmp = b1 ^ b8;
8172 b1 = (tmp >> 52) | (tmp << (64 - 52));
8173 b8 -= b1;
8174
8175 tmp = b5 ^ b14;
8176 b5 = (tmp >> 23) | (tmp << (64 - 23));
8177 b14 -= b5;
8178
8179 tmp = b3 ^ b12;
8180 b3 = (tmp >> 18) | (tmp << (64 - 18));
8181 b12 -= b3;
8182
8183 tmp = b7 ^ b10;
8184 b7 = (tmp >> 49) | (tmp << (64 - 49));
8185 b10 -= b7;
8186
8187 tmp = b15 ^ b4;
8188 b15 = (tmp >> 55) | (tmp << (64 - 55));
8189 b4 -= b15;
8190
8191 tmp = b11 ^ b6;
8192 b11 = (tmp >> 10) | (tmp << (64 - 10));
8193 b6 -= b11;
8194
8195 tmp = b13 ^ b2;
8196 b13 = (tmp >> 19) | (tmp << (64 - 19));
8197 b2 -= b13;
8198
8199 tmp = b9 ^ b0;
8200 b9 = (tmp >> 38) | (tmp << (64 - 38));
8201 b0 -= b9;
8202
8203 tmp = b15 ^ b14;
8204 b15 = (tmp >> 37) | (tmp << (64 - 37));
8205 b14 -= b15 + k14 + t1;
8206 b15 -= k15;
8207
8208 tmp = b13 ^ b12;
8209 b13 = (tmp >> 22) | (tmp << (64 - 22));
8210 b12 -= b13 + k12;
8211 b13 -= k13 + t0;
8212
8213 tmp = b11 ^ b10;
8214 b11 = (tmp >> 17) | (tmp << (64 - 17));
8215 b10 -= b11 + k10;
8216 b11 -= k11;
8217
8218 tmp = b9 ^ b8;
8219 b9 = (tmp >> 8) | (tmp << (64 - 8));
8220 b8 -= b9 + k8;
8221 b9 -= k9;
8222
8223 tmp = b7 ^ b6;
8224 b7 = (tmp >> 47) | (tmp << (64 - 47));
8225 b6 -= b7 + k6;
8226 b7 -= k7;
8227
8228 tmp = b5 ^ b4;
8229 b5 = (tmp >> 8) | (tmp << (64 - 8));
8230 b4 -= b5 + k4;
8231 b5 -= k5;
8232
8233 tmp = b3 ^ b2;
8234 b3 = (tmp >> 13) | (tmp << (64 - 13));
8235 b2 -= b3 + k2;
8236 b3 -= k3;
8237
8238 tmp = b1 ^ b0;
8239 b1 = (tmp >> 24) | (tmp << (64 - 24));
8240 b0 -= b1 + k0;
8241 b1 -= k1;
8242
8243 output[15] = b15;
8244 output[14] = b14;
8245 output[13] = b13;
8246 output[12] = b12;
8247 output[11] = b11;
8248 output[10] = b10;
8249 output[9] = b9;
8250 output[8] = b8;
8251 output[7] = b7;
8252 output[6] = b6;
8253 output[5] = b5;
8254 output[4] = b4;
8255 output[3] = b3;
8256 output[2] = b2;
8257 output[1] = b1;
8258 output[0] = b0;
8259 }