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