1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/bitops.h>
3 #include "threefish_api.h"
5 void threefish_encrypt_256(struct threefish_key *key_ctx, u64 *input,
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],
13 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
14 t2 = key_ctx->tweak[2];
18 b1 = rol64(b1, 14) ^ b0;
22 b3 = rol64(b3, 16) ^ b2;
25 b3 = rol64(b3, 52) ^ b0;
28 b1 = rol64(b1, 57) ^ b2;
31 b1 = rol64(b1, 23) ^ b0;
34 b3 = rol64(b3, 40) ^ b2;
37 b3 = rol64(b3, 5) ^ b0;
40 b1 = rol64(b1, 37) ^ b2;
44 b1 = rol64(b1, 25) ^ b0;
48 b3 = rol64(b3, 33) ^ b2;
51 b3 = rol64(b3, 46) ^ b0;
54 b1 = rol64(b1, 12) ^ b2;
57 b1 = rol64(b1, 58) ^ b0;
60 b3 = rol64(b3, 22) ^ b2;
63 b3 = rol64(b3, 32) ^ b0;
66 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;
122 b1 = rol64(b1, 14) ^ b0;
126 b3 = rol64(b3, 16) ^ b2;
129 b3 = rol64(b3, 52) ^ b0;
132 b1 = rol64(b1, 57) ^ b2;
135 b1 = rol64(b1, 23) ^ b0;
138 b3 = rol64(b3, 40) ^ b2;
141 b3 = rol64(b3, 5) ^ b0;
144 b1 = rol64(b1, 37) ^ b2;
148 b1 = rol64(b1, 25) ^ b0;
152 b3 = rol64(b3, 33) ^ b2;
155 b3 = rol64(b3, 46) ^ b0;
158 b1 = rol64(b1, 12) ^ b2;
161 b1 = rol64(b1, 58) ^ b0;
164 b3 = rol64(b3, 22) ^ b2;
167 b3 = rol64(b3, 32) ^ b0;
170 b1 = rol64(b1, 32) ^ b2;
174 b1 = rol64(b1, 14) ^ b0;
178 b3 = rol64(b3, 16) ^ b2;
181 b3 = rol64(b3, 52) ^ b0;
184 b1 = rol64(b1, 57) ^ b2;
187 b1 = rol64(b1, 23) ^ b0;
190 b3 = rol64(b3, 40) ^ b2;
193 b3 = rol64(b3, 5) ^ b0;
196 b1 = rol64(b1, 37) ^ b2;
200 b1 = rol64(b1, 25) ^ b0;
204 b3 = rol64(b3, 33) ^ b2;
207 b3 = rol64(b3, 46) ^ b0;
210 b1 = rol64(b1, 12) ^ b2;
213 b1 = rol64(b1, 58) ^ b0;
216 b3 = rol64(b3, 22) ^ b2;
219 b3 = rol64(b3, 32) ^ b0;
222 b1 = rol64(b1, 32) ^ b2;
226 b1 = rol64(b1, 14) ^ b0;
230 b3 = rol64(b3, 16) ^ b2;
233 b3 = rol64(b3, 52) ^ b0;
236 b1 = rol64(b1, 57) ^ b2;
239 b1 = rol64(b1, 23) ^ b0;
242 b3 = rol64(b3, 40) ^ b2;
245 b3 = rol64(b3, 5) ^ b0;
248 b1 = rol64(b1, 37) ^ b2;
252 b1 = rol64(b1, 25) ^ b0;
256 b3 = rol64(b3, 33) ^ b2;
259 b3 = rol64(b3, 46) ^ b0;
262 b1 = rol64(b1, 12) ^ b2;
265 b1 = rol64(b1, 58) ^ b0;
268 b3 = rol64(b3, 22) ^ b2;
271 b3 = rol64(b3, 32) ^ b0;
274 b1 = rol64(b1, 32) ^ b2;
278 b1 = rol64(b1, 14) ^ b0;
282 b3 = rol64(b3, 16) ^ b2;
285 b3 = rol64(b3, 52) ^ b0;
288 b1 = rol64(b1, 57) ^ b2;
291 b1 = rol64(b1, 23) ^ b0;
294 b3 = rol64(b3, 40) ^ b2;
297 b3 = rol64(b3, 5) ^ b0;
300 b1 = rol64(b1, 37) ^ b2;
304 b1 = rol64(b1, 25) ^ b0;
308 b3 = rol64(b3, 33) ^ b2;
311 b3 = rol64(b3, 46) ^ b0;
314 b1 = rol64(b1, 12) ^ b2;
317 b1 = rol64(b1, 58) ^ b0;
320 b3 = rol64(b3, 22) ^ b2;
323 b3 = rol64(b3, 32) ^ b0;
326 b1 = rol64(b1, 32) ^ b2;
330 b1 = rol64(b1, 14) ^ b0;
334 b3 = rol64(b3, 16) ^ b2;
337 b3 = rol64(b3, 52) ^ b0;
340 b1 = rol64(b1, 57) ^ b2;
343 b1 = rol64(b1, 23) ^ b0;
346 b3 = rol64(b3, 40) ^ b2;
349 b3 = rol64(b3, 5) ^ b0;
352 b1 = rol64(b1, 37) ^ b2;
356 b1 = rol64(b1, 25) ^ b0;
360 b3 = rol64(b3, 33) ^ b2;
363 b3 = rol64(b3, 46) ^ b0;
366 b1 = rol64(b1, 12) ^ b2;
369 b1 = rol64(b1, 58) ^ b0;
372 b3 = rol64(b3, 22) ^ b2;
375 b3 = rol64(b3, 32) ^ b0;
378 b1 = rol64(b1, 32) ^ b2;
382 b1 = rol64(b1, 14) ^ b0;
386 b3 = rol64(b3, 16) ^ b2;
389 b3 = rol64(b3, 52) ^ b0;
392 b1 = rol64(b1, 57) ^ b2;
395 b1 = rol64(b1, 23) ^ b0;
398 b3 = rol64(b3, 40) ^ b2;
401 b3 = rol64(b3, 5) ^ b0;
404 b1 = rol64(b1, 37) ^ b2;
408 b1 = rol64(b1, 25) ^ b0;
412 b3 = rol64(b3, 33) ^ b2;
415 b3 = rol64(b3, 46) ^ b0;
418 b1 = rol64(b1, 12) ^ b2;
421 b1 = rol64(b1, 58) ^ b0;
424 b3 = rol64(b3, 22) ^ b2;
427 b3 = rol64(b3, 32) ^ b0;
430 b1 = rol64(b1, 32) ^ b2;
434 b1 = rol64(b1, 14) ^ b0;
438 b3 = rol64(b3, 16) ^ b2;
441 b3 = rol64(b3, 52) ^ b0;
444 b1 = rol64(b1, 57) ^ b2;
447 b1 = rol64(b1, 23) ^ b0;
450 b3 = rol64(b3, 40) ^ b2;
453 b3 = rol64(b3, 5) ^ b0;
456 b1 = rol64(b1, 37) ^ b2;
460 b1 = rol64(b1, 25) ^ b0;
464 b3 = rol64(b3, 33) ^ b2;
467 b3 = rol64(b3, 46) ^ b0;
470 b1 = rol64(b1, 12) ^ b2;
473 b1 = rol64(b1, 58) ^ b0;
476 b3 = rol64(b3, 22) ^ b2;
479 b3 = rol64(b3, 32) ^ b0;
482 b1 = rol64(b1, 32) ^ b2;
485 output[1] = b1 + k4 + t0;
486 output[2] = b2 + k0 + t1;
487 output[3] = b3 + k1 + 18;
490 void threefish_decrypt_256(struct threefish_key *key_ctx, u64 *input,
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];
1000 b3 = ror64(tmp, 46);
1004 b1 = ror64(tmp, 12);
1008 b1 = ror64(tmp, 25);
1013 b3 = ror64(tmp, 33);
1022 b1 = ror64(tmp, 37);
1026 b1 = ror64(tmp, 23);
1030 b3 = ror64(tmp, 40);
1034 b3 = ror64(tmp, 52);
1038 b1 = ror64(tmp, 57);
1042 b1 = ror64(tmp, 14);
1047 b3 = ror64(tmp, 16);
1052 b3 = ror64(tmp, 32);
1056 b1 = ror64(tmp, 32);
1060 b1 = ror64(tmp, 58);
1064 b3 = ror64(tmp, 22);
1068 b3 = ror64(tmp, 46);
1072 b1 = ror64(tmp, 12);
1076 b1 = ror64(tmp, 25);
1081 b3 = ror64(tmp, 33);
1090 b1 = ror64(tmp, 37);
1094 b1 = ror64(tmp, 23);
1098 b3 = ror64(tmp, 40);
1102 b3 = ror64(tmp, 52);
1106 b1 = ror64(tmp, 57);
1110 b1 = ror64(tmp, 14);
1115 b3 = ror64(tmp, 16);
1125 void threefish_encrypt_512(struct threefish_key *key_ctx, u64 *input,
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];
1142 b1 = rol64(b1, 46) ^ b0;
1146 b3 = rol64(b3, 36) ^ b2;
1150 b5 = rol64(b5, 19) ^ b4;
1154 b7 = rol64(b7, 37) ^ b6;
1157 b1 = rol64(b1, 33) ^ b2;
1160 b7 = rol64(b7, 27) ^ b4;
1163 b5 = rol64(b5, 14) ^ b6;
1166 b3 = rol64(b3, 42) ^ b0;
1169 b1 = rol64(b1, 17) ^ b4;
1172 b3 = rol64(b3, 49) ^ b6;
1175 b5 = rol64(b5, 36) ^ b0;
1178 b7 = rol64(b7, 39) ^ b2;
1181 b1 = rol64(b1, 44) ^ b6;
1184 b7 = rol64(b7, 9) ^ b0;
1187 b5 = rol64(b5, 54) ^ b2;
1190 b3 = rol64(b3, 56) ^ b4;
1194 b1 = rol64(b1, 39) ^ b0;
1198 b3 = rol64(b3, 30) ^ b2;
1202 b5 = rol64(b5, 34) ^ b4;
1206 b7 = rol64(b7, 24) ^ b6;
1209 b1 = rol64(b1, 13) ^ b2;
1212 b7 = rol64(b7, 50) ^ b4;
1215 b5 = rol64(b5, 10) ^ b6;
1218 b3 = rol64(b3, 17) ^ b0;
1221 b1 = rol64(b1, 25) ^ b4;
1224 b3 = rol64(b3, 29) ^ b6;
1227 b5 = rol64(b5, 39) ^ b0;
1230 b7 = rol64(b7, 43) ^ b2;
1233 b1 = rol64(b1, 8) ^ b6;
1236 b7 = rol64(b7, 35) ^ b0;
1239 b5 = rol64(b5, 56) ^ b2;
1242 b3 = rol64(b3, 22) ^ b4;
1246 b1 = rol64(b1, 46) ^ b0;
1250 b3 = rol64(b3, 36) ^ b2;
1254 b5 = rol64(b5, 19) ^ b4;
1258 b7 = rol64(b7, 37) ^ b6;
1261 b1 = rol64(b1, 33) ^ b2;
1264 b7 = rol64(b7, 27) ^ b4;
1267 b5 = rol64(b5, 14) ^ b6;
1270 b3 = rol64(b3, 42) ^ b0;
1273 b1 = rol64(b1, 17) ^ b4;
1276 b3 = rol64(b3, 49) ^ b6;
1279 b5 = rol64(b5, 36) ^ b0;
1282 b7 = rol64(b7, 39) ^ b2;
1285 b1 = rol64(b1, 44) ^ b6;
1288 b7 = rol64(b7, 9) ^ b0;
1291 b5 = rol64(b5, 54) ^ b2;
1294 b3 = rol64(b3, 56) ^ b4;
1298 b1 = rol64(b1, 39) ^ b0;
1302 b3 = rol64(b3, 30) ^ b2;
1306 b5 = rol64(b5, 34) ^ b4;
1310 b7 = rol64(b7, 24) ^ b6;
1313 b1 = rol64(b1, 13) ^ b2;
1316 b7 = rol64(b7, 50) ^ b4;
1319 b5 = rol64(b5, 10) ^ b6;
1322 b3 = rol64(b3, 17) ^ b0;
1325 b1 = rol64(b1, 25) ^ b4;
1328 b3 = rol64(b3, 29) ^ b6;
1331 b5 = rol64(b5, 39) ^ b0;
1334 b7 = rol64(b7, 43) ^ b2;
1337 b1 = rol64(b1, 8) ^ b6;
1340 b7 = rol64(b7, 35) ^ b0;
1343 b5 = rol64(b5, 56) ^ b2;
1346 b3 = rol64(b3, 22) ^ b4;
1350 b1 = rol64(b1, 46) ^ b0;
1354 b3 = rol64(b3, 36) ^ b2;
1358 b5 = rol64(b5, 19) ^ b4;
1362 b7 = rol64(b7, 37) ^ b6;
1365 b1 = rol64(b1, 33) ^ b2;
1368 b7 = rol64(b7, 27) ^ b4;
1371 b5 = rol64(b5, 14) ^ b6;
1374 b3 = rol64(b3, 42) ^ b0;
1377 b1 = rol64(b1, 17) ^ b4;
1380 b3 = rol64(b3, 49) ^ b6;
1383 b5 = rol64(b5, 36) ^ b0;
1386 b7 = rol64(b7, 39) ^ b2;
1389 b1 = rol64(b1, 44) ^ b6;
1392 b7 = rol64(b7, 9) ^ b0;
1395 b5 = rol64(b5, 54) ^ b2;
1398 b3 = rol64(b3, 56) ^ b4;
1402 b1 = rol64(b1, 39) ^ b0;
1406 b3 = rol64(b3, 30) ^ b2;
1410 b5 = rol64(b5, 34) ^ b4;
1414 b7 = rol64(b7, 24) ^ b6;
1417 b1 = rol64(b1, 13) ^ b2;
1420 b7 = rol64(b7, 50) ^ b4;
1423 b5 = rol64(b5, 10) ^ b6;
1426 b3 = rol64(b3, 17) ^ b0;
1429 b1 = rol64(b1, 25) ^ b4;
1432 b3 = rol64(b3, 29) ^ b6;
1435 b5 = rol64(b5, 39) ^ b0;
1438 b7 = rol64(b7, 43) ^ b2;
1441 b1 = rol64(b1, 8) ^ b6;
1444 b7 = rol64(b7, 35) ^ b0;
1447 b5 = rol64(b5, 56) ^ b2;
1450 b3 = rol64(b3, 22) ^ b4;
1454 b1 = rol64(b1, 46) ^ b0;
1458 b3 = rol64(b3, 36) ^ b2;
1462 b5 = rol64(b5, 19) ^ b4;
1466 b7 = rol64(b7, 37) ^ b6;
1469 b1 = rol64(b1, 33) ^ b2;
1472 b7 = rol64(b7, 27) ^ b4;
1475 b5 = rol64(b5, 14) ^ b6;
1478 b3 = rol64(b3, 42) ^ b0;
1481 b1 = rol64(b1, 17) ^ b4;
1484 b3 = rol64(b3, 49) ^ b6;
1487 b5 = rol64(b5, 36) ^ b0;
1490 b7 = rol64(b7, 39) ^ b2;
1493 b1 = rol64(b1, 44) ^ b6;
1496 b7 = rol64(b7, 9) ^ b0;
1499 b5 = rol64(b5, 54) ^ b2;
1502 b3 = rol64(b3, 56) ^ b4;
1506 b1 = rol64(b1, 39) ^ b0;
1510 b3 = rol64(b3, 30) ^ b2;
1514 b5 = rol64(b5, 34) ^ b4;
1518 b7 = rol64(b7, 24) ^ b6;
1521 b1 = rol64(b1, 13) ^ b2;
1524 b7 = rol64(b7, 50) ^ b4;
1527 b5 = rol64(b5, 10) ^ b6;
1530 b3 = rol64(b3, 17) ^ b0;
1533 b1 = rol64(b1, 25) ^ b4;
1536 b3 = rol64(b3, 29) ^ b6;
1539 b5 = rol64(b5, 39) ^ b0;
1542 b7 = rol64(b7, 43) ^ b2;
1545 b1 = rol64(b1, 8) ^ b6;
1548 b7 = rol64(b7, 35) ^ b0;
1551 b5 = rol64(b5, 56) ^ b2;
1554 b3 = rol64(b3, 22) ^ b4;
1558 b1 = rol64(b1, 46) ^ b0;
1562 b3 = rol64(b3, 36) ^ b2;
1566 b5 = rol64(b5, 19) ^ b4;
1570 b7 = rol64(b7, 37) ^ b6;
1573 b1 = rol64(b1, 33) ^ b2;
1576 b7 = rol64(b7, 27) ^ b4;
1579 b5 = rol64(b5, 14) ^ b6;
1582 b3 = rol64(b3, 42) ^ b0;
1585 b1 = rol64(b1, 17) ^ b4;
1588 b3 = rol64(b3, 49) ^ b6;
1591 b5 = rol64(b5, 36) ^ b0;
1594 b7 = rol64(b7, 39) ^ b2;
1597 b1 = rol64(b1, 44) ^ b6;
1600 b7 = rol64(b7, 9) ^ b0;
1603 b5 = rol64(b5, 54) ^ b2;
1606 b3 = rol64(b3, 56) ^ b4;
1610 b1 = rol64(b1, 39) ^ b0;
1614 b3 = rol64(b3, 30) ^ b2;
1618 b5 = rol64(b5, 34) ^ b4;
1622 b7 = rol64(b7, 24) ^ b6;
1625 b1 = rol64(b1, 13) ^ b2;
1628 b7 = rol64(b7, 50) ^ b4;
1631 b5 = rol64(b5, 10) ^ b6;
1634 b3 = rol64(b3, 17) ^ b0;
1637 b1 = rol64(b1, 25) ^ b4;
1640 b3 = rol64(b3, 29) ^ b6;
1643 b5 = rol64(b5, 39) ^ b0;
1646 b7 = rol64(b7, 43) ^ b2;
1649 b1 = rol64(b1, 8) ^ b6;
1652 b7 = rol64(b7, 35) ^ b0;
1655 b5 = rol64(b5, 56) ^ b2;
1658 b3 = rol64(b3, 22) ^ b4;
1662 b1 = rol64(b1, 46) ^ b0;
1666 b3 = rol64(b3, 36) ^ b2;
1670 b5 = rol64(b5, 19) ^ b4;
1674 b7 = rol64(b7, 37) ^ b6;
1677 b1 = rol64(b1, 33) ^ b2;
1680 b7 = rol64(b7, 27) ^ b4;
1683 b5 = rol64(b5, 14) ^ b6;
1686 b3 = rol64(b3, 42) ^ b0;
1689 b1 = rol64(b1, 17) ^ b4;
1692 b3 = rol64(b3, 49) ^ b6;
1695 b5 = rol64(b5, 36) ^ b0;
1698 b7 = rol64(b7, 39) ^ b2;
1701 b1 = rol64(b1, 44) ^ b6;
1704 b7 = rol64(b7, 9) ^ b0;
1707 b5 = rol64(b5, 54) ^ b2;
1710 b3 = rol64(b3, 56) ^ b4;
1714 b1 = rol64(b1, 39) ^ b0;
1718 b3 = rol64(b3, 30) ^ b2;
1722 b5 = rol64(b5, 34) ^ b4;
1726 b7 = rol64(b7, 24) ^ b6;
1729 b1 = rol64(b1, 13) ^ b2;
1732 b7 = rol64(b7, 50) ^ b4;
1735 b5 = rol64(b5, 10) ^ b6;
1738 b3 = rol64(b3, 17) ^ b0;
1741 b1 = rol64(b1, 25) ^ b4;
1744 b3 = rol64(b3, 29) ^ b6;
1747 b5 = rol64(b5, 39) ^ b0;
1750 b7 = rol64(b7, 43) ^ b2;
1753 b1 = rol64(b1, 8) ^ b6;
1756 b7 = rol64(b7, 35) ^ b0;
1759 b5 = rol64(b5, 56) ^ b2;
1762 b3 = rol64(b3, 22) ^ b4;
1766 b1 = rol64(b1, 46) ^ b0;
1770 b3 = rol64(b3, 36) ^ b2;
1774 b5 = rol64(b5, 19) ^ b4;
1778 b7 = rol64(b7, 37) ^ b6;
1781 b1 = rol64(b1, 33) ^ b2;
1784 b7 = rol64(b7, 27) ^ b4;
1787 b5 = rol64(b5, 14) ^ b6;
1790 b3 = rol64(b3, 42) ^ b0;
1793 b1 = rol64(b1, 17) ^ b4;
1796 b3 = rol64(b3, 49) ^ b6;
1799 b5 = rol64(b5, 36) ^ b0;
1802 b7 = rol64(b7, 39) ^ b2;
1805 b1 = rol64(b1, 44) ^ b6;
1808 b7 = rol64(b7, 9) ^ b0;
1811 b5 = rol64(b5, 54) ^ b2;
1814 b3 = rol64(b3, 56) ^ b4;
1818 b1 = rol64(b1, 39) ^ b0;
1822 b3 = rol64(b3, 30) ^ b2;
1826 b5 = rol64(b5, 34) ^ b4;
1830 b7 = rol64(b7, 24) ^ b6;
1833 b1 = rol64(b1, 13) ^ b2;
1836 b7 = rol64(b7, 50) ^ b4;
1839 b5 = rol64(b5, 10) ^ b6;
1842 b3 = rol64(b3, 17) ^ b0;
1845 b1 = rol64(b1, 25) ^ b4;
1848 b3 = rol64(b3, 29) ^ b6;
1851 b5 = rol64(b5, 39) ^ b0;
1854 b7 = rol64(b7, 43) ^ b2;
1857 b1 = rol64(b1, 8) ^ b6;
1860 b7 = rol64(b7, 35) ^ b0;
1863 b5 = rol64(b5, 56) ^ b2;
1866 b3 = rol64(b3, 22) ^ b4;
1870 b1 = rol64(b1, 46) ^ b0;
1874 b3 = rol64(b3, 36) ^ b2;
1878 b5 = rol64(b5, 19) ^ b4;
1882 b7 = rol64(b7, 37) ^ b6;
1885 b1 = rol64(b1, 33) ^ b2;
1888 b7 = rol64(b7, 27) ^ b4;
1891 b5 = rol64(b5, 14) ^ b6;
1894 b3 = rol64(b3, 42) ^ b0;
1897 b1 = rol64(b1, 17) ^ b4;
1900 b3 = rol64(b3, 49) ^ b6;
1903 b5 = rol64(b5, 36) ^ b0;
1906 b7 = rol64(b7, 39) ^ b2;
1909 b1 = rol64(b1, 44) ^ b6;
1912 b7 = rol64(b7, 9) ^ b0;
1915 b5 = rol64(b5, 54) ^ b2;
1918 b3 = rol64(b3, 56) ^ b4;
1922 b1 = rol64(b1, 39) ^ b0;
1926 b3 = rol64(b3, 30) ^ b2;
1930 b5 = rol64(b5, 34) ^ b4;
1934 b7 = rol64(b7, 24) ^ b6;
1937 b1 = rol64(b1, 13) ^ b2;
1940 b7 = rol64(b7, 50) ^ b4;
1943 b5 = rol64(b5, 10) ^ b6;
1946 b3 = rol64(b3, 17) ^ b0;
1949 b1 = rol64(b1, 25) ^ b4;
1952 b3 = rol64(b3, 29) ^ b6;
1955 b5 = rol64(b5, 39) ^ b0;
1958 b7 = rol64(b7, 43) ^ b2;
1961 b1 = rol64(b1, 8) ^ b6;
1964 b7 = rol64(b7, 35) ^ b0;
1967 b5 = rol64(b5, 56) ^ b2;
1970 b3 = rol64(b3, 22) ^ b4;
1974 b1 = rol64(b1, 46) ^ b0;
1978 b3 = rol64(b3, 36) ^ b2;
1982 b5 = rol64(b5, 19) ^ b4;
1986 b7 = rol64(b7, 37) ^ b6;
1989 b1 = rol64(b1, 33) ^ b2;
1992 b7 = rol64(b7, 27) ^ b4;
1995 b5 = rol64(b5, 14) ^ b6;
1998 b3 = rol64(b3, 42) ^ b0;
2001 b1 = rol64(b1, 17) ^ b4;
2004 b3 = rol64(b3, 49) ^ b6;
2007 b5 = rol64(b5, 36) ^ b0;
2010 b7 = rol64(b7, 39) ^ b2;
2013 b1 = rol64(b1, 44) ^ b6;
2016 b7 = rol64(b7, 9) ^ b0;
2019 b5 = rol64(b5, 54) ^ b2;
2022 b3 = rol64(b3, 56) ^ b4;
2026 b1 = rol64(b1, 39) ^ b0;
2030 b3 = rol64(b3, 30) ^ b2;
2034 b5 = rol64(b5, 34) ^ b4;
2038 b7 = rol64(b7, 24) ^ b6;
2041 b1 = rol64(b1, 13) ^ b2;
2044 b7 = rol64(b7, 50) ^ b4;
2047 b5 = rol64(b5, 10) ^ b6;
2050 b3 = rol64(b3, 17) ^ b0;
2053 b1 = rol64(b1, 25) ^ b4;
2056 b3 = rol64(b3, 29) ^ b6;
2059 b5 = rol64(b5, 39) ^ b0;
2062 b7 = rol64(b7, 43) ^ b2;
2065 b1 = rol64(b1, 8) ^ b6;
2068 b7 = rol64(b7, 35) ^ b0;
2071 b5 = rol64(b5, 56) ^ b2;
2074 b3 = rol64(b3, 22) ^ b4;
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;
2086 void threefish_decrypt_512(struct threefish_key *key_ctx, u64 *input,
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];
2113 b3 = ror64(tmp, 22);
2117 b5 = ror64(tmp, 56);
2121 b7 = ror64(tmp, 35);
2129 b7 = ror64(tmp, 43);
2133 b5 = ror64(tmp, 39);
2137 b3 = ror64(tmp, 29);
2141 b1 = ror64(tmp, 25);
2145 b3 = ror64(tmp, 17);
2149 b5 = ror64(tmp, 10);
2153 b7 = ror64(tmp, 50);
2157 b1 = ror64(tmp, 13);
2161 b7 = ror64(tmp, 24);
2166 b5 = ror64(tmp, 34);
2171 b3 = ror64(tmp, 30);
2176 b1 = ror64(tmp, 39);
2181 b3 = ror64(tmp, 56);
2185 b5 = ror64(tmp, 54);
2193 b1 = ror64(tmp, 44);
2197 b7 = ror64(tmp, 39);
2201 b5 = ror64(tmp, 36);
2205 b3 = ror64(tmp, 49);
2209 b1 = ror64(tmp, 17);
2213 b3 = ror64(tmp, 42);
2217 b5 = ror64(tmp, 14);
2221 b7 = ror64(tmp, 27);
2225 b1 = ror64(tmp, 33);
2229 b7 = ror64(tmp, 37);
2234 b5 = ror64(tmp, 19);
2239 b3 = ror64(tmp, 36);
2244 b1 = ror64(tmp, 46);
2249 b3 = ror64(tmp, 22);
2253 b5 = ror64(tmp, 56);
2257 b7 = ror64(tmp, 35);
2265 b7 = ror64(tmp, 43);
2269 b5 = ror64(tmp, 39);
2273 b3 = ror64(tmp, 29);
2277 b1 = ror64(tmp, 25);
2281 b3 = ror64(tmp, 17);
2285 b5 = ror64(tmp, 10);
2289 b7 = ror64(tmp, 50);
2293 b1 = ror64(tmp, 13);
2297 b7 = ror64(tmp, 24);
2302 b5 = ror64(tmp, 34);
2307 b3 = ror64(tmp, 30);
2312 b1 = ror64(tmp, 39);
2317 b3 = ror64(tmp, 56);
2321 b5 = ror64(tmp, 54);
2329 b1 = ror64(tmp, 44);
2333 b7 = ror64(tmp, 39);
2337 b5 = ror64(tmp, 36);
2341 b3 = ror64(tmp, 49);
2345 b1 = ror64(tmp, 17);
2349 b3 = ror64(tmp, 42);
2353 b5 = ror64(tmp, 14);
2357 b7 = ror64(tmp, 27);
2361 b1 = ror64(tmp, 33);
2365 b7 = ror64(tmp, 37);
2370 b5 = ror64(tmp, 19);
2375 b3 = ror64(tmp, 36);
2380 b1 = ror64(tmp, 46);
2385 b3 = ror64(tmp, 22);
2389 b5 = ror64(tmp, 56);
2393 b7 = ror64(tmp, 35);
2401 b7 = ror64(tmp, 43);
2405 b5 = ror64(tmp, 39);
2409 b3 = ror64(tmp, 29);
2413 b1 = ror64(tmp, 25);
2417 b3 = ror64(tmp, 17);
2421 b5 = ror64(tmp, 10);
2425 b7 = ror64(tmp, 50);
2429 b1 = ror64(tmp, 13);
2433 b7 = ror64(tmp, 24);
2438 b5 = ror64(tmp, 34);
2443 b3 = ror64(tmp, 30);
2448 b1 = ror64(tmp, 39);
2453 b3 = ror64(tmp, 56);
2457 b5 = ror64(tmp, 54);
2465 b1 = ror64(tmp, 44);
2469 b7 = ror64(tmp, 39);
2473 b5 = ror64(tmp, 36);
2477 b3 = ror64(tmp, 49);
2481 b1 = ror64(tmp, 17);
2485 b3 = ror64(tmp, 42);
2489 b5 = ror64(tmp, 14);
2493 b7 = ror64(tmp, 27);
2497 b1 = ror64(tmp, 33);
2501 b7 = ror64(tmp, 37);
2506 b5 = ror64(tmp, 19);
2511 b3 = ror64(tmp, 36);
2516 b1 = ror64(tmp, 46);
2521 b3 = ror64(tmp, 22);
2525 b5 = ror64(tmp, 56);
2529 b7 = ror64(tmp, 35);
2537 b7 = ror64(tmp, 43);
2541 b5 = ror64(tmp, 39);
2545 b3 = ror64(tmp, 29);
2549 b1 = ror64(tmp, 25);
2553 b3 = ror64(tmp, 17);
2557 b5 = ror64(tmp, 10);
2561 b7 = ror64(tmp, 50);
2565 b1 = ror64(tmp, 13);
2569 b7 = ror64(tmp, 24);
2574 b5 = ror64(tmp, 34);
2579 b3 = ror64(tmp, 30);
2584 b1 = ror64(tmp, 39);
2589 b3 = ror64(tmp, 56);
2593 b5 = ror64(tmp, 54);
2601 b1 = ror64(tmp, 44);
2605 b7 = ror64(tmp, 39);
2609 b5 = ror64(tmp, 36);
2613 b3 = ror64(tmp, 49);
2617 b1 = ror64(tmp, 17);
2621 b3 = ror64(tmp, 42);
2625 b5 = ror64(tmp, 14);
2629 b7 = ror64(tmp, 27);
2633 b1 = ror64(tmp, 33);
2637 b7 = ror64(tmp, 37);
2642 b5 = ror64(tmp, 19);
2647 b3 = ror64(tmp, 36);
2652 b1 = ror64(tmp, 46);
2657 b3 = ror64(tmp, 22);
2661 b5 = ror64(tmp, 56);
2665 b7 = ror64(tmp, 35);
2673 b7 = ror64(tmp, 43);
2677 b5 = ror64(tmp, 39);
2681 b3 = ror64(tmp, 29);
2685 b1 = ror64(tmp, 25);
2689 b3 = ror64(tmp, 17);
2693 b5 = ror64(tmp, 10);
2697 b7 = ror64(tmp, 50);
2701 b1 = ror64(tmp, 13);
2705 b7 = ror64(tmp, 24);
2710 b5 = ror64(tmp, 34);
2715 b3 = ror64(tmp, 30);
2720 b1 = ror64(tmp, 39);
2725 b3 = ror64(tmp, 56);
2729 b5 = ror64(tmp, 54);
2737 b1 = ror64(tmp, 44);
2741 b7 = ror64(tmp, 39);
2745 b5 = ror64(tmp, 36);
2749 b3 = ror64(tmp, 49);
2753 b1 = ror64(tmp, 17);
2757 b3 = ror64(tmp, 42);
2761 b5 = ror64(tmp, 14);
2765 b7 = ror64(tmp, 27);
2769 b1 = ror64(tmp, 33);
2773 b7 = ror64(tmp, 37);
2778 b5 = ror64(tmp, 19);
2783 b3 = ror64(tmp, 36);
2788 b1 = ror64(tmp, 46);
2793 b3 = ror64(tmp, 22);
2797 b5 = ror64(tmp, 56);
2801 b7 = ror64(tmp, 35);
2809 b7 = ror64(tmp, 43);
2813 b5 = ror64(tmp, 39);
2817 b3 = ror64(tmp, 29);
2821 b1 = ror64(tmp, 25);
2825 b3 = ror64(tmp, 17);
2829 b5 = ror64(tmp, 10);
2833 b7 = ror64(tmp, 50);
2837 b1 = ror64(tmp, 13);
2841 b7 = ror64(tmp, 24);
2846 b5 = ror64(tmp, 34);
2851 b3 = ror64(tmp, 30);
2856 b1 = ror64(tmp, 39);
2861 b3 = ror64(tmp, 56);
2865 b5 = ror64(tmp, 54);
2873 b1 = ror64(tmp, 44);
2877 b7 = ror64(tmp, 39);
2881 b5 = ror64(tmp, 36);
2885 b3 = ror64(tmp, 49);
2889 b1 = ror64(tmp, 17);
2893 b3 = ror64(tmp, 42);
2897 b5 = ror64(tmp, 14);
2901 b7 = ror64(tmp, 27);
2905 b1 = ror64(tmp, 33);
2909 b7 = ror64(tmp, 37);
2914 b5 = ror64(tmp, 19);
2919 b3 = ror64(tmp, 36);
2924 b1 = ror64(tmp, 46);
2929 b3 = ror64(tmp, 22);
2933 b5 = ror64(tmp, 56);
2937 b7 = ror64(tmp, 35);
2945 b7 = ror64(tmp, 43);
2949 b5 = ror64(tmp, 39);
2953 b3 = ror64(tmp, 29);
2957 b1 = ror64(tmp, 25);
2961 b3 = ror64(tmp, 17);
2965 b5 = ror64(tmp, 10);
2969 b7 = ror64(tmp, 50);
2973 b1 = ror64(tmp, 13);
2977 b7 = ror64(tmp, 24);
2982 b5 = ror64(tmp, 34);
2987 b3 = ror64(tmp, 30);
2992 b1 = ror64(tmp, 39);
2997 b3 = ror64(tmp, 56);
3001 b5 = ror64(tmp, 54);
3009 b1 = ror64(tmp, 44);
3013 b7 = ror64(tmp, 39);
3017 b5 = ror64(tmp, 36);
3021 b3 = ror64(tmp, 49);
3025 b1 = ror64(tmp, 17);
3029 b3 = ror64(tmp, 42);
3033 b5 = ror64(tmp, 14);
3037 b7 = ror64(tmp, 27);
3041 b1 = ror64(tmp, 33);
3045 b7 = ror64(tmp, 37);
3050 b5 = ror64(tmp, 19);
3055 b3 = ror64(tmp, 36);
3060 b1 = ror64(tmp, 46);
3065 b3 = ror64(tmp, 22);
3069 b5 = ror64(tmp, 56);
3073 b7 = ror64(tmp, 35);
3081 b7 = ror64(tmp, 43);
3085 b5 = ror64(tmp, 39);
3089 b3 = ror64(tmp, 29);
3093 b1 = ror64(tmp, 25);
3097 b3 = ror64(tmp, 17);
3101 b5 = ror64(tmp, 10);
3105 b7 = ror64(tmp, 50);
3109 b1 = ror64(tmp, 13);
3113 b7 = ror64(tmp, 24);
3118 b5 = ror64(tmp, 34);
3123 b3 = ror64(tmp, 30);
3128 b1 = ror64(tmp, 39);
3133 b3 = ror64(tmp, 56);
3137 b5 = ror64(tmp, 54);
3145 b1 = ror64(tmp, 44);
3149 b7 = ror64(tmp, 39);
3153 b5 = ror64(tmp, 36);
3157 b3 = ror64(tmp, 49);
3161 b1 = ror64(tmp, 17);
3165 b3 = ror64(tmp, 42);
3169 b5 = ror64(tmp, 14);
3173 b7 = ror64(tmp, 27);
3177 b1 = ror64(tmp, 33);
3181 b7 = ror64(tmp, 37);
3186 b5 = ror64(tmp, 19);
3191 b3 = ror64(tmp, 36);
3196 b1 = ror64(tmp, 46);
3201 b3 = ror64(tmp, 22);
3205 b5 = ror64(tmp, 56);
3209 b7 = ror64(tmp, 35);
3217 b7 = ror64(tmp, 43);
3221 b5 = ror64(tmp, 39);
3225 b3 = ror64(tmp, 29);
3229 b1 = ror64(tmp, 25);
3233 b3 = ror64(tmp, 17);
3237 b5 = ror64(tmp, 10);
3241 b7 = ror64(tmp, 50);
3245 b1 = ror64(tmp, 13);
3249 b7 = ror64(tmp, 24);
3254 b5 = ror64(tmp, 34);
3259 b3 = ror64(tmp, 30);
3264 b1 = ror64(tmp, 39);
3269 b3 = ror64(tmp, 56);
3273 b5 = ror64(tmp, 54);
3281 b1 = ror64(tmp, 44);
3285 b7 = ror64(tmp, 39);
3289 b5 = ror64(tmp, 36);
3293 b3 = ror64(tmp, 49);
3297 b1 = ror64(tmp, 17);
3301 b3 = ror64(tmp, 42);
3305 b5 = ror64(tmp, 14);
3309 b7 = ror64(tmp, 27);
3313 b1 = ror64(tmp, 33);
3317 b7 = ror64(tmp, 37);
3322 b5 = ror64(tmp, 19);
3327 b3 = ror64(tmp, 36);
3332 b1 = ror64(tmp, 46);
3347 void threefish_encrypt_1024(struct threefish_key *key_ctx, u64 *input,
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];
3372 b1 = rol64(b1, 24) ^ b0;
3376 b3 = rol64(b3, 13) ^ b2;
3380 b5 = rol64(b5, 8) ^ b4;
3384 b7 = rol64(b7, 47) ^ b6;
3388 b9 = rol64(b9, 8) ^ b8;
3392 b11 = rol64(b11, 17) ^ b10;
3396 b13 = rol64(b13, 22) ^ b12;
3399 b14 += b15 + k14 + t1;
3400 b15 = rol64(b15, 37) ^ b14;
3403 b9 = rol64(b9, 38) ^ b0;
3406 b13 = rol64(b13, 19) ^ b2;
3409 b11 = rol64(b11, 10) ^ b6;
3412 b15 = rol64(b15, 55) ^ b4;
3415 b7 = rol64(b7, 49) ^ b10;
3418 b3 = rol64(b3, 18) ^ b12;
3421 b5 = rol64(b5, 23) ^ b14;
3424 b1 = rol64(b1, 52) ^ b8;
3427 b7 = rol64(b7, 33) ^ b0;
3430 b5 = rol64(b5, 4) ^ b2;
3433 b3 = rol64(b3, 51) ^ b4;
3436 b1 = rol64(b1, 13) ^ b6;
3439 b15 = rol64(b15, 34) ^ b12;
3442 b13 = rol64(b13, 41) ^ b14;
3445 b11 = rol64(b11, 59) ^ b8;
3448 b9 = rol64(b9, 17) ^ b10;
3451 b15 = rol64(b15, 5) ^ b0;
3454 b11 = rol64(b11, 20) ^ b2;
3457 b13 = rol64(b13, 48) ^ b6;
3460 b9 = rol64(b9, 41) ^ b4;
3463 b1 = rol64(b1, 47) ^ b14;
3466 b5 = rol64(b5, 28) ^ b8;
3469 b3 = rol64(b3, 16) ^ b10;
3472 b7 = rol64(b7, 25) ^ b12;
3476 b1 = rol64(b1, 41) ^ b0;
3480 b3 = rol64(b3, 9) ^ b2;
3484 b5 = rol64(b5, 37) ^ b4;
3488 b7 = rol64(b7, 31) ^ b6;
3492 b9 = rol64(b9, 12) ^ b8;
3496 b11 = rol64(b11, 47) ^ b10;
3500 b13 = rol64(b13, 44) ^ b12;
3503 b14 += b15 + k15 + t2;
3504 b15 = rol64(b15, 30) ^ b14;
3507 b9 = rol64(b9, 16) ^ b0;
3510 b13 = rol64(b13, 34) ^ b2;
3513 b11 = rol64(b11, 56) ^ b6;
3516 b15 = rol64(b15, 51) ^ b4;
3519 b7 = rol64(b7, 4) ^ b10;
3522 b3 = rol64(b3, 53) ^ b12;
3525 b5 = rol64(b5, 42) ^ b14;
3528 b1 = rol64(b1, 41) ^ b8;
3531 b7 = rol64(b7, 31) ^ b0;
3534 b5 = rol64(b5, 44) ^ b2;
3537 b3 = rol64(b3, 47) ^ b4;
3540 b1 = rol64(b1, 46) ^ b6;
3543 b15 = rol64(b15, 19) ^ b12;
3546 b13 = rol64(b13, 42) ^ b14;
3549 b11 = rol64(b11, 44) ^ b8;
3552 b9 = rol64(b9, 25) ^ b10;
3555 b15 = rol64(b15, 9) ^ b0;
3558 b11 = rol64(b11, 48) ^ b2;
3561 b13 = rol64(b13, 35) ^ b6;
3564 b9 = rol64(b9, 52) ^ b4;
3567 b1 = rol64(b1, 23) ^ b14;
3570 b5 = rol64(b5, 31) ^ b8;
3573 b3 = rol64(b3, 37) ^ b10;
3576 b7 = rol64(b7, 20) ^ b12;
3580 b1 = rol64(b1, 24) ^ b0;
3584 b3 = rol64(b3, 13) ^ b2;
3588 b5 = rol64(b5, 8) ^ b4;
3592 b7 = rol64(b7, 47) ^ b6;
3596 b9 = rol64(b9, 8) ^ b8;
3600 b11 = rol64(b11, 17) ^ b10;
3604 b13 = rol64(b13, 22) ^ b12;
3607 b14 += b15 + k16 + t0;
3608 b15 = rol64(b15, 37) ^ b14;
3611 b9 = rol64(b9, 38) ^ b0;
3614 b13 = rol64(b13, 19) ^ b2;
3617 b11 = rol64(b11, 10) ^ b6;
3620 b15 = rol64(b15, 55) ^ b4;
3623 b7 = rol64(b7, 49) ^ b10;
3626 b3 = rol64(b3, 18) ^ b12;
3629 b5 = rol64(b5, 23) ^ b14;
3632 b1 = rol64(b1, 52) ^ b8;
3635 b7 = rol64(b7, 33) ^ b0;
3638 b5 = rol64(b5, 4) ^ b2;
3641 b3 = rol64(b3, 51) ^ b4;
3644 b1 = rol64(b1, 13) ^ b6;
3647 b15 = rol64(b15, 34) ^ b12;
3650 b13 = rol64(b13, 41) ^ b14;
3653 b11 = rol64(b11, 59) ^ b8;
3656 b9 = rol64(b9, 17) ^ b10;
3659 b15 = rol64(b15, 5) ^ b0;
3662 b11 = rol64(b11, 20) ^ b2;
3665 b13 = rol64(b13, 48) ^ b6;
3668 b9 = rol64(b9, 41) ^ b4;
3671 b1 = rol64(b1, 47) ^ b14;
3674 b5 = rol64(b5, 28) ^ b8;
3677 b3 = rol64(b3, 16) ^ b10;
3680 b7 = rol64(b7, 25) ^ b12;
3684 b1 = rol64(b1, 41) ^ b0;
3688 b3 = rol64(b3, 9) ^ b2;
3692 b5 = rol64(b5, 37) ^ b4;
3696 b7 = rol64(b7, 31) ^ b6;
3700 b9 = rol64(b9, 12) ^ b8;
3704 b11 = rol64(b11, 47) ^ b10;
3708 b13 = rol64(b13, 44) ^ b12;
3711 b14 += b15 + k0 + t1;
3712 b15 = rol64(b15, 30) ^ b14;
3715 b9 = rol64(b9, 16) ^ b0;
3718 b13 = rol64(b13, 34) ^ b2;
3721 b11 = rol64(b11, 56) ^ b6;
3724 b15 = rol64(b15, 51) ^ b4;
3727 b7 = rol64(b7, 4) ^ b10;
3730 b3 = rol64(b3, 53) ^ b12;
3733 b5 = rol64(b5, 42) ^ b14;
3736 b1 = rol64(b1, 41) ^ b8;
3739 b7 = rol64(b7, 31) ^ b0;
3742 b5 = rol64(b5, 44) ^ b2;
3745 b3 = rol64(b3, 47) ^ b4;
3748 b1 = rol64(b1, 46) ^ b6;
3751 b15 = rol64(b15, 19) ^ b12;
3754 b13 = rol64(b13, 42) ^ b14;
3757 b11 = rol64(b11, 44) ^ b8;
3760 b9 = rol64(b9, 25) ^ b10;
3763 b15 = rol64(b15, 9) ^ b0;
3766 b11 = rol64(b11, 48) ^ b2;
3769 b13 = rol64(b13, 35) ^ b6;
3772 b9 = rol64(b9, 52) ^ b4;
3775 b1 = rol64(b1, 23) ^ b14;
3778 b5 = rol64(b5, 31) ^ b8;
3781 b3 = rol64(b3, 37) ^ b10;
3784 b7 = rol64(b7, 20) ^ b12;
3788 b1 = rol64(b1, 24) ^ b0;
3792 b3 = rol64(b3, 13) ^ b2;
3796 b5 = rol64(b5, 8) ^ b4;
3800 b7 = rol64(b7, 47) ^ b6;
3804 b9 = rol64(b9, 8) ^ b8;
3808 b11 = rol64(b11, 17) ^ b10;
3812 b13 = rol64(b13, 22) ^ b12;
3815 b14 += b15 + k1 + t2;
3816 b15 = rol64(b15, 37) ^ b14;
3819 b9 = rol64(b9, 38) ^ b0;
3822 b13 = rol64(b13, 19) ^ b2;
3825 b11 = rol64(b11, 10) ^ b6;
3828 b15 = rol64(b15, 55) ^ b4;
3831 b7 = rol64(b7, 49) ^ b10;
3834 b3 = rol64(b3, 18) ^ b12;
3837 b5 = rol64(b5, 23) ^ b14;
3840 b1 = rol64(b1, 52) ^ b8;
3843 b7 = rol64(b7, 33) ^ b0;
3846 b5 = rol64(b5, 4) ^ b2;
3849 b3 = rol64(b3, 51) ^ b4;
3852 b1 = rol64(b1, 13) ^ b6;
3855 b15 = rol64(b15, 34) ^ b12;
3858 b13 = rol64(b13, 41) ^ b14;
3861 b11 = rol64(b11, 59) ^ b8;
3864 b9 = rol64(b9, 17) ^ b10;
3867 b15 = rol64(b15, 5) ^ b0;
3870 b11 = rol64(b11, 20) ^ b2;
3873 b13 = rol64(b13, 48) ^ b6;
3876 b9 = rol64(b9, 41) ^ b4;
3879 b1 = rol64(b1, 47) ^ b14;
3882 b5 = rol64(b5, 28) ^ b8;
3885 b3 = rol64(b3, 16) ^ b10;
3888 b7 = rol64(b7, 25) ^ b12;
3892 b1 = rol64(b1, 41) ^ b0;
3896 b3 = rol64(b3, 9) ^ b2;
3900 b5 = rol64(b5, 37) ^ b4;
3904 b7 = rol64(b7, 31) ^ b6;
3908 b9 = rol64(b9, 12) ^ b8;
3912 b11 = rol64(b11, 47) ^ b10;
3916 b13 = rol64(b13, 44) ^ b12;
3919 b14 += b15 + k2 + t0;
3920 b15 = rol64(b15, 30) ^ b14;
3923 b9 = rol64(b9, 16) ^ b0;
3926 b13 = rol64(b13, 34) ^ b2;
3929 b11 = rol64(b11, 56) ^ b6;
3932 b15 = rol64(b15, 51) ^ b4;
3935 b7 = rol64(b7, 4) ^ b10;
3938 b3 = rol64(b3, 53) ^ b12;
3941 b5 = rol64(b5, 42) ^ b14;
3944 b1 = rol64(b1, 41) ^ b8;
3947 b7 = rol64(b7, 31) ^ b0;
3950 b5 = rol64(b5, 44) ^ b2;
3953 b3 = rol64(b3, 47) ^ b4;
3956 b1 = rol64(b1, 46) ^ b6;
3959 b15 = rol64(b15, 19) ^ b12;
3962 b13 = rol64(b13, 42) ^ b14;
3965 b11 = rol64(b11, 44) ^ b8;
3968 b9 = rol64(b9, 25) ^ b10;
3971 b15 = rol64(b15, 9) ^ b0;
3974 b11 = rol64(b11, 48) ^ b2;
3977 b13 = rol64(b13, 35) ^ b6;
3980 b9 = rol64(b9, 52) ^ b4;
3983 b1 = rol64(b1, 23) ^ b14;
3986 b5 = rol64(b5, 31) ^ b8;
3989 b3 = rol64(b3, 37) ^ b10;
3992 b7 = rol64(b7, 20) ^ b12;
3996 b1 = rol64(b1, 24) ^ b0;
4000 b3 = rol64(b3, 13) ^ b2;
4004 b5 = rol64(b5, 8) ^ b4;
4008 b7 = rol64(b7, 47) ^ b6;
4012 b9 = rol64(b9, 8) ^ b8;
4016 b11 = rol64(b11, 17) ^ b10;
4020 b13 = rol64(b13, 22) ^ b12;
4023 b14 += b15 + k3 + t1;
4024 b15 = rol64(b15, 37) ^ b14;
4027 b9 = rol64(b9, 38) ^ b0;
4030 b13 = rol64(b13, 19) ^ b2;
4033 b11 = rol64(b11, 10) ^ b6;
4036 b15 = rol64(b15, 55) ^ b4;
4039 b7 = rol64(b7, 49) ^ b10;
4042 b3 = rol64(b3, 18) ^ b12;
4045 b5 = rol64(b5, 23) ^ b14;
4048 b1 = rol64(b1, 52) ^ b8;
4051 b7 = rol64(b7, 33) ^ b0;
4054 b5 = rol64(b5, 4) ^ b2;
4057 b3 = rol64(b3, 51) ^ b4;
4060 b1 = rol64(b1, 13) ^ b6;
4063 b15 = rol64(b15, 34) ^ b12;
4066 b13 = rol64(b13, 41) ^ b14;
4069 b11 = rol64(b11, 59) ^ b8;
4072 b9 = rol64(b9, 17) ^ b10;
4075 b15 = rol64(b15, 5) ^ b0;
4078 b11 = rol64(b11, 20) ^ b2;
4081 b13 = rol64(b13, 48) ^ b6;
4084 b9 = rol64(b9, 41) ^ b4;
4087 b1 = rol64(b1, 47) ^ b14;
4090 b5 = rol64(b5, 28) ^ b8;
4093 b3 = rol64(b3, 16) ^ b10;
4096 b7 = rol64(b7, 25) ^ b12;
4100 b1 = rol64(b1, 41) ^ b0;
4104 b3 = rol64(b3, 9) ^ b2;
4108 b5 = rol64(b5, 37) ^ b4;
4112 b7 = rol64(b7, 31) ^ b6;
4116 b9 = rol64(b9, 12) ^ b8;
4120 b11 = rol64(b11, 47) ^ b10;
4124 b13 = rol64(b13, 44) ^ b12;
4127 b14 += b15 + k4 + t2;
4128 b15 = rol64(b15, 30) ^ b14;
4131 b9 = rol64(b9, 16) ^ b0;
4134 b13 = rol64(b13, 34) ^ b2;
4137 b11 = rol64(b11, 56) ^ b6;
4140 b15 = rol64(b15, 51) ^ b4;
4143 b7 = rol64(b7, 4) ^ b10;
4146 b3 = rol64(b3, 53) ^ b12;
4149 b5 = rol64(b5, 42) ^ b14;
4152 b1 = rol64(b1, 41) ^ b8;
4155 b7 = rol64(b7, 31) ^ b0;
4158 b5 = rol64(b5, 44) ^ b2;
4161 b3 = rol64(b3, 47) ^ b4;
4164 b1 = rol64(b1, 46) ^ b6;
4167 b15 = rol64(b15, 19) ^ b12;
4170 b13 = rol64(b13, 42) ^ b14;
4173 b11 = rol64(b11, 44) ^ b8;
4176 b9 = rol64(b9, 25) ^ b10;
4179 b15 = rol64(b15, 9) ^ b0;
4182 b11 = rol64(b11, 48) ^ b2;
4185 b13 = rol64(b13, 35) ^ b6;
4188 b9 = rol64(b9, 52) ^ b4;
4191 b1 = rol64(b1, 23) ^ b14;
4194 b5 = rol64(b5, 31) ^ b8;
4197 b3 = rol64(b3, 37) ^ b10;
4200 b7 = rol64(b7, 20) ^ b12;
4204 b1 = rol64(b1, 24) ^ b0;
4208 b3 = rol64(b3, 13) ^ b2;
4212 b5 = rol64(b5, 8) ^ b4;
4216 b7 = rol64(b7, 47) ^ b6;
4220 b9 = rol64(b9, 8) ^ b8;
4224 b11 = rol64(b11, 17) ^ b10;
4228 b13 = rol64(b13, 22) ^ b12;
4231 b14 += b15 + k5 + t0;
4232 b15 = rol64(b15, 37) ^ b14;
4235 b9 = rol64(b9, 38) ^ b0;
4238 b13 = rol64(b13, 19) ^ b2;
4241 b11 = rol64(b11, 10) ^ b6;
4244 b15 = rol64(b15, 55) ^ b4;
4247 b7 = rol64(b7, 49) ^ b10;
4250 b3 = rol64(b3, 18) ^ b12;
4253 b5 = rol64(b5, 23) ^ b14;
4256 b1 = rol64(b1, 52) ^ b8;
4259 b7 = rol64(b7, 33) ^ b0;
4262 b5 = rol64(b5, 4) ^ b2;
4265 b3 = rol64(b3, 51) ^ b4;
4268 b1 = rol64(b1, 13) ^ b6;
4271 b15 = rol64(b15, 34) ^ b12;
4274 b13 = rol64(b13, 41) ^ b14;
4277 b11 = rol64(b11, 59) ^ b8;
4280 b9 = rol64(b9, 17) ^ b10;
4283 b15 = rol64(b15, 5) ^ b0;
4286 b11 = rol64(b11, 20) ^ b2;
4289 b13 = rol64(b13, 48) ^ b6;
4292 b9 = rol64(b9, 41) ^ b4;
4295 b1 = rol64(b1, 47) ^ b14;
4298 b5 = rol64(b5, 28) ^ b8;
4301 b3 = rol64(b3, 16) ^ b10;
4304 b7 = rol64(b7, 25) ^ b12;
4308 b1 = rol64(b1, 41) ^ b0;
4312 b3 = rol64(b3, 9) ^ b2;
4316 b5 = rol64(b5, 37) ^ b4;
4320 b7 = rol64(b7, 31) ^ b6;
4324 b9 = rol64(b9, 12) ^ b8;
4328 b11 = rol64(b11, 47) ^ b10;
4332 b13 = rol64(b13, 44) ^ b12;
4335 b14 += b15 + k6 + t1;
4336 b15 = rol64(b15, 30) ^ b14;
4339 b9 = rol64(b9, 16) ^ b0;
4342 b13 = rol64(b13, 34) ^ b2;
4345 b11 = rol64(b11, 56) ^ b6;
4348 b15 = rol64(b15, 51) ^ b4;
4351 b7 = rol64(b7, 4) ^ b10;
4354 b3 = rol64(b3, 53) ^ b12;
4357 b5 = rol64(b5, 42) ^ b14;
4360 b1 = rol64(b1, 41) ^ b8;
4363 b7 = rol64(b7, 31) ^ b0;
4366 b5 = rol64(b5, 44) ^ b2;
4369 b3 = rol64(b3, 47) ^ b4;
4372 b1 = rol64(b1, 46) ^ b6;
4375 b15 = rol64(b15, 19) ^ b12;
4378 b13 = rol64(b13, 42) ^ b14;
4381 b11 = rol64(b11, 44) ^ b8;
4384 b9 = rol64(b9, 25) ^ b10;
4387 b15 = rol64(b15, 9) ^ b0;
4390 b11 = rol64(b11, 48) ^ b2;
4393 b13 = rol64(b13, 35) ^ b6;
4396 b9 = rol64(b9, 52) ^ b4;
4399 b1 = rol64(b1, 23) ^ b14;
4402 b5 = rol64(b5, 31) ^ b8;
4405 b3 = rol64(b3, 37) ^ b10;
4408 b7 = rol64(b7, 20) ^ b12;
4412 b1 = rol64(b1, 24) ^ b0;
4416 b3 = rol64(b3, 13) ^ b2;
4420 b5 = rol64(b5, 8) ^ b4;
4424 b7 = rol64(b7, 47) ^ b6;
4428 b9 = rol64(b9, 8) ^ b8;
4432 b11 = rol64(b11, 17) ^ b10;
4436 b13 = rol64(b13, 22) ^ b12;
4439 b14 += b15 + k7 + t2;
4440 b15 = rol64(b15, 37) ^ b14;
4443 b9 = rol64(b9, 38) ^ b0;
4446 b13 = rol64(b13, 19) ^ b2;
4449 b11 = rol64(b11, 10) ^ b6;
4452 b15 = rol64(b15, 55) ^ b4;
4455 b7 = rol64(b7, 49) ^ b10;
4458 b3 = rol64(b3, 18) ^ b12;
4461 b5 = rol64(b5, 23) ^ b14;
4464 b1 = rol64(b1, 52) ^ b8;
4467 b7 = rol64(b7, 33) ^ b0;
4470 b5 = rol64(b5, 4) ^ b2;
4473 b3 = rol64(b3, 51) ^ b4;
4476 b1 = rol64(b1, 13) ^ b6;
4479 b15 = rol64(b15, 34) ^ b12;
4482 b13 = rol64(b13, 41) ^ b14;
4485 b11 = rol64(b11, 59) ^ b8;
4488 b9 = rol64(b9, 17) ^ b10;
4491 b15 = rol64(b15, 5) ^ b0;
4494 b11 = rol64(b11, 20) ^ b2;
4497 b13 = rol64(b13, 48) ^ b6;
4500 b9 = rol64(b9, 41) ^ b4;
4503 b1 = rol64(b1, 47) ^ b14;
4506 b5 = rol64(b5, 28) ^ b8;
4509 b3 = rol64(b3, 16) ^ b10;
4512 b7 = rol64(b7, 25) ^ b12;
4516 b1 = rol64(b1, 41) ^ b0;
4520 b3 = rol64(b3, 9) ^ b2;
4524 b5 = rol64(b5, 37) ^ b4;
4528 b7 = rol64(b7, 31) ^ b6;
4532 b9 = rol64(b9, 12) ^ b8;
4536 b11 = rol64(b11, 47) ^ b10;
4540 b13 = rol64(b13, 44) ^ b12;
4543 b14 += b15 + k8 + t0;
4544 b15 = rol64(b15, 30) ^ b14;
4547 b9 = rol64(b9, 16) ^ b0;
4550 b13 = rol64(b13, 34) ^ b2;
4553 b11 = rol64(b11, 56) ^ b6;
4556 b15 = rol64(b15, 51) ^ b4;
4559 b7 = rol64(b7, 4) ^ b10;
4562 b3 = rol64(b3, 53) ^ b12;
4565 b5 = rol64(b5, 42) ^ b14;
4568 b1 = rol64(b1, 41) ^ b8;
4571 b7 = rol64(b7, 31) ^ b0;
4574 b5 = rol64(b5, 44) ^ b2;
4577 b3 = rol64(b3, 47) ^ b4;
4580 b1 = rol64(b1, 46) ^ b6;
4583 b15 = rol64(b15, 19) ^ b12;
4586 b13 = rol64(b13, 42) ^ b14;
4589 b11 = rol64(b11, 44) ^ b8;
4592 b9 = rol64(b9, 25) ^ b10;
4595 b15 = rol64(b15, 9) ^ b0;
4598 b11 = rol64(b11, 48) ^ b2;
4601 b13 = rol64(b13, 35) ^ b6;
4604 b9 = rol64(b9, 52) ^ b4;
4607 b1 = rol64(b1, 23) ^ b14;
4610 b5 = rol64(b5, 31) ^ b8;
4613 b3 = rol64(b3, 37) ^ b10;
4616 b7 = rol64(b7, 20) ^ b12;
4620 b1 = rol64(b1, 24) ^ b0;
4624 b3 = rol64(b3, 13) ^ b2;
4628 b5 = rol64(b5, 8) ^ b4;
4632 b7 = rol64(b7, 47) ^ b6;
4636 b9 = rol64(b9, 8) ^ b8;
4640 b11 = rol64(b11, 17) ^ b10;
4644 b13 = rol64(b13, 22) ^ b12;
4647 b14 += b15 + k9 + t1;
4648 b15 = rol64(b15, 37) ^ b14;
4651 b9 = rol64(b9, 38) ^ b0;
4654 b13 = rol64(b13, 19) ^ b2;
4657 b11 = rol64(b11, 10) ^ b6;
4660 b15 = rol64(b15, 55) ^ b4;
4663 b7 = rol64(b7, 49) ^ b10;
4666 b3 = rol64(b3, 18) ^ b12;
4669 b5 = rol64(b5, 23) ^ b14;
4672 b1 = rol64(b1, 52) ^ b8;
4675 b7 = rol64(b7, 33) ^ b0;
4678 b5 = rol64(b5, 4) ^ b2;
4681 b3 = rol64(b3, 51) ^ b4;
4684 b1 = rol64(b1, 13) ^ b6;
4687 b15 = rol64(b15, 34) ^ b12;
4690 b13 = rol64(b13, 41) ^ b14;
4693 b11 = rol64(b11, 59) ^ b8;
4696 b9 = rol64(b9, 17) ^ b10;
4699 b15 = rol64(b15, 5) ^ b0;
4702 b11 = rol64(b11, 20) ^ b2;
4705 b13 = rol64(b13, 48) ^ b6;
4708 b9 = rol64(b9, 41) ^ b4;
4711 b1 = rol64(b1, 47) ^ b14;
4714 b5 = rol64(b5, 28) ^ b8;
4717 b3 = rol64(b3, 16) ^ b10;
4720 b7 = rol64(b7, 25) ^ b12;
4724 b1 = rol64(b1, 41) ^ b0;
4728 b3 = rol64(b3, 9) ^ b2;
4732 b5 = rol64(b5, 37) ^ b4;
4736 b7 = rol64(b7, 31) ^ b6;
4740 b9 = rol64(b9, 12) ^ b8;
4744 b11 = rol64(b11, 47) ^ b10;
4748 b13 = rol64(b13, 44) ^ b12;
4751 b14 += b15 + k10 + t2;
4752 b15 = rol64(b15, 30) ^ b14;
4755 b9 = rol64(b9, 16) ^ b0;
4758 b13 = rol64(b13, 34) ^ b2;
4761 b11 = rol64(b11, 56) ^ b6;
4764 b15 = rol64(b15, 51) ^ b4;
4767 b7 = rol64(b7, 4) ^ b10;
4770 b3 = rol64(b3, 53) ^ b12;
4773 b5 = rol64(b5, 42) ^ b14;
4776 b1 = rol64(b1, 41) ^ b8;
4779 b7 = rol64(b7, 31) ^ b0;
4782 b5 = rol64(b5, 44) ^ b2;
4785 b3 = rol64(b3, 47) ^ b4;
4788 b1 = rol64(b1, 46) ^ b6;
4791 b15 = rol64(b15, 19) ^ b12;
4794 b13 = rol64(b13, 42) ^ b14;
4797 b11 = rol64(b11, 44) ^ b8;
4800 b9 = rol64(b9, 25) ^ b10;
4803 b15 = rol64(b15, 9) ^ b0;
4806 b11 = rol64(b11, 48) ^ b2;
4809 b13 = rol64(b13, 35) ^ b6;
4812 b9 = rol64(b9, 52) ^ b4;
4815 b1 = rol64(b1, 23) ^ b14;
4818 b5 = rol64(b5, 31) ^ b8;
4821 b3 = rol64(b3, 37) ^ b10;
4824 b7 = rol64(b7, 20) ^ b12;
4828 b1 = rol64(b1, 24) ^ b0;
4832 b3 = rol64(b3, 13) ^ b2;
4836 b5 = rol64(b5, 8) ^ b4;
4840 b7 = rol64(b7, 47) ^ b6;
4844 b9 = rol64(b9, 8) ^ b8;
4848 b11 = rol64(b11, 17) ^ b10;
4852 b13 = rol64(b13, 22) ^ b12;
4855 b14 += b15 + k11 + t0;
4856 b15 = rol64(b15, 37) ^ b14;
4859 b9 = rol64(b9, 38) ^ b0;
4862 b13 = rol64(b13, 19) ^ b2;
4865 b11 = rol64(b11, 10) ^ b6;
4868 b15 = rol64(b15, 55) ^ b4;
4871 b7 = rol64(b7, 49) ^ b10;
4874 b3 = rol64(b3, 18) ^ b12;
4877 b5 = rol64(b5, 23) ^ b14;
4880 b1 = rol64(b1, 52) ^ b8;
4883 b7 = rol64(b7, 33) ^ b0;
4886 b5 = rol64(b5, 4) ^ b2;
4889 b3 = rol64(b3, 51) ^ b4;
4892 b1 = rol64(b1, 13) ^ b6;
4895 b15 = rol64(b15, 34) ^ b12;
4898 b13 = rol64(b13, 41) ^ b14;
4901 b11 = rol64(b11, 59) ^ b8;
4904 b9 = rol64(b9, 17) ^ b10;
4907 b15 = rol64(b15, 5) ^ b0;
4910 b11 = rol64(b11, 20) ^ b2;
4913 b13 = rol64(b13, 48) ^ b6;
4916 b9 = rol64(b9, 41) ^ b4;
4919 b1 = rol64(b1, 47) ^ b14;
4922 b5 = rol64(b5, 28) ^ b8;
4925 b3 = rol64(b3, 16) ^ b10;
4928 b7 = rol64(b7, 25) ^ b12;
4932 b1 = rol64(b1, 41) ^ b0;
4936 b3 = rol64(b3, 9) ^ b2;
4940 b5 = rol64(b5, 37) ^ b4;
4944 b7 = rol64(b7, 31) ^ b6;
4948 b9 = rol64(b9, 12) ^ b8;
4952 b11 = rol64(b11, 47) ^ b10;
4956 b13 = rol64(b13, 44) ^ b12;
4959 b14 += b15 + k12 + t1;
4960 b15 = rol64(b15, 30) ^ b14;
4963 b9 = rol64(b9, 16) ^ b0;
4966 b13 = rol64(b13, 34) ^ b2;
4969 b11 = rol64(b11, 56) ^ b6;
4972 b15 = rol64(b15, 51) ^ b4;
4975 b7 = rol64(b7, 4) ^ b10;
4978 b3 = rol64(b3, 53) ^ b12;
4981 b5 = rol64(b5, 42) ^ b14;
4984 b1 = rol64(b1, 41) ^ b8;
4987 b7 = rol64(b7, 31) ^ b0;
4990 b5 = rol64(b5, 44) ^ b2;
4993 b3 = rol64(b3, 47) ^ b4;
4996 b1 = rol64(b1, 46) ^ b6;
4999 b15 = rol64(b15, 19) ^ b12;
5002 b13 = rol64(b13, 42) ^ b14;
5005 b11 = rol64(b11, 44) ^ b8;
5008 b9 = rol64(b9, 25) ^ b10;
5011 b15 = rol64(b15, 9) ^ b0;
5014 b11 = rol64(b11, 48) ^ b2;
5017 b13 = rol64(b13, 35) ^ b6;
5020 b9 = rol64(b9, 52) ^ b4;
5023 b1 = rol64(b1, 23) ^ b14;
5026 b5 = rol64(b5, 31) ^ b8;
5029 b3 = rol64(b3, 37) ^ b10;
5032 b7 = rol64(b7, 20) ^ b12;
5036 b1 = rol64(b1, 24) ^ b0;
5040 b3 = rol64(b3, 13) ^ b2;
5044 b5 = rol64(b5, 8) ^ b4;
5048 b7 = rol64(b7, 47) ^ b6;
5052 b9 = rol64(b9, 8) ^ b8;
5056 b11 = rol64(b11, 17) ^ b10;
5060 b13 = rol64(b13, 22) ^ b12;
5063 b14 += b15 + k13 + t2;
5064 b15 = rol64(b15, 37) ^ b14;
5067 b9 = rol64(b9, 38) ^ b0;
5070 b13 = rol64(b13, 19) ^ b2;
5073 b11 = rol64(b11, 10) ^ b6;
5076 b15 = rol64(b15, 55) ^ b4;
5079 b7 = rol64(b7, 49) ^ b10;
5082 b3 = rol64(b3, 18) ^ b12;
5085 b5 = rol64(b5, 23) ^ b14;
5088 b1 = rol64(b1, 52) ^ b8;
5091 b7 = rol64(b7, 33) ^ b0;
5094 b5 = rol64(b5, 4) ^ b2;
5097 b3 = rol64(b3, 51) ^ b4;
5100 b1 = rol64(b1, 13) ^ b6;
5103 b15 = rol64(b15, 34) ^ b12;
5106 b13 = rol64(b13, 41) ^ b14;
5109 b11 = rol64(b11, 59) ^ b8;
5112 b9 = rol64(b9, 17) ^ b10;
5115 b15 = rol64(b15, 5) ^ b0;
5118 b11 = rol64(b11, 20) ^ b2;
5121 b13 = rol64(b13, 48) ^ b6;
5124 b9 = rol64(b9, 41) ^ b4;
5127 b1 = rol64(b1, 47) ^ b14;
5130 b5 = rol64(b5, 28) ^ b8;
5133 b3 = rol64(b3, 16) ^ b10;
5136 b7 = rol64(b7, 25) ^ b12;
5140 b1 = rol64(b1, 41) ^ b0;
5144 b3 = rol64(b3, 9) ^ b2;
5148 b5 = rol64(b5, 37) ^ b4;
5152 b7 = rol64(b7, 31) ^ b6;
5156 b9 = rol64(b9, 12) ^ b8;
5160 b11 = rol64(b11, 47) ^ b10;
5164 b13 = rol64(b13, 44) ^ b12;
5167 b14 += b15 + k14 + t0;
5168 b15 = rol64(b15, 30) ^ b14;
5171 b9 = rol64(b9, 16) ^ b0;
5174 b13 = rol64(b13, 34) ^ b2;
5177 b11 = rol64(b11, 56) ^ b6;
5180 b15 = rol64(b15, 51) ^ b4;
5183 b7 = rol64(b7, 4) ^ b10;
5186 b3 = rol64(b3, 53) ^ b12;
5189 b5 = rol64(b5, 42) ^ b14;
5192 b1 = rol64(b1, 41) ^ b8;
5195 b7 = rol64(b7, 31) ^ b0;
5198 b5 = rol64(b5, 44) ^ b2;
5201 b3 = rol64(b3, 47) ^ b4;
5204 b1 = rol64(b1, 46) ^ b6;
5207 b15 = rol64(b15, 19) ^ b12;
5210 b13 = rol64(b13, 42) ^ b14;
5213 b11 = rol64(b11, 44) ^ b8;
5216 b9 = rol64(b9, 25) ^ b10;
5219 b15 = rol64(b15, 9) ^ b0;
5222 b11 = rol64(b11, 48) ^ b2;
5225 b13 = rol64(b13, 35) ^ b6;
5228 b9 = rol64(b9, 52) ^ b4;
5231 b1 = rol64(b1, 23) ^ b14;
5234 b5 = rol64(b5, 31) ^ b8;
5237 b3 = rol64(b3, 37) ^ b10;
5240 b7 = rol64(b7, 20) ^ b12;
5244 b1 = rol64(b1, 24) ^ b0;
5248 b3 = rol64(b3, 13) ^ b2;
5252 b5 = rol64(b5, 8) ^ b4;
5256 b7 = rol64(b7, 47) ^ b6;
5260 b9 = rol64(b9, 8) ^ b8;
5264 b11 = rol64(b11, 17) ^ b10;
5268 b13 = rol64(b13, 22) ^ b12;
5271 b14 += b15 + k15 + t1;
5272 b15 = rol64(b15, 37) ^ b14;
5275 b9 = rol64(b9, 38) ^ b0;
5278 b13 = rol64(b13, 19) ^ b2;
5281 b11 = rol64(b11, 10) ^ b6;
5284 b15 = rol64(b15, 55) ^ b4;
5287 b7 = rol64(b7, 49) ^ b10;
5290 b3 = rol64(b3, 18) ^ b12;
5293 b5 = rol64(b5, 23) ^ b14;
5296 b1 = rol64(b1, 52) ^ b8;
5299 b7 = rol64(b7, 33) ^ b0;
5302 b5 = rol64(b5, 4) ^ b2;
5305 b3 = rol64(b3, 51) ^ b4;
5308 b1 = rol64(b1, 13) ^ b6;
5311 b15 = rol64(b15, 34) ^ b12;
5314 b13 = rol64(b13, 41) ^ b14;
5317 b11 = rol64(b11, 59) ^ b8;
5320 b9 = rol64(b9, 17) ^ b10;
5323 b15 = rol64(b15, 5) ^ b0;
5326 b11 = rol64(b11, 20) ^ b2;
5329 b13 = rol64(b13, 48) ^ b6;
5332 b9 = rol64(b9, 41) ^ b4;
5335 b1 = rol64(b1, 47) ^ b14;
5338 b5 = rol64(b5, 28) ^ b8;
5341 b3 = rol64(b3, 16) ^ b10;
5344 b7 = rol64(b7, 25) ^ b12;
5348 b1 = rol64(b1, 41) ^ b0;
5352 b3 = rol64(b3, 9) ^ b2;
5356 b5 = rol64(b5, 37) ^ b4;
5360 b7 = rol64(b7, 31) ^ b6;
5364 b9 = rol64(b9, 12) ^ b8;
5368 b11 = rol64(b11, 47) ^ b10;
5372 b13 = rol64(b13, 44) ^ b12;
5375 b14 += b15 + k16 + t2;
5376 b15 = rol64(b15, 30) ^ b14;
5379 b9 = rol64(b9, 16) ^ b0;
5382 b13 = rol64(b13, 34) ^ b2;
5385 b11 = rol64(b11, 56) ^ b6;
5388 b15 = rol64(b15, 51) ^ b4;
5391 b7 = rol64(b7, 4) ^ b10;
5394 b3 = rol64(b3, 53) ^ b12;
5397 b5 = rol64(b5, 42) ^ b14;
5400 b1 = rol64(b1, 41) ^ b8;
5403 b7 = rol64(b7, 31) ^ b0;
5406 b5 = rol64(b5, 44) ^ b2;
5409 b3 = rol64(b3, 47) ^ b4;
5412 b1 = rol64(b1, 46) ^ b6;
5415 b15 = rol64(b15, 19) ^ b12;
5418 b13 = rol64(b13, 42) ^ b14;
5421 b11 = rol64(b11, 44) ^ b8;
5424 b9 = rol64(b9, 25) ^ b10;
5427 b15 = rol64(b15, 9) ^ b0;
5430 b11 = rol64(b11, 48) ^ b2;
5433 b13 = rol64(b13, 35) ^ b6;
5436 b9 = rol64(b9, 52) ^ b4;
5439 b1 = rol64(b1, 23) ^ b14;
5442 b5 = rol64(b5, 31) ^ b8;
5445 b3 = rol64(b3, 37) ^ b10;
5448 b7 = rol64(b7, 20) ^ b12;
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;
5468 void threefish_decrypt_1024(struct threefish_key *key_ctx, u64 *input,
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];
5509 b7 = ror64(tmp, 20);
5513 b3 = ror64(tmp, 37);
5517 b5 = ror64(tmp, 31);
5521 b1 = ror64(tmp, 23);
5525 b9 = ror64(tmp, 52);
5529 b13 = ror64(tmp, 35);
5533 b11 = ror64(tmp, 48);
5537 b15 = ror64(tmp, 9);
5541 b9 = ror64(tmp, 25);
5545 b11 = ror64(tmp, 44);
5549 b13 = ror64(tmp, 42);
5553 b15 = ror64(tmp, 19);
5557 b1 = ror64(tmp, 46);
5561 b3 = ror64(tmp, 47);
5565 b5 = ror64(tmp, 44);
5569 b7 = ror64(tmp, 31);
5573 b1 = ror64(tmp, 41);
5577 b5 = ror64(tmp, 42);
5581 b3 = ror64(tmp, 53);
5589 b15 = ror64(tmp, 51);
5593 b11 = ror64(tmp, 56);
5597 b13 = ror64(tmp, 34);
5601 b9 = ror64(tmp, 16);
5605 b15 = ror64(tmp, 30);
5606 b14 -= b15 + k16 + t2;
5610 b13 = ror64(tmp, 44);
5615 b11 = ror64(tmp, 47);
5620 b9 = ror64(tmp, 12);
5625 b7 = ror64(tmp, 31);
5630 b5 = ror64(tmp, 37);
5640 b1 = ror64(tmp, 41);
5645 b7 = ror64(tmp, 25);
5649 b3 = ror64(tmp, 16);
5653 b5 = ror64(tmp, 28);
5657 b1 = ror64(tmp, 47);
5661 b9 = ror64(tmp, 41);
5665 b13 = ror64(tmp, 48);
5669 b11 = ror64(tmp, 20);
5673 b15 = ror64(tmp, 5);
5677 b9 = ror64(tmp, 17);
5681 b11 = ror64(tmp, 59);
5685 b13 = ror64(tmp, 41);
5689 b15 = ror64(tmp, 34);
5693 b1 = ror64(tmp, 13);
5697 b3 = ror64(tmp, 51);
5705 b7 = ror64(tmp, 33);
5709 b1 = ror64(tmp, 52);
5713 b5 = ror64(tmp, 23);
5717 b3 = ror64(tmp, 18);
5721 b7 = ror64(tmp, 49);
5725 b15 = ror64(tmp, 55);
5729 b11 = ror64(tmp, 10);
5733 b13 = ror64(tmp, 19);
5737 b9 = ror64(tmp, 38);
5741 b15 = ror64(tmp, 37);
5742 b14 -= b15 + k15 + t1;
5746 b13 = ror64(tmp, 22);
5751 b11 = ror64(tmp, 17);
5761 b7 = ror64(tmp, 47);
5771 b3 = ror64(tmp, 13);
5776 b1 = ror64(tmp, 24);
5781 b7 = ror64(tmp, 20);
5785 b3 = ror64(tmp, 37);
5789 b5 = ror64(tmp, 31);
5793 b1 = ror64(tmp, 23);
5797 b9 = ror64(tmp, 52);
5801 b13 = ror64(tmp, 35);
5805 b11 = ror64(tmp, 48);
5809 b15 = ror64(tmp, 9);
5813 b9 = ror64(tmp, 25);
5817 b11 = ror64(tmp, 44);
5821 b13 = ror64(tmp, 42);
5825 b15 = ror64(tmp, 19);
5829 b1 = ror64(tmp, 46);
5833 b3 = ror64(tmp, 47);
5837 b5 = ror64(tmp, 44);
5841 b7 = ror64(tmp, 31);
5845 b1 = ror64(tmp, 41);
5849 b5 = ror64(tmp, 42);
5853 b3 = ror64(tmp, 53);
5861 b15 = ror64(tmp, 51);
5865 b11 = ror64(tmp, 56);
5869 b13 = ror64(tmp, 34);
5873 b9 = ror64(tmp, 16);
5877 b15 = ror64(tmp, 30);
5878 b14 -= b15 + k14 + t0;
5882 b13 = ror64(tmp, 44);
5887 b11 = ror64(tmp, 47);
5892 b9 = ror64(tmp, 12);
5897 b7 = ror64(tmp, 31);
5902 b5 = ror64(tmp, 37);
5912 b1 = ror64(tmp, 41);
5917 b7 = ror64(tmp, 25);
5921 b3 = ror64(tmp, 16);
5925 b5 = ror64(tmp, 28);
5929 b1 = ror64(tmp, 47);
5933 b9 = ror64(tmp, 41);
5937 b13 = ror64(tmp, 48);
5941 b11 = ror64(tmp, 20);
5945 b15 = ror64(tmp, 5);
5949 b9 = ror64(tmp, 17);
5953 b11 = ror64(tmp, 59);
5957 b13 = ror64(tmp, 41);
5961 b15 = ror64(tmp, 34);
5965 b1 = ror64(tmp, 13);
5969 b3 = ror64(tmp, 51);
5977 b7 = ror64(tmp, 33);
5981 b1 = ror64(tmp, 52);
5985 b5 = ror64(tmp, 23);
5989 b3 = ror64(tmp, 18);
5993 b7 = ror64(tmp, 49);
5997 b15 = ror64(tmp, 55);
6001 b11 = ror64(tmp, 10);
6005 b13 = ror64(tmp, 19);
6009 b9 = ror64(tmp, 38);
6013 b15 = ror64(tmp, 37);
6014 b14 -= b15 + k13 + t2;
6018 b13 = ror64(tmp, 22);
6023 b11 = ror64(tmp, 17);
6033 b7 = ror64(tmp, 47);
6043 b3 = ror64(tmp, 13);
6048 b1 = ror64(tmp, 24);
6053 b7 = ror64(tmp, 20);
6057 b3 = ror64(tmp, 37);
6061 b5 = ror64(tmp, 31);
6065 b1 = ror64(tmp, 23);
6069 b9 = ror64(tmp, 52);
6073 b13 = ror64(tmp, 35);
6077 b11 = ror64(tmp, 48);
6081 b15 = ror64(tmp, 9);
6085 b9 = ror64(tmp, 25);
6089 b11 = ror64(tmp, 44);
6093 b13 = ror64(tmp, 42);
6097 b15 = ror64(tmp, 19);
6101 b1 = ror64(tmp, 46);
6105 b3 = ror64(tmp, 47);
6109 b5 = ror64(tmp, 44);
6113 b7 = ror64(tmp, 31);
6117 b1 = ror64(tmp, 41);
6121 b5 = ror64(tmp, 42);
6125 b3 = ror64(tmp, 53);
6133 b15 = ror64(tmp, 51);
6137 b11 = ror64(tmp, 56);
6141 b13 = ror64(tmp, 34);
6145 b9 = ror64(tmp, 16);
6149 b15 = ror64(tmp, 30);
6150 b14 -= b15 + k12 + t1;
6154 b13 = ror64(tmp, 44);
6159 b11 = ror64(tmp, 47);
6164 b9 = ror64(tmp, 12);
6169 b7 = ror64(tmp, 31);
6174 b5 = ror64(tmp, 37);
6184 b1 = ror64(tmp, 41);
6189 b7 = ror64(tmp, 25);
6193 b3 = ror64(tmp, 16);
6197 b5 = ror64(tmp, 28);
6201 b1 = ror64(tmp, 47);
6205 b9 = ror64(tmp, 41);
6209 b13 = ror64(tmp, 48);
6213 b11 = ror64(tmp, 20);
6217 b15 = ror64(tmp, 5);
6221 b9 = ror64(tmp, 17);
6225 b11 = ror64(tmp, 59);
6229 b13 = ror64(tmp, 41);
6233 b15 = ror64(tmp, 34);
6237 b1 = ror64(tmp, 13);
6241 b3 = ror64(tmp, 51);
6249 b7 = ror64(tmp, 33);
6253 b1 = ror64(tmp, 52);
6257 b5 = ror64(tmp, 23);
6261 b3 = ror64(tmp, 18);
6265 b7 = ror64(tmp, 49);
6269 b15 = ror64(tmp, 55);
6273 b11 = ror64(tmp, 10);
6277 b13 = ror64(tmp, 19);
6281 b9 = ror64(tmp, 38);
6285 b15 = ror64(tmp, 37);
6286 b14 -= b15 + k11 + t0;
6290 b13 = ror64(tmp, 22);
6295 b11 = ror64(tmp, 17);
6305 b7 = ror64(tmp, 47);
6315 b3 = ror64(tmp, 13);
6320 b1 = ror64(tmp, 24);
6325 b7 = ror64(tmp, 20);
6329 b3 = ror64(tmp, 37);
6333 b5 = ror64(tmp, 31);
6337 b1 = ror64(tmp, 23);
6341 b9 = ror64(tmp, 52);
6345 b13 = ror64(tmp, 35);
6349 b11 = ror64(tmp, 48);
6353 b15 = ror64(tmp, 9);
6357 b9 = ror64(tmp, 25);
6361 b11 = ror64(tmp, 44);
6365 b13 = ror64(tmp, 42);
6369 b15 = ror64(tmp, 19);
6373 b1 = ror64(tmp, 46);
6377 b3 = ror64(tmp, 47);
6381 b5 = ror64(tmp, 44);
6385 b7 = ror64(tmp, 31);
6389 b1 = ror64(tmp, 41);
6393 b5 = ror64(tmp, 42);
6397 b3 = ror64(tmp, 53);
6405 b15 = ror64(tmp, 51);
6409 b11 = ror64(tmp, 56);
6413 b13 = ror64(tmp, 34);
6417 b9 = ror64(tmp, 16);
6421 b15 = ror64(tmp, 30);
6422 b14 -= b15 + k10 + t2;
6426 b13 = ror64(tmp, 44);
6431 b11 = ror64(tmp, 47);
6436 b9 = ror64(tmp, 12);
6441 b7 = ror64(tmp, 31);
6446 b5 = ror64(tmp, 37);
6456 b1 = ror64(tmp, 41);
6461 b7 = ror64(tmp, 25);
6465 b3 = ror64(tmp, 16);
6469 b5 = ror64(tmp, 28);
6473 b1 = ror64(tmp, 47);
6477 b9 = ror64(tmp, 41);
6481 b13 = ror64(tmp, 48);
6485 b11 = ror64(tmp, 20);
6489 b15 = ror64(tmp, 5);
6493 b9 = ror64(tmp, 17);
6497 b11 = ror64(tmp, 59);
6501 b13 = ror64(tmp, 41);
6505 b15 = ror64(tmp, 34);
6509 b1 = ror64(tmp, 13);
6513 b3 = ror64(tmp, 51);
6521 b7 = ror64(tmp, 33);
6525 b1 = ror64(tmp, 52);
6529 b5 = ror64(tmp, 23);
6533 b3 = ror64(tmp, 18);
6537 b7 = ror64(tmp, 49);
6541 b15 = ror64(tmp, 55);
6545 b11 = ror64(tmp, 10);
6549 b13 = ror64(tmp, 19);
6553 b9 = ror64(tmp, 38);
6557 b15 = ror64(tmp, 37);
6558 b14 -= b15 + k9 + t1;
6562 b13 = ror64(tmp, 22);
6567 b11 = ror64(tmp, 17);
6577 b7 = ror64(tmp, 47);
6587 b3 = ror64(tmp, 13);
6592 b1 = ror64(tmp, 24);
6597 b7 = ror64(tmp, 20);
6601 b3 = ror64(tmp, 37);
6605 b5 = ror64(tmp, 31);
6609 b1 = ror64(tmp, 23);
6613 b9 = ror64(tmp, 52);
6617 b13 = ror64(tmp, 35);
6621 b11 = ror64(tmp, 48);
6625 b15 = ror64(tmp, 9);
6629 b9 = ror64(tmp, 25);
6633 b11 = ror64(tmp, 44);
6637 b13 = ror64(tmp, 42);
6641 b15 = ror64(tmp, 19);
6645 b1 = ror64(tmp, 46);
6649 b3 = ror64(tmp, 47);
6653 b5 = ror64(tmp, 44);
6657 b7 = ror64(tmp, 31);
6661 b1 = ror64(tmp, 41);
6665 b5 = ror64(tmp, 42);
6669 b3 = ror64(tmp, 53);
6677 b15 = ror64(tmp, 51);
6681 b11 = ror64(tmp, 56);
6685 b13 = ror64(tmp, 34);
6689 b9 = ror64(tmp, 16);
6693 b15 = ror64(tmp, 30);
6694 b14 -= b15 + k8 + t0;
6698 b13 = ror64(tmp, 44);
6703 b11 = ror64(tmp, 47);
6708 b9 = ror64(tmp, 12);
6713 b7 = ror64(tmp, 31);
6718 b5 = ror64(tmp, 37);
6728 b1 = ror64(tmp, 41);
6733 b7 = ror64(tmp, 25);
6737 b3 = ror64(tmp, 16);
6741 b5 = ror64(tmp, 28);
6745 b1 = ror64(tmp, 47);
6749 b9 = ror64(tmp, 41);
6753 b13 = ror64(tmp, 48);
6757 b11 = ror64(tmp, 20);
6761 b15 = ror64(tmp, 5);
6765 b9 = ror64(tmp, 17);
6769 b11 = ror64(tmp, 59);
6773 b13 = ror64(tmp, 41);
6777 b15 = ror64(tmp, 34);
6781 b1 = ror64(tmp, 13);
6785 b3 = ror64(tmp, 51);
6793 b7 = ror64(tmp, 33);
6797 b1 = ror64(tmp, 52);
6801 b5 = ror64(tmp, 23);
6805 b3 = ror64(tmp, 18);
6809 b7 = ror64(tmp, 49);
6813 b15 = ror64(tmp, 55);
6817 b11 = ror64(tmp, 10);
6821 b13 = ror64(tmp, 19);
6825 b9 = ror64(tmp, 38);
6829 b15 = ror64(tmp, 37);
6830 b14 -= b15 + k7 + t2;
6834 b13 = ror64(tmp, 22);
6839 b11 = ror64(tmp, 17);
6849 b7 = ror64(tmp, 47);
6859 b3 = ror64(tmp, 13);
6864 b1 = ror64(tmp, 24);
6869 b7 = ror64(tmp, 20);
6873 b3 = ror64(tmp, 37);
6877 b5 = ror64(tmp, 31);
6881 b1 = ror64(tmp, 23);
6885 b9 = ror64(tmp, 52);
6889 b13 = ror64(tmp, 35);
6893 b11 = ror64(tmp, 48);
6897 b15 = ror64(tmp, 9);
6901 b9 = ror64(tmp, 25);
6905 b11 = ror64(tmp, 44);
6909 b13 = ror64(tmp, 42);
6913 b15 = ror64(tmp, 19);
6917 b1 = ror64(tmp, 46);
6921 b3 = ror64(tmp, 47);
6925 b5 = ror64(tmp, 44);
6929 b7 = ror64(tmp, 31);
6933 b1 = ror64(tmp, 41);
6937 b5 = ror64(tmp, 42);
6941 b3 = ror64(tmp, 53);
6949 b15 = ror64(tmp, 51);
6953 b11 = ror64(tmp, 56);
6957 b13 = ror64(tmp, 34);
6961 b9 = ror64(tmp, 16);
6965 b15 = ror64(tmp, 30);
6966 b14 -= b15 + k6 + t1;
6970 b13 = ror64(tmp, 44);
6975 b11 = ror64(tmp, 47);
6980 b9 = ror64(tmp, 12);
6985 b7 = ror64(tmp, 31);
6990 b5 = ror64(tmp, 37);
7000 b1 = ror64(tmp, 41);
7005 b7 = ror64(tmp, 25);
7009 b3 = ror64(tmp, 16);
7013 b5 = ror64(tmp, 28);
7017 b1 = ror64(tmp, 47);
7021 b9 = ror64(tmp, 41);
7025 b13 = ror64(tmp, 48);
7029 b11 = ror64(tmp, 20);
7033 b15 = ror64(tmp, 5);
7037 b9 = ror64(tmp, 17);
7041 b11 = ror64(tmp, 59);
7045 b13 = ror64(tmp, 41);
7049 b15 = ror64(tmp, 34);
7053 b1 = ror64(tmp, 13);
7057 b3 = ror64(tmp, 51);
7065 b7 = ror64(tmp, 33);
7069 b1 = ror64(tmp, 52);
7073 b5 = ror64(tmp, 23);
7077 b3 = ror64(tmp, 18);
7081 b7 = ror64(tmp, 49);
7085 b15 = ror64(tmp, 55);
7089 b11 = ror64(tmp, 10);
7093 b13 = ror64(tmp, 19);
7097 b9 = ror64(tmp, 38);
7101 b15 = ror64(tmp, 37);
7102 b14 -= b15 + k5 + t0;
7106 b13 = ror64(tmp, 22);
7111 b11 = ror64(tmp, 17);
7121 b7 = ror64(tmp, 47);
7131 b3 = ror64(tmp, 13);
7136 b1 = ror64(tmp, 24);
7141 b7 = ror64(tmp, 20);
7145 b3 = ror64(tmp, 37);
7149 b5 = ror64(tmp, 31);
7153 b1 = ror64(tmp, 23);
7157 b9 = ror64(tmp, 52);
7161 b13 = ror64(tmp, 35);
7165 b11 = ror64(tmp, 48);
7169 b15 = ror64(tmp, 9);
7173 b9 = ror64(tmp, 25);
7177 b11 = ror64(tmp, 44);
7181 b13 = ror64(tmp, 42);
7185 b15 = ror64(tmp, 19);
7189 b1 = ror64(tmp, 46);
7193 b3 = ror64(tmp, 47);
7197 b5 = ror64(tmp, 44);
7201 b7 = ror64(tmp, 31);
7205 b1 = ror64(tmp, 41);
7209 b5 = ror64(tmp, 42);
7213 b3 = ror64(tmp, 53);
7221 b15 = ror64(tmp, 51);
7225 b11 = ror64(tmp, 56);
7229 b13 = ror64(tmp, 34);
7233 b9 = ror64(tmp, 16);
7237 b15 = ror64(tmp, 30);
7238 b14 -= b15 + k4 + t2;
7242 b13 = ror64(tmp, 44);
7247 b11 = ror64(tmp, 47);
7252 b9 = ror64(tmp, 12);
7257 b7 = ror64(tmp, 31);
7262 b5 = ror64(tmp, 37);
7272 b1 = ror64(tmp, 41);
7277 b7 = ror64(tmp, 25);
7281 b3 = ror64(tmp, 16);
7285 b5 = ror64(tmp, 28);
7289 b1 = ror64(tmp, 47);
7293 b9 = ror64(tmp, 41);
7297 b13 = ror64(tmp, 48);
7301 b11 = ror64(tmp, 20);
7305 b15 = ror64(tmp, 5);
7309 b9 = ror64(tmp, 17);
7313 b11 = ror64(tmp, 59);
7317 b13 = ror64(tmp, 41);
7321 b15 = ror64(tmp, 34);
7325 b1 = ror64(tmp, 13);
7329 b3 = ror64(tmp, 51);
7337 b7 = ror64(tmp, 33);
7341 b1 = ror64(tmp, 52);
7345 b5 = ror64(tmp, 23);
7349 b3 = ror64(tmp, 18);
7353 b7 = ror64(tmp, 49);
7357 b15 = ror64(tmp, 55);
7361 b11 = ror64(tmp, 10);
7365 b13 = ror64(tmp, 19);
7369 b9 = ror64(tmp, 38);
7373 b15 = ror64(tmp, 37);
7374 b14 -= b15 + k3 + t1;
7378 b13 = ror64(tmp, 22);
7383 b11 = ror64(tmp, 17);
7393 b7 = ror64(tmp, 47);
7403 b3 = ror64(tmp, 13);
7408 b1 = ror64(tmp, 24);
7413 b7 = ror64(tmp, 20);
7417 b3 = ror64(tmp, 37);
7421 b5 = ror64(tmp, 31);
7425 b1 = ror64(tmp, 23);
7429 b9 = ror64(tmp, 52);
7433 b13 = ror64(tmp, 35);
7437 b11 = ror64(tmp, 48);
7441 b15 = ror64(tmp, 9);
7445 b9 = ror64(tmp, 25);
7449 b11 = ror64(tmp, 44);
7453 b13 = ror64(tmp, 42);
7457 b15 = ror64(tmp, 19);
7461 b1 = ror64(tmp, 46);
7465 b3 = ror64(tmp, 47);
7469 b5 = ror64(tmp, 44);
7473 b7 = ror64(tmp, 31);
7477 b1 = ror64(tmp, 41);
7481 b5 = ror64(tmp, 42);
7485 b3 = ror64(tmp, 53);
7493 b15 = ror64(tmp, 51);
7497 b11 = ror64(tmp, 56);
7501 b13 = ror64(tmp, 34);
7505 b9 = ror64(tmp, 16);
7509 b15 = ror64(tmp, 30);
7510 b14 -= b15 + k2 + t0;
7514 b13 = ror64(tmp, 44);
7519 b11 = ror64(tmp, 47);
7524 b9 = ror64(tmp, 12);
7529 b7 = ror64(tmp, 31);
7534 b5 = ror64(tmp, 37);
7544 b1 = ror64(tmp, 41);
7549 b7 = ror64(tmp, 25);
7553 b3 = ror64(tmp, 16);
7557 b5 = ror64(tmp, 28);
7561 b1 = ror64(tmp, 47);
7565 b9 = ror64(tmp, 41);
7569 b13 = ror64(tmp, 48);
7573 b11 = ror64(tmp, 20);
7577 b15 = ror64(tmp, 5);
7581 b9 = ror64(tmp, 17);
7585 b11 = ror64(tmp, 59);
7589 b13 = ror64(tmp, 41);
7593 b15 = ror64(tmp, 34);
7597 b1 = ror64(tmp, 13);
7601 b3 = ror64(tmp, 51);
7609 b7 = ror64(tmp, 33);
7613 b1 = ror64(tmp, 52);
7617 b5 = ror64(tmp, 23);
7621 b3 = ror64(tmp, 18);
7625 b7 = ror64(tmp, 49);
7629 b15 = ror64(tmp, 55);
7633 b11 = ror64(tmp, 10);
7637 b13 = ror64(tmp, 19);
7641 b9 = ror64(tmp, 38);
7645 b15 = ror64(tmp, 37);
7646 b14 -= b15 + k1 + t2;
7650 b13 = ror64(tmp, 22);
7655 b11 = ror64(tmp, 17);
7665 b7 = ror64(tmp, 47);
7675 b3 = ror64(tmp, 13);
7680 b1 = ror64(tmp, 24);
7685 b7 = ror64(tmp, 20);
7689 b3 = ror64(tmp, 37);
7693 b5 = ror64(tmp, 31);
7697 b1 = ror64(tmp, 23);
7701 b9 = ror64(tmp, 52);
7705 b13 = ror64(tmp, 35);
7709 b11 = ror64(tmp, 48);
7713 b15 = ror64(tmp, 9);
7717 b9 = ror64(tmp, 25);
7721 b11 = ror64(tmp, 44);
7725 b13 = ror64(tmp, 42);
7729 b15 = ror64(tmp, 19);
7733 b1 = ror64(tmp, 46);
7737 b3 = ror64(tmp, 47);
7741 b5 = ror64(tmp, 44);
7745 b7 = ror64(tmp, 31);
7749 b1 = ror64(tmp, 41);
7753 b5 = ror64(tmp, 42);
7757 b3 = ror64(tmp, 53);
7765 b15 = ror64(tmp, 51);
7769 b11 = ror64(tmp, 56);
7773 b13 = ror64(tmp, 34);
7777 b9 = ror64(tmp, 16);
7781 b15 = ror64(tmp, 30);
7782 b14 -= b15 + k0 + t1;
7786 b13 = ror64(tmp, 44);
7791 b11 = ror64(tmp, 47);
7796 b9 = ror64(tmp, 12);
7801 b7 = ror64(tmp, 31);
7806 b5 = ror64(tmp, 37);
7816 b1 = ror64(tmp, 41);
7821 b7 = ror64(tmp, 25);
7825 b3 = ror64(tmp, 16);
7829 b5 = ror64(tmp, 28);
7833 b1 = ror64(tmp, 47);
7837 b9 = ror64(tmp, 41);
7841 b13 = ror64(tmp, 48);
7845 b11 = ror64(tmp, 20);
7849 b15 = ror64(tmp, 5);
7853 b9 = ror64(tmp, 17);
7857 b11 = ror64(tmp, 59);
7861 b13 = ror64(tmp, 41);
7865 b15 = ror64(tmp, 34);
7869 b1 = ror64(tmp, 13);
7873 b3 = ror64(tmp, 51);
7881 b7 = ror64(tmp, 33);
7885 b1 = ror64(tmp, 52);
7889 b5 = ror64(tmp, 23);
7893 b3 = ror64(tmp, 18);
7897 b7 = ror64(tmp, 49);
7901 b15 = ror64(tmp, 55);
7905 b11 = ror64(tmp, 10);
7909 b13 = ror64(tmp, 19);
7913 b9 = ror64(tmp, 38);
7917 b15 = ror64(tmp, 37);
7918 b14 -= b15 + k16 + t0;
7922 b13 = ror64(tmp, 22);
7927 b11 = ror64(tmp, 17);
7937 b7 = ror64(tmp, 47);
7947 b3 = ror64(tmp, 13);
7952 b1 = ror64(tmp, 24);
7957 b7 = ror64(tmp, 20);
7961 b3 = ror64(tmp, 37);
7965 b5 = ror64(tmp, 31);
7969 b1 = ror64(tmp, 23);
7973 b9 = ror64(tmp, 52);
7977 b13 = ror64(tmp, 35);
7981 b11 = ror64(tmp, 48);
7985 b15 = ror64(tmp, 9);
7989 b9 = ror64(tmp, 25);
7993 b11 = ror64(tmp, 44);
7997 b13 = ror64(tmp, 42);
8001 b15 = ror64(tmp, 19);
8005 b1 = ror64(tmp, 46);
8009 b3 = ror64(tmp, 47);
8013 b5 = ror64(tmp, 44);
8017 b7 = ror64(tmp, 31);
8021 b1 = ror64(tmp, 41);
8025 b5 = ror64(tmp, 42);
8029 b3 = ror64(tmp, 53);
8037 b15 = ror64(tmp, 51);
8041 b11 = ror64(tmp, 56);
8045 b13 = ror64(tmp, 34);
8049 b9 = ror64(tmp, 16);
8053 b15 = ror64(tmp, 30);
8054 b14 -= b15 + k15 + t2;
8058 b13 = ror64(tmp, 44);
8063 b11 = ror64(tmp, 47);
8068 b9 = ror64(tmp, 12);
8073 b7 = ror64(tmp, 31);
8078 b5 = ror64(tmp, 37);
8088 b1 = ror64(tmp, 41);
8093 b7 = ror64(tmp, 25);
8097 b3 = ror64(tmp, 16);
8101 b5 = ror64(tmp, 28);
8105 b1 = ror64(tmp, 47);
8109 b9 = ror64(tmp, 41);
8113 b13 = ror64(tmp, 48);
8117 b11 = ror64(tmp, 20);
8121 b15 = ror64(tmp, 5);
8125 b9 = ror64(tmp, 17);
8129 b11 = ror64(tmp, 59);
8133 b13 = ror64(tmp, 41);
8137 b15 = ror64(tmp, 34);
8141 b1 = ror64(tmp, 13);
8145 b3 = ror64(tmp, 51);
8153 b7 = ror64(tmp, 33);
8157 b1 = ror64(tmp, 52);
8161 b5 = ror64(tmp, 23);
8165 b3 = ror64(tmp, 18);
8169 b7 = ror64(tmp, 49);
8173 b15 = ror64(tmp, 55);
8177 b11 = ror64(tmp, 10);
8181 b13 = ror64(tmp, 19);
8185 b9 = ror64(tmp, 38);
8189 b15 = ror64(tmp, 37);
8190 b14 -= b15 + k14 + t1;
8194 b13 = ror64(tmp, 22);
8199 b11 = ror64(tmp, 17);
8209 b7 = ror64(tmp, 47);
8219 b3 = ror64(tmp, 13);
8224 b1 = ror64(tmp, 24);