1 #include <linux/bitops.h>
2 #include "threefish_api.h"
4 void threefish_encrypt_256(struct threefish_key *key_ctx, u64 *input,
7 u64 b0 = input[0], b1 = input[1],
8 b2 = input[2], b3 = input[3];
9 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
10 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
12 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
13 t2 = key_ctx->tweak[2];
17 b1 = rol64(b1, 14) ^ b0;
21 b3 = rol64(b3, 16) ^ b2;
24 b3 = rol64(b3, 52) ^ b0;
27 b1 = rol64(b1, 57) ^ b2;
30 b1 = rol64(b1, 23) ^ b0;
33 b3 = rol64(b3, 40) ^ b2;
36 b3 = rol64(b3, 5) ^ b0;
39 b1 = rol64(b1, 37) ^ b2;
43 b1 = rol64(b1, 25) ^ b0;
47 b3 = rol64(b3, 33) ^ b2;
50 b3 = rol64(b3, 46) ^ b0;
53 b1 = rol64(b1, 12) ^ b2;
56 b1 = rol64(b1, 58) ^ b0;
59 b3 = rol64(b3, 22) ^ b2;
62 b3 = rol64(b3, 32) ^ b0;
65 b1 = rol64(b1, 32) ^ b2;
70 b1 = rol64(b1, 14) ^ b0;
74 b3 = rol64(b3, 16) ^ b2;
77 b3 = rol64(b3, 52) ^ b0;
80 b1 = rol64(b1, 57) ^ b2;
83 b1 = rol64(b1, 23) ^ b0;
86 b3 = rol64(b3, 40) ^ b2;
89 b3 = rol64(b3, 5) ^ b0;
92 b1 = rol64(b1, 37) ^ b2;
96 b1 = rol64(b1, 25) ^ b0;
100 b3 = rol64(b3, 33) ^ b2;
103 b3 = rol64(b3, 46) ^ b0;
106 b1 = rol64(b1, 12) ^ b2;
109 b1 = rol64(b1, 58) ^ b0;
112 b3 = rol64(b3, 22) ^ b2;
115 b3 = rol64(b3, 32) ^ b0;
118 b1 = rol64(b1, 32) ^ b2;
123 b1 = rol64(b1, 14) ^ b0;
127 b3 = rol64(b3, 16) ^ b2;
130 b3 = rol64(b3, 52) ^ b0;
133 b1 = rol64(b1, 57) ^ b2;
136 b1 = rol64(b1, 23) ^ b0;
139 b3 = rol64(b3, 40) ^ b2;
142 b3 = rol64(b3, 5) ^ b0;
145 b1 = rol64(b1, 37) ^ b2;
149 b1 = rol64(b1, 25) ^ b0;
153 b3 = rol64(b3, 33) ^ b2;
156 b3 = rol64(b3, 46) ^ b0;
159 b1 = rol64(b1, 12) ^ b2;
162 b1 = rol64(b1, 58) ^ b0;
165 b3 = rol64(b3, 22) ^ b2;
168 b3 = rol64(b3, 32) ^ b0;
171 b1 = rol64(b1, 32) ^ b2;
176 b1 = rol64(b1, 14) ^ b0;
180 b3 = rol64(b3, 16) ^ b2;
183 b3 = rol64(b3, 52) ^ b0;
186 b1 = rol64(b1, 57) ^ b2;
189 b1 = rol64(b1, 23) ^ b0;
192 b3 = rol64(b3, 40) ^ b2;
195 b3 = rol64(b3, 5) ^ b0;
198 b1 = rol64(b1, 37) ^ b2;
202 b1 = rol64(b1, 25) ^ b0;
206 b3 = rol64(b3, 33) ^ b2;
209 b3 = rol64(b3, 46) ^ b0;
212 b1 = rol64(b1, 12) ^ b2;
215 b1 = rol64(b1, 58) ^ b0;
218 b3 = rol64(b3, 22) ^ b2;
221 b3 = rol64(b3, 32) ^ b0;
224 b1 = rol64(b1, 32) ^ b2;
229 b1 = rol64(b1, 14) ^ b0;
233 b3 = rol64(b3, 16) ^ b2;
236 b3 = rol64(b3, 52) ^ b0;
239 b1 = rol64(b1, 57) ^ b2;
242 b1 = rol64(b1, 23) ^ b0;
245 b3 = rol64(b3, 40) ^ b2;
248 b3 = rol64(b3, 5) ^ b0;
251 b1 = rol64(b1, 37) ^ b2;
255 b1 = rol64(b1, 25) ^ b0;
259 b3 = rol64(b3, 33) ^ b2;
262 b3 = rol64(b3, 46) ^ b0;
265 b1 = rol64(b1, 12) ^ b2;
268 b1 = rol64(b1, 58) ^ b0;
271 b3 = rol64(b3, 22) ^ b2;
274 b3 = rol64(b3, 32) ^ b0;
277 b1 = rol64(b1, 32) ^ b2;
282 b1 = rol64(b1, 14) ^ b0;
286 b3 = rol64(b3, 16) ^ b2;
289 b3 = rol64(b3, 52) ^ b0;
292 b1 = rol64(b1, 57) ^ b2;
295 b1 = rol64(b1, 23) ^ b0;
298 b3 = rol64(b3, 40) ^ b2;
301 b3 = rol64(b3, 5) ^ b0;
304 b1 = rol64(b1, 37) ^ b2;
308 b1 = rol64(b1, 25) ^ b0;
312 b3 = rol64(b3, 33) ^ b2;
315 b3 = rol64(b3, 46) ^ b0;
318 b1 = rol64(b1, 12) ^ b2;
321 b1 = rol64(b1, 58) ^ b0;
324 b3 = rol64(b3, 22) ^ b2;
327 b3 = rol64(b3, 32) ^ b0;
330 b1 = rol64(b1, 32) ^ b2;
335 b1 = rol64(b1, 14) ^ b0;
339 b3 = rol64(b3, 16) ^ b2;
342 b3 = rol64(b3, 52) ^ b0;
345 b1 = rol64(b1, 57) ^ b2;
348 b1 = rol64(b1, 23) ^ b0;
351 b3 = rol64(b3, 40) ^ b2;
354 b3 = rol64(b3, 5) ^ b0;
357 b1 = rol64(b1, 37) ^ b2;
361 b1 = rol64(b1, 25) ^ b0;
365 b3 = rol64(b3, 33) ^ b2;
368 b3 = rol64(b3, 46) ^ b0;
371 b1 = rol64(b1, 12) ^ b2;
374 b1 = rol64(b1, 58) ^ b0;
377 b3 = rol64(b3, 22) ^ b2;
380 b3 = rol64(b3, 32) ^ b0;
383 b1 = rol64(b1, 32) ^ b2;
388 b1 = rol64(b1, 14) ^ b0;
392 b3 = rol64(b3, 16) ^ b2;
395 b3 = rol64(b3, 52) ^ b0;
398 b1 = rol64(b1, 57) ^ b2;
401 b1 = rol64(b1, 23) ^ b0;
404 b3 = rol64(b3, 40) ^ b2;
407 b3 = rol64(b3, 5) ^ b0;
410 b1 = rol64(b1, 37) ^ b2;
414 b1 = rol64(b1, 25) ^ b0;
418 b3 = rol64(b3, 33) ^ b2;
421 b3 = rol64(b3, 46) ^ b0;
424 b1 = rol64(b1, 12) ^ b2;
427 b1 = rol64(b1, 58) ^ b0;
430 b3 = rol64(b3, 22) ^ b2;
433 b3 = rol64(b3, 32) ^ b0;
436 b1 = rol64(b1, 32) ^ b2;
441 b1 = rol64(b1, 14) ^ b0;
445 b3 = rol64(b3, 16) ^ b2;
448 b3 = rol64(b3, 52) ^ b0;
451 b1 = rol64(b1, 57) ^ b2;
454 b1 = rol64(b1, 23) ^ b0;
457 b3 = rol64(b3, 40) ^ b2;
460 b3 = rol64(b3, 5) ^ b0;
463 b1 = rol64(b1, 37) ^ b2;
467 b1 = rol64(b1, 25) ^ b0;
471 b3 = rol64(b3, 33) ^ b2;
474 b3 = rol64(b3, 46) ^ b0;
477 b1 = rol64(b1, 12) ^ b2;
480 b1 = rol64(b1, 58) ^ b0;
483 b3 = rol64(b3, 22) ^ b2;
486 b3 = rol64(b3, 32) ^ b0;
489 b1 = rol64(b1, 32) ^ b2;
492 output[1] = b1 + k4 + t0;
493 output[2] = b2 + k0 + t1;
494 output[3] = b3 + k1 + 18;
497 void threefish_decrypt_256(struct threefish_key *key_ctx, u64 *input,
500 u64 b0 = input[0], b1 = input[1],
501 b2 = input[2], b3 = input[3];
502 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
503 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
504 k4 = key_ctx->key[4];
505 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
506 t2 = key_ctx->tweak[2];
515 b3 = (tmp >> 32) | (tmp << (64 - 32));
519 b1 = (tmp >> 32) | (tmp << (64 - 32));
523 b1 = (tmp >> 58) | (tmp << (64 - 58));
527 b3 = (tmp >> 22) | (tmp << (64 - 22));
531 b3 = (tmp >> 46) | (tmp << (64 - 46));
535 b1 = (tmp >> 12) | (tmp << (64 - 12));
539 b1 = (tmp >> 25) | (tmp << (64 - 25));
544 b3 = (tmp >> 33) | (tmp << (64 - 33));
549 b3 = (tmp >> 5) | (tmp << (64 - 5));
553 b1 = (tmp >> 37) | (tmp << (64 - 37));
557 b1 = (tmp >> 23) | (tmp << (64 - 23));
561 b3 = (tmp >> 40) | (tmp << (64 - 40));
565 b3 = (tmp >> 52) | (tmp << (64 - 52));
569 b1 = (tmp >> 57) | (tmp << (64 - 57));
573 b1 = (tmp >> 14) | (tmp << (64 - 14));
578 b3 = (tmp >> 16) | (tmp << (64 - 16));
584 b3 = (tmp >> 32) | (tmp << (64 - 32));
588 b1 = (tmp >> 32) | (tmp << (64 - 32));
592 b1 = (tmp >> 58) | (tmp << (64 - 58));
596 b3 = (tmp >> 22) | (tmp << (64 - 22));
600 b3 = (tmp >> 46) | (tmp << (64 - 46));
604 b1 = (tmp >> 12) | (tmp << (64 - 12));
608 b1 = (tmp >> 25) | (tmp << (64 - 25));
613 b3 = (tmp >> 33) | (tmp << (64 - 33));
618 b3 = (tmp >> 5) | (tmp << (64 - 5));
622 b1 = (tmp >> 37) | (tmp << (64 - 37));
626 b1 = (tmp >> 23) | (tmp << (64 - 23));
630 b3 = (tmp >> 40) | (tmp << (64 - 40));
634 b3 = (tmp >> 52) | (tmp << (64 - 52));
638 b1 = (tmp >> 57) | (tmp << (64 - 57));
642 b1 = (tmp >> 14) | (tmp << (64 - 14));
647 b3 = (tmp >> 16) | (tmp << (64 - 16));
653 b3 = (tmp >> 32) | (tmp << (64 - 32));
657 b1 = (tmp >> 32) | (tmp << (64 - 32));
661 b1 = (tmp >> 58) | (tmp << (64 - 58));
665 b3 = (tmp >> 22) | (tmp << (64 - 22));
669 b3 = (tmp >> 46) | (tmp << (64 - 46));
673 b1 = (tmp >> 12) | (tmp << (64 - 12));
677 b1 = (tmp >> 25) | (tmp << (64 - 25));
682 b3 = (tmp >> 33) | (tmp << (64 - 33));
687 b3 = (tmp >> 5) | (tmp << (64 - 5));
691 b1 = (tmp >> 37) | (tmp << (64 - 37));
695 b1 = (tmp >> 23) | (tmp << (64 - 23));
699 b3 = (tmp >> 40) | (tmp << (64 - 40));
703 b3 = (tmp >> 52) | (tmp << (64 - 52));
707 b1 = (tmp >> 57) | (tmp << (64 - 57));
711 b1 = (tmp >> 14) | (tmp << (64 - 14));
716 b3 = (tmp >> 16) | (tmp << (64 - 16));
722 b3 = (tmp >> 32) | (tmp << (64 - 32));
726 b1 = (tmp >> 32) | (tmp << (64 - 32));
730 b1 = (tmp >> 58) | (tmp << (64 - 58));
734 b3 = (tmp >> 22) | (tmp << (64 - 22));
738 b3 = (tmp >> 46) | (tmp << (64 - 46));
742 b1 = (tmp >> 12) | (tmp << (64 - 12));
746 b1 = (tmp >> 25) | (tmp << (64 - 25));
751 b3 = (tmp >> 33) | (tmp << (64 - 33));
756 b3 = (tmp >> 5) | (tmp << (64 - 5));
760 b1 = (tmp >> 37) | (tmp << (64 - 37));
764 b1 = (tmp >> 23) | (tmp << (64 - 23));
768 b3 = (tmp >> 40) | (tmp << (64 - 40));
772 b3 = (tmp >> 52) | (tmp << (64 - 52));
776 b1 = (tmp >> 57) | (tmp << (64 - 57));
780 b1 = (tmp >> 14) | (tmp << (64 - 14));
785 b3 = (tmp >> 16) | (tmp << (64 - 16));
791 b3 = (tmp >> 32) | (tmp << (64 - 32));
795 b1 = (tmp >> 32) | (tmp << (64 - 32));
799 b1 = (tmp >> 58) | (tmp << (64 - 58));
803 b3 = (tmp >> 22) | (tmp << (64 - 22));
807 b3 = (tmp >> 46) | (tmp << (64 - 46));
811 b1 = (tmp >> 12) | (tmp << (64 - 12));
815 b1 = (tmp >> 25) | (tmp << (64 - 25));
820 b3 = (tmp >> 33) | (tmp << (64 - 33));
825 b3 = (tmp >> 5) | (tmp << (64 - 5));
829 b1 = (tmp >> 37) | (tmp << (64 - 37));
833 b1 = (tmp >> 23) | (tmp << (64 - 23));
837 b3 = (tmp >> 40) | (tmp << (64 - 40));
841 b3 = (tmp >> 52) | (tmp << (64 - 52));
845 b1 = (tmp >> 57) | (tmp << (64 - 57));
849 b1 = (tmp >> 14) | (tmp << (64 - 14));
854 b3 = (tmp >> 16) | (tmp << (64 - 16));
860 b3 = (tmp >> 32) | (tmp << (64 - 32));
864 b1 = (tmp >> 32) | (tmp << (64 - 32));
868 b1 = (tmp >> 58) | (tmp << (64 - 58));
872 b3 = (tmp >> 22) | (tmp << (64 - 22));
876 b3 = (tmp >> 46) | (tmp << (64 - 46));
880 b1 = (tmp >> 12) | (tmp << (64 - 12));
884 b1 = (tmp >> 25) | (tmp << (64 - 25));
889 b3 = (tmp >> 33) | (tmp << (64 - 33));
894 b3 = (tmp >> 5) | (tmp << (64 - 5));
898 b1 = (tmp >> 37) | (tmp << (64 - 37));
902 b1 = (tmp >> 23) | (tmp << (64 - 23));
906 b3 = (tmp >> 40) | (tmp << (64 - 40));
910 b3 = (tmp >> 52) | (tmp << (64 - 52));
914 b1 = (tmp >> 57) | (tmp << (64 - 57));
918 b1 = (tmp >> 14) | (tmp << (64 - 14));
923 b3 = (tmp >> 16) | (tmp << (64 - 16));
929 b3 = (tmp >> 32) | (tmp << (64 - 32));
933 b1 = (tmp >> 32) | (tmp << (64 - 32));
937 b1 = (tmp >> 58) | (tmp << (64 - 58));
941 b3 = (tmp >> 22) | (tmp << (64 - 22));
945 b3 = (tmp >> 46) | (tmp << (64 - 46));
949 b1 = (tmp >> 12) | (tmp << (64 - 12));
953 b1 = (tmp >> 25) | (tmp << (64 - 25));
958 b3 = (tmp >> 33) | (tmp << (64 - 33));
963 b3 = (tmp >> 5) | (tmp << (64 - 5));
967 b1 = (tmp >> 37) | (tmp << (64 - 37));
971 b1 = (tmp >> 23) | (tmp << (64 - 23));
975 b3 = (tmp >> 40) | (tmp << (64 - 40));
979 b3 = (tmp >> 52) | (tmp << (64 - 52));
983 b1 = (tmp >> 57) | (tmp << (64 - 57));
987 b1 = (tmp >> 14) | (tmp << (64 - 14));
992 b3 = (tmp >> 16) | (tmp << (64 - 16));
998 b3 = (tmp >> 32) | (tmp << (64 - 32));
1002 b1 = (tmp >> 32) | (tmp << (64 - 32));
1006 b1 = (tmp >> 58) | (tmp << (64 - 58));
1010 b3 = (tmp >> 22) | (tmp << (64 - 22));
1014 b3 = (tmp >> 46) | (tmp << (64 - 46));
1018 b1 = (tmp >> 12) | (tmp << (64 - 12));
1022 b1 = (tmp >> 25) | (tmp << (64 - 25));
1027 b3 = (tmp >> 33) | (tmp << (64 - 33));
1032 b3 = (tmp >> 5) | (tmp << (64 - 5));
1036 b1 = (tmp >> 37) | (tmp << (64 - 37));
1040 b1 = (tmp >> 23) | (tmp << (64 - 23));
1044 b3 = (tmp >> 40) | (tmp << (64 - 40));
1048 b3 = (tmp >> 52) | (tmp << (64 - 52));
1052 b1 = (tmp >> 57) | (tmp << (64 - 57));
1056 b1 = (tmp >> 14) | (tmp << (64 - 14));
1061 b3 = (tmp >> 16) | (tmp << (64 - 16));
1067 b3 = (tmp >> 32) | (tmp << (64 - 32));
1071 b1 = (tmp >> 32) | (tmp << (64 - 32));
1075 b1 = (tmp >> 58) | (tmp << (64 - 58));
1079 b3 = (tmp >> 22) | (tmp << (64 - 22));
1083 b3 = (tmp >> 46) | (tmp << (64 - 46));
1087 b1 = (tmp >> 12) | (tmp << (64 - 12));
1091 b1 = (tmp >> 25) | (tmp << (64 - 25));
1096 b3 = (tmp >> 33) | (tmp << (64 - 33));
1101 b3 = (tmp >> 5) | (tmp << (64 - 5));
1105 b1 = (tmp >> 37) | (tmp << (64 - 37));
1109 b1 = (tmp >> 23) | (tmp << (64 - 23));
1113 b3 = (tmp >> 40) | (tmp << (64 - 40));
1117 b3 = (tmp >> 52) | (tmp << (64 - 52));
1121 b1 = (tmp >> 57) | (tmp << (64 - 57));
1125 b1 = (tmp >> 14) | (tmp << (64 - 14));
1130 b3 = (tmp >> 16) | (tmp << (64 - 16));
1140 void threefish_encrypt_512(struct threefish_key *key_ctx, u64 *input,
1143 u64 b0 = input[0], b1 = input[1],
1144 b2 = input[2], b3 = input[3],
1145 b4 = input[4], b5 = input[5],
1146 b6 = input[6], b7 = input[7];
1147 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
1148 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
1149 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
1150 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
1151 k8 = key_ctx->key[8];
1152 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
1153 t2 = key_ctx->tweak[2];
1157 b1 = rol64(b1, 46) ^ b0;
1161 b3 = rol64(b3, 36) ^ b2;
1165 b5 = rol64(b5, 19) ^ b4;
1169 b7 = rol64(b7, 37) ^ b6;
1172 b1 = rol64(b1, 33) ^ b2;
1175 b7 = rol64(b7, 27) ^ b4;
1178 b5 = rol64(b5, 14) ^ b6;
1181 b3 = rol64(b3, 42) ^ b0;
1184 b1 = rol64(b1, 17) ^ b4;
1187 b3 = rol64(b3, 49) ^ b6;
1190 b5 = rol64(b5, 36) ^ b0;
1193 b7 = rol64(b7, 39) ^ b2;
1196 b1 = rol64(b1, 44) ^ b6;
1199 b7 = rol64(b7, 9) ^ b0;
1202 b5 = rol64(b5, 54) ^ b2;
1205 b3 = rol64(b3, 56) ^ b4;
1209 b1 = rol64(b1, 39) ^ b0;
1213 b3 = rol64(b3, 30) ^ b2;
1217 b5 = rol64(b5, 34) ^ b4;
1221 b7 = rol64(b7, 24) ^ b6;
1224 b1 = rol64(b1, 13) ^ b2;
1227 b7 = rol64(b7, 50) ^ b4;
1230 b5 = rol64(b5, 10) ^ b6;
1233 b3 = rol64(b3, 17) ^ b0;
1236 b1 = rol64(b1, 25) ^ b4;
1239 b3 = rol64(b3, 29) ^ b6;
1242 b5 = rol64(b5, 39) ^ b0;
1245 b7 = rol64(b7, 43) ^ b2;
1248 b1 = rol64(b1, 8) ^ b6;
1251 b7 = rol64(b7, 35) ^ b0;
1254 b5 = rol64(b5, 56) ^ b2;
1257 b3 = rol64(b3, 22) ^ b4;
1261 b1 = rol64(b1, 46) ^ b0;
1265 b3 = rol64(b3, 36) ^ b2;
1269 b5 = rol64(b5, 19) ^ b4;
1273 b7 = rol64(b7, 37) ^ b6;
1276 b1 = rol64(b1, 33) ^ b2;
1279 b7 = rol64(b7, 27) ^ b4;
1282 b5 = rol64(b5, 14) ^ b6;
1285 b3 = rol64(b3, 42) ^ b0;
1288 b1 = rol64(b1, 17) ^ b4;
1291 b3 = rol64(b3, 49) ^ b6;
1294 b5 = rol64(b5, 36) ^ b0;
1297 b7 = rol64(b7, 39) ^ b2;
1300 b1 = rol64(b1, 44) ^ b6;
1303 b7 = rol64(b7, 9) ^ b0;
1306 b5 = rol64(b5, 54) ^ b2;
1309 b3 = rol64(b3, 56) ^ b4;
1313 b1 = rol64(b1, 39) ^ b0;
1317 b3 = rol64(b3, 30) ^ b2;
1321 b5 = rol64(b5, 34) ^ b4;
1325 b7 = rol64(b7, 24) ^ b6;
1328 b1 = rol64(b1, 13) ^ b2;
1331 b7 = rol64(b7, 50) ^ b4;
1334 b5 = rol64(b5, 10) ^ b6;
1337 b3 = rol64(b3, 17) ^ b0;
1340 b1 = rol64(b1, 25) ^ b4;
1343 b3 = rol64(b3, 29) ^ b6;
1346 b5 = rol64(b5, 39) ^ b0;
1349 b7 = rol64(b7, 43) ^ b2;
1352 b1 = rol64(b1, 8) ^ b6;
1355 b7 = rol64(b7, 35) ^ b0;
1358 b5 = rol64(b5, 56) ^ b2;
1361 b3 = rol64(b3, 22) ^ b4;
1365 b1 = rol64(b1, 46) ^ b0;
1369 b3 = rol64(b3, 36) ^ b2;
1373 b5 = rol64(b5, 19) ^ b4;
1377 b7 = rol64(b7, 37) ^ b6;
1380 b1 = rol64(b1, 33) ^ b2;
1383 b7 = rol64(b7, 27) ^ b4;
1386 b5 = rol64(b5, 14) ^ b6;
1389 b3 = rol64(b3, 42) ^ b0;
1392 b1 = rol64(b1, 17) ^ b4;
1395 b3 = rol64(b3, 49) ^ b6;
1398 b5 = rol64(b5, 36) ^ b0;
1401 b7 = rol64(b7, 39) ^ b2;
1404 b1 = rol64(b1, 44) ^ b6;
1407 b7 = rol64(b7, 9) ^ b0;
1410 b5 = rol64(b5, 54) ^ b2;
1413 b3 = rol64(b3, 56) ^ b4;
1417 b1 = rol64(b1, 39) ^ b0;
1421 b3 = rol64(b3, 30) ^ b2;
1425 b5 = rol64(b5, 34) ^ b4;
1429 b7 = rol64(b7, 24) ^ b6;
1432 b1 = rol64(b1, 13) ^ b2;
1435 b7 = rol64(b7, 50) ^ b4;
1438 b5 = rol64(b5, 10) ^ b6;
1441 b3 = rol64(b3, 17) ^ b0;
1444 b1 = rol64(b1, 25) ^ b4;
1447 b3 = rol64(b3, 29) ^ b6;
1450 b5 = rol64(b5, 39) ^ b0;
1453 b7 = rol64(b7, 43) ^ b2;
1456 b1 = rol64(b1, 8) ^ b6;
1459 b7 = rol64(b7, 35) ^ b0;
1462 b5 = rol64(b5, 56) ^ b2;
1465 b3 = rol64(b3, 22) ^ b4;
1469 b1 = rol64(b1, 46) ^ b0;
1473 b3 = rol64(b3, 36) ^ b2;
1477 b5 = rol64(b5, 19) ^ b4;
1481 b7 = rol64(b7, 37) ^ b6;
1484 b1 = rol64(b1, 33) ^ b2;
1487 b7 = rol64(b7, 27) ^ b4;
1490 b5 = rol64(b5, 14) ^ b6;
1493 b3 = rol64(b3, 42) ^ b0;
1496 b1 = rol64(b1, 17) ^ b4;
1499 b3 = rol64(b3, 49) ^ b6;
1502 b5 = rol64(b5, 36) ^ b0;
1505 b7 = rol64(b7, 39) ^ b2;
1508 b1 = rol64(b1, 44) ^ b6;
1511 b7 = rol64(b7, 9) ^ b0;
1514 b5 = rol64(b5, 54) ^ b2;
1517 b3 = rol64(b3, 56) ^ b4;
1521 b1 = rol64(b1, 39) ^ b0;
1525 b3 = rol64(b3, 30) ^ b2;
1529 b5 = rol64(b5, 34) ^ b4;
1533 b7 = rol64(b7, 24) ^ b6;
1536 b1 = rol64(b1, 13) ^ b2;
1539 b7 = rol64(b7, 50) ^ b4;
1542 b5 = rol64(b5, 10) ^ b6;
1545 b3 = rol64(b3, 17) ^ b0;
1548 b1 = rol64(b1, 25) ^ b4;
1551 b3 = rol64(b3, 29) ^ b6;
1554 b5 = rol64(b5, 39) ^ b0;
1557 b7 = rol64(b7, 43) ^ b2;
1560 b1 = rol64(b1, 8) ^ b6;
1563 b7 = rol64(b7, 35) ^ b0;
1566 b5 = rol64(b5, 56) ^ b2;
1569 b3 = rol64(b3, 22) ^ b4;
1573 b1 = rol64(b1, 46) ^ b0;
1577 b3 = rol64(b3, 36) ^ b2;
1581 b5 = rol64(b5, 19) ^ b4;
1585 b7 = rol64(b7, 37) ^ b6;
1588 b1 = rol64(b1, 33) ^ b2;
1591 b7 = rol64(b7, 27) ^ b4;
1594 b5 = rol64(b5, 14) ^ b6;
1597 b3 = rol64(b3, 42) ^ b0;
1600 b1 = rol64(b1, 17) ^ b4;
1603 b3 = rol64(b3, 49) ^ b6;
1606 b5 = rol64(b5, 36) ^ b0;
1609 b7 = rol64(b7, 39) ^ b2;
1612 b1 = rol64(b1, 44) ^ b6;
1615 b7 = rol64(b7, 9) ^ b0;
1618 b5 = rol64(b5, 54) ^ b2;
1621 b3 = rol64(b3, 56) ^ b4;
1625 b1 = rol64(b1, 39) ^ b0;
1629 b3 = rol64(b3, 30) ^ b2;
1633 b5 = rol64(b5, 34) ^ b4;
1637 b7 = rol64(b7, 24) ^ b6;
1640 b1 = rol64(b1, 13) ^ b2;
1643 b7 = rol64(b7, 50) ^ b4;
1646 b5 = rol64(b5, 10) ^ b6;
1649 b3 = rol64(b3, 17) ^ b0;
1652 b1 = rol64(b1, 25) ^ b4;
1655 b3 = rol64(b3, 29) ^ b6;
1658 b5 = rol64(b5, 39) ^ b0;
1661 b7 = rol64(b7, 43) ^ b2;
1664 b1 = rol64(b1, 8) ^ b6;
1667 b7 = rol64(b7, 35) ^ b0;
1670 b5 = rol64(b5, 56) ^ b2;
1673 b3 = rol64(b3, 22) ^ b4;
1677 b1 = rol64(b1, 46) ^ b0;
1681 b3 = rol64(b3, 36) ^ b2;
1685 b5 = rol64(b5, 19) ^ b4;
1689 b7 = rol64(b7, 37) ^ b6;
1692 b1 = rol64(b1, 33) ^ b2;
1695 b7 = rol64(b7, 27) ^ b4;
1698 b5 = rol64(b5, 14) ^ b6;
1701 b3 = rol64(b3, 42) ^ b0;
1704 b1 = rol64(b1, 17) ^ b4;
1707 b3 = rol64(b3, 49) ^ b6;
1710 b5 = rol64(b5, 36) ^ b0;
1713 b7 = rol64(b7, 39) ^ b2;
1716 b1 = rol64(b1, 44) ^ b6;
1719 b7 = rol64(b7, 9) ^ b0;
1722 b5 = rol64(b5, 54) ^ b2;
1725 b3 = rol64(b3, 56) ^ b4;
1729 b1 = rol64(b1, 39) ^ b0;
1733 b3 = rol64(b3, 30) ^ b2;
1737 b5 = rol64(b5, 34) ^ b4;
1741 b7 = rol64(b7, 24) ^ b6;
1744 b1 = rol64(b1, 13) ^ b2;
1747 b7 = rol64(b7, 50) ^ b4;
1750 b5 = rol64(b5, 10) ^ b6;
1753 b3 = rol64(b3, 17) ^ b0;
1756 b1 = rol64(b1, 25) ^ b4;
1759 b3 = rol64(b3, 29) ^ b6;
1762 b5 = rol64(b5, 39) ^ b0;
1765 b7 = rol64(b7, 43) ^ b2;
1768 b1 = rol64(b1, 8) ^ b6;
1771 b7 = rol64(b7, 35) ^ b0;
1774 b5 = rol64(b5, 56) ^ b2;
1777 b3 = rol64(b3, 22) ^ b4;
1781 b1 = rol64(b1, 46) ^ b0;
1785 b3 = rol64(b3, 36) ^ b2;
1789 b5 = rol64(b5, 19) ^ b4;
1793 b7 = rol64(b7, 37) ^ b6;
1796 b1 = rol64(b1, 33) ^ b2;
1799 b7 = rol64(b7, 27) ^ b4;
1802 b5 = rol64(b5, 14) ^ b6;
1805 b3 = rol64(b3, 42) ^ b0;
1808 b1 = rol64(b1, 17) ^ b4;
1811 b3 = rol64(b3, 49) ^ b6;
1814 b5 = rol64(b5, 36) ^ b0;
1817 b7 = rol64(b7, 39) ^ b2;
1820 b1 = rol64(b1, 44) ^ b6;
1823 b7 = rol64(b7, 9) ^ b0;
1826 b5 = rol64(b5, 54) ^ b2;
1829 b3 = rol64(b3, 56) ^ b4;
1833 b1 = rol64(b1, 39) ^ b0;
1837 b3 = rol64(b3, 30) ^ b2;
1841 b5 = rol64(b5, 34) ^ b4;
1845 b7 = rol64(b7, 24) ^ b6;
1848 b1 = rol64(b1, 13) ^ b2;
1851 b7 = rol64(b7, 50) ^ b4;
1854 b5 = rol64(b5, 10) ^ b6;
1857 b3 = rol64(b3, 17) ^ b0;
1860 b1 = rol64(b1, 25) ^ b4;
1863 b3 = rol64(b3, 29) ^ b6;
1866 b5 = rol64(b5, 39) ^ b0;
1869 b7 = rol64(b7, 43) ^ b2;
1872 b1 = rol64(b1, 8) ^ b6;
1875 b7 = rol64(b7, 35) ^ b0;
1878 b5 = rol64(b5, 56) ^ b2;
1881 b3 = rol64(b3, 22) ^ b4;
1885 b1 = rol64(b1, 46) ^ b0;
1889 b3 = rol64(b3, 36) ^ b2;
1893 b5 = rol64(b5, 19) ^ b4;
1897 b7 = rol64(b7, 37) ^ b6;
1900 b1 = rol64(b1, 33) ^ b2;
1903 b7 = rol64(b7, 27) ^ b4;
1906 b5 = rol64(b5, 14) ^ b6;
1909 b3 = rol64(b3, 42) ^ b0;
1912 b1 = rol64(b1, 17) ^ b4;
1915 b3 = rol64(b3, 49) ^ b6;
1918 b5 = rol64(b5, 36) ^ b0;
1921 b7 = rol64(b7, 39) ^ b2;
1924 b1 = rol64(b1, 44) ^ b6;
1927 b7 = rol64(b7, 9) ^ b0;
1930 b5 = rol64(b5, 54) ^ b2;
1933 b3 = rol64(b3, 56) ^ b4;
1937 b1 = rol64(b1, 39) ^ b0;
1941 b3 = rol64(b3, 30) ^ b2;
1945 b5 = rol64(b5, 34) ^ b4;
1949 b7 = rol64(b7, 24) ^ b6;
1952 b1 = rol64(b1, 13) ^ b2;
1955 b7 = rol64(b7, 50) ^ b4;
1958 b5 = rol64(b5, 10) ^ b6;
1961 b3 = rol64(b3, 17) ^ b0;
1964 b1 = rol64(b1, 25) ^ b4;
1967 b3 = rol64(b3, 29) ^ b6;
1970 b5 = rol64(b5, 39) ^ b0;
1973 b7 = rol64(b7, 43) ^ b2;
1976 b1 = rol64(b1, 8) ^ b6;
1979 b7 = rol64(b7, 35) ^ b0;
1982 b5 = rol64(b5, 56) ^ b2;
1985 b3 = rol64(b3, 22) ^ b4;
1989 b1 = rol64(b1, 46) ^ b0;
1993 b3 = rol64(b3, 36) ^ b2;
1997 b5 = rol64(b5, 19) ^ b4;
2001 b7 = rol64(b7, 37) ^ b6;
2004 b1 = rol64(b1, 33) ^ b2;
2007 b7 = rol64(b7, 27) ^ b4;
2010 b5 = rol64(b5, 14) ^ b6;
2013 b3 = rol64(b3, 42) ^ b0;
2016 b1 = rol64(b1, 17) ^ b4;
2019 b3 = rol64(b3, 49) ^ b6;
2022 b5 = rol64(b5, 36) ^ b0;
2025 b7 = rol64(b7, 39) ^ b2;
2028 b1 = rol64(b1, 44) ^ b6;
2031 b7 = rol64(b7, 9) ^ b0;
2034 b5 = rol64(b5, 54) ^ b2;
2037 b3 = rol64(b3, 56) ^ b4;
2041 b1 = rol64(b1, 39) ^ b0;
2045 b3 = rol64(b3, 30) ^ b2;
2049 b5 = rol64(b5, 34) ^ b4;
2053 b7 = rol64(b7, 24) ^ b6;
2056 b1 = rol64(b1, 13) ^ b2;
2059 b7 = rol64(b7, 50) ^ b4;
2062 b5 = rol64(b5, 10) ^ b6;
2065 b3 = rol64(b3, 17) ^ b0;
2068 b1 = rol64(b1, 25) ^ b4;
2071 b3 = rol64(b3, 29) ^ b6;
2074 b5 = rol64(b5, 39) ^ b0;
2077 b7 = rol64(b7, 43) ^ b2;
2080 b1 = rol64(b1, 8) ^ b6;
2083 b7 = rol64(b7, 35) ^ b0;
2086 b5 = rol64(b5, 56) ^ b2;
2089 b3 = rol64(b3, 22) ^ b4;
2091 output[0] = b0 + k0;
2092 output[1] = b1 + k1;
2093 output[2] = b2 + k2;
2094 output[3] = b3 + k3;
2095 output[4] = b4 + k4;
2096 output[5] = b5 + k5 + t0;
2097 output[6] = b6 + k6 + t1;
2098 output[7] = b7 + k7 + 18;
2101 void threefish_decrypt_512(struct threefish_key *key_ctx, u64 *input,
2104 u64 b0 = input[0], b1 = input[1],
2105 b2 = input[2], b3 = input[3],
2106 b4 = input[4], b5 = input[5],
2107 b6 = input[6], b7 = input[7];
2108 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
2109 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
2110 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
2111 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
2112 k8 = key_ctx->key[8];
2113 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
2114 t2 = key_ctx->tweak[2];
2128 b3 = (tmp >> 22) | (tmp << (64 - 22));
2132 b5 = (tmp >> 56) | (tmp << (64 - 56));
2136 b7 = (tmp >> 35) | (tmp << (64 - 35));
2140 b1 = (tmp >> 8) | (tmp << (64 - 8));
2144 b7 = (tmp >> 43) | (tmp << (64 - 43));
2148 b5 = (tmp >> 39) | (tmp << (64 - 39));
2152 b3 = (tmp >> 29) | (tmp << (64 - 29));
2156 b1 = (tmp >> 25) | (tmp << (64 - 25));
2160 b3 = (tmp >> 17) | (tmp << (64 - 17));
2164 b5 = (tmp >> 10) | (tmp << (64 - 10));
2168 b7 = (tmp >> 50) | (tmp << (64 - 50));
2172 b1 = (tmp >> 13) | (tmp << (64 - 13));
2176 b7 = (tmp >> 24) | (tmp << (64 - 24));
2181 b5 = (tmp >> 34) | (tmp << (64 - 34));
2186 b3 = (tmp >> 30) | (tmp << (64 - 30));
2191 b1 = (tmp >> 39) | (tmp << (64 - 39));
2196 b3 = (tmp >> 56) | (tmp << (64 - 56));
2200 b5 = (tmp >> 54) | (tmp << (64 - 54));
2204 b7 = (tmp >> 9) | (tmp << (64 - 9));
2208 b1 = (tmp >> 44) | (tmp << (64 - 44));
2212 b7 = (tmp >> 39) | (tmp << (64 - 39));
2216 b5 = (tmp >> 36) | (tmp << (64 - 36));
2220 b3 = (tmp >> 49) | (tmp << (64 - 49));
2224 b1 = (tmp >> 17) | (tmp << (64 - 17));
2228 b3 = (tmp >> 42) | (tmp << (64 - 42));
2232 b5 = (tmp >> 14) | (tmp << (64 - 14));
2236 b7 = (tmp >> 27) | (tmp << (64 - 27));
2240 b1 = (tmp >> 33) | (tmp << (64 - 33));
2244 b7 = (tmp >> 37) | (tmp << (64 - 37));
2249 b5 = (tmp >> 19) | (tmp << (64 - 19));
2254 b3 = (tmp >> 36) | (tmp << (64 - 36));
2259 b1 = (tmp >> 46) | (tmp << (64 - 46));
2264 b3 = (tmp >> 22) | (tmp << (64 - 22));
2268 b5 = (tmp >> 56) | (tmp << (64 - 56));
2272 b7 = (tmp >> 35) | (tmp << (64 - 35));
2276 b1 = (tmp >> 8) | (tmp << (64 - 8));
2280 b7 = (tmp >> 43) | (tmp << (64 - 43));
2284 b5 = (tmp >> 39) | (tmp << (64 - 39));
2288 b3 = (tmp >> 29) | (tmp << (64 - 29));
2292 b1 = (tmp >> 25) | (tmp << (64 - 25));
2296 b3 = (tmp >> 17) | (tmp << (64 - 17));
2300 b5 = (tmp >> 10) | (tmp << (64 - 10));
2304 b7 = (tmp >> 50) | (tmp << (64 - 50));
2308 b1 = (tmp >> 13) | (tmp << (64 - 13));
2312 b7 = (tmp >> 24) | (tmp << (64 - 24));
2317 b5 = (tmp >> 34) | (tmp << (64 - 34));
2322 b3 = (tmp >> 30) | (tmp << (64 - 30));
2327 b1 = (tmp >> 39) | (tmp << (64 - 39));
2332 b3 = (tmp >> 56) | (tmp << (64 - 56));
2336 b5 = (tmp >> 54) | (tmp << (64 - 54));
2340 b7 = (tmp >> 9) | (tmp << (64 - 9));
2344 b1 = (tmp >> 44) | (tmp << (64 - 44));
2348 b7 = (tmp >> 39) | (tmp << (64 - 39));
2352 b5 = (tmp >> 36) | (tmp << (64 - 36));
2356 b3 = (tmp >> 49) | (tmp << (64 - 49));
2360 b1 = (tmp >> 17) | (tmp << (64 - 17));
2364 b3 = (tmp >> 42) | (tmp << (64 - 42));
2368 b5 = (tmp >> 14) | (tmp << (64 - 14));
2372 b7 = (tmp >> 27) | (tmp << (64 - 27));
2376 b1 = (tmp >> 33) | (tmp << (64 - 33));
2380 b7 = (tmp >> 37) | (tmp << (64 - 37));
2385 b5 = (tmp >> 19) | (tmp << (64 - 19));
2390 b3 = (tmp >> 36) | (tmp << (64 - 36));
2395 b1 = (tmp >> 46) | (tmp << (64 - 46));
2400 b3 = (tmp >> 22) | (tmp << (64 - 22));
2404 b5 = (tmp >> 56) | (tmp << (64 - 56));
2408 b7 = (tmp >> 35) | (tmp << (64 - 35));
2412 b1 = (tmp >> 8) | (tmp << (64 - 8));
2416 b7 = (tmp >> 43) | (tmp << (64 - 43));
2420 b5 = (tmp >> 39) | (tmp << (64 - 39));
2424 b3 = (tmp >> 29) | (tmp << (64 - 29));
2428 b1 = (tmp >> 25) | (tmp << (64 - 25));
2432 b3 = (tmp >> 17) | (tmp << (64 - 17));
2436 b5 = (tmp >> 10) | (tmp << (64 - 10));
2440 b7 = (tmp >> 50) | (tmp << (64 - 50));
2444 b1 = (tmp >> 13) | (tmp << (64 - 13));
2448 b7 = (tmp >> 24) | (tmp << (64 - 24));
2453 b5 = (tmp >> 34) | (tmp << (64 - 34));
2458 b3 = (tmp >> 30) | (tmp << (64 - 30));
2463 b1 = (tmp >> 39) | (tmp << (64 - 39));
2468 b3 = (tmp >> 56) | (tmp << (64 - 56));
2472 b5 = (tmp >> 54) | (tmp << (64 - 54));
2476 b7 = (tmp >> 9) | (tmp << (64 - 9));
2480 b1 = (tmp >> 44) | (tmp << (64 - 44));
2484 b7 = (tmp >> 39) | (tmp << (64 - 39));
2488 b5 = (tmp >> 36) | (tmp << (64 - 36));
2492 b3 = (tmp >> 49) | (tmp << (64 - 49));
2496 b1 = (tmp >> 17) | (tmp << (64 - 17));
2500 b3 = (tmp >> 42) | (tmp << (64 - 42));
2504 b5 = (tmp >> 14) | (tmp << (64 - 14));
2508 b7 = (tmp >> 27) | (tmp << (64 - 27));
2512 b1 = (tmp >> 33) | (tmp << (64 - 33));
2516 b7 = (tmp >> 37) | (tmp << (64 - 37));
2521 b5 = (tmp >> 19) | (tmp << (64 - 19));
2526 b3 = (tmp >> 36) | (tmp << (64 - 36));
2531 b1 = (tmp >> 46) | (tmp << (64 - 46));
2536 b3 = (tmp >> 22) | (tmp << (64 - 22));
2540 b5 = (tmp >> 56) | (tmp << (64 - 56));
2544 b7 = (tmp >> 35) | (tmp << (64 - 35));
2548 b1 = (tmp >> 8) | (tmp << (64 - 8));
2552 b7 = (tmp >> 43) | (tmp << (64 - 43));
2556 b5 = (tmp >> 39) | (tmp << (64 - 39));
2560 b3 = (tmp >> 29) | (tmp << (64 - 29));
2564 b1 = (tmp >> 25) | (tmp << (64 - 25));
2568 b3 = (tmp >> 17) | (tmp << (64 - 17));
2572 b5 = (tmp >> 10) | (tmp << (64 - 10));
2576 b7 = (tmp >> 50) | (tmp << (64 - 50));
2580 b1 = (tmp >> 13) | (tmp << (64 - 13));
2584 b7 = (tmp >> 24) | (tmp << (64 - 24));
2589 b5 = (tmp >> 34) | (tmp << (64 - 34));
2594 b3 = (tmp >> 30) | (tmp << (64 - 30));
2599 b1 = (tmp >> 39) | (tmp << (64 - 39));
2604 b3 = (tmp >> 56) | (tmp << (64 - 56));
2608 b5 = (tmp >> 54) | (tmp << (64 - 54));
2612 b7 = (tmp >> 9) | (tmp << (64 - 9));
2616 b1 = (tmp >> 44) | (tmp << (64 - 44));
2620 b7 = (tmp >> 39) | (tmp << (64 - 39));
2624 b5 = (tmp >> 36) | (tmp << (64 - 36));
2628 b3 = (tmp >> 49) | (tmp << (64 - 49));
2632 b1 = (tmp >> 17) | (tmp << (64 - 17));
2636 b3 = (tmp >> 42) | (tmp << (64 - 42));
2640 b5 = (tmp >> 14) | (tmp << (64 - 14));
2644 b7 = (tmp >> 27) | (tmp << (64 - 27));
2648 b1 = (tmp >> 33) | (tmp << (64 - 33));
2652 b7 = (tmp >> 37) | (tmp << (64 - 37));
2657 b5 = (tmp >> 19) | (tmp << (64 - 19));
2662 b3 = (tmp >> 36) | (tmp << (64 - 36));
2667 b1 = (tmp >> 46) | (tmp << (64 - 46));
2672 b3 = (tmp >> 22) | (tmp << (64 - 22));
2676 b5 = (tmp >> 56) | (tmp << (64 - 56));
2680 b7 = (tmp >> 35) | (tmp << (64 - 35));
2684 b1 = (tmp >> 8) | (tmp << (64 - 8));
2688 b7 = (tmp >> 43) | (tmp << (64 - 43));
2692 b5 = (tmp >> 39) | (tmp << (64 - 39));
2696 b3 = (tmp >> 29) | (tmp << (64 - 29));
2700 b1 = (tmp >> 25) | (tmp << (64 - 25));
2704 b3 = (tmp >> 17) | (tmp << (64 - 17));
2708 b5 = (tmp >> 10) | (tmp << (64 - 10));
2712 b7 = (tmp >> 50) | (tmp << (64 - 50));
2716 b1 = (tmp >> 13) | (tmp << (64 - 13));
2720 b7 = (tmp >> 24) | (tmp << (64 - 24));
2725 b5 = (tmp >> 34) | (tmp << (64 - 34));
2730 b3 = (tmp >> 30) | (tmp << (64 - 30));
2735 b1 = (tmp >> 39) | (tmp << (64 - 39));
2740 b3 = (tmp >> 56) | (tmp << (64 - 56));
2744 b5 = (tmp >> 54) | (tmp << (64 - 54));
2748 b7 = (tmp >> 9) | (tmp << (64 - 9));
2752 b1 = (tmp >> 44) | (tmp << (64 - 44));
2756 b7 = (tmp >> 39) | (tmp << (64 - 39));
2760 b5 = (tmp >> 36) | (tmp << (64 - 36));
2764 b3 = (tmp >> 49) | (tmp << (64 - 49));
2768 b1 = (tmp >> 17) | (tmp << (64 - 17));
2772 b3 = (tmp >> 42) | (tmp << (64 - 42));
2776 b5 = (tmp >> 14) | (tmp << (64 - 14));
2780 b7 = (tmp >> 27) | (tmp << (64 - 27));
2784 b1 = (tmp >> 33) | (tmp << (64 - 33));
2788 b7 = (tmp >> 37) | (tmp << (64 - 37));
2793 b5 = (tmp >> 19) | (tmp << (64 - 19));
2798 b3 = (tmp >> 36) | (tmp << (64 - 36));
2803 b1 = (tmp >> 46) | (tmp << (64 - 46));
2808 b3 = (tmp >> 22) | (tmp << (64 - 22));
2812 b5 = (tmp >> 56) | (tmp << (64 - 56));
2816 b7 = (tmp >> 35) | (tmp << (64 - 35));
2820 b1 = (tmp >> 8) | (tmp << (64 - 8));
2824 b7 = (tmp >> 43) | (tmp << (64 - 43));
2828 b5 = (tmp >> 39) | (tmp << (64 - 39));
2832 b3 = (tmp >> 29) | (tmp << (64 - 29));
2836 b1 = (tmp >> 25) | (tmp << (64 - 25));
2840 b3 = (tmp >> 17) | (tmp << (64 - 17));
2844 b5 = (tmp >> 10) | (tmp << (64 - 10));
2848 b7 = (tmp >> 50) | (tmp << (64 - 50));
2852 b1 = (tmp >> 13) | (tmp << (64 - 13));
2856 b7 = (tmp >> 24) | (tmp << (64 - 24));
2861 b5 = (tmp >> 34) | (tmp << (64 - 34));
2866 b3 = (tmp >> 30) | (tmp << (64 - 30));
2871 b1 = (tmp >> 39) | (tmp << (64 - 39));
2876 b3 = (tmp >> 56) | (tmp << (64 - 56));
2880 b5 = (tmp >> 54) | (tmp << (64 - 54));
2884 b7 = (tmp >> 9) | (tmp << (64 - 9));
2888 b1 = (tmp >> 44) | (tmp << (64 - 44));
2892 b7 = (tmp >> 39) | (tmp << (64 - 39));
2896 b5 = (tmp >> 36) | (tmp << (64 - 36));
2900 b3 = (tmp >> 49) | (tmp << (64 - 49));
2904 b1 = (tmp >> 17) | (tmp << (64 - 17));
2908 b3 = (tmp >> 42) | (tmp << (64 - 42));
2912 b5 = (tmp >> 14) | (tmp << (64 - 14));
2916 b7 = (tmp >> 27) | (tmp << (64 - 27));
2920 b1 = (tmp >> 33) | (tmp << (64 - 33));
2924 b7 = (tmp >> 37) | (tmp << (64 - 37));
2929 b5 = (tmp >> 19) | (tmp << (64 - 19));
2934 b3 = (tmp >> 36) | (tmp << (64 - 36));
2939 b1 = (tmp >> 46) | (tmp << (64 - 46));
2944 b3 = (tmp >> 22) | (tmp << (64 - 22));
2948 b5 = (tmp >> 56) | (tmp << (64 - 56));
2952 b7 = (tmp >> 35) | (tmp << (64 - 35));
2956 b1 = (tmp >> 8) | (tmp << (64 - 8));
2960 b7 = (tmp >> 43) | (tmp << (64 - 43));
2964 b5 = (tmp >> 39) | (tmp << (64 - 39));
2968 b3 = (tmp >> 29) | (tmp << (64 - 29));
2972 b1 = (tmp >> 25) | (tmp << (64 - 25));
2976 b3 = (tmp >> 17) | (tmp << (64 - 17));
2980 b5 = (tmp >> 10) | (tmp << (64 - 10));
2984 b7 = (tmp >> 50) | (tmp << (64 - 50));
2988 b1 = (tmp >> 13) | (tmp << (64 - 13));
2992 b7 = (tmp >> 24) | (tmp << (64 - 24));
2997 b5 = (tmp >> 34) | (tmp << (64 - 34));
3002 b3 = (tmp >> 30) | (tmp << (64 - 30));
3007 b1 = (tmp >> 39) | (tmp << (64 - 39));
3012 b3 = (tmp >> 56) | (tmp << (64 - 56));
3016 b5 = (tmp >> 54) | (tmp << (64 - 54));
3020 b7 = (tmp >> 9) | (tmp << (64 - 9));
3024 b1 = (tmp >> 44) | (tmp << (64 - 44));
3028 b7 = (tmp >> 39) | (tmp << (64 - 39));
3032 b5 = (tmp >> 36) | (tmp << (64 - 36));
3036 b3 = (tmp >> 49) | (tmp << (64 - 49));
3040 b1 = (tmp >> 17) | (tmp << (64 - 17));
3044 b3 = (tmp >> 42) | (tmp << (64 - 42));
3048 b5 = (tmp >> 14) | (tmp << (64 - 14));
3052 b7 = (tmp >> 27) | (tmp << (64 - 27));
3056 b1 = (tmp >> 33) | (tmp << (64 - 33));
3060 b7 = (tmp >> 37) | (tmp << (64 - 37));
3065 b5 = (tmp >> 19) | (tmp << (64 - 19));
3070 b3 = (tmp >> 36) | (tmp << (64 - 36));
3075 b1 = (tmp >> 46) | (tmp << (64 - 46));
3080 b3 = (tmp >> 22) | (tmp << (64 - 22));
3084 b5 = (tmp >> 56) | (tmp << (64 - 56));
3088 b7 = (tmp >> 35) | (tmp << (64 - 35));
3092 b1 = (tmp >> 8) | (tmp << (64 - 8));
3096 b7 = (tmp >> 43) | (tmp << (64 - 43));
3100 b5 = (tmp >> 39) | (tmp << (64 - 39));
3104 b3 = (tmp >> 29) | (tmp << (64 - 29));
3108 b1 = (tmp >> 25) | (tmp << (64 - 25));
3112 b3 = (tmp >> 17) | (tmp << (64 - 17));
3116 b5 = (tmp >> 10) | (tmp << (64 - 10));
3120 b7 = (tmp >> 50) | (tmp << (64 - 50));
3124 b1 = (tmp >> 13) | (tmp << (64 - 13));
3128 b7 = (tmp >> 24) | (tmp << (64 - 24));
3133 b5 = (tmp >> 34) | (tmp << (64 - 34));
3138 b3 = (tmp >> 30) | (tmp << (64 - 30));
3143 b1 = (tmp >> 39) | (tmp << (64 - 39));
3148 b3 = (tmp >> 56) | (tmp << (64 - 56));
3152 b5 = (tmp >> 54) | (tmp << (64 - 54));
3156 b7 = (tmp >> 9) | (tmp << (64 - 9));
3160 b1 = (tmp >> 44) | (tmp << (64 - 44));
3164 b7 = (tmp >> 39) | (tmp << (64 - 39));
3168 b5 = (tmp >> 36) | (tmp << (64 - 36));
3172 b3 = (tmp >> 49) | (tmp << (64 - 49));
3176 b1 = (tmp >> 17) | (tmp << (64 - 17));
3180 b3 = (tmp >> 42) | (tmp << (64 - 42));
3184 b5 = (tmp >> 14) | (tmp << (64 - 14));
3188 b7 = (tmp >> 27) | (tmp << (64 - 27));
3192 b1 = (tmp >> 33) | (tmp << (64 - 33));
3196 b7 = (tmp >> 37) | (tmp << (64 - 37));
3201 b5 = (tmp >> 19) | (tmp << (64 - 19));
3206 b3 = (tmp >> 36) | (tmp << (64 - 36));
3211 b1 = (tmp >> 46) | (tmp << (64 - 46));
3216 b3 = (tmp >> 22) | (tmp << (64 - 22));
3220 b5 = (tmp >> 56) | (tmp << (64 - 56));
3224 b7 = (tmp >> 35) | (tmp << (64 - 35));
3228 b1 = (tmp >> 8) | (tmp << (64 - 8));
3232 b7 = (tmp >> 43) | (tmp << (64 - 43));
3236 b5 = (tmp >> 39) | (tmp << (64 - 39));
3240 b3 = (tmp >> 29) | (tmp << (64 - 29));
3244 b1 = (tmp >> 25) | (tmp << (64 - 25));
3248 b3 = (tmp >> 17) | (tmp << (64 - 17));
3252 b5 = (tmp >> 10) | (tmp << (64 - 10));
3256 b7 = (tmp >> 50) | (tmp << (64 - 50));
3260 b1 = (tmp >> 13) | (tmp << (64 - 13));
3264 b7 = (tmp >> 24) | (tmp << (64 - 24));
3269 b5 = (tmp >> 34) | (tmp << (64 - 34));
3274 b3 = (tmp >> 30) | (tmp << (64 - 30));
3279 b1 = (tmp >> 39) | (tmp << (64 - 39));
3284 b3 = (tmp >> 56) | (tmp << (64 - 56));
3288 b5 = (tmp >> 54) | (tmp << (64 - 54));
3292 b7 = (tmp >> 9) | (tmp << (64 - 9));
3296 b1 = (tmp >> 44) | (tmp << (64 - 44));
3300 b7 = (tmp >> 39) | (tmp << (64 - 39));
3304 b5 = (tmp >> 36) | (tmp << (64 - 36));
3308 b3 = (tmp >> 49) | (tmp << (64 - 49));
3312 b1 = (tmp >> 17) | (tmp << (64 - 17));
3316 b3 = (tmp >> 42) | (tmp << (64 - 42));
3320 b5 = (tmp >> 14) | (tmp << (64 - 14));
3324 b7 = (tmp >> 27) | (tmp << (64 - 27));
3328 b1 = (tmp >> 33) | (tmp << (64 - 33));
3332 b7 = (tmp >> 37) | (tmp << (64 - 37));
3337 b5 = (tmp >> 19) | (tmp << (64 - 19));
3342 b3 = (tmp >> 36) | (tmp << (64 - 36));
3347 b1 = (tmp >> 46) | (tmp << (64 - 46));
3362 void threefish_encrypt_1024(struct threefish_key *key_ctx, u64 *input,
3365 u64 b0 = input[0], b1 = input[1],
3366 b2 = input[2], b3 = input[3],
3367 b4 = input[4], b5 = input[5],
3368 b6 = input[6], b7 = input[7],
3369 b8 = input[8], b9 = input[9],
3370 b10 = input[10], b11 = input[11],
3371 b12 = input[12], b13 = input[13],
3372 b14 = input[14], b15 = input[15];
3373 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
3374 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
3375 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
3376 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
3377 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
3378 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
3379 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
3380 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
3381 k16 = key_ctx->key[16];
3382 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
3383 t2 = key_ctx->tweak[2];
3387 b1 = rol64(b1, 24) ^ b0;
3391 b3 = rol64(b3, 13) ^ b2;
3395 b5 = rol64(b5, 8) ^ b4;
3399 b7 = rol64(b7, 47) ^ b6;
3403 b9 = rol64(b9, 8) ^ b8;
3407 b11 = rol64(b11, 17) ^ b10;
3411 b13 = rol64(b13, 22) ^ b12;
3414 b14 += b15 + k14 + t1;
3415 b15 = rol64(b15, 37) ^ b14;
3418 b9 = rol64(b9, 38) ^ b0;
3421 b13 = rol64(b13, 19) ^ b2;
3424 b11 = rol64(b11, 10) ^ b6;
3427 b15 = rol64(b15, 55) ^ b4;
3430 b7 = rol64(b7, 49) ^ b10;
3433 b3 = rol64(b3, 18) ^ b12;
3436 b5 = rol64(b5, 23) ^ b14;
3439 b1 = rol64(b1, 52) ^ b8;
3442 b7 = rol64(b7, 33) ^ b0;
3445 b5 = rol64(b5, 4) ^ b2;
3448 b3 = rol64(b3, 51) ^ b4;
3451 b1 = rol64(b1, 13) ^ b6;
3454 b15 = rol64(b15, 34) ^ b12;
3457 b13 = rol64(b13, 41) ^ b14;
3460 b11 = rol64(b11, 59) ^ b8;
3463 b9 = rol64(b9, 17) ^ b10;
3466 b15 = rol64(b15, 5) ^ b0;
3469 b11 = rol64(b11, 20) ^ b2;
3472 b13 = rol64(b13, 48) ^ b6;
3475 b9 = rol64(b9, 41) ^ b4;
3478 b1 = rol64(b1, 47) ^ b14;
3481 b5 = rol64(b5, 28) ^ b8;
3484 b3 = rol64(b3, 16) ^ b10;
3487 b7 = rol64(b7, 25) ^ b12;
3491 b1 = rol64(b1, 41) ^ b0;
3495 b3 = rol64(b3, 9) ^ b2;
3499 b5 = rol64(b5, 37) ^ b4;
3503 b7 = rol64(b7, 31) ^ b6;
3507 b9 = rol64(b9, 12) ^ b8;
3511 b11 = rol64(b11, 47) ^ b10;
3515 b13 = rol64(b13, 44) ^ b12;
3518 b14 += b15 + k15 + t2;
3519 b15 = rol64(b15, 30) ^ b14;
3522 b9 = rol64(b9, 16) ^ b0;
3525 b13 = rol64(b13, 34) ^ b2;
3528 b11 = rol64(b11, 56) ^ b6;
3531 b15 = rol64(b15, 51) ^ b4;
3534 b7 = rol64(b7, 4) ^ b10;
3537 b3 = rol64(b3, 53) ^ b12;
3540 b5 = rol64(b5, 42) ^ b14;
3543 b1 = rol64(b1, 41) ^ b8;
3546 b7 = rol64(b7, 31) ^ b0;
3549 b5 = rol64(b5, 44) ^ b2;
3552 b3 = rol64(b3, 47) ^ b4;
3555 b1 = rol64(b1, 46) ^ b6;
3558 b15 = rol64(b15, 19) ^ b12;
3561 b13 = rol64(b13, 42) ^ b14;
3564 b11 = rol64(b11, 44) ^ b8;
3567 b9 = rol64(b9, 25) ^ b10;
3570 b15 = rol64(b15, 9) ^ b0;
3573 b11 = rol64(b11, 48) ^ b2;
3576 b13 = rol64(b13, 35) ^ b6;
3579 b9 = rol64(b9, 52) ^ b4;
3582 b1 = rol64(b1, 23) ^ b14;
3585 b5 = rol64(b5, 31) ^ b8;
3588 b3 = rol64(b3, 37) ^ b10;
3591 b7 = rol64(b7, 20) ^ b12;
3595 b1 = rol64(b1, 24) ^ b0;
3599 b3 = rol64(b3, 13) ^ b2;
3603 b5 = rol64(b5, 8) ^ b4;
3607 b7 = rol64(b7, 47) ^ b6;
3611 b9 = rol64(b9, 8) ^ b8;
3615 b11 = rol64(b11, 17) ^ b10;
3619 b13 = rol64(b13, 22) ^ b12;
3622 b14 += b15 + k16 + t0;
3623 b15 = rol64(b15, 37) ^ b14;
3626 b9 = rol64(b9, 38) ^ b0;
3629 b13 = rol64(b13, 19) ^ b2;
3632 b11 = rol64(b11, 10) ^ b6;
3635 b15 = rol64(b15, 55) ^ b4;
3638 b7 = rol64(b7, 49) ^ b10;
3641 b3 = rol64(b3, 18) ^ b12;
3644 b5 = rol64(b5, 23) ^ b14;
3647 b1 = rol64(b1, 52) ^ b8;
3650 b7 = rol64(b7, 33) ^ b0;
3653 b5 = rol64(b5, 4) ^ b2;
3656 b3 = rol64(b3, 51) ^ b4;
3659 b1 = rol64(b1, 13) ^ b6;
3662 b15 = rol64(b15, 34) ^ b12;
3665 b13 = rol64(b13, 41) ^ b14;
3668 b11 = rol64(b11, 59) ^ b8;
3671 b9 = rol64(b9, 17) ^ b10;
3674 b15 = rol64(b15, 5) ^ b0;
3677 b11 = rol64(b11, 20) ^ b2;
3680 b13 = rol64(b13, 48) ^ b6;
3683 b9 = rol64(b9, 41) ^ b4;
3686 b1 = rol64(b1, 47) ^ b14;
3689 b5 = rol64(b5, 28) ^ b8;
3692 b3 = rol64(b3, 16) ^ b10;
3695 b7 = rol64(b7, 25) ^ b12;
3699 b1 = rol64(b1, 41) ^ b0;
3703 b3 = rol64(b3, 9) ^ b2;
3707 b5 = rol64(b5, 37) ^ b4;
3711 b7 = rol64(b7, 31) ^ b6;
3715 b9 = rol64(b9, 12) ^ b8;
3719 b11 = rol64(b11, 47) ^ b10;
3723 b13 = rol64(b13, 44) ^ b12;
3726 b14 += b15 + k0 + t1;
3727 b15 = rol64(b15, 30) ^ b14;
3730 b9 = rol64(b9, 16) ^ b0;
3733 b13 = rol64(b13, 34) ^ b2;
3736 b11 = rol64(b11, 56) ^ b6;
3739 b15 = rol64(b15, 51) ^ b4;
3742 b7 = rol64(b7, 4) ^ b10;
3745 b3 = rol64(b3, 53) ^ b12;
3748 b5 = rol64(b5, 42) ^ b14;
3751 b1 = rol64(b1, 41) ^ b8;
3754 b7 = rol64(b7, 31) ^ b0;
3757 b5 = rol64(b5, 44) ^ b2;
3760 b3 = rol64(b3, 47) ^ b4;
3763 b1 = rol64(b1, 46) ^ b6;
3766 b15 = rol64(b15, 19) ^ b12;
3769 b13 = rol64(b13, 42) ^ b14;
3772 b11 = rol64(b11, 44) ^ b8;
3775 b9 = rol64(b9, 25) ^ b10;
3778 b15 = rol64(b15, 9) ^ b0;
3781 b11 = rol64(b11, 48) ^ b2;
3784 b13 = rol64(b13, 35) ^ b6;
3787 b9 = rol64(b9, 52) ^ b4;
3790 b1 = rol64(b1, 23) ^ b14;
3793 b5 = rol64(b5, 31) ^ b8;
3796 b3 = rol64(b3, 37) ^ b10;
3799 b7 = rol64(b7, 20) ^ b12;
3803 b1 = rol64(b1, 24) ^ b0;
3807 b3 = rol64(b3, 13) ^ b2;
3811 b5 = rol64(b5, 8) ^ b4;
3815 b7 = rol64(b7, 47) ^ b6;
3819 b9 = rol64(b9, 8) ^ b8;
3823 b11 = rol64(b11, 17) ^ b10;
3827 b13 = rol64(b13, 22) ^ b12;
3830 b14 += b15 + k1 + t2;
3831 b15 = rol64(b15, 37) ^ b14;
3834 b9 = rol64(b9, 38) ^ b0;
3837 b13 = rol64(b13, 19) ^ b2;
3840 b11 = rol64(b11, 10) ^ b6;
3843 b15 = rol64(b15, 55) ^ b4;
3846 b7 = rol64(b7, 49) ^ b10;
3849 b3 = rol64(b3, 18) ^ b12;
3852 b5 = rol64(b5, 23) ^ b14;
3855 b1 = rol64(b1, 52) ^ b8;
3858 b7 = rol64(b7, 33) ^ b0;
3861 b5 = rol64(b5, 4) ^ b2;
3864 b3 = rol64(b3, 51) ^ b4;
3867 b1 = rol64(b1, 13) ^ b6;
3870 b15 = rol64(b15, 34) ^ b12;
3873 b13 = rol64(b13, 41) ^ b14;
3876 b11 = rol64(b11, 59) ^ b8;
3879 b9 = rol64(b9, 17) ^ b10;
3882 b15 = rol64(b15, 5) ^ b0;
3885 b11 = rol64(b11, 20) ^ b2;
3888 b13 = rol64(b13, 48) ^ b6;
3891 b9 = rol64(b9, 41) ^ b4;
3894 b1 = rol64(b1, 47) ^ b14;
3897 b5 = rol64(b5, 28) ^ b8;
3900 b3 = rol64(b3, 16) ^ b10;
3903 b7 = rol64(b7, 25) ^ b12;
3907 b1 = rol64(b1, 41) ^ b0;
3911 b3 = rol64(b3, 9) ^ b2;
3915 b5 = rol64(b5, 37) ^ b4;
3919 b7 = rol64(b7, 31) ^ b6;
3923 b9 = rol64(b9, 12) ^ b8;
3927 b11 = rol64(b11, 47) ^ b10;
3931 b13 = rol64(b13, 44) ^ b12;
3934 b14 += b15 + k2 + t0;
3935 b15 = rol64(b15, 30) ^ b14;
3938 b9 = rol64(b9, 16) ^ b0;
3941 b13 = rol64(b13, 34) ^ b2;
3944 b11 = rol64(b11, 56) ^ b6;
3947 b15 = rol64(b15, 51) ^ b4;
3950 b7 = rol64(b7, 4) ^ b10;
3953 b3 = rol64(b3, 53) ^ b12;
3956 b5 = rol64(b5, 42) ^ b14;
3959 b1 = rol64(b1, 41) ^ b8;
3962 b7 = rol64(b7, 31) ^ b0;
3965 b5 = rol64(b5, 44) ^ b2;
3968 b3 = rol64(b3, 47) ^ b4;
3971 b1 = rol64(b1, 46) ^ b6;
3974 b15 = rol64(b15, 19) ^ b12;
3977 b13 = rol64(b13, 42) ^ b14;
3980 b11 = rol64(b11, 44) ^ b8;
3983 b9 = rol64(b9, 25) ^ b10;
3986 b15 = rol64(b15, 9) ^ b0;
3989 b11 = rol64(b11, 48) ^ b2;
3992 b13 = rol64(b13, 35) ^ b6;
3995 b9 = rol64(b9, 52) ^ b4;
3998 b1 = rol64(b1, 23) ^ b14;
4001 b5 = rol64(b5, 31) ^ b8;
4004 b3 = rol64(b3, 37) ^ b10;
4007 b7 = rol64(b7, 20) ^ b12;
4011 b1 = rol64(b1, 24) ^ b0;
4015 b3 = rol64(b3, 13) ^ b2;
4019 b5 = rol64(b5, 8) ^ b4;
4023 b7 = rol64(b7, 47) ^ b6;
4027 b9 = rol64(b9, 8) ^ b8;
4031 b11 = rol64(b11, 17) ^ b10;
4035 b13 = rol64(b13, 22) ^ b12;
4038 b14 += b15 + k3 + t1;
4039 b15 = rol64(b15, 37) ^ b14;
4042 b9 = rol64(b9, 38) ^ b0;
4045 b13 = rol64(b13, 19) ^ b2;
4048 b11 = rol64(b11, 10) ^ b6;
4051 b15 = rol64(b15, 55) ^ b4;
4054 b7 = rol64(b7, 49) ^ b10;
4057 b3 = rol64(b3, 18) ^ b12;
4060 b5 = rol64(b5, 23) ^ b14;
4063 b1 = rol64(b1, 52) ^ b8;
4066 b7 = rol64(b7, 33) ^ b0;
4069 b5 = rol64(b5, 4) ^ b2;
4072 b3 = rol64(b3, 51) ^ b4;
4075 b1 = rol64(b1, 13) ^ b6;
4078 b15 = rol64(b15, 34) ^ b12;
4081 b13 = rol64(b13, 41) ^ b14;
4084 b11 = rol64(b11, 59) ^ b8;
4087 b9 = rol64(b9, 17) ^ b10;
4090 b15 = rol64(b15, 5) ^ b0;
4093 b11 = rol64(b11, 20) ^ b2;
4096 b13 = rol64(b13, 48) ^ b6;
4099 b9 = rol64(b9, 41) ^ b4;
4102 b1 = rol64(b1, 47) ^ b14;
4105 b5 = rol64(b5, 28) ^ b8;
4108 b3 = rol64(b3, 16) ^ b10;
4111 b7 = rol64(b7, 25) ^ b12;
4115 b1 = rol64(b1, 41) ^ b0;
4119 b3 = rol64(b3, 9) ^ b2;
4123 b5 = rol64(b5, 37) ^ b4;
4127 b7 = rol64(b7, 31) ^ b6;
4131 b9 = rol64(b9, 12) ^ b8;
4135 b11 = rol64(b11, 47) ^ b10;
4139 b13 = rol64(b13, 44) ^ b12;
4142 b14 += b15 + k4 + t2;
4143 b15 = rol64(b15, 30) ^ b14;
4146 b9 = rol64(b9, 16) ^ b0;
4149 b13 = rol64(b13, 34) ^ b2;
4152 b11 = rol64(b11, 56) ^ b6;
4155 b15 = rol64(b15, 51) ^ b4;
4158 b7 = rol64(b7, 4) ^ b10;
4161 b3 = rol64(b3, 53) ^ b12;
4164 b5 = rol64(b5, 42) ^ b14;
4167 b1 = rol64(b1, 41) ^ b8;
4170 b7 = rol64(b7, 31) ^ b0;
4173 b5 = rol64(b5, 44) ^ b2;
4176 b3 = rol64(b3, 47) ^ b4;
4179 b1 = rol64(b1, 46) ^ b6;
4182 b15 = rol64(b15, 19) ^ b12;
4185 b13 = rol64(b13, 42) ^ b14;
4188 b11 = rol64(b11, 44) ^ b8;
4191 b9 = rol64(b9, 25) ^ b10;
4194 b15 = rol64(b15, 9) ^ b0;
4197 b11 = rol64(b11, 48) ^ b2;
4200 b13 = rol64(b13, 35) ^ b6;
4203 b9 = rol64(b9, 52) ^ b4;
4206 b1 = rol64(b1, 23) ^ b14;
4209 b5 = rol64(b5, 31) ^ b8;
4212 b3 = rol64(b3, 37) ^ b10;
4215 b7 = rol64(b7, 20) ^ b12;
4219 b1 = rol64(b1, 24) ^ b0;
4223 b3 = rol64(b3, 13) ^ b2;
4227 b5 = rol64(b5, 8) ^ b4;
4231 b7 = rol64(b7, 47) ^ b6;
4235 b9 = rol64(b9, 8) ^ b8;
4239 b11 = rol64(b11, 17) ^ b10;
4243 b13 = rol64(b13, 22) ^ b12;
4246 b14 += b15 + k5 + t0;
4247 b15 = rol64(b15, 37) ^ b14;
4250 b9 = rol64(b9, 38) ^ b0;
4253 b13 = rol64(b13, 19) ^ b2;
4256 b11 = rol64(b11, 10) ^ b6;
4259 b15 = rol64(b15, 55) ^ b4;
4262 b7 = rol64(b7, 49) ^ b10;
4265 b3 = rol64(b3, 18) ^ b12;
4268 b5 = rol64(b5, 23) ^ b14;
4271 b1 = rol64(b1, 52) ^ b8;
4274 b7 = rol64(b7, 33) ^ b0;
4277 b5 = rol64(b5, 4) ^ b2;
4280 b3 = rol64(b3, 51) ^ b4;
4283 b1 = rol64(b1, 13) ^ b6;
4286 b15 = rol64(b15, 34) ^ b12;
4289 b13 = rol64(b13, 41) ^ b14;
4292 b11 = rol64(b11, 59) ^ b8;
4295 b9 = rol64(b9, 17) ^ b10;
4298 b15 = rol64(b15, 5) ^ b0;
4301 b11 = rol64(b11, 20) ^ b2;
4304 b13 = rol64(b13, 48) ^ b6;
4307 b9 = rol64(b9, 41) ^ b4;
4310 b1 = rol64(b1, 47) ^ b14;
4313 b5 = rol64(b5, 28) ^ b8;
4316 b3 = rol64(b3, 16) ^ b10;
4319 b7 = rol64(b7, 25) ^ b12;
4323 b1 = rol64(b1, 41) ^ b0;
4327 b3 = rol64(b3, 9) ^ b2;
4331 b5 = rol64(b5, 37) ^ b4;
4335 b7 = rol64(b7, 31) ^ b6;
4339 b9 = rol64(b9, 12) ^ b8;
4343 b11 = rol64(b11, 47) ^ b10;
4347 b13 = rol64(b13, 44) ^ b12;
4350 b14 += b15 + k6 + t1;
4351 b15 = rol64(b15, 30) ^ b14;
4354 b9 = rol64(b9, 16) ^ b0;
4357 b13 = rol64(b13, 34) ^ b2;
4360 b11 = rol64(b11, 56) ^ b6;
4363 b15 = rol64(b15, 51) ^ b4;
4366 b7 = rol64(b7, 4) ^ b10;
4369 b3 = rol64(b3, 53) ^ b12;
4372 b5 = rol64(b5, 42) ^ b14;
4375 b1 = rol64(b1, 41) ^ b8;
4378 b7 = rol64(b7, 31) ^ b0;
4381 b5 = rol64(b5, 44) ^ b2;
4384 b3 = rol64(b3, 47) ^ b4;
4387 b1 = rol64(b1, 46) ^ b6;
4390 b15 = rol64(b15, 19) ^ b12;
4393 b13 = rol64(b13, 42) ^ b14;
4396 b11 = rol64(b11, 44) ^ b8;
4399 b9 = rol64(b9, 25) ^ b10;
4402 b15 = rol64(b15, 9) ^ b0;
4405 b11 = rol64(b11, 48) ^ b2;
4408 b13 = rol64(b13, 35) ^ b6;
4411 b9 = rol64(b9, 52) ^ b4;
4414 b1 = rol64(b1, 23) ^ b14;
4417 b5 = rol64(b5, 31) ^ b8;
4420 b3 = rol64(b3, 37) ^ b10;
4423 b7 = rol64(b7, 20) ^ b12;
4427 b1 = rol64(b1, 24) ^ b0;
4431 b3 = rol64(b3, 13) ^ b2;
4435 b5 = rol64(b5, 8) ^ b4;
4439 b7 = rol64(b7, 47) ^ b6;
4443 b9 = rol64(b9, 8) ^ b8;
4447 b11 = rol64(b11, 17) ^ b10;
4451 b13 = rol64(b13, 22) ^ b12;
4454 b14 += b15 + k7 + t2;
4455 b15 = rol64(b15, 37) ^ b14;
4458 b9 = rol64(b9, 38) ^ b0;
4461 b13 = rol64(b13, 19) ^ b2;
4464 b11 = rol64(b11, 10) ^ b6;
4467 b15 = rol64(b15, 55) ^ b4;
4470 b7 = rol64(b7, 49) ^ b10;
4473 b3 = rol64(b3, 18) ^ b12;
4476 b5 = rol64(b5, 23) ^ b14;
4479 b1 = rol64(b1, 52) ^ b8;
4482 b7 = rol64(b7, 33) ^ b0;
4485 b5 = rol64(b5, 4) ^ b2;
4488 b3 = rol64(b3, 51) ^ b4;
4491 b1 = rol64(b1, 13) ^ b6;
4494 b15 = rol64(b15, 34) ^ b12;
4497 b13 = rol64(b13, 41) ^ b14;
4500 b11 = rol64(b11, 59) ^ b8;
4503 b9 = rol64(b9, 17) ^ b10;
4506 b15 = rol64(b15, 5) ^ b0;
4509 b11 = rol64(b11, 20) ^ b2;
4512 b13 = rol64(b13, 48) ^ b6;
4515 b9 = rol64(b9, 41) ^ b4;
4518 b1 = rol64(b1, 47) ^ b14;
4521 b5 = rol64(b5, 28) ^ b8;
4524 b3 = rol64(b3, 16) ^ b10;
4527 b7 = rol64(b7, 25) ^ b12;
4531 b1 = rol64(b1, 41) ^ b0;
4535 b3 = rol64(b3, 9) ^ b2;
4539 b5 = rol64(b5, 37) ^ b4;
4543 b7 = rol64(b7, 31) ^ b6;
4547 b9 = rol64(b9, 12) ^ b8;
4551 b11 = rol64(b11, 47) ^ b10;
4555 b13 = rol64(b13, 44) ^ b12;
4558 b14 += b15 + k8 + t0;
4559 b15 = rol64(b15, 30) ^ b14;
4562 b9 = rol64(b9, 16) ^ b0;
4565 b13 = rol64(b13, 34) ^ b2;
4568 b11 = rol64(b11, 56) ^ b6;
4571 b15 = rol64(b15, 51) ^ b4;
4574 b7 = rol64(b7, 4) ^ b10;
4577 b3 = rol64(b3, 53) ^ b12;
4580 b5 = rol64(b5, 42) ^ b14;
4583 b1 = rol64(b1, 41) ^ b8;
4586 b7 = rol64(b7, 31) ^ b0;
4589 b5 = rol64(b5, 44) ^ b2;
4592 b3 = rol64(b3, 47) ^ b4;
4595 b1 = rol64(b1, 46) ^ b6;
4598 b15 = rol64(b15, 19) ^ b12;
4601 b13 = rol64(b13, 42) ^ b14;
4604 b11 = rol64(b11, 44) ^ b8;
4607 b9 = rol64(b9, 25) ^ b10;
4610 b15 = rol64(b15, 9) ^ b0;
4613 b11 = rol64(b11, 48) ^ b2;
4616 b13 = rol64(b13, 35) ^ b6;
4619 b9 = rol64(b9, 52) ^ b4;
4622 b1 = rol64(b1, 23) ^ b14;
4625 b5 = rol64(b5, 31) ^ b8;
4628 b3 = rol64(b3, 37) ^ b10;
4631 b7 = rol64(b7, 20) ^ b12;
4635 b1 = rol64(b1, 24) ^ b0;
4639 b3 = rol64(b3, 13) ^ b2;
4643 b5 = rol64(b5, 8) ^ b4;
4647 b7 = rol64(b7, 47) ^ b6;
4651 b9 = rol64(b9, 8) ^ b8;
4655 b11 = rol64(b11, 17) ^ b10;
4659 b13 = rol64(b13, 22) ^ b12;
4662 b14 += b15 + k9 + t1;
4663 b15 = rol64(b15, 37) ^ b14;
4666 b9 = rol64(b9, 38) ^ b0;
4669 b13 = rol64(b13, 19) ^ b2;
4672 b11 = rol64(b11, 10) ^ b6;
4675 b15 = rol64(b15, 55) ^ b4;
4678 b7 = rol64(b7, 49) ^ b10;
4681 b3 = rol64(b3, 18) ^ b12;
4684 b5 = rol64(b5, 23) ^ b14;
4687 b1 = rol64(b1, 52) ^ b8;
4690 b7 = rol64(b7, 33) ^ b0;
4693 b5 = rol64(b5, 4) ^ b2;
4696 b3 = rol64(b3, 51) ^ b4;
4699 b1 = rol64(b1, 13) ^ b6;
4702 b15 = rol64(b15, 34) ^ b12;
4705 b13 = rol64(b13, 41) ^ b14;
4708 b11 = rol64(b11, 59) ^ b8;
4711 b9 = rol64(b9, 17) ^ b10;
4714 b15 = rol64(b15, 5) ^ b0;
4717 b11 = rol64(b11, 20) ^ b2;
4720 b13 = rol64(b13, 48) ^ b6;
4723 b9 = rol64(b9, 41) ^ b4;
4726 b1 = rol64(b1, 47) ^ b14;
4729 b5 = rol64(b5, 28) ^ b8;
4732 b3 = rol64(b3, 16) ^ b10;
4735 b7 = rol64(b7, 25) ^ b12;
4739 b1 = rol64(b1, 41) ^ b0;
4743 b3 = rol64(b3, 9) ^ b2;
4747 b5 = rol64(b5, 37) ^ b4;
4751 b7 = rol64(b7, 31) ^ b6;
4755 b9 = rol64(b9, 12) ^ b8;
4759 b11 = rol64(b11, 47) ^ b10;
4763 b13 = rol64(b13, 44) ^ b12;
4766 b14 += b15 + k10 + t2;
4767 b15 = rol64(b15, 30) ^ b14;
4770 b9 = rol64(b9, 16) ^ b0;
4773 b13 = rol64(b13, 34) ^ b2;
4776 b11 = rol64(b11, 56) ^ b6;
4779 b15 = rol64(b15, 51) ^ b4;
4782 b7 = rol64(b7, 4) ^ b10;
4785 b3 = rol64(b3, 53) ^ b12;
4788 b5 = rol64(b5, 42) ^ b14;
4791 b1 = rol64(b1, 41) ^ b8;
4794 b7 = rol64(b7, 31) ^ b0;
4797 b5 = rol64(b5, 44) ^ b2;
4800 b3 = rol64(b3, 47) ^ b4;
4803 b1 = rol64(b1, 46) ^ b6;
4806 b15 = rol64(b15, 19) ^ b12;
4809 b13 = rol64(b13, 42) ^ b14;
4812 b11 = rol64(b11, 44) ^ b8;
4815 b9 = rol64(b9, 25) ^ b10;
4818 b15 = rol64(b15, 9) ^ b0;
4821 b11 = rol64(b11, 48) ^ b2;
4824 b13 = rol64(b13, 35) ^ b6;
4827 b9 = rol64(b9, 52) ^ b4;
4830 b1 = rol64(b1, 23) ^ b14;
4833 b5 = rol64(b5, 31) ^ b8;
4836 b3 = rol64(b3, 37) ^ b10;
4839 b7 = rol64(b7, 20) ^ b12;
4843 b1 = rol64(b1, 24) ^ b0;
4847 b3 = rol64(b3, 13) ^ b2;
4851 b5 = rol64(b5, 8) ^ b4;
4855 b7 = rol64(b7, 47) ^ b6;
4859 b9 = rol64(b9, 8) ^ b8;
4863 b11 = rol64(b11, 17) ^ b10;
4867 b13 = rol64(b13, 22) ^ b12;
4870 b14 += b15 + k11 + t0;
4871 b15 = rol64(b15, 37) ^ b14;
4874 b9 = rol64(b9, 38) ^ b0;
4877 b13 = rol64(b13, 19) ^ b2;
4880 b11 = rol64(b11, 10) ^ b6;
4883 b15 = rol64(b15, 55) ^ b4;
4886 b7 = rol64(b7, 49) ^ b10;
4889 b3 = rol64(b3, 18) ^ b12;
4892 b5 = rol64(b5, 23) ^ b14;
4895 b1 = rol64(b1, 52) ^ b8;
4898 b7 = rol64(b7, 33) ^ b0;
4901 b5 = rol64(b5, 4) ^ b2;
4904 b3 = rol64(b3, 51) ^ b4;
4907 b1 = rol64(b1, 13) ^ b6;
4910 b15 = rol64(b15, 34) ^ b12;
4913 b13 = rol64(b13, 41) ^ b14;
4916 b11 = rol64(b11, 59) ^ b8;
4919 b9 = rol64(b9, 17) ^ b10;
4922 b15 = rol64(b15, 5) ^ b0;
4925 b11 = rol64(b11, 20) ^ b2;
4928 b13 = rol64(b13, 48) ^ b6;
4931 b9 = rol64(b9, 41) ^ b4;
4934 b1 = rol64(b1, 47) ^ b14;
4937 b5 = rol64(b5, 28) ^ b8;
4940 b3 = rol64(b3, 16) ^ b10;
4943 b7 = rol64(b7, 25) ^ b12;
4947 b1 = rol64(b1, 41) ^ b0;
4951 b3 = rol64(b3, 9) ^ b2;
4955 b5 = rol64(b5, 37) ^ b4;
4959 b7 = rol64(b7, 31) ^ b6;
4963 b9 = rol64(b9, 12) ^ b8;
4967 b11 = rol64(b11, 47) ^ b10;
4971 b13 = rol64(b13, 44) ^ b12;
4974 b14 += b15 + k12 + t1;
4975 b15 = rol64(b15, 30) ^ b14;
4978 b9 = rol64(b9, 16) ^ b0;
4981 b13 = rol64(b13, 34) ^ b2;
4984 b11 = rol64(b11, 56) ^ b6;
4987 b15 = rol64(b15, 51) ^ b4;
4990 b7 = rol64(b7, 4) ^ b10;
4993 b3 = rol64(b3, 53) ^ b12;
4996 b5 = rol64(b5, 42) ^ b14;
4999 b1 = rol64(b1, 41) ^ b8;
5002 b7 = rol64(b7, 31) ^ b0;
5005 b5 = rol64(b5, 44) ^ b2;
5008 b3 = rol64(b3, 47) ^ b4;
5011 b1 = rol64(b1, 46) ^ b6;
5014 b15 = rol64(b15, 19) ^ b12;
5017 b13 = rol64(b13, 42) ^ b14;
5020 b11 = rol64(b11, 44) ^ b8;
5023 b9 = rol64(b9, 25) ^ b10;
5026 b15 = rol64(b15, 9) ^ b0;
5029 b11 = rol64(b11, 48) ^ b2;
5032 b13 = rol64(b13, 35) ^ b6;
5035 b9 = rol64(b9, 52) ^ b4;
5038 b1 = rol64(b1, 23) ^ b14;
5041 b5 = rol64(b5, 31) ^ b8;
5044 b3 = rol64(b3, 37) ^ b10;
5047 b7 = rol64(b7, 20) ^ b12;
5051 b1 = rol64(b1, 24) ^ b0;
5055 b3 = rol64(b3, 13) ^ b2;
5059 b5 = rol64(b5, 8) ^ b4;
5063 b7 = rol64(b7, 47) ^ b6;
5067 b9 = rol64(b9, 8) ^ b8;
5071 b11 = rol64(b11, 17) ^ b10;
5075 b13 = rol64(b13, 22) ^ b12;
5078 b14 += b15 + k13 + t2;
5079 b15 = rol64(b15, 37) ^ b14;
5082 b9 = rol64(b9, 38) ^ b0;
5085 b13 = rol64(b13, 19) ^ b2;
5088 b11 = rol64(b11, 10) ^ b6;
5091 b15 = rol64(b15, 55) ^ b4;
5094 b7 = rol64(b7, 49) ^ b10;
5097 b3 = rol64(b3, 18) ^ b12;
5100 b5 = rol64(b5, 23) ^ b14;
5103 b1 = rol64(b1, 52) ^ b8;
5106 b7 = rol64(b7, 33) ^ b0;
5109 b5 = rol64(b5, 4) ^ b2;
5112 b3 = rol64(b3, 51) ^ b4;
5115 b1 = rol64(b1, 13) ^ b6;
5118 b15 = rol64(b15, 34) ^ b12;
5121 b13 = rol64(b13, 41) ^ b14;
5124 b11 = rol64(b11, 59) ^ b8;
5127 b9 = rol64(b9, 17) ^ b10;
5130 b15 = rol64(b15, 5) ^ b0;
5133 b11 = rol64(b11, 20) ^ b2;
5136 b13 = rol64(b13, 48) ^ b6;
5139 b9 = rol64(b9, 41) ^ b4;
5142 b1 = rol64(b1, 47) ^ b14;
5145 b5 = rol64(b5, 28) ^ b8;
5148 b3 = rol64(b3, 16) ^ b10;
5151 b7 = rol64(b7, 25) ^ b12;
5155 b1 = rol64(b1, 41) ^ b0;
5159 b3 = rol64(b3, 9) ^ b2;
5163 b5 = rol64(b5, 37) ^ b4;
5167 b7 = rol64(b7, 31) ^ b6;
5171 b9 = rol64(b9, 12) ^ b8;
5175 b11 = rol64(b11, 47) ^ b10;
5179 b13 = rol64(b13, 44) ^ b12;
5182 b14 += b15 + k14 + t0;
5183 b15 = rol64(b15, 30) ^ b14;
5186 b9 = rol64(b9, 16) ^ b0;
5189 b13 = rol64(b13, 34) ^ b2;
5192 b11 = rol64(b11, 56) ^ b6;
5195 b15 = rol64(b15, 51) ^ b4;
5198 b7 = rol64(b7, 4) ^ b10;
5201 b3 = rol64(b3, 53) ^ b12;
5204 b5 = rol64(b5, 42) ^ b14;
5207 b1 = rol64(b1, 41) ^ b8;
5210 b7 = rol64(b7, 31) ^ b0;
5213 b5 = rol64(b5, 44) ^ b2;
5216 b3 = rol64(b3, 47) ^ b4;
5219 b1 = rol64(b1, 46) ^ b6;
5222 b15 = rol64(b15, 19) ^ b12;
5225 b13 = rol64(b13, 42) ^ b14;
5228 b11 = rol64(b11, 44) ^ b8;
5231 b9 = rol64(b9, 25) ^ b10;
5234 b15 = rol64(b15, 9) ^ b0;
5237 b11 = rol64(b11, 48) ^ b2;
5240 b13 = rol64(b13, 35) ^ b6;
5243 b9 = rol64(b9, 52) ^ b4;
5246 b1 = rol64(b1, 23) ^ b14;
5249 b5 = rol64(b5, 31) ^ b8;
5252 b3 = rol64(b3, 37) ^ b10;
5255 b7 = rol64(b7, 20) ^ b12;
5259 b1 = rol64(b1, 24) ^ b0;
5263 b3 = rol64(b3, 13) ^ b2;
5267 b5 = rol64(b5, 8) ^ b4;
5271 b7 = rol64(b7, 47) ^ b6;
5275 b9 = rol64(b9, 8) ^ b8;
5279 b11 = rol64(b11, 17) ^ b10;
5283 b13 = rol64(b13, 22) ^ b12;
5286 b14 += b15 + k15 + t1;
5287 b15 = rol64(b15, 37) ^ b14;
5290 b9 = rol64(b9, 38) ^ b0;
5293 b13 = rol64(b13, 19) ^ b2;
5296 b11 = rol64(b11, 10) ^ b6;
5299 b15 = rol64(b15, 55) ^ b4;
5302 b7 = rol64(b7, 49) ^ b10;
5305 b3 = rol64(b3, 18) ^ b12;
5308 b5 = rol64(b5, 23) ^ b14;
5311 b1 = rol64(b1, 52) ^ b8;
5314 b7 = rol64(b7, 33) ^ b0;
5317 b5 = rol64(b5, 4) ^ b2;
5320 b3 = rol64(b3, 51) ^ b4;
5323 b1 = rol64(b1, 13) ^ b6;
5326 b15 = rol64(b15, 34) ^ b12;
5329 b13 = rol64(b13, 41) ^ b14;
5332 b11 = rol64(b11, 59) ^ b8;
5335 b9 = rol64(b9, 17) ^ b10;
5338 b15 = rol64(b15, 5) ^ b0;
5341 b11 = rol64(b11, 20) ^ b2;
5344 b13 = rol64(b13, 48) ^ b6;
5347 b9 = rol64(b9, 41) ^ b4;
5350 b1 = rol64(b1, 47) ^ b14;
5353 b5 = rol64(b5, 28) ^ b8;
5356 b3 = rol64(b3, 16) ^ b10;
5359 b7 = rol64(b7, 25) ^ b12;
5363 b1 = rol64(b1, 41) ^ b0;
5367 b3 = rol64(b3, 9) ^ b2;
5371 b5 = rol64(b5, 37) ^ b4;
5375 b7 = rol64(b7, 31) ^ b6;
5379 b9 = rol64(b9, 12) ^ b8;
5383 b11 = rol64(b11, 47) ^ b10;
5387 b13 = rol64(b13, 44) ^ b12;
5390 b14 += b15 + k16 + t2;
5391 b15 = rol64(b15, 30) ^ b14;
5394 b9 = rol64(b9, 16) ^ b0;
5397 b13 = rol64(b13, 34) ^ b2;
5400 b11 = rol64(b11, 56) ^ b6;
5403 b15 = rol64(b15, 51) ^ b4;
5406 b7 = rol64(b7, 4) ^ b10;
5409 b3 = rol64(b3, 53) ^ b12;
5412 b5 = rol64(b5, 42) ^ b14;
5415 b1 = rol64(b1, 41) ^ b8;
5418 b7 = rol64(b7, 31) ^ b0;
5421 b5 = rol64(b5, 44) ^ b2;
5424 b3 = rol64(b3, 47) ^ b4;
5427 b1 = rol64(b1, 46) ^ b6;
5430 b15 = rol64(b15, 19) ^ b12;
5433 b13 = rol64(b13, 42) ^ b14;
5436 b11 = rol64(b11, 44) ^ b8;
5439 b9 = rol64(b9, 25) ^ b10;
5442 b15 = rol64(b15, 9) ^ b0;
5445 b11 = rol64(b11, 48) ^ b2;
5448 b13 = rol64(b13, 35) ^ b6;
5451 b9 = rol64(b9, 52) ^ b4;
5454 b1 = rol64(b1, 23) ^ b14;
5457 b5 = rol64(b5, 31) ^ b8;
5460 b3 = rol64(b3, 37) ^ b10;
5463 b7 = rol64(b7, 20) ^ b12;
5465 output[0] = b0 + k3;
5466 output[1] = b1 + k4;
5467 output[2] = b2 + k5;
5468 output[3] = b3 + k6;
5469 output[4] = b4 + k7;
5470 output[5] = b5 + k8;
5471 output[6] = b6 + k9;
5472 output[7] = b7 + k10;
5473 output[8] = b8 + k11;
5474 output[9] = b9 + k12;
5475 output[10] = b10 + k13;
5476 output[11] = b11 + k14;
5477 output[12] = b12 + k15;
5478 output[13] = b13 + k16 + t2;
5479 output[14] = b14 + k0 + t0;
5480 output[15] = b15 + k1 + 20;
5483 void threefish_decrypt_1024(struct threefish_key *key_ctx, u64 *input,
5486 u64 b0 = input[0], b1 = input[1],
5487 b2 = input[2], b3 = input[3],
5488 b4 = input[4], b5 = input[5],
5489 b6 = input[6], b7 = input[7],
5490 b8 = input[8], b9 = input[9],
5491 b10 = input[10], b11 = input[11],
5492 b12 = input[12], b13 = input[13],
5493 b14 = input[14], b15 = input[15];
5494 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
5495 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
5496 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
5497 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
5498 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
5499 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
5500 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
5501 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
5502 k16 = key_ctx->key[16];
5503 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
5504 t2 = key_ctx->tweak[2];
5524 b7 = (tmp >> 20) | (tmp << (64 - 20));
5528 b3 = (tmp >> 37) | (tmp << (64 - 37));
5532 b5 = (tmp >> 31) | (tmp << (64 - 31));
5536 b1 = (tmp >> 23) | (tmp << (64 - 23));
5540 b9 = (tmp >> 52) | (tmp << (64 - 52));
5544 b13 = (tmp >> 35) | (tmp << (64 - 35));
5548 b11 = (tmp >> 48) | (tmp << (64 - 48));
5552 b15 = (tmp >> 9) | (tmp << (64 - 9));
5556 b9 = (tmp >> 25) | (tmp << (64 - 25));
5560 b11 = (tmp >> 44) | (tmp << (64 - 44));
5564 b13 = (tmp >> 42) | (tmp << (64 - 42));
5568 b15 = (tmp >> 19) | (tmp << (64 - 19));
5572 b1 = (tmp >> 46) | (tmp << (64 - 46));
5576 b3 = (tmp >> 47) | (tmp << (64 - 47));
5580 b5 = (tmp >> 44) | (tmp << (64 - 44));
5584 b7 = (tmp >> 31) | (tmp << (64 - 31));
5588 b1 = (tmp >> 41) | (tmp << (64 - 41));
5592 b5 = (tmp >> 42) | (tmp << (64 - 42));
5596 b3 = (tmp >> 53) | (tmp << (64 - 53));
5600 b7 = (tmp >> 4) | (tmp << (64 - 4));
5604 b15 = (tmp >> 51) | (tmp << (64 - 51));
5608 b11 = (tmp >> 56) | (tmp << (64 - 56));
5612 b13 = (tmp >> 34) | (tmp << (64 - 34));
5616 b9 = (tmp >> 16) | (tmp << (64 - 16));
5620 b15 = (tmp >> 30) | (tmp << (64 - 30));
5621 b14 -= b15 + k16 + t2;
5625 b13 = (tmp >> 44) | (tmp << (64 - 44));
5630 b11 = (tmp >> 47) | (tmp << (64 - 47));
5635 b9 = (tmp >> 12) | (tmp << (64 - 12));
5640 b7 = (tmp >> 31) | (tmp << (64 - 31));
5645 b5 = (tmp >> 37) | (tmp << (64 - 37));
5650 b3 = (tmp >> 9) | (tmp << (64 - 9));
5655 b1 = (tmp >> 41) | (tmp << (64 - 41));
5660 b7 = (tmp >> 25) | (tmp << (64 - 25));
5664 b3 = (tmp >> 16) | (tmp << (64 - 16));
5668 b5 = (tmp >> 28) | (tmp << (64 - 28));
5672 b1 = (tmp >> 47) | (tmp << (64 - 47));
5676 b9 = (tmp >> 41) | (tmp << (64 - 41));
5680 b13 = (tmp >> 48) | (tmp << (64 - 48));
5684 b11 = (tmp >> 20) | (tmp << (64 - 20));
5688 b15 = (tmp >> 5) | (tmp << (64 - 5));
5692 b9 = (tmp >> 17) | (tmp << (64 - 17));
5696 b11 = (tmp >> 59) | (tmp << (64 - 59));
5700 b13 = (tmp >> 41) | (tmp << (64 - 41));
5704 b15 = (tmp >> 34) | (tmp << (64 - 34));
5708 b1 = (tmp >> 13) | (tmp << (64 - 13));
5712 b3 = (tmp >> 51) | (tmp << (64 - 51));
5716 b5 = (tmp >> 4) | (tmp << (64 - 4));
5720 b7 = (tmp >> 33) | (tmp << (64 - 33));
5724 b1 = (tmp >> 52) | (tmp << (64 - 52));
5728 b5 = (tmp >> 23) | (tmp << (64 - 23));
5732 b3 = (tmp >> 18) | (tmp << (64 - 18));
5736 b7 = (tmp >> 49) | (tmp << (64 - 49));
5740 b15 = (tmp >> 55) | (tmp << (64 - 55));
5744 b11 = (tmp >> 10) | (tmp << (64 - 10));
5748 b13 = (tmp >> 19) | (tmp << (64 - 19));
5752 b9 = (tmp >> 38) | (tmp << (64 - 38));
5756 b15 = (tmp >> 37) | (tmp << (64 - 37));
5757 b14 -= b15 + k15 + t1;
5761 b13 = (tmp >> 22) | (tmp << (64 - 22));
5766 b11 = (tmp >> 17) | (tmp << (64 - 17));
5771 b9 = (tmp >> 8) | (tmp << (64 - 8));
5776 b7 = (tmp >> 47) | (tmp << (64 - 47));
5781 b5 = (tmp >> 8) | (tmp << (64 - 8));
5786 b3 = (tmp >> 13) | (tmp << (64 - 13));
5791 b1 = (tmp >> 24) | (tmp << (64 - 24));
5796 b7 = (tmp >> 20) | (tmp << (64 - 20));
5800 b3 = (tmp >> 37) | (tmp << (64 - 37));
5804 b5 = (tmp >> 31) | (tmp << (64 - 31));
5808 b1 = (tmp >> 23) | (tmp << (64 - 23));
5812 b9 = (tmp >> 52) | (tmp << (64 - 52));
5816 b13 = (tmp >> 35) | (tmp << (64 - 35));
5820 b11 = (tmp >> 48) | (tmp << (64 - 48));
5824 b15 = (tmp >> 9) | (tmp << (64 - 9));
5828 b9 = (tmp >> 25) | (tmp << (64 - 25));
5832 b11 = (tmp >> 44) | (tmp << (64 - 44));
5836 b13 = (tmp >> 42) | (tmp << (64 - 42));
5840 b15 = (tmp >> 19) | (tmp << (64 - 19));
5844 b1 = (tmp >> 46) | (tmp << (64 - 46));
5848 b3 = (tmp >> 47) | (tmp << (64 - 47));
5852 b5 = (tmp >> 44) | (tmp << (64 - 44));
5856 b7 = (tmp >> 31) | (tmp << (64 - 31));
5860 b1 = (tmp >> 41) | (tmp << (64 - 41));
5864 b5 = (tmp >> 42) | (tmp << (64 - 42));
5868 b3 = (tmp >> 53) | (tmp << (64 - 53));
5872 b7 = (tmp >> 4) | (tmp << (64 - 4));
5876 b15 = (tmp >> 51) | (tmp << (64 - 51));
5880 b11 = (tmp >> 56) | (tmp << (64 - 56));
5884 b13 = (tmp >> 34) | (tmp << (64 - 34));
5888 b9 = (tmp >> 16) | (tmp << (64 - 16));
5892 b15 = (tmp >> 30) | (tmp << (64 - 30));
5893 b14 -= b15 + k14 + t0;
5897 b13 = (tmp >> 44) | (tmp << (64 - 44));
5902 b11 = (tmp >> 47) | (tmp << (64 - 47));
5907 b9 = (tmp >> 12) | (tmp << (64 - 12));
5912 b7 = (tmp >> 31) | (tmp << (64 - 31));
5917 b5 = (tmp >> 37) | (tmp << (64 - 37));
5922 b3 = (tmp >> 9) | (tmp << (64 - 9));
5927 b1 = (tmp >> 41) | (tmp << (64 - 41));
5932 b7 = (tmp >> 25) | (tmp << (64 - 25));
5936 b3 = (tmp >> 16) | (tmp << (64 - 16));
5940 b5 = (tmp >> 28) | (tmp << (64 - 28));
5944 b1 = (tmp >> 47) | (tmp << (64 - 47));
5948 b9 = (tmp >> 41) | (tmp << (64 - 41));
5952 b13 = (tmp >> 48) | (tmp << (64 - 48));
5956 b11 = (tmp >> 20) | (tmp << (64 - 20));
5960 b15 = (tmp >> 5) | (tmp << (64 - 5));
5964 b9 = (tmp >> 17) | (tmp << (64 - 17));
5968 b11 = (tmp >> 59) | (tmp << (64 - 59));
5972 b13 = (tmp >> 41) | (tmp << (64 - 41));
5976 b15 = (tmp >> 34) | (tmp << (64 - 34));
5980 b1 = (tmp >> 13) | (tmp << (64 - 13));
5984 b3 = (tmp >> 51) | (tmp << (64 - 51));
5988 b5 = (tmp >> 4) | (tmp << (64 - 4));
5992 b7 = (tmp >> 33) | (tmp << (64 - 33));
5996 b1 = (tmp >> 52) | (tmp << (64 - 52));
6000 b5 = (tmp >> 23) | (tmp << (64 - 23));
6004 b3 = (tmp >> 18) | (tmp << (64 - 18));
6008 b7 = (tmp >> 49) | (tmp << (64 - 49));
6012 b15 = (tmp >> 55) | (tmp << (64 - 55));
6016 b11 = (tmp >> 10) | (tmp << (64 - 10));
6020 b13 = (tmp >> 19) | (tmp << (64 - 19));
6024 b9 = (tmp >> 38) | (tmp << (64 - 38));
6028 b15 = (tmp >> 37) | (tmp << (64 - 37));
6029 b14 -= b15 + k13 + t2;
6033 b13 = (tmp >> 22) | (tmp << (64 - 22));
6038 b11 = (tmp >> 17) | (tmp << (64 - 17));
6043 b9 = (tmp >> 8) | (tmp << (64 - 8));
6048 b7 = (tmp >> 47) | (tmp << (64 - 47));
6053 b5 = (tmp >> 8) | (tmp << (64 - 8));
6058 b3 = (tmp >> 13) | (tmp << (64 - 13));
6063 b1 = (tmp >> 24) | (tmp << (64 - 24));
6068 b7 = (tmp >> 20) | (tmp << (64 - 20));
6072 b3 = (tmp >> 37) | (tmp << (64 - 37));
6076 b5 = (tmp >> 31) | (tmp << (64 - 31));
6080 b1 = (tmp >> 23) | (tmp << (64 - 23));
6084 b9 = (tmp >> 52) | (tmp << (64 - 52));
6088 b13 = (tmp >> 35) | (tmp << (64 - 35));
6092 b11 = (tmp >> 48) | (tmp << (64 - 48));
6096 b15 = (tmp >> 9) | (tmp << (64 - 9));
6100 b9 = (tmp >> 25) | (tmp << (64 - 25));
6104 b11 = (tmp >> 44) | (tmp << (64 - 44));
6108 b13 = (tmp >> 42) | (tmp << (64 - 42));
6112 b15 = (tmp >> 19) | (tmp << (64 - 19));
6116 b1 = (tmp >> 46) | (tmp << (64 - 46));
6120 b3 = (tmp >> 47) | (tmp << (64 - 47));
6124 b5 = (tmp >> 44) | (tmp << (64 - 44));
6128 b7 = (tmp >> 31) | (tmp << (64 - 31));
6132 b1 = (tmp >> 41) | (tmp << (64 - 41));
6136 b5 = (tmp >> 42) | (tmp << (64 - 42));
6140 b3 = (tmp >> 53) | (tmp << (64 - 53));
6144 b7 = (tmp >> 4) | (tmp << (64 - 4));
6148 b15 = (tmp >> 51) | (tmp << (64 - 51));
6152 b11 = (tmp >> 56) | (tmp << (64 - 56));
6156 b13 = (tmp >> 34) | (tmp << (64 - 34));
6160 b9 = (tmp >> 16) | (tmp << (64 - 16));
6164 b15 = (tmp >> 30) | (tmp << (64 - 30));
6165 b14 -= b15 + k12 + t1;
6169 b13 = (tmp >> 44) | (tmp << (64 - 44));
6174 b11 = (tmp >> 47) | (tmp << (64 - 47));
6179 b9 = (tmp >> 12) | (tmp << (64 - 12));
6184 b7 = (tmp >> 31) | (tmp << (64 - 31));
6189 b5 = (tmp >> 37) | (tmp << (64 - 37));
6194 b3 = (tmp >> 9) | (tmp << (64 - 9));
6199 b1 = (tmp >> 41) | (tmp << (64 - 41));
6204 b7 = (tmp >> 25) | (tmp << (64 - 25));
6208 b3 = (tmp >> 16) | (tmp << (64 - 16));
6212 b5 = (tmp >> 28) | (tmp << (64 - 28));
6216 b1 = (tmp >> 47) | (tmp << (64 - 47));
6220 b9 = (tmp >> 41) | (tmp << (64 - 41));
6224 b13 = (tmp >> 48) | (tmp << (64 - 48));
6228 b11 = (tmp >> 20) | (tmp << (64 - 20));
6232 b15 = (tmp >> 5) | (tmp << (64 - 5));
6236 b9 = (tmp >> 17) | (tmp << (64 - 17));
6240 b11 = (tmp >> 59) | (tmp << (64 - 59));
6244 b13 = (tmp >> 41) | (tmp << (64 - 41));
6248 b15 = (tmp >> 34) | (tmp << (64 - 34));
6252 b1 = (tmp >> 13) | (tmp << (64 - 13));
6256 b3 = (tmp >> 51) | (tmp << (64 - 51));
6260 b5 = (tmp >> 4) | (tmp << (64 - 4));
6264 b7 = (tmp >> 33) | (tmp << (64 - 33));
6268 b1 = (tmp >> 52) | (tmp << (64 - 52));
6272 b5 = (tmp >> 23) | (tmp << (64 - 23));
6276 b3 = (tmp >> 18) | (tmp << (64 - 18));
6280 b7 = (tmp >> 49) | (tmp << (64 - 49));
6284 b15 = (tmp >> 55) | (tmp << (64 - 55));
6288 b11 = (tmp >> 10) | (tmp << (64 - 10));
6292 b13 = (tmp >> 19) | (tmp << (64 - 19));
6296 b9 = (tmp >> 38) | (tmp << (64 - 38));
6300 b15 = (tmp >> 37) | (tmp << (64 - 37));
6301 b14 -= b15 + k11 + t0;
6305 b13 = (tmp >> 22) | (tmp << (64 - 22));
6310 b11 = (tmp >> 17) | (tmp << (64 - 17));
6315 b9 = (tmp >> 8) | (tmp << (64 - 8));
6320 b7 = (tmp >> 47) | (tmp << (64 - 47));
6325 b5 = (tmp >> 8) | (tmp << (64 - 8));
6330 b3 = (tmp >> 13) | (tmp << (64 - 13));
6335 b1 = (tmp >> 24) | (tmp << (64 - 24));
6340 b7 = (tmp >> 20) | (tmp << (64 - 20));
6344 b3 = (tmp >> 37) | (tmp << (64 - 37));
6348 b5 = (tmp >> 31) | (tmp << (64 - 31));
6352 b1 = (tmp >> 23) | (tmp << (64 - 23));
6356 b9 = (tmp >> 52) | (tmp << (64 - 52));
6360 b13 = (tmp >> 35) | (tmp << (64 - 35));
6364 b11 = (tmp >> 48) | (tmp << (64 - 48));
6368 b15 = (tmp >> 9) | (tmp << (64 - 9));
6372 b9 = (tmp >> 25) | (tmp << (64 - 25));
6376 b11 = (tmp >> 44) | (tmp << (64 - 44));
6380 b13 = (tmp >> 42) | (tmp << (64 - 42));
6384 b15 = (tmp >> 19) | (tmp << (64 - 19));
6388 b1 = (tmp >> 46) | (tmp << (64 - 46));
6392 b3 = (tmp >> 47) | (tmp << (64 - 47));
6396 b5 = (tmp >> 44) | (tmp << (64 - 44));
6400 b7 = (tmp >> 31) | (tmp << (64 - 31));
6404 b1 = (tmp >> 41) | (tmp << (64 - 41));
6408 b5 = (tmp >> 42) | (tmp << (64 - 42));
6412 b3 = (tmp >> 53) | (tmp << (64 - 53));
6416 b7 = (tmp >> 4) | (tmp << (64 - 4));
6420 b15 = (tmp >> 51) | (tmp << (64 - 51));
6424 b11 = (tmp >> 56) | (tmp << (64 - 56));
6428 b13 = (tmp >> 34) | (tmp << (64 - 34));
6432 b9 = (tmp >> 16) | (tmp << (64 - 16));
6436 b15 = (tmp >> 30) | (tmp << (64 - 30));
6437 b14 -= b15 + k10 + t2;
6441 b13 = (tmp >> 44) | (tmp << (64 - 44));
6446 b11 = (tmp >> 47) | (tmp << (64 - 47));
6451 b9 = (tmp >> 12) | (tmp << (64 - 12));
6456 b7 = (tmp >> 31) | (tmp << (64 - 31));
6461 b5 = (tmp >> 37) | (tmp << (64 - 37));
6466 b3 = (tmp >> 9) | (tmp << (64 - 9));
6471 b1 = (tmp >> 41) | (tmp << (64 - 41));
6476 b7 = (tmp >> 25) | (tmp << (64 - 25));
6480 b3 = (tmp >> 16) | (tmp << (64 - 16));
6484 b5 = (tmp >> 28) | (tmp << (64 - 28));
6488 b1 = (tmp >> 47) | (tmp << (64 - 47));
6492 b9 = (tmp >> 41) | (tmp << (64 - 41));
6496 b13 = (tmp >> 48) | (tmp << (64 - 48));
6500 b11 = (tmp >> 20) | (tmp << (64 - 20));
6504 b15 = (tmp >> 5) | (tmp << (64 - 5));
6508 b9 = (tmp >> 17) | (tmp << (64 - 17));
6512 b11 = (tmp >> 59) | (tmp << (64 - 59));
6516 b13 = (tmp >> 41) | (tmp << (64 - 41));
6520 b15 = (tmp >> 34) | (tmp << (64 - 34));
6524 b1 = (tmp >> 13) | (tmp << (64 - 13));
6528 b3 = (tmp >> 51) | (tmp << (64 - 51));
6532 b5 = (tmp >> 4) | (tmp << (64 - 4));
6536 b7 = (tmp >> 33) | (tmp << (64 - 33));
6540 b1 = (tmp >> 52) | (tmp << (64 - 52));
6544 b5 = (tmp >> 23) | (tmp << (64 - 23));
6548 b3 = (tmp >> 18) | (tmp << (64 - 18));
6552 b7 = (tmp >> 49) | (tmp << (64 - 49));
6556 b15 = (tmp >> 55) | (tmp << (64 - 55));
6560 b11 = (tmp >> 10) | (tmp << (64 - 10));
6564 b13 = (tmp >> 19) | (tmp << (64 - 19));
6568 b9 = (tmp >> 38) | (tmp << (64 - 38));
6572 b15 = (tmp >> 37) | (tmp << (64 - 37));
6573 b14 -= b15 + k9 + t1;
6577 b13 = (tmp >> 22) | (tmp << (64 - 22));
6582 b11 = (tmp >> 17) | (tmp << (64 - 17));
6587 b9 = (tmp >> 8) | (tmp << (64 - 8));
6592 b7 = (tmp >> 47) | (tmp << (64 - 47));
6597 b5 = (tmp >> 8) | (tmp << (64 - 8));
6602 b3 = (tmp >> 13) | (tmp << (64 - 13));
6607 b1 = (tmp >> 24) | (tmp << (64 - 24));
6612 b7 = (tmp >> 20) | (tmp << (64 - 20));
6616 b3 = (tmp >> 37) | (tmp << (64 - 37));
6620 b5 = (tmp >> 31) | (tmp << (64 - 31));
6624 b1 = (tmp >> 23) | (tmp << (64 - 23));
6628 b9 = (tmp >> 52) | (tmp << (64 - 52));
6632 b13 = (tmp >> 35) | (tmp << (64 - 35));
6636 b11 = (tmp >> 48) | (tmp << (64 - 48));
6640 b15 = (tmp >> 9) | (tmp << (64 - 9));
6644 b9 = (tmp >> 25) | (tmp << (64 - 25));
6648 b11 = (tmp >> 44) | (tmp << (64 - 44));
6652 b13 = (tmp >> 42) | (tmp << (64 - 42));
6656 b15 = (tmp >> 19) | (tmp << (64 - 19));
6660 b1 = (tmp >> 46) | (tmp << (64 - 46));
6664 b3 = (tmp >> 47) | (tmp << (64 - 47));
6668 b5 = (tmp >> 44) | (tmp << (64 - 44));
6672 b7 = (tmp >> 31) | (tmp << (64 - 31));
6676 b1 = (tmp >> 41) | (tmp << (64 - 41));
6680 b5 = (tmp >> 42) | (tmp << (64 - 42));
6684 b3 = (tmp >> 53) | (tmp << (64 - 53));
6688 b7 = (tmp >> 4) | (tmp << (64 - 4));
6692 b15 = (tmp >> 51) | (tmp << (64 - 51));
6696 b11 = (tmp >> 56) | (tmp << (64 - 56));
6700 b13 = (tmp >> 34) | (tmp << (64 - 34));
6704 b9 = (tmp >> 16) | (tmp << (64 - 16));
6708 b15 = (tmp >> 30) | (tmp << (64 - 30));
6709 b14 -= b15 + k8 + t0;
6713 b13 = (tmp >> 44) | (tmp << (64 - 44));
6718 b11 = (tmp >> 47) | (tmp << (64 - 47));
6723 b9 = (tmp >> 12) | (tmp << (64 - 12));
6728 b7 = (tmp >> 31) | (tmp << (64 - 31));
6733 b5 = (tmp >> 37) | (tmp << (64 - 37));
6738 b3 = (tmp >> 9) | (tmp << (64 - 9));
6743 b1 = (tmp >> 41) | (tmp << (64 - 41));
6748 b7 = (tmp >> 25) | (tmp << (64 - 25));
6752 b3 = (tmp >> 16) | (tmp << (64 - 16));
6756 b5 = (tmp >> 28) | (tmp << (64 - 28));
6760 b1 = (tmp >> 47) | (tmp << (64 - 47));
6764 b9 = (tmp >> 41) | (tmp << (64 - 41));
6768 b13 = (tmp >> 48) | (tmp << (64 - 48));
6772 b11 = (tmp >> 20) | (tmp << (64 - 20));
6776 b15 = (tmp >> 5) | (tmp << (64 - 5));
6780 b9 = (tmp >> 17) | (tmp << (64 - 17));
6784 b11 = (tmp >> 59) | (tmp << (64 - 59));
6788 b13 = (tmp >> 41) | (tmp << (64 - 41));
6792 b15 = (tmp >> 34) | (tmp << (64 - 34));
6796 b1 = (tmp >> 13) | (tmp << (64 - 13));
6800 b3 = (tmp >> 51) | (tmp << (64 - 51));
6804 b5 = (tmp >> 4) | (tmp << (64 - 4));
6808 b7 = (tmp >> 33) | (tmp << (64 - 33));
6812 b1 = (tmp >> 52) | (tmp << (64 - 52));
6816 b5 = (tmp >> 23) | (tmp << (64 - 23));
6820 b3 = (tmp >> 18) | (tmp << (64 - 18));
6824 b7 = (tmp >> 49) | (tmp << (64 - 49));
6828 b15 = (tmp >> 55) | (tmp << (64 - 55));
6832 b11 = (tmp >> 10) | (tmp << (64 - 10));
6836 b13 = (tmp >> 19) | (tmp << (64 - 19));
6840 b9 = (tmp >> 38) | (tmp << (64 - 38));
6844 b15 = (tmp >> 37) | (tmp << (64 - 37));
6845 b14 -= b15 + k7 + t2;
6849 b13 = (tmp >> 22) | (tmp << (64 - 22));
6854 b11 = (tmp >> 17) | (tmp << (64 - 17));
6859 b9 = (tmp >> 8) | (tmp << (64 - 8));
6864 b7 = (tmp >> 47) | (tmp << (64 - 47));
6869 b5 = (tmp >> 8) | (tmp << (64 - 8));
6874 b3 = (tmp >> 13) | (tmp << (64 - 13));
6879 b1 = (tmp >> 24) | (tmp << (64 - 24));
6884 b7 = (tmp >> 20) | (tmp << (64 - 20));
6888 b3 = (tmp >> 37) | (tmp << (64 - 37));
6892 b5 = (tmp >> 31) | (tmp << (64 - 31));
6896 b1 = (tmp >> 23) | (tmp << (64 - 23));
6900 b9 = (tmp >> 52) | (tmp << (64 - 52));
6904 b13 = (tmp >> 35) | (tmp << (64 - 35));
6908 b11 = (tmp >> 48) | (tmp << (64 - 48));
6912 b15 = (tmp >> 9) | (tmp << (64 - 9));
6916 b9 = (tmp >> 25) | (tmp << (64 - 25));
6920 b11 = (tmp >> 44) | (tmp << (64 - 44));
6924 b13 = (tmp >> 42) | (tmp << (64 - 42));
6928 b15 = (tmp >> 19) | (tmp << (64 - 19));
6932 b1 = (tmp >> 46) | (tmp << (64 - 46));
6936 b3 = (tmp >> 47) | (tmp << (64 - 47));
6940 b5 = (tmp >> 44) | (tmp << (64 - 44));
6944 b7 = (tmp >> 31) | (tmp << (64 - 31));
6948 b1 = (tmp >> 41) | (tmp << (64 - 41));
6952 b5 = (tmp >> 42) | (tmp << (64 - 42));
6956 b3 = (tmp >> 53) | (tmp << (64 - 53));
6960 b7 = (tmp >> 4) | (tmp << (64 - 4));
6964 b15 = (tmp >> 51) | (tmp << (64 - 51));
6968 b11 = (tmp >> 56) | (tmp << (64 - 56));
6972 b13 = (tmp >> 34) | (tmp << (64 - 34));
6976 b9 = (tmp >> 16) | (tmp << (64 - 16));
6980 b15 = (tmp >> 30) | (tmp << (64 - 30));
6981 b14 -= b15 + k6 + t1;
6985 b13 = (tmp >> 44) | (tmp << (64 - 44));
6990 b11 = (tmp >> 47) | (tmp << (64 - 47));
6995 b9 = (tmp >> 12) | (tmp << (64 - 12));
7000 b7 = (tmp >> 31) | (tmp << (64 - 31));
7005 b5 = (tmp >> 37) | (tmp << (64 - 37));
7010 b3 = (tmp >> 9) | (tmp << (64 - 9));
7015 b1 = (tmp >> 41) | (tmp << (64 - 41));
7020 b7 = (tmp >> 25) | (tmp << (64 - 25));
7024 b3 = (tmp >> 16) | (tmp << (64 - 16));
7028 b5 = (tmp >> 28) | (tmp << (64 - 28));
7032 b1 = (tmp >> 47) | (tmp << (64 - 47));
7036 b9 = (tmp >> 41) | (tmp << (64 - 41));
7040 b13 = (tmp >> 48) | (tmp << (64 - 48));
7044 b11 = (tmp >> 20) | (tmp << (64 - 20));
7048 b15 = (tmp >> 5) | (tmp << (64 - 5));
7052 b9 = (tmp >> 17) | (tmp << (64 - 17));
7056 b11 = (tmp >> 59) | (tmp << (64 - 59));
7060 b13 = (tmp >> 41) | (tmp << (64 - 41));
7064 b15 = (tmp >> 34) | (tmp << (64 - 34));
7068 b1 = (tmp >> 13) | (tmp << (64 - 13));
7072 b3 = (tmp >> 51) | (tmp << (64 - 51));
7076 b5 = (tmp >> 4) | (tmp << (64 - 4));
7080 b7 = (tmp >> 33) | (tmp << (64 - 33));
7084 b1 = (tmp >> 52) | (tmp << (64 - 52));
7088 b5 = (tmp >> 23) | (tmp << (64 - 23));
7092 b3 = (tmp >> 18) | (tmp << (64 - 18));
7096 b7 = (tmp >> 49) | (tmp << (64 - 49));
7100 b15 = (tmp >> 55) | (tmp << (64 - 55));
7104 b11 = (tmp >> 10) | (tmp << (64 - 10));
7108 b13 = (tmp >> 19) | (tmp << (64 - 19));
7112 b9 = (tmp >> 38) | (tmp << (64 - 38));
7116 b15 = (tmp >> 37) | (tmp << (64 - 37));
7117 b14 -= b15 + k5 + t0;
7121 b13 = (tmp >> 22) | (tmp << (64 - 22));
7126 b11 = (tmp >> 17) | (tmp << (64 - 17));
7131 b9 = (tmp >> 8) | (tmp << (64 - 8));
7136 b7 = (tmp >> 47) | (tmp << (64 - 47));
7141 b5 = (tmp >> 8) | (tmp << (64 - 8));
7146 b3 = (tmp >> 13) | (tmp << (64 - 13));
7151 b1 = (tmp >> 24) | (tmp << (64 - 24));
7156 b7 = (tmp >> 20) | (tmp << (64 - 20));
7160 b3 = (tmp >> 37) | (tmp << (64 - 37));
7164 b5 = (tmp >> 31) | (tmp << (64 - 31));
7168 b1 = (tmp >> 23) | (tmp << (64 - 23));
7172 b9 = (tmp >> 52) | (tmp << (64 - 52));
7176 b13 = (tmp >> 35) | (tmp << (64 - 35));
7180 b11 = (tmp >> 48) | (tmp << (64 - 48));
7184 b15 = (tmp >> 9) | (tmp << (64 - 9));
7188 b9 = (tmp >> 25) | (tmp << (64 - 25));
7192 b11 = (tmp >> 44) | (tmp << (64 - 44));
7196 b13 = (tmp >> 42) | (tmp << (64 - 42));
7200 b15 = (tmp >> 19) | (tmp << (64 - 19));
7204 b1 = (tmp >> 46) | (tmp << (64 - 46));
7208 b3 = (tmp >> 47) | (tmp << (64 - 47));
7212 b5 = (tmp >> 44) | (tmp << (64 - 44));
7216 b7 = (tmp >> 31) | (tmp << (64 - 31));
7220 b1 = (tmp >> 41) | (tmp << (64 - 41));
7224 b5 = (tmp >> 42) | (tmp << (64 - 42));
7228 b3 = (tmp >> 53) | (tmp << (64 - 53));
7232 b7 = (tmp >> 4) | (tmp << (64 - 4));
7236 b15 = (tmp >> 51) | (tmp << (64 - 51));
7240 b11 = (tmp >> 56) | (tmp << (64 - 56));
7244 b13 = (tmp >> 34) | (tmp << (64 - 34));
7248 b9 = (tmp >> 16) | (tmp << (64 - 16));
7252 b15 = (tmp >> 30) | (tmp << (64 - 30));
7253 b14 -= b15 + k4 + t2;
7257 b13 = (tmp >> 44) | (tmp << (64 - 44));
7262 b11 = (tmp >> 47) | (tmp << (64 - 47));
7267 b9 = (tmp >> 12) | (tmp << (64 - 12));
7272 b7 = (tmp >> 31) | (tmp << (64 - 31));
7277 b5 = (tmp >> 37) | (tmp << (64 - 37));
7282 b3 = (tmp >> 9) | (tmp << (64 - 9));
7287 b1 = (tmp >> 41) | (tmp << (64 - 41));
7292 b7 = (tmp >> 25) | (tmp << (64 - 25));
7296 b3 = (tmp >> 16) | (tmp << (64 - 16));
7300 b5 = (tmp >> 28) | (tmp << (64 - 28));
7304 b1 = (tmp >> 47) | (tmp << (64 - 47));
7308 b9 = (tmp >> 41) | (tmp << (64 - 41));
7312 b13 = (tmp >> 48) | (tmp << (64 - 48));
7316 b11 = (tmp >> 20) | (tmp << (64 - 20));
7320 b15 = (tmp >> 5) | (tmp << (64 - 5));
7324 b9 = (tmp >> 17) | (tmp << (64 - 17));
7328 b11 = (tmp >> 59) | (tmp << (64 - 59));
7332 b13 = (tmp >> 41) | (tmp << (64 - 41));
7336 b15 = (tmp >> 34) | (tmp << (64 - 34));
7340 b1 = (tmp >> 13) | (tmp << (64 - 13));
7344 b3 = (tmp >> 51) | (tmp << (64 - 51));
7348 b5 = (tmp >> 4) | (tmp << (64 - 4));
7352 b7 = (tmp >> 33) | (tmp << (64 - 33));
7356 b1 = (tmp >> 52) | (tmp << (64 - 52));
7360 b5 = (tmp >> 23) | (tmp << (64 - 23));
7364 b3 = (tmp >> 18) | (tmp << (64 - 18));
7368 b7 = (tmp >> 49) | (tmp << (64 - 49));
7372 b15 = (tmp >> 55) | (tmp << (64 - 55));
7376 b11 = (tmp >> 10) | (tmp << (64 - 10));
7380 b13 = (tmp >> 19) | (tmp << (64 - 19));
7384 b9 = (tmp >> 38) | (tmp << (64 - 38));
7388 b15 = (tmp >> 37) | (tmp << (64 - 37));
7389 b14 -= b15 + k3 + t1;
7393 b13 = (tmp >> 22) | (tmp << (64 - 22));
7398 b11 = (tmp >> 17) | (tmp << (64 - 17));
7403 b9 = (tmp >> 8) | (tmp << (64 - 8));
7408 b7 = (tmp >> 47) | (tmp << (64 - 47));
7413 b5 = (tmp >> 8) | (tmp << (64 - 8));
7418 b3 = (tmp >> 13) | (tmp << (64 - 13));
7423 b1 = (tmp >> 24) | (tmp << (64 - 24));
7428 b7 = (tmp >> 20) | (tmp << (64 - 20));
7432 b3 = (tmp >> 37) | (tmp << (64 - 37));
7436 b5 = (tmp >> 31) | (tmp << (64 - 31));
7440 b1 = (tmp >> 23) | (tmp << (64 - 23));
7444 b9 = (tmp >> 52) | (tmp << (64 - 52));
7448 b13 = (tmp >> 35) | (tmp << (64 - 35));
7452 b11 = (tmp >> 48) | (tmp << (64 - 48));
7456 b15 = (tmp >> 9) | (tmp << (64 - 9));
7460 b9 = (tmp >> 25) | (tmp << (64 - 25));
7464 b11 = (tmp >> 44) | (tmp << (64 - 44));
7468 b13 = (tmp >> 42) | (tmp << (64 - 42));
7472 b15 = (tmp >> 19) | (tmp << (64 - 19));
7476 b1 = (tmp >> 46) | (tmp << (64 - 46));
7480 b3 = (tmp >> 47) | (tmp << (64 - 47));
7484 b5 = (tmp >> 44) | (tmp << (64 - 44));
7488 b7 = (tmp >> 31) | (tmp << (64 - 31));
7492 b1 = (tmp >> 41) | (tmp << (64 - 41));
7496 b5 = (tmp >> 42) | (tmp << (64 - 42));
7500 b3 = (tmp >> 53) | (tmp << (64 - 53));
7504 b7 = (tmp >> 4) | (tmp << (64 - 4));
7508 b15 = (tmp >> 51) | (tmp << (64 - 51));
7512 b11 = (tmp >> 56) | (tmp << (64 - 56));
7516 b13 = (tmp >> 34) | (tmp << (64 - 34));
7520 b9 = (tmp >> 16) | (tmp << (64 - 16));
7524 b15 = (tmp >> 30) | (tmp << (64 - 30));
7525 b14 -= b15 + k2 + t0;
7529 b13 = (tmp >> 44) | (tmp << (64 - 44));
7534 b11 = (tmp >> 47) | (tmp << (64 - 47));
7539 b9 = (tmp >> 12) | (tmp << (64 - 12));
7544 b7 = (tmp >> 31) | (tmp << (64 - 31));
7549 b5 = (tmp >> 37) | (tmp << (64 - 37));
7554 b3 = (tmp >> 9) | (tmp << (64 - 9));
7559 b1 = (tmp >> 41) | (tmp << (64 - 41));
7564 b7 = (tmp >> 25) | (tmp << (64 - 25));
7568 b3 = (tmp >> 16) | (tmp << (64 - 16));
7572 b5 = (tmp >> 28) | (tmp << (64 - 28));
7576 b1 = (tmp >> 47) | (tmp << (64 - 47));
7580 b9 = (tmp >> 41) | (tmp << (64 - 41));
7584 b13 = (tmp >> 48) | (tmp << (64 - 48));
7588 b11 = (tmp >> 20) | (tmp << (64 - 20));
7592 b15 = (tmp >> 5) | (tmp << (64 - 5));
7596 b9 = (tmp >> 17) | (tmp << (64 - 17));
7600 b11 = (tmp >> 59) | (tmp << (64 - 59));
7604 b13 = (tmp >> 41) | (tmp << (64 - 41));
7608 b15 = (tmp >> 34) | (tmp << (64 - 34));
7612 b1 = (tmp >> 13) | (tmp << (64 - 13));
7616 b3 = (tmp >> 51) | (tmp << (64 - 51));
7620 b5 = (tmp >> 4) | (tmp << (64 - 4));
7624 b7 = (tmp >> 33) | (tmp << (64 - 33));
7628 b1 = (tmp >> 52) | (tmp << (64 - 52));
7632 b5 = (tmp >> 23) | (tmp << (64 - 23));
7636 b3 = (tmp >> 18) | (tmp << (64 - 18));
7640 b7 = (tmp >> 49) | (tmp << (64 - 49));
7644 b15 = (tmp >> 55) | (tmp << (64 - 55));
7648 b11 = (tmp >> 10) | (tmp << (64 - 10));
7652 b13 = (tmp >> 19) | (tmp << (64 - 19));
7656 b9 = (tmp >> 38) | (tmp << (64 - 38));
7660 b15 = (tmp >> 37) | (tmp << (64 - 37));
7661 b14 -= b15 + k1 + t2;
7665 b13 = (tmp >> 22) | (tmp << (64 - 22));
7670 b11 = (tmp >> 17) | (tmp << (64 - 17));
7675 b9 = (tmp >> 8) | (tmp << (64 - 8));
7680 b7 = (tmp >> 47) | (tmp << (64 - 47));
7685 b5 = (tmp >> 8) | (tmp << (64 - 8));
7690 b3 = (tmp >> 13) | (tmp << (64 - 13));
7695 b1 = (tmp >> 24) | (tmp << (64 - 24));
7700 b7 = (tmp >> 20) | (tmp << (64 - 20));
7704 b3 = (tmp >> 37) | (tmp << (64 - 37));
7708 b5 = (tmp >> 31) | (tmp << (64 - 31));
7712 b1 = (tmp >> 23) | (tmp << (64 - 23));
7716 b9 = (tmp >> 52) | (tmp << (64 - 52));
7720 b13 = (tmp >> 35) | (tmp << (64 - 35));
7724 b11 = (tmp >> 48) | (tmp << (64 - 48));
7728 b15 = (tmp >> 9) | (tmp << (64 - 9));
7732 b9 = (tmp >> 25) | (tmp << (64 - 25));
7736 b11 = (tmp >> 44) | (tmp << (64 - 44));
7740 b13 = (tmp >> 42) | (tmp << (64 - 42));
7744 b15 = (tmp >> 19) | (tmp << (64 - 19));
7748 b1 = (tmp >> 46) | (tmp << (64 - 46));
7752 b3 = (tmp >> 47) | (tmp << (64 - 47));
7756 b5 = (tmp >> 44) | (tmp << (64 - 44));
7760 b7 = (tmp >> 31) | (tmp << (64 - 31));
7764 b1 = (tmp >> 41) | (tmp << (64 - 41));
7768 b5 = (tmp >> 42) | (tmp << (64 - 42));
7772 b3 = (tmp >> 53) | (tmp << (64 - 53));
7776 b7 = (tmp >> 4) | (tmp << (64 - 4));
7780 b15 = (tmp >> 51) | (tmp << (64 - 51));
7784 b11 = (tmp >> 56) | (tmp << (64 - 56));
7788 b13 = (tmp >> 34) | (tmp << (64 - 34));
7792 b9 = (tmp >> 16) | (tmp << (64 - 16));
7796 b15 = (tmp >> 30) | (tmp << (64 - 30));
7797 b14 -= b15 + k0 + t1;
7801 b13 = (tmp >> 44) | (tmp << (64 - 44));
7806 b11 = (tmp >> 47) | (tmp << (64 - 47));
7811 b9 = (tmp >> 12) | (tmp << (64 - 12));
7816 b7 = (tmp >> 31) | (tmp << (64 - 31));
7821 b5 = (tmp >> 37) | (tmp << (64 - 37));
7826 b3 = (tmp >> 9) | (tmp << (64 - 9));
7831 b1 = (tmp >> 41) | (tmp << (64 - 41));
7836 b7 = (tmp >> 25) | (tmp << (64 - 25));
7840 b3 = (tmp >> 16) | (tmp << (64 - 16));
7844 b5 = (tmp >> 28) | (tmp << (64 - 28));
7848 b1 = (tmp >> 47) | (tmp << (64 - 47));
7852 b9 = (tmp >> 41) | (tmp << (64 - 41));
7856 b13 = (tmp >> 48) | (tmp << (64 - 48));
7860 b11 = (tmp >> 20) | (tmp << (64 - 20));
7864 b15 = (tmp >> 5) | (tmp << (64 - 5));
7868 b9 = (tmp >> 17) | (tmp << (64 - 17));
7872 b11 = (tmp >> 59) | (tmp << (64 - 59));
7876 b13 = (tmp >> 41) | (tmp << (64 - 41));
7880 b15 = (tmp >> 34) | (tmp << (64 - 34));
7884 b1 = (tmp >> 13) | (tmp << (64 - 13));
7888 b3 = (tmp >> 51) | (tmp << (64 - 51));
7892 b5 = (tmp >> 4) | (tmp << (64 - 4));
7896 b7 = (tmp >> 33) | (tmp << (64 - 33));
7900 b1 = (tmp >> 52) | (tmp << (64 - 52));
7904 b5 = (tmp >> 23) | (tmp << (64 - 23));
7908 b3 = (tmp >> 18) | (tmp << (64 - 18));
7912 b7 = (tmp >> 49) | (tmp << (64 - 49));
7916 b15 = (tmp >> 55) | (tmp << (64 - 55));
7920 b11 = (tmp >> 10) | (tmp << (64 - 10));
7924 b13 = (tmp >> 19) | (tmp << (64 - 19));
7928 b9 = (tmp >> 38) | (tmp << (64 - 38));
7932 b15 = (tmp >> 37) | (tmp << (64 - 37));
7933 b14 -= b15 + k16 + t0;
7937 b13 = (tmp >> 22) | (tmp << (64 - 22));
7942 b11 = (tmp >> 17) | (tmp << (64 - 17));
7947 b9 = (tmp >> 8) | (tmp << (64 - 8));
7952 b7 = (tmp >> 47) | (tmp << (64 - 47));
7957 b5 = (tmp >> 8) | (tmp << (64 - 8));
7962 b3 = (tmp >> 13) | (tmp << (64 - 13));
7967 b1 = (tmp >> 24) | (tmp << (64 - 24));
7972 b7 = (tmp >> 20) | (tmp << (64 - 20));
7976 b3 = (tmp >> 37) | (tmp << (64 - 37));
7980 b5 = (tmp >> 31) | (tmp << (64 - 31));
7984 b1 = (tmp >> 23) | (tmp << (64 - 23));
7988 b9 = (tmp >> 52) | (tmp << (64 - 52));
7992 b13 = (tmp >> 35) | (tmp << (64 - 35));
7996 b11 = (tmp >> 48) | (tmp << (64 - 48));
8000 b15 = (tmp >> 9) | (tmp << (64 - 9));
8004 b9 = (tmp >> 25) | (tmp << (64 - 25));
8008 b11 = (tmp >> 44) | (tmp << (64 - 44));
8012 b13 = (tmp >> 42) | (tmp << (64 - 42));
8016 b15 = (tmp >> 19) | (tmp << (64 - 19));
8020 b1 = (tmp >> 46) | (tmp << (64 - 46));
8024 b3 = (tmp >> 47) | (tmp << (64 - 47));
8028 b5 = (tmp >> 44) | (tmp << (64 - 44));
8032 b7 = (tmp >> 31) | (tmp << (64 - 31));
8036 b1 = (tmp >> 41) | (tmp << (64 - 41));
8040 b5 = (tmp >> 42) | (tmp << (64 - 42));
8044 b3 = (tmp >> 53) | (tmp << (64 - 53));
8048 b7 = (tmp >> 4) | (tmp << (64 - 4));
8052 b15 = (tmp >> 51) | (tmp << (64 - 51));
8056 b11 = (tmp >> 56) | (tmp << (64 - 56));
8060 b13 = (tmp >> 34) | (tmp << (64 - 34));
8064 b9 = (tmp >> 16) | (tmp << (64 - 16));
8068 b15 = (tmp >> 30) | (tmp << (64 - 30));
8069 b14 -= b15 + k15 + t2;
8073 b13 = (tmp >> 44) | (tmp << (64 - 44));
8078 b11 = (tmp >> 47) | (tmp << (64 - 47));
8083 b9 = (tmp >> 12) | (tmp << (64 - 12));
8088 b7 = (tmp >> 31) | (tmp << (64 - 31));
8093 b5 = (tmp >> 37) | (tmp << (64 - 37));
8098 b3 = (tmp >> 9) | (tmp << (64 - 9));
8103 b1 = (tmp >> 41) | (tmp << (64 - 41));
8108 b7 = (tmp >> 25) | (tmp << (64 - 25));
8112 b3 = (tmp >> 16) | (tmp << (64 - 16));
8116 b5 = (tmp >> 28) | (tmp << (64 - 28));
8120 b1 = (tmp >> 47) | (tmp << (64 - 47));
8124 b9 = (tmp >> 41) | (tmp << (64 - 41));
8128 b13 = (tmp >> 48) | (tmp << (64 - 48));
8132 b11 = (tmp >> 20) | (tmp << (64 - 20));
8136 b15 = (tmp >> 5) | (tmp << (64 - 5));
8140 b9 = (tmp >> 17) | (tmp << (64 - 17));
8144 b11 = (tmp >> 59) | (tmp << (64 - 59));
8148 b13 = (tmp >> 41) | (tmp << (64 - 41));
8152 b15 = (tmp >> 34) | (tmp << (64 - 34));
8156 b1 = (tmp >> 13) | (tmp << (64 - 13));
8160 b3 = (tmp >> 51) | (tmp << (64 - 51));
8164 b5 = (tmp >> 4) | (tmp << (64 - 4));
8168 b7 = (tmp >> 33) | (tmp << (64 - 33));
8172 b1 = (tmp >> 52) | (tmp << (64 - 52));
8176 b5 = (tmp >> 23) | (tmp << (64 - 23));
8180 b3 = (tmp >> 18) | (tmp << (64 - 18));
8184 b7 = (tmp >> 49) | (tmp << (64 - 49));
8188 b15 = (tmp >> 55) | (tmp << (64 - 55));
8192 b11 = (tmp >> 10) | (tmp << (64 - 10));
8196 b13 = (tmp >> 19) | (tmp << (64 - 19));
8200 b9 = (tmp >> 38) | (tmp << (64 - 38));
8204 b15 = (tmp >> 37) | (tmp << (64 - 37));
8205 b14 -= b15 + k14 + t1;
8209 b13 = (tmp >> 22) | (tmp << (64 - 22));
8214 b11 = (tmp >> 17) | (tmp << (64 - 17));
8219 b9 = (tmp >> 8) | (tmp << (64 - 8));
8224 b7 = (tmp >> 47) | (tmp << (64 - 47));
8229 b5 = (tmp >> 8) | (tmp << (64 - 8));
8234 b3 = (tmp >> 13) | (tmp << (64 - 13));
8239 b1 = (tmp >> 24) | (tmp << (64 - 24));