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