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