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;
69 b1 = rol64(b1, 14) ^ b0;
73 b3 = rol64(b3, 16) ^ b2;
76 b3 = rol64(b3, 52) ^ b0;
79 b1 = rol64(b1, 57) ^ b2;
82 b1 = rol64(b1, 23) ^ b0;
85 b3 = rol64(b3, 40) ^ b2;
88 b3 = rol64(b3, 5) ^ b0;
91 b1 = rol64(b1, 37) ^ b2;
95 b1 = rol64(b1, 25) ^ b0;
99 b3 = rol64(b3, 33) ^ b2;
102 b3 = rol64(b3, 46) ^ b0;
105 b1 = rol64(b1, 12) ^ b2;
108 b1 = rol64(b1, 58) ^ b0;
111 b3 = rol64(b3, 22) ^ b2;
114 b3 = rol64(b3, 32) ^ b0;
117 b1 = rol64(b1, 32) ^ b2;
121 b1 = rol64(b1, 14) ^ b0;
125 b3 = rol64(b3, 16) ^ b2;
128 b3 = rol64(b3, 52) ^ b0;
131 b1 = rol64(b1, 57) ^ b2;
134 b1 = rol64(b1, 23) ^ b0;
137 b3 = rol64(b3, 40) ^ b2;
140 b3 = rol64(b3, 5) ^ b0;
143 b1 = rol64(b1, 37) ^ b2;
147 b1 = rol64(b1, 25) ^ b0;
151 b3 = rol64(b3, 33) ^ b2;
154 b3 = rol64(b3, 46) ^ b0;
157 b1 = rol64(b1, 12) ^ b2;
160 b1 = rol64(b1, 58) ^ b0;
163 b3 = rol64(b3, 22) ^ b2;
166 b3 = rol64(b3, 32) ^ b0;
169 b1 = rol64(b1, 32) ^ b2;
173 b1 = rol64(b1, 14) ^ b0;
177 b3 = rol64(b3, 16) ^ b2;
180 b3 = rol64(b3, 52) ^ b0;
183 b1 = rol64(b1, 57) ^ b2;
186 b1 = rol64(b1, 23) ^ b0;
189 b3 = rol64(b3, 40) ^ b2;
192 b3 = rol64(b3, 5) ^ b0;
195 b1 = rol64(b1, 37) ^ b2;
199 b1 = rol64(b1, 25) ^ b0;
203 b3 = rol64(b3, 33) ^ b2;
206 b3 = rol64(b3, 46) ^ b0;
209 b1 = rol64(b1, 12) ^ b2;
212 b1 = rol64(b1, 58) ^ b0;
215 b3 = rol64(b3, 22) ^ b2;
218 b3 = rol64(b3, 32) ^ b0;
221 b1 = rol64(b1, 32) ^ b2;
225 b1 = rol64(b1, 14) ^ b0;
229 b3 = rol64(b3, 16) ^ b2;
232 b3 = rol64(b3, 52) ^ b0;
235 b1 = rol64(b1, 57) ^ b2;
238 b1 = rol64(b1, 23) ^ b0;
241 b3 = rol64(b3, 40) ^ b2;
244 b3 = rol64(b3, 5) ^ b0;
247 b1 = rol64(b1, 37) ^ b2;
251 b1 = rol64(b1, 25) ^ b0;
255 b3 = rol64(b3, 33) ^ b2;
258 b3 = rol64(b3, 46) ^ b0;
261 b1 = rol64(b1, 12) ^ b2;
264 b1 = rol64(b1, 58) ^ b0;
267 b3 = rol64(b3, 22) ^ b2;
270 b3 = rol64(b3, 32) ^ b0;
273 b1 = rol64(b1, 32) ^ b2;
277 b1 = rol64(b1, 14) ^ b0;
281 b3 = rol64(b3, 16) ^ b2;
284 b3 = rol64(b3, 52) ^ b0;
287 b1 = rol64(b1, 57) ^ b2;
290 b1 = rol64(b1, 23) ^ b0;
293 b3 = rol64(b3, 40) ^ b2;
296 b3 = rol64(b3, 5) ^ b0;
299 b1 = rol64(b1, 37) ^ b2;
303 b1 = rol64(b1, 25) ^ b0;
307 b3 = rol64(b3, 33) ^ b2;
310 b3 = rol64(b3, 46) ^ b0;
313 b1 = rol64(b1, 12) ^ b2;
316 b1 = rol64(b1, 58) ^ b0;
319 b3 = rol64(b3, 22) ^ b2;
322 b3 = rol64(b3, 32) ^ b0;
325 b1 = rol64(b1, 32) ^ b2;
329 b1 = rol64(b1, 14) ^ b0;
333 b3 = rol64(b3, 16) ^ b2;
336 b3 = rol64(b3, 52) ^ b0;
339 b1 = rol64(b1, 57) ^ b2;
342 b1 = rol64(b1, 23) ^ b0;
345 b3 = rol64(b3, 40) ^ b2;
348 b3 = rol64(b3, 5) ^ b0;
351 b1 = rol64(b1, 37) ^ b2;
355 b1 = rol64(b1, 25) ^ b0;
359 b3 = rol64(b3, 33) ^ b2;
362 b3 = rol64(b3, 46) ^ b0;
365 b1 = rol64(b1, 12) ^ b2;
368 b1 = rol64(b1, 58) ^ b0;
371 b3 = rol64(b3, 22) ^ b2;
374 b3 = rol64(b3, 32) ^ b0;
377 b1 = rol64(b1, 32) ^ b2;
381 b1 = rol64(b1, 14) ^ b0;
385 b3 = rol64(b3, 16) ^ b2;
388 b3 = rol64(b3, 52) ^ b0;
391 b1 = rol64(b1, 57) ^ b2;
394 b1 = rol64(b1, 23) ^ b0;
397 b3 = rol64(b3, 40) ^ b2;
400 b3 = rol64(b3, 5) ^ b0;
403 b1 = rol64(b1, 37) ^ b2;
407 b1 = rol64(b1, 25) ^ b0;
411 b3 = rol64(b3, 33) ^ b2;
414 b3 = rol64(b3, 46) ^ b0;
417 b1 = rol64(b1, 12) ^ b2;
420 b1 = rol64(b1, 58) ^ b0;
423 b3 = rol64(b3, 22) ^ b2;
426 b3 = rol64(b3, 32) ^ b0;
429 b1 = rol64(b1, 32) ^ b2;
433 b1 = rol64(b1, 14) ^ b0;
437 b3 = rol64(b3, 16) ^ b2;
440 b3 = rol64(b3, 52) ^ b0;
443 b1 = rol64(b1, 57) ^ b2;
446 b1 = rol64(b1, 23) ^ b0;
449 b3 = rol64(b3, 40) ^ b2;
452 b3 = rol64(b3, 5) ^ b0;
455 b1 = rol64(b1, 37) ^ b2;
459 b1 = rol64(b1, 25) ^ b0;
463 b3 = rol64(b3, 33) ^ b2;
466 b3 = rol64(b3, 46) ^ b0;
469 b1 = rol64(b1, 12) ^ b2;
472 b1 = rol64(b1, 58) ^ b0;
475 b3 = rol64(b3, 22) ^ b2;
478 b3 = rol64(b3, 32) ^ b0;
481 b1 = rol64(b1, 32) ^ b2;
484 output[1] = b1 + k4 + t0;
485 output[2] = b2 + k0 + t1;
486 output[3] = b3 + k1 + 18;
489 void threefish_decrypt_256(struct threefish_key *key_ctx, u64 *input,
492 u64 b0 = input[0], b1 = input[1],
493 b2 = input[2], b3 = input[3];
494 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
495 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
496 k4 = key_ctx->key[4];
497 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
498 t2 = key_ctx->tweak[2];
1003 b1 = ror64(tmp, 12);
1007 b1 = ror64(tmp, 25);
1012 b3 = ror64(tmp, 33);
1021 b1 = ror64(tmp, 37);
1025 b1 = ror64(tmp, 23);
1029 b3 = ror64(tmp, 40);
1033 b3 = ror64(tmp, 52);
1037 b1 = ror64(tmp, 57);
1041 b1 = ror64(tmp, 14);
1046 b3 = ror64(tmp, 16);
1051 b3 = ror64(tmp, 32);
1055 b1 = ror64(tmp, 32);
1059 b1 = ror64(tmp, 58);
1063 b3 = ror64(tmp, 22);
1067 b3 = ror64(tmp, 46);
1071 b1 = ror64(tmp, 12);
1075 b1 = ror64(tmp, 25);
1080 b3 = ror64(tmp, 33);
1089 b1 = ror64(tmp, 37);
1093 b1 = ror64(tmp, 23);
1097 b3 = ror64(tmp, 40);
1101 b3 = ror64(tmp, 52);
1105 b1 = ror64(tmp, 57);
1109 b1 = ror64(tmp, 14);
1114 b3 = ror64(tmp, 16);
1124 void threefish_encrypt_512(struct threefish_key *key_ctx, u64 *input,
1127 u64 b0 = input[0], b1 = input[1],
1128 b2 = input[2], b3 = input[3],
1129 b4 = input[4], b5 = input[5],
1130 b6 = input[6], b7 = input[7];
1131 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
1132 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
1133 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
1134 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
1135 k8 = key_ctx->key[8];
1136 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
1137 t2 = key_ctx->tweak[2];
1141 b1 = rol64(b1, 46) ^ b0;
1145 b3 = rol64(b3, 36) ^ b2;
1149 b5 = rol64(b5, 19) ^ b4;
1153 b7 = rol64(b7, 37) ^ b6;
1156 b1 = rol64(b1, 33) ^ b2;
1159 b7 = rol64(b7, 27) ^ b4;
1162 b5 = rol64(b5, 14) ^ b6;
1165 b3 = rol64(b3, 42) ^ b0;
1168 b1 = rol64(b1, 17) ^ b4;
1171 b3 = rol64(b3, 49) ^ b6;
1174 b5 = rol64(b5, 36) ^ b0;
1177 b7 = rol64(b7, 39) ^ b2;
1180 b1 = rol64(b1, 44) ^ b6;
1183 b7 = rol64(b7, 9) ^ b0;
1186 b5 = rol64(b5, 54) ^ b2;
1189 b3 = rol64(b3, 56) ^ b4;
1193 b1 = rol64(b1, 39) ^ b0;
1197 b3 = rol64(b3, 30) ^ b2;
1201 b5 = rol64(b5, 34) ^ b4;
1205 b7 = rol64(b7, 24) ^ b6;
1208 b1 = rol64(b1, 13) ^ b2;
1211 b7 = rol64(b7, 50) ^ b4;
1214 b5 = rol64(b5, 10) ^ b6;
1217 b3 = rol64(b3, 17) ^ b0;
1220 b1 = rol64(b1, 25) ^ b4;
1223 b3 = rol64(b3, 29) ^ b6;
1226 b5 = rol64(b5, 39) ^ b0;
1229 b7 = rol64(b7, 43) ^ b2;
1232 b1 = rol64(b1, 8) ^ b6;
1235 b7 = rol64(b7, 35) ^ b0;
1238 b5 = rol64(b5, 56) ^ b2;
1241 b3 = rol64(b3, 22) ^ b4;
1245 b1 = rol64(b1, 46) ^ b0;
1249 b3 = rol64(b3, 36) ^ b2;
1253 b5 = rol64(b5, 19) ^ b4;
1257 b7 = rol64(b7, 37) ^ b6;
1260 b1 = rol64(b1, 33) ^ b2;
1263 b7 = rol64(b7, 27) ^ b4;
1266 b5 = rol64(b5, 14) ^ b6;
1269 b3 = rol64(b3, 42) ^ b0;
1272 b1 = rol64(b1, 17) ^ b4;
1275 b3 = rol64(b3, 49) ^ b6;
1278 b5 = rol64(b5, 36) ^ b0;
1281 b7 = rol64(b7, 39) ^ b2;
1284 b1 = rol64(b1, 44) ^ b6;
1287 b7 = rol64(b7, 9) ^ b0;
1290 b5 = rol64(b5, 54) ^ b2;
1293 b3 = rol64(b3, 56) ^ b4;
1297 b1 = rol64(b1, 39) ^ b0;
1301 b3 = rol64(b3, 30) ^ b2;
1305 b5 = rol64(b5, 34) ^ b4;
1309 b7 = rol64(b7, 24) ^ b6;
1312 b1 = rol64(b1, 13) ^ b2;
1315 b7 = rol64(b7, 50) ^ b4;
1318 b5 = rol64(b5, 10) ^ b6;
1321 b3 = rol64(b3, 17) ^ b0;
1324 b1 = rol64(b1, 25) ^ b4;
1327 b3 = rol64(b3, 29) ^ b6;
1330 b5 = rol64(b5, 39) ^ b0;
1333 b7 = rol64(b7, 43) ^ b2;
1336 b1 = rol64(b1, 8) ^ b6;
1339 b7 = rol64(b7, 35) ^ b0;
1342 b5 = rol64(b5, 56) ^ b2;
1345 b3 = rol64(b3, 22) ^ b4;
1349 b1 = rol64(b1, 46) ^ b0;
1353 b3 = rol64(b3, 36) ^ b2;
1357 b5 = rol64(b5, 19) ^ b4;
1361 b7 = rol64(b7, 37) ^ b6;
1364 b1 = rol64(b1, 33) ^ b2;
1367 b7 = rol64(b7, 27) ^ b4;
1370 b5 = rol64(b5, 14) ^ b6;
1373 b3 = rol64(b3, 42) ^ b0;
1376 b1 = rol64(b1, 17) ^ b4;
1379 b3 = rol64(b3, 49) ^ b6;
1382 b5 = rol64(b5, 36) ^ b0;
1385 b7 = rol64(b7, 39) ^ b2;
1388 b1 = rol64(b1, 44) ^ b6;
1391 b7 = rol64(b7, 9) ^ b0;
1394 b5 = rol64(b5, 54) ^ b2;
1397 b3 = rol64(b3, 56) ^ b4;
1401 b1 = rol64(b1, 39) ^ b0;
1405 b3 = rol64(b3, 30) ^ b2;
1409 b5 = rol64(b5, 34) ^ b4;
1413 b7 = rol64(b7, 24) ^ b6;
1416 b1 = rol64(b1, 13) ^ b2;
1419 b7 = rol64(b7, 50) ^ b4;
1422 b5 = rol64(b5, 10) ^ b6;
1425 b3 = rol64(b3, 17) ^ b0;
1428 b1 = rol64(b1, 25) ^ b4;
1431 b3 = rol64(b3, 29) ^ b6;
1434 b5 = rol64(b5, 39) ^ b0;
1437 b7 = rol64(b7, 43) ^ b2;
1440 b1 = rol64(b1, 8) ^ b6;
1443 b7 = rol64(b7, 35) ^ b0;
1446 b5 = rol64(b5, 56) ^ b2;
1449 b3 = rol64(b3, 22) ^ b4;
1453 b1 = rol64(b1, 46) ^ b0;
1457 b3 = rol64(b3, 36) ^ b2;
1461 b5 = rol64(b5, 19) ^ b4;
1465 b7 = rol64(b7, 37) ^ b6;
1468 b1 = rol64(b1, 33) ^ b2;
1471 b7 = rol64(b7, 27) ^ b4;
1474 b5 = rol64(b5, 14) ^ b6;
1477 b3 = rol64(b3, 42) ^ b0;
1480 b1 = rol64(b1, 17) ^ b4;
1483 b3 = rol64(b3, 49) ^ b6;
1486 b5 = rol64(b5, 36) ^ b0;
1489 b7 = rol64(b7, 39) ^ b2;
1492 b1 = rol64(b1, 44) ^ b6;
1495 b7 = rol64(b7, 9) ^ b0;
1498 b5 = rol64(b5, 54) ^ b2;
1501 b3 = rol64(b3, 56) ^ b4;
1505 b1 = rol64(b1, 39) ^ b0;
1509 b3 = rol64(b3, 30) ^ b2;
1513 b5 = rol64(b5, 34) ^ b4;
1517 b7 = rol64(b7, 24) ^ b6;
1520 b1 = rol64(b1, 13) ^ b2;
1523 b7 = rol64(b7, 50) ^ b4;
1526 b5 = rol64(b5, 10) ^ b6;
1529 b3 = rol64(b3, 17) ^ b0;
1532 b1 = rol64(b1, 25) ^ b4;
1535 b3 = rol64(b3, 29) ^ b6;
1538 b5 = rol64(b5, 39) ^ b0;
1541 b7 = rol64(b7, 43) ^ b2;
1544 b1 = rol64(b1, 8) ^ b6;
1547 b7 = rol64(b7, 35) ^ b0;
1550 b5 = rol64(b5, 56) ^ b2;
1553 b3 = rol64(b3, 22) ^ b4;
1557 b1 = rol64(b1, 46) ^ b0;
1561 b3 = rol64(b3, 36) ^ b2;
1565 b5 = rol64(b5, 19) ^ b4;
1569 b7 = rol64(b7, 37) ^ b6;
1572 b1 = rol64(b1, 33) ^ b2;
1575 b7 = rol64(b7, 27) ^ b4;
1578 b5 = rol64(b5, 14) ^ b6;
1581 b3 = rol64(b3, 42) ^ b0;
1584 b1 = rol64(b1, 17) ^ b4;
1587 b3 = rol64(b3, 49) ^ b6;
1590 b5 = rol64(b5, 36) ^ b0;
1593 b7 = rol64(b7, 39) ^ b2;
1596 b1 = rol64(b1, 44) ^ b6;
1599 b7 = rol64(b7, 9) ^ b0;
1602 b5 = rol64(b5, 54) ^ b2;
1605 b3 = rol64(b3, 56) ^ b4;
1609 b1 = rol64(b1, 39) ^ b0;
1613 b3 = rol64(b3, 30) ^ b2;
1617 b5 = rol64(b5, 34) ^ b4;
1621 b7 = rol64(b7, 24) ^ b6;
1624 b1 = rol64(b1, 13) ^ b2;
1627 b7 = rol64(b7, 50) ^ b4;
1630 b5 = rol64(b5, 10) ^ b6;
1633 b3 = rol64(b3, 17) ^ b0;
1636 b1 = rol64(b1, 25) ^ b4;
1639 b3 = rol64(b3, 29) ^ b6;
1642 b5 = rol64(b5, 39) ^ b0;
1645 b7 = rol64(b7, 43) ^ b2;
1648 b1 = rol64(b1, 8) ^ b6;
1651 b7 = rol64(b7, 35) ^ b0;
1654 b5 = rol64(b5, 56) ^ b2;
1657 b3 = rol64(b3, 22) ^ b4;
1661 b1 = rol64(b1, 46) ^ b0;
1665 b3 = rol64(b3, 36) ^ b2;
1669 b5 = rol64(b5, 19) ^ b4;
1673 b7 = rol64(b7, 37) ^ b6;
1676 b1 = rol64(b1, 33) ^ b2;
1679 b7 = rol64(b7, 27) ^ b4;
1682 b5 = rol64(b5, 14) ^ b6;
1685 b3 = rol64(b3, 42) ^ b0;
1688 b1 = rol64(b1, 17) ^ b4;
1691 b3 = rol64(b3, 49) ^ b6;
1694 b5 = rol64(b5, 36) ^ b0;
1697 b7 = rol64(b7, 39) ^ b2;
1700 b1 = rol64(b1, 44) ^ b6;
1703 b7 = rol64(b7, 9) ^ b0;
1706 b5 = rol64(b5, 54) ^ b2;
1709 b3 = rol64(b3, 56) ^ b4;
1713 b1 = rol64(b1, 39) ^ b0;
1717 b3 = rol64(b3, 30) ^ b2;
1721 b5 = rol64(b5, 34) ^ b4;
1725 b7 = rol64(b7, 24) ^ b6;
1728 b1 = rol64(b1, 13) ^ b2;
1731 b7 = rol64(b7, 50) ^ b4;
1734 b5 = rol64(b5, 10) ^ b6;
1737 b3 = rol64(b3, 17) ^ b0;
1740 b1 = rol64(b1, 25) ^ b4;
1743 b3 = rol64(b3, 29) ^ b6;
1746 b5 = rol64(b5, 39) ^ b0;
1749 b7 = rol64(b7, 43) ^ b2;
1752 b1 = rol64(b1, 8) ^ b6;
1755 b7 = rol64(b7, 35) ^ b0;
1758 b5 = rol64(b5, 56) ^ b2;
1761 b3 = rol64(b3, 22) ^ b4;
1765 b1 = rol64(b1, 46) ^ b0;
1769 b3 = rol64(b3, 36) ^ b2;
1773 b5 = rol64(b5, 19) ^ b4;
1777 b7 = rol64(b7, 37) ^ b6;
1780 b1 = rol64(b1, 33) ^ b2;
1783 b7 = rol64(b7, 27) ^ b4;
1786 b5 = rol64(b5, 14) ^ b6;
1789 b3 = rol64(b3, 42) ^ b0;
1792 b1 = rol64(b1, 17) ^ b4;
1795 b3 = rol64(b3, 49) ^ b6;
1798 b5 = rol64(b5, 36) ^ b0;
1801 b7 = rol64(b7, 39) ^ b2;
1804 b1 = rol64(b1, 44) ^ b6;
1807 b7 = rol64(b7, 9) ^ b0;
1810 b5 = rol64(b5, 54) ^ b2;
1813 b3 = rol64(b3, 56) ^ b4;
1817 b1 = rol64(b1, 39) ^ b0;
1821 b3 = rol64(b3, 30) ^ b2;
1825 b5 = rol64(b5, 34) ^ b4;
1829 b7 = rol64(b7, 24) ^ b6;
1832 b1 = rol64(b1, 13) ^ b2;
1835 b7 = rol64(b7, 50) ^ b4;
1838 b5 = rol64(b5, 10) ^ b6;
1841 b3 = rol64(b3, 17) ^ b0;
1844 b1 = rol64(b1, 25) ^ b4;
1847 b3 = rol64(b3, 29) ^ b6;
1850 b5 = rol64(b5, 39) ^ b0;
1853 b7 = rol64(b7, 43) ^ b2;
1856 b1 = rol64(b1, 8) ^ b6;
1859 b7 = rol64(b7, 35) ^ b0;
1862 b5 = rol64(b5, 56) ^ b2;
1865 b3 = rol64(b3, 22) ^ b4;
1869 b1 = rol64(b1, 46) ^ b0;
1873 b3 = rol64(b3, 36) ^ b2;
1877 b5 = rol64(b5, 19) ^ b4;
1881 b7 = rol64(b7, 37) ^ b6;
1884 b1 = rol64(b1, 33) ^ b2;
1887 b7 = rol64(b7, 27) ^ b4;
1890 b5 = rol64(b5, 14) ^ b6;
1893 b3 = rol64(b3, 42) ^ b0;
1896 b1 = rol64(b1, 17) ^ b4;
1899 b3 = rol64(b3, 49) ^ b6;
1902 b5 = rol64(b5, 36) ^ b0;
1905 b7 = rol64(b7, 39) ^ b2;
1908 b1 = rol64(b1, 44) ^ b6;
1911 b7 = rol64(b7, 9) ^ b0;
1914 b5 = rol64(b5, 54) ^ b2;
1917 b3 = rol64(b3, 56) ^ b4;
1921 b1 = rol64(b1, 39) ^ b0;
1925 b3 = rol64(b3, 30) ^ b2;
1929 b5 = rol64(b5, 34) ^ b4;
1933 b7 = rol64(b7, 24) ^ b6;
1936 b1 = rol64(b1, 13) ^ b2;
1939 b7 = rol64(b7, 50) ^ b4;
1942 b5 = rol64(b5, 10) ^ b6;
1945 b3 = rol64(b3, 17) ^ b0;
1948 b1 = rol64(b1, 25) ^ b4;
1951 b3 = rol64(b3, 29) ^ b6;
1954 b5 = rol64(b5, 39) ^ b0;
1957 b7 = rol64(b7, 43) ^ b2;
1960 b1 = rol64(b1, 8) ^ b6;
1963 b7 = rol64(b7, 35) ^ b0;
1966 b5 = rol64(b5, 56) ^ b2;
1969 b3 = rol64(b3, 22) ^ b4;
1973 b1 = rol64(b1, 46) ^ b0;
1977 b3 = rol64(b3, 36) ^ b2;
1981 b5 = rol64(b5, 19) ^ b4;
1985 b7 = rol64(b7, 37) ^ b6;
1988 b1 = rol64(b1, 33) ^ b2;
1991 b7 = rol64(b7, 27) ^ b4;
1994 b5 = rol64(b5, 14) ^ b6;
1997 b3 = rol64(b3, 42) ^ b0;
2000 b1 = rol64(b1, 17) ^ b4;
2003 b3 = rol64(b3, 49) ^ b6;
2006 b5 = rol64(b5, 36) ^ b0;
2009 b7 = rol64(b7, 39) ^ b2;
2012 b1 = rol64(b1, 44) ^ b6;
2015 b7 = rol64(b7, 9) ^ b0;
2018 b5 = rol64(b5, 54) ^ b2;
2021 b3 = rol64(b3, 56) ^ b4;
2025 b1 = rol64(b1, 39) ^ b0;
2029 b3 = rol64(b3, 30) ^ b2;
2033 b5 = rol64(b5, 34) ^ b4;
2037 b7 = rol64(b7, 24) ^ b6;
2040 b1 = rol64(b1, 13) ^ b2;
2043 b7 = rol64(b7, 50) ^ b4;
2046 b5 = rol64(b5, 10) ^ b6;
2049 b3 = rol64(b3, 17) ^ b0;
2052 b1 = rol64(b1, 25) ^ b4;
2055 b3 = rol64(b3, 29) ^ b6;
2058 b5 = rol64(b5, 39) ^ b0;
2061 b7 = rol64(b7, 43) ^ b2;
2064 b1 = rol64(b1, 8) ^ b6;
2067 b7 = rol64(b7, 35) ^ b0;
2070 b5 = rol64(b5, 56) ^ b2;
2073 b3 = rol64(b3, 22) ^ b4;
2075 output[0] = b0 + k0;
2076 output[1] = b1 + k1;
2077 output[2] = b2 + k2;
2078 output[3] = b3 + k3;
2079 output[4] = b4 + k4;
2080 output[5] = b5 + k5 + t0;
2081 output[6] = b6 + k6 + t1;
2082 output[7] = b7 + k7 + 18;
2085 void threefish_decrypt_512(struct threefish_key *key_ctx, u64 *input,
2088 u64 b0 = input[0], b1 = input[1],
2089 b2 = input[2], b3 = input[3],
2090 b4 = input[4], b5 = input[5],
2091 b6 = input[6], b7 = input[7];
2092 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
2093 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
2094 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
2095 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
2096 k8 = key_ctx->key[8];
2097 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
2098 t2 = key_ctx->tweak[2];
2112 b3 = ror64(tmp, 22);
2116 b5 = ror64(tmp, 56);
2120 b7 = ror64(tmp, 35);
2128 b7 = ror64(tmp, 43);
2132 b5 = ror64(tmp, 39);
2136 b3 = ror64(tmp, 29);
2140 b1 = ror64(tmp, 25);
2144 b3 = ror64(tmp, 17);
2148 b5 = ror64(tmp, 10);
2152 b7 = ror64(tmp, 50);
2156 b1 = ror64(tmp, 13);
2160 b7 = ror64(tmp, 24);
2165 b5 = ror64(tmp, 34);
2170 b3 = ror64(tmp, 30);
2175 b1 = ror64(tmp, 39);
2180 b3 = ror64(tmp, 56);
2184 b5 = ror64(tmp, 54);
2192 b1 = ror64(tmp, 44);
2196 b7 = ror64(tmp, 39);
2200 b5 = ror64(tmp, 36);
2204 b3 = ror64(tmp, 49);
2208 b1 = ror64(tmp, 17);
2212 b3 = ror64(tmp, 42);
2216 b5 = ror64(tmp, 14);
2220 b7 = ror64(tmp, 27);
2224 b1 = ror64(tmp, 33);
2228 b7 = ror64(tmp, 37);
2233 b5 = ror64(tmp, 19);
2238 b3 = ror64(tmp, 36);
2243 b1 = ror64(tmp, 46);
2248 b3 = ror64(tmp, 22);
2252 b5 = ror64(tmp, 56);
2256 b7 = ror64(tmp, 35);
2264 b7 = ror64(tmp, 43);
2268 b5 = ror64(tmp, 39);
2272 b3 = ror64(tmp, 29);
2276 b1 = ror64(tmp, 25);
2280 b3 = ror64(tmp, 17);
2284 b5 = ror64(tmp, 10);
2288 b7 = ror64(tmp, 50);
2292 b1 = ror64(tmp, 13);
2296 b7 = ror64(tmp, 24);
2301 b5 = ror64(tmp, 34);
2306 b3 = ror64(tmp, 30);
2311 b1 = ror64(tmp, 39);
2316 b3 = ror64(tmp, 56);
2320 b5 = ror64(tmp, 54);
2328 b1 = ror64(tmp, 44);
2332 b7 = ror64(tmp, 39);
2336 b5 = ror64(tmp, 36);
2340 b3 = ror64(tmp, 49);
2344 b1 = ror64(tmp, 17);
2348 b3 = ror64(tmp, 42);
2352 b5 = ror64(tmp, 14);
2356 b7 = ror64(tmp, 27);
2360 b1 = ror64(tmp, 33);
2364 b7 = ror64(tmp, 37);
2369 b5 = ror64(tmp, 19);
2374 b3 = ror64(tmp, 36);
2379 b1 = ror64(tmp, 46);
2384 b3 = ror64(tmp, 22);
2388 b5 = ror64(tmp, 56);
2392 b7 = ror64(tmp, 35);
2400 b7 = ror64(tmp, 43);
2404 b5 = ror64(tmp, 39);
2408 b3 = ror64(tmp, 29);
2412 b1 = ror64(tmp, 25);
2416 b3 = ror64(tmp, 17);
2420 b5 = ror64(tmp, 10);
2424 b7 = ror64(tmp, 50);
2428 b1 = ror64(tmp, 13);
2432 b7 = ror64(tmp, 24);
2437 b5 = ror64(tmp, 34);
2442 b3 = ror64(tmp, 30);
2447 b1 = ror64(tmp, 39);
2452 b3 = ror64(tmp, 56);
2456 b5 = ror64(tmp, 54);
2464 b1 = ror64(tmp, 44);
2468 b7 = ror64(tmp, 39);
2472 b5 = ror64(tmp, 36);
2476 b3 = ror64(tmp, 49);
2480 b1 = ror64(tmp, 17);
2484 b3 = ror64(tmp, 42);
2488 b5 = ror64(tmp, 14);
2492 b7 = ror64(tmp, 27);
2496 b1 = ror64(tmp, 33);
2500 b7 = ror64(tmp, 37);
2505 b5 = ror64(tmp, 19);
2510 b3 = ror64(tmp, 36);
2515 b1 = ror64(tmp, 46);
2520 b3 = ror64(tmp, 22);
2524 b5 = ror64(tmp, 56);
2528 b7 = ror64(tmp, 35);
2536 b7 = ror64(tmp, 43);
2540 b5 = ror64(tmp, 39);
2544 b3 = ror64(tmp, 29);
2548 b1 = ror64(tmp, 25);
2552 b3 = ror64(tmp, 17);
2556 b5 = ror64(tmp, 10);
2560 b7 = ror64(tmp, 50);
2564 b1 = ror64(tmp, 13);
2568 b7 = ror64(tmp, 24);
2573 b5 = ror64(tmp, 34);
2578 b3 = ror64(tmp, 30);
2583 b1 = ror64(tmp, 39);
2588 b3 = ror64(tmp, 56);
2592 b5 = ror64(tmp, 54);
2600 b1 = ror64(tmp, 44);
2604 b7 = ror64(tmp, 39);
2608 b5 = ror64(tmp, 36);
2612 b3 = ror64(tmp, 49);
2616 b1 = ror64(tmp, 17);
2620 b3 = ror64(tmp, 42);
2624 b5 = ror64(tmp, 14);
2628 b7 = ror64(tmp, 27);
2632 b1 = ror64(tmp, 33);
2636 b7 = ror64(tmp, 37);
2641 b5 = ror64(tmp, 19);
2646 b3 = ror64(tmp, 36);
2651 b1 = ror64(tmp, 46);
2656 b3 = ror64(tmp, 22);
2660 b5 = ror64(tmp, 56);
2664 b7 = ror64(tmp, 35);
2672 b7 = ror64(tmp, 43);
2676 b5 = ror64(tmp, 39);
2680 b3 = ror64(tmp, 29);
2684 b1 = ror64(tmp, 25);
2688 b3 = ror64(tmp, 17);
2692 b5 = ror64(tmp, 10);
2696 b7 = ror64(tmp, 50);
2700 b1 = ror64(tmp, 13);
2704 b7 = ror64(tmp, 24);
2709 b5 = ror64(tmp, 34);
2714 b3 = ror64(tmp, 30);
2719 b1 = ror64(tmp, 39);
2724 b3 = ror64(tmp, 56);
2728 b5 = ror64(tmp, 54);
2736 b1 = ror64(tmp, 44);
2740 b7 = ror64(tmp, 39);
2744 b5 = ror64(tmp, 36);
2748 b3 = ror64(tmp, 49);
2752 b1 = ror64(tmp, 17);
2756 b3 = ror64(tmp, 42);
2760 b5 = ror64(tmp, 14);
2764 b7 = ror64(tmp, 27);
2768 b1 = ror64(tmp, 33);
2772 b7 = ror64(tmp, 37);
2777 b5 = ror64(tmp, 19);
2782 b3 = ror64(tmp, 36);
2787 b1 = ror64(tmp, 46);
2792 b3 = ror64(tmp, 22);
2796 b5 = ror64(tmp, 56);
2800 b7 = ror64(tmp, 35);
2808 b7 = ror64(tmp, 43);
2812 b5 = ror64(tmp, 39);
2816 b3 = ror64(tmp, 29);
2820 b1 = ror64(tmp, 25);
2824 b3 = ror64(tmp, 17);
2828 b5 = ror64(tmp, 10);
2832 b7 = ror64(tmp, 50);
2836 b1 = ror64(tmp, 13);
2840 b7 = ror64(tmp, 24);
2845 b5 = ror64(tmp, 34);
2850 b3 = ror64(tmp, 30);
2855 b1 = ror64(tmp, 39);
2860 b3 = ror64(tmp, 56);
2864 b5 = ror64(tmp, 54);
2872 b1 = ror64(tmp, 44);
2876 b7 = ror64(tmp, 39);
2880 b5 = ror64(tmp, 36);
2884 b3 = ror64(tmp, 49);
2888 b1 = ror64(tmp, 17);
2892 b3 = ror64(tmp, 42);
2896 b5 = ror64(tmp, 14);
2900 b7 = ror64(tmp, 27);
2904 b1 = ror64(tmp, 33);
2908 b7 = ror64(tmp, 37);
2913 b5 = ror64(tmp, 19);
2918 b3 = ror64(tmp, 36);
2923 b1 = ror64(tmp, 46);
2928 b3 = ror64(tmp, 22);
2932 b5 = ror64(tmp, 56);
2936 b7 = ror64(tmp, 35);
2944 b7 = ror64(tmp, 43);
2948 b5 = ror64(tmp, 39);
2952 b3 = ror64(tmp, 29);
2956 b1 = ror64(tmp, 25);
2960 b3 = ror64(tmp, 17);
2964 b5 = ror64(tmp, 10);
2968 b7 = ror64(tmp, 50);
2972 b1 = ror64(tmp, 13);
2976 b7 = ror64(tmp, 24);
2981 b5 = ror64(tmp, 34);
2986 b3 = ror64(tmp, 30);
2991 b1 = ror64(tmp, 39);
2996 b3 = ror64(tmp, 56);
3000 b5 = ror64(tmp, 54);
3008 b1 = ror64(tmp, 44);
3012 b7 = ror64(tmp, 39);
3016 b5 = ror64(tmp, 36);
3020 b3 = ror64(tmp, 49);
3024 b1 = ror64(tmp, 17);
3028 b3 = ror64(tmp, 42);
3032 b5 = ror64(tmp, 14);
3036 b7 = ror64(tmp, 27);
3040 b1 = ror64(tmp, 33);
3044 b7 = ror64(tmp, 37);
3049 b5 = ror64(tmp, 19);
3054 b3 = ror64(tmp, 36);
3059 b1 = ror64(tmp, 46);
3064 b3 = ror64(tmp, 22);
3068 b5 = ror64(tmp, 56);
3072 b7 = ror64(tmp, 35);
3080 b7 = ror64(tmp, 43);
3084 b5 = ror64(tmp, 39);
3088 b3 = ror64(tmp, 29);
3092 b1 = ror64(tmp, 25);
3096 b3 = ror64(tmp, 17);
3100 b5 = ror64(tmp, 10);
3104 b7 = ror64(tmp, 50);
3108 b1 = ror64(tmp, 13);
3112 b7 = ror64(tmp, 24);
3117 b5 = ror64(tmp, 34);
3122 b3 = ror64(tmp, 30);
3127 b1 = ror64(tmp, 39);
3132 b3 = ror64(tmp, 56);
3136 b5 = ror64(tmp, 54);
3144 b1 = ror64(tmp, 44);
3148 b7 = ror64(tmp, 39);
3152 b5 = ror64(tmp, 36);
3156 b3 = ror64(tmp, 49);
3160 b1 = ror64(tmp, 17);
3164 b3 = ror64(tmp, 42);
3168 b5 = ror64(tmp, 14);
3172 b7 = ror64(tmp, 27);
3176 b1 = ror64(tmp, 33);
3180 b7 = ror64(tmp, 37);
3185 b5 = ror64(tmp, 19);
3190 b3 = ror64(tmp, 36);
3195 b1 = ror64(tmp, 46);
3200 b3 = ror64(tmp, 22);
3204 b5 = ror64(tmp, 56);
3208 b7 = ror64(tmp, 35);
3216 b7 = ror64(tmp, 43);
3220 b5 = ror64(tmp, 39);
3224 b3 = ror64(tmp, 29);
3228 b1 = ror64(tmp, 25);
3232 b3 = ror64(tmp, 17);
3236 b5 = ror64(tmp, 10);
3240 b7 = ror64(tmp, 50);
3244 b1 = ror64(tmp, 13);
3248 b7 = ror64(tmp, 24);
3253 b5 = ror64(tmp, 34);
3258 b3 = ror64(tmp, 30);
3263 b1 = ror64(tmp, 39);
3268 b3 = ror64(tmp, 56);
3272 b5 = ror64(tmp, 54);
3280 b1 = ror64(tmp, 44);
3284 b7 = ror64(tmp, 39);
3288 b5 = ror64(tmp, 36);
3292 b3 = ror64(tmp, 49);
3296 b1 = ror64(tmp, 17);
3300 b3 = ror64(tmp, 42);
3304 b5 = ror64(tmp, 14);
3308 b7 = ror64(tmp, 27);
3312 b1 = ror64(tmp, 33);
3316 b7 = ror64(tmp, 37);
3321 b5 = ror64(tmp, 19);
3326 b3 = ror64(tmp, 36);
3331 b1 = ror64(tmp, 46);
3346 void threefish_encrypt_1024(struct threefish_key *key_ctx, u64 *input,
3349 u64 b0 = input[0], b1 = input[1],
3350 b2 = input[2], b3 = input[3],
3351 b4 = input[4], b5 = input[5],
3352 b6 = input[6], b7 = input[7],
3353 b8 = input[8], b9 = input[9],
3354 b10 = input[10], b11 = input[11],
3355 b12 = input[12], b13 = input[13],
3356 b14 = input[14], b15 = input[15];
3357 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
3358 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
3359 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
3360 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
3361 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
3362 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
3363 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
3364 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
3365 k16 = key_ctx->key[16];
3366 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
3367 t2 = key_ctx->tweak[2];
3371 b1 = rol64(b1, 24) ^ b0;
3375 b3 = rol64(b3, 13) ^ b2;
3379 b5 = rol64(b5, 8) ^ b4;
3383 b7 = rol64(b7, 47) ^ b6;
3387 b9 = rol64(b9, 8) ^ b8;
3391 b11 = rol64(b11, 17) ^ b10;
3395 b13 = rol64(b13, 22) ^ b12;
3398 b14 += b15 + k14 + t1;
3399 b15 = rol64(b15, 37) ^ b14;
3402 b9 = rol64(b9, 38) ^ b0;
3405 b13 = rol64(b13, 19) ^ b2;
3408 b11 = rol64(b11, 10) ^ b6;
3411 b15 = rol64(b15, 55) ^ b4;
3414 b7 = rol64(b7, 49) ^ b10;
3417 b3 = rol64(b3, 18) ^ b12;
3420 b5 = rol64(b5, 23) ^ b14;
3423 b1 = rol64(b1, 52) ^ b8;
3426 b7 = rol64(b7, 33) ^ b0;
3429 b5 = rol64(b5, 4) ^ b2;
3432 b3 = rol64(b3, 51) ^ b4;
3435 b1 = rol64(b1, 13) ^ b6;
3438 b15 = rol64(b15, 34) ^ b12;
3441 b13 = rol64(b13, 41) ^ b14;
3444 b11 = rol64(b11, 59) ^ b8;
3447 b9 = rol64(b9, 17) ^ b10;
3450 b15 = rol64(b15, 5) ^ b0;
3453 b11 = rol64(b11, 20) ^ b2;
3456 b13 = rol64(b13, 48) ^ b6;
3459 b9 = rol64(b9, 41) ^ b4;
3462 b1 = rol64(b1, 47) ^ b14;
3465 b5 = rol64(b5, 28) ^ b8;
3468 b3 = rol64(b3, 16) ^ b10;
3471 b7 = rol64(b7, 25) ^ b12;
3475 b1 = rol64(b1, 41) ^ b0;
3479 b3 = rol64(b3, 9) ^ b2;
3483 b5 = rol64(b5, 37) ^ b4;
3487 b7 = rol64(b7, 31) ^ b6;
3491 b9 = rol64(b9, 12) ^ b8;
3495 b11 = rol64(b11, 47) ^ b10;
3499 b13 = rol64(b13, 44) ^ b12;
3502 b14 += b15 + k15 + t2;
3503 b15 = rol64(b15, 30) ^ b14;
3506 b9 = rol64(b9, 16) ^ b0;
3509 b13 = rol64(b13, 34) ^ b2;
3512 b11 = rol64(b11, 56) ^ b6;
3515 b15 = rol64(b15, 51) ^ b4;
3518 b7 = rol64(b7, 4) ^ b10;
3521 b3 = rol64(b3, 53) ^ b12;
3524 b5 = rol64(b5, 42) ^ b14;
3527 b1 = rol64(b1, 41) ^ b8;
3530 b7 = rol64(b7, 31) ^ b0;
3533 b5 = rol64(b5, 44) ^ b2;
3536 b3 = rol64(b3, 47) ^ b4;
3539 b1 = rol64(b1, 46) ^ b6;
3542 b15 = rol64(b15, 19) ^ b12;
3545 b13 = rol64(b13, 42) ^ b14;
3548 b11 = rol64(b11, 44) ^ b8;
3551 b9 = rol64(b9, 25) ^ b10;
3554 b15 = rol64(b15, 9) ^ b0;
3557 b11 = rol64(b11, 48) ^ b2;
3560 b13 = rol64(b13, 35) ^ b6;
3563 b9 = rol64(b9, 52) ^ b4;
3566 b1 = rol64(b1, 23) ^ b14;
3569 b5 = rol64(b5, 31) ^ b8;
3572 b3 = rol64(b3, 37) ^ b10;
3575 b7 = rol64(b7, 20) ^ b12;
3579 b1 = rol64(b1, 24) ^ b0;
3583 b3 = rol64(b3, 13) ^ b2;
3587 b5 = rol64(b5, 8) ^ b4;
3591 b7 = rol64(b7, 47) ^ b6;
3595 b9 = rol64(b9, 8) ^ b8;
3599 b11 = rol64(b11, 17) ^ b10;
3603 b13 = rol64(b13, 22) ^ b12;
3606 b14 += b15 + k16 + t0;
3607 b15 = rol64(b15, 37) ^ b14;
3610 b9 = rol64(b9, 38) ^ b0;
3613 b13 = rol64(b13, 19) ^ b2;
3616 b11 = rol64(b11, 10) ^ b6;
3619 b15 = rol64(b15, 55) ^ b4;
3622 b7 = rol64(b7, 49) ^ b10;
3625 b3 = rol64(b3, 18) ^ b12;
3628 b5 = rol64(b5, 23) ^ b14;
3631 b1 = rol64(b1, 52) ^ b8;
3634 b7 = rol64(b7, 33) ^ b0;
3637 b5 = rol64(b5, 4) ^ b2;
3640 b3 = rol64(b3, 51) ^ b4;
3643 b1 = rol64(b1, 13) ^ b6;
3646 b15 = rol64(b15, 34) ^ b12;
3649 b13 = rol64(b13, 41) ^ b14;
3652 b11 = rol64(b11, 59) ^ b8;
3655 b9 = rol64(b9, 17) ^ b10;
3658 b15 = rol64(b15, 5) ^ b0;
3661 b11 = rol64(b11, 20) ^ b2;
3664 b13 = rol64(b13, 48) ^ b6;
3667 b9 = rol64(b9, 41) ^ b4;
3670 b1 = rol64(b1, 47) ^ b14;
3673 b5 = rol64(b5, 28) ^ b8;
3676 b3 = rol64(b3, 16) ^ b10;
3679 b7 = rol64(b7, 25) ^ b12;
3683 b1 = rol64(b1, 41) ^ b0;
3687 b3 = rol64(b3, 9) ^ b2;
3691 b5 = rol64(b5, 37) ^ b4;
3695 b7 = rol64(b7, 31) ^ b6;
3699 b9 = rol64(b9, 12) ^ b8;
3703 b11 = rol64(b11, 47) ^ b10;
3707 b13 = rol64(b13, 44) ^ b12;
3710 b14 += b15 + k0 + t1;
3711 b15 = rol64(b15, 30) ^ b14;
3714 b9 = rol64(b9, 16) ^ b0;
3717 b13 = rol64(b13, 34) ^ b2;
3720 b11 = rol64(b11, 56) ^ b6;
3723 b15 = rol64(b15, 51) ^ b4;
3726 b7 = rol64(b7, 4) ^ b10;
3729 b3 = rol64(b3, 53) ^ b12;
3732 b5 = rol64(b5, 42) ^ b14;
3735 b1 = rol64(b1, 41) ^ b8;
3738 b7 = rol64(b7, 31) ^ b0;
3741 b5 = rol64(b5, 44) ^ b2;
3744 b3 = rol64(b3, 47) ^ b4;
3747 b1 = rol64(b1, 46) ^ b6;
3750 b15 = rol64(b15, 19) ^ b12;
3753 b13 = rol64(b13, 42) ^ b14;
3756 b11 = rol64(b11, 44) ^ b8;
3759 b9 = rol64(b9, 25) ^ b10;
3762 b15 = rol64(b15, 9) ^ b0;
3765 b11 = rol64(b11, 48) ^ b2;
3768 b13 = rol64(b13, 35) ^ b6;
3771 b9 = rol64(b9, 52) ^ b4;
3774 b1 = rol64(b1, 23) ^ b14;
3777 b5 = rol64(b5, 31) ^ b8;
3780 b3 = rol64(b3, 37) ^ b10;
3783 b7 = rol64(b7, 20) ^ b12;
3787 b1 = rol64(b1, 24) ^ b0;
3791 b3 = rol64(b3, 13) ^ b2;
3795 b5 = rol64(b5, 8) ^ b4;
3799 b7 = rol64(b7, 47) ^ b6;
3803 b9 = rol64(b9, 8) ^ b8;
3807 b11 = rol64(b11, 17) ^ b10;
3811 b13 = rol64(b13, 22) ^ b12;
3814 b14 += b15 + k1 + t2;
3815 b15 = rol64(b15, 37) ^ b14;
3818 b9 = rol64(b9, 38) ^ b0;
3821 b13 = rol64(b13, 19) ^ b2;
3824 b11 = rol64(b11, 10) ^ b6;
3827 b15 = rol64(b15, 55) ^ b4;
3830 b7 = rol64(b7, 49) ^ b10;
3833 b3 = rol64(b3, 18) ^ b12;
3836 b5 = rol64(b5, 23) ^ b14;
3839 b1 = rol64(b1, 52) ^ b8;
3842 b7 = rol64(b7, 33) ^ b0;
3845 b5 = rol64(b5, 4) ^ b2;
3848 b3 = rol64(b3, 51) ^ b4;
3851 b1 = rol64(b1, 13) ^ b6;
3854 b15 = rol64(b15, 34) ^ b12;
3857 b13 = rol64(b13, 41) ^ b14;
3860 b11 = rol64(b11, 59) ^ b8;
3863 b9 = rol64(b9, 17) ^ b10;
3866 b15 = rol64(b15, 5) ^ b0;
3869 b11 = rol64(b11, 20) ^ b2;
3872 b13 = rol64(b13, 48) ^ b6;
3875 b9 = rol64(b9, 41) ^ b4;
3878 b1 = rol64(b1, 47) ^ b14;
3881 b5 = rol64(b5, 28) ^ b8;
3884 b3 = rol64(b3, 16) ^ b10;
3887 b7 = rol64(b7, 25) ^ b12;
3891 b1 = rol64(b1, 41) ^ b0;
3895 b3 = rol64(b3, 9) ^ b2;
3899 b5 = rol64(b5, 37) ^ b4;
3903 b7 = rol64(b7, 31) ^ b6;
3907 b9 = rol64(b9, 12) ^ b8;
3911 b11 = rol64(b11, 47) ^ b10;
3915 b13 = rol64(b13, 44) ^ b12;
3918 b14 += b15 + k2 + t0;
3919 b15 = rol64(b15, 30) ^ b14;
3922 b9 = rol64(b9, 16) ^ b0;
3925 b13 = rol64(b13, 34) ^ b2;
3928 b11 = rol64(b11, 56) ^ b6;
3931 b15 = rol64(b15, 51) ^ b4;
3934 b7 = rol64(b7, 4) ^ b10;
3937 b3 = rol64(b3, 53) ^ b12;
3940 b5 = rol64(b5, 42) ^ b14;
3943 b1 = rol64(b1, 41) ^ b8;
3946 b7 = rol64(b7, 31) ^ b0;
3949 b5 = rol64(b5, 44) ^ b2;
3952 b3 = rol64(b3, 47) ^ b4;
3955 b1 = rol64(b1, 46) ^ b6;
3958 b15 = rol64(b15, 19) ^ b12;
3961 b13 = rol64(b13, 42) ^ b14;
3964 b11 = rol64(b11, 44) ^ b8;
3967 b9 = rol64(b9, 25) ^ b10;
3970 b15 = rol64(b15, 9) ^ b0;
3973 b11 = rol64(b11, 48) ^ b2;
3976 b13 = rol64(b13, 35) ^ b6;
3979 b9 = rol64(b9, 52) ^ b4;
3982 b1 = rol64(b1, 23) ^ b14;
3985 b5 = rol64(b5, 31) ^ b8;
3988 b3 = rol64(b3, 37) ^ b10;
3991 b7 = rol64(b7, 20) ^ b12;
3995 b1 = rol64(b1, 24) ^ b0;
3999 b3 = rol64(b3, 13) ^ b2;
4003 b5 = rol64(b5, 8) ^ b4;
4007 b7 = rol64(b7, 47) ^ b6;
4011 b9 = rol64(b9, 8) ^ b8;
4015 b11 = rol64(b11, 17) ^ b10;
4019 b13 = rol64(b13, 22) ^ b12;
4022 b14 += b15 + k3 + t1;
4023 b15 = rol64(b15, 37) ^ b14;
4026 b9 = rol64(b9, 38) ^ b0;
4029 b13 = rol64(b13, 19) ^ b2;
4032 b11 = rol64(b11, 10) ^ b6;
4035 b15 = rol64(b15, 55) ^ b4;
4038 b7 = rol64(b7, 49) ^ b10;
4041 b3 = rol64(b3, 18) ^ b12;
4044 b5 = rol64(b5, 23) ^ b14;
4047 b1 = rol64(b1, 52) ^ b8;
4050 b7 = rol64(b7, 33) ^ b0;
4053 b5 = rol64(b5, 4) ^ b2;
4056 b3 = rol64(b3, 51) ^ b4;
4059 b1 = rol64(b1, 13) ^ b6;
4062 b15 = rol64(b15, 34) ^ b12;
4065 b13 = rol64(b13, 41) ^ b14;
4068 b11 = rol64(b11, 59) ^ b8;
4071 b9 = rol64(b9, 17) ^ b10;
4074 b15 = rol64(b15, 5) ^ b0;
4077 b11 = rol64(b11, 20) ^ b2;
4080 b13 = rol64(b13, 48) ^ b6;
4083 b9 = rol64(b9, 41) ^ b4;
4086 b1 = rol64(b1, 47) ^ b14;
4089 b5 = rol64(b5, 28) ^ b8;
4092 b3 = rol64(b3, 16) ^ b10;
4095 b7 = rol64(b7, 25) ^ b12;
4099 b1 = rol64(b1, 41) ^ b0;
4103 b3 = rol64(b3, 9) ^ b2;
4107 b5 = rol64(b5, 37) ^ b4;
4111 b7 = rol64(b7, 31) ^ b6;
4115 b9 = rol64(b9, 12) ^ b8;
4119 b11 = rol64(b11, 47) ^ b10;
4123 b13 = rol64(b13, 44) ^ b12;
4126 b14 += b15 + k4 + t2;
4127 b15 = rol64(b15, 30) ^ b14;
4130 b9 = rol64(b9, 16) ^ b0;
4133 b13 = rol64(b13, 34) ^ b2;
4136 b11 = rol64(b11, 56) ^ b6;
4139 b15 = rol64(b15, 51) ^ b4;
4142 b7 = rol64(b7, 4) ^ b10;
4145 b3 = rol64(b3, 53) ^ b12;
4148 b5 = rol64(b5, 42) ^ b14;
4151 b1 = rol64(b1, 41) ^ b8;
4154 b7 = rol64(b7, 31) ^ b0;
4157 b5 = rol64(b5, 44) ^ b2;
4160 b3 = rol64(b3, 47) ^ b4;
4163 b1 = rol64(b1, 46) ^ b6;
4166 b15 = rol64(b15, 19) ^ b12;
4169 b13 = rol64(b13, 42) ^ b14;
4172 b11 = rol64(b11, 44) ^ b8;
4175 b9 = rol64(b9, 25) ^ b10;
4178 b15 = rol64(b15, 9) ^ b0;
4181 b11 = rol64(b11, 48) ^ b2;
4184 b13 = rol64(b13, 35) ^ b6;
4187 b9 = rol64(b9, 52) ^ b4;
4190 b1 = rol64(b1, 23) ^ b14;
4193 b5 = rol64(b5, 31) ^ b8;
4196 b3 = rol64(b3, 37) ^ b10;
4199 b7 = rol64(b7, 20) ^ b12;
4203 b1 = rol64(b1, 24) ^ b0;
4207 b3 = rol64(b3, 13) ^ b2;
4211 b5 = rol64(b5, 8) ^ b4;
4215 b7 = rol64(b7, 47) ^ b6;
4219 b9 = rol64(b9, 8) ^ b8;
4223 b11 = rol64(b11, 17) ^ b10;
4227 b13 = rol64(b13, 22) ^ b12;
4230 b14 += b15 + k5 + t0;
4231 b15 = rol64(b15, 37) ^ b14;
4234 b9 = rol64(b9, 38) ^ b0;
4237 b13 = rol64(b13, 19) ^ b2;
4240 b11 = rol64(b11, 10) ^ b6;
4243 b15 = rol64(b15, 55) ^ b4;
4246 b7 = rol64(b7, 49) ^ b10;
4249 b3 = rol64(b3, 18) ^ b12;
4252 b5 = rol64(b5, 23) ^ b14;
4255 b1 = rol64(b1, 52) ^ b8;
4258 b7 = rol64(b7, 33) ^ b0;
4261 b5 = rol64(b5, 4) ^ b2;
4264 b3 = rol64(b3, 51) ^ b4;
4267 b1 = rol64(b1, 13) ^ b6;
4270 b15 = rol64(b15, 34) ^ b12;
4273 b13 = rol64(b13, 41) ^ b14;
4276 b11 = rol64(b11, 59) ^ b8;
4279 b9 = rol64(b9, 17) ^ b10;
4282 b15 = rol64(b15, 5) ^ b0;
4285 b11 = rol64(b11, 20) ^ b2;
4288 b13 = rol64(b13, 48) ^ b6;
4291 b9 = rol64(b9, 41) ^ b4;
4294 b1 = rol64(b1, 47) ^ b14;
4297 b5 = rol64(b5, 28) ^ b8;
4300 b3 = rol64(b3, 16) ^ b10;
4303 b7 = rol64(b7, 25) ^ b12;
4307 b1 = rol64(b1, 41) ^ b0;
4311 b3 = rol64(b3, 9) ^ b2;
4315 b5 = rol64(b5, 37) ^ b4;
4319 b7 = rol64(b7, 31) ^ b6;
4323 b9 = rol64(b9, 12) ^ b8;
4327 b11 = rol64(b11, 47) ^ b10;
4331 b13 = rol64(b13, 44) ^ b12;
4334 b14 += b15 + k6 + t1;
4335 b15 = rol64(b15, 30) ^ b14;
4338 b9 = rol64(b9, 16) ^ b0;
4341 b13 = rol64(b13, 34) ^ b2;
4344 b11 = rol64(b11, 56) ^ b6;
4347 b15 = rol64(b15, 51) ^ b4;
4350 b7 = rol64(b7, 4) ^ b10;
4353 b3 = rol64(b3, 53) ^ b12;
4356 b5 = rol64(b5, 42) ^ b14;
4359 b1 = rol64(b1, 41) ^ b8;
4362 b7 = rol64(b7, 31) ^ b0;
4365 b5 = rol64(b5, 44) ^ b2;
4368 b3 = rol64(b3, 47) ^ b4;
4371 b1 = rol64(b1, 46) ^ b6;
4374 b15 = rol64(b15, 19) ^ b12;
4377 b13 = rol64(b13, 42) ^ b14;
4380 b11 = rol64(b11, 44) ^ b8;
4383 b9 = rol64(b9, 25) ^ b10;
4386 b15 = rol64(b15, 9) ^ b0;
4389 b11 = rol64(b11, 48) ^ b2;
4392 b13 = rol64(b13, 35) ^ b6;
4395 b9 = rol64(b9, 52) ^ b4;
4398 b1 = rol64(b1, 23) ^ b14;
4401 b5 = rol64(b5, 31) ^ b8;
4404 b3 = rol64(b3, 37) ^ b10;
4407 b7 = rol64(b7, 20) ^ b12;
4411 b1 = rol64(b1, 24) ^ b0;
4415 b3 = rol64(b3, 13) ^ b2;
4419 b5 = rol64(b5, 8) ^ b4;
4423 b7 = rol64(b7, 47) ^ b6;
4427 b9 = rol64(b9, 8) ^ b8;
4431 b11 = rol64(b11, 17) ^ b10;
4435 b13 = rol64(b13, 22) ^ b12;
4438 b14 += b15 + k7 + t2;
4439 b15 = rol64(b15, 37) ^ b14;
4442 b9 = rol64(b9, 38) ^ b0;
4445 b13 = rol64(b13, 19) ^ b2;
4448 b11 = rol64(b11, 10) ^ b6;
4451 b15 = rol64(b15, 55) ^ b4;
4454 b7 = rol64(b7, 49) ^ b10;
4457 b3 = rol64(b3, 18) ^ b12;
4460 b5 = rol64(b5, 23) ^ b14;
4463 b1 = rol64(b1, 52) ^ b8;
4466 b7 = rol64(b7, 33) ^ b0;
4469 b5 = rol64(b5, 4) ^ b2;
4472 b3 = rol64(b3, 51) ^ b4;
4475 b1 = rol64(b1, 13) ^ b6;
4478 b15 = rol64(b15, 34) ^ b12;
4481 b13 = rol64(b13, 41) ^ b14;
4484 b11 = rol64(b11, 59) ^ b8;
4487 b9 = rol64(b9, 17) ^ b10;
4490 b15 = rol64(b15, 5) ^ b0;
4493 b11 = rol64(b11, 20) ^ b2;
4496 b13 = rol64(b13, 48) ^ b6;
4499 b9 = rol64(b9, 41) ^ b4;
4502 b1 = rol64(b1, 47) ^ b14;
4505 b5 = rol64(b5, 28) ^ b8;
4508 b3 = rol64(b3, 16) ^ b10;
4511 b7 = rol64(b7, 25) ^ b12;
4515 b1 = rol64(b1, 41) ^ b0;
4519 b3 = rol64(b3, 9) ^ b2;
4523 b5 = rol64(b5, 37) ^ b4;
4527 b7 = rol64(b7, 31) ^ b6;
4531 b9 = rol64(b9, 12) ^ b8;
4535 b11 = rol64(b11, 47) ^ b10;
4539 b13 = rol64(b13, 44) ^ b12;
4542 b14 += b15 + k8 + t0;
4543 b15 = rol64(b15, 30) ^ b14;
4546 b9 = rol64(b9, 16) ^ b0;
4549 b13 = rol64(b13, 34) ^ b2;
4552 b11 = rol64(b11, 56) ^ b6;
4555 b15 = rol64(b15, 51) ^ b4;
4558 b7 = rol64(b7, 4) ^ b10;
4561 b3 = rol64(b3, 53) ^ b12;
4564 b5 = rol64(b5, 42) ^ b14;
4567 b1 = rol64(b1, 41) ^ b8;
4570 b7 = rol64(b7, 31) ^ b0;
4573 b5 = rol64(b5, 44) ^ b2;
4576 b3 = rol64(b3, 47) ^ b4;
4579 b1 = rol64(b1, 46) ^ b6;
4582 b15 = rol64(b15, 19) ^ b12;
4585 b13 = rol64(b13, 42) ^ b14;
4588 b11 = rol64(b11, 44) ^ b8;
4591 b9 = rol64(b9, 25) ^ b10;
4594 b15 = rol64(b15, 9) ^ b0;
4597 b11 = rol64(b11, 48) ^ b2;
4600 b13 = rol64(b13, 35) ^ b6;
4603 b9 = rol64(b9, 52) ^ b4;
4606 b1 = rol64(b1, 23) ^ b14;
4609 b5 = rol64(b5, 31) ^ b8;
4612 b3 = rol64(b3, 37) ^ b10;
4615 b7 = rol64(b7, 20) ^ b12;
4619 b1 = rol64(b1, 24) ^ b0;
4623 b3 = rol64(b3, 13) ^ b2;
4627 b5 = rol64(b5, 8) ^ b4;
4631 b7 = rol64(b7, 47) ^ b6;
4635 b9 = rol64(b9, 8) ^ b8;
4639 b11 = rol64(b11, 17) ^ b10;
4643 b13 = rol64(b13, 22) ^ b12;
4646 b14 += b15 + k9 + t1;
4647 b15 = rol64(b15, 37) ^ b14;
4650 b9 = rol64(b9, 38) ^ b0;
4653 b13 = rol64(b13, 19) ^ b2;
4656 b11 = rol64(b11, 10) ^ b6;
4659 b15 = rol64(b15, 55) ^ b4;
4662 b7 = rol64(b7, 49) ^ b10;
4665 b3 = rol64(b3, 18) ^ b12;
4668 b5 = rol64(b5, 23) ^ b14;
4671 b1 = rol64(b1, 52) ^ b8;
4674 b7 = rol64(b7, 33) ^ b0;
4677 b5 = rol64(b5, 4) ^ b2;
4680 b3 = rol64(b3, 51) ^ b4;
4683 b1 = rol64(b1, 13) ^ b6;
4686 b15 = rol64(b15, 34) ^ b12;
4689 b13 = rol64(b13, 41) ^ b14;
4692 b11 = rol64(b11, 59) ^ b8;
4695 b9 = rol64(b9, 17) ^ b10;
4698 b15 = rol64(b15, 5) ^ b0;
4701 b11 = rol64(b11, 20) ^ b2;
4704 b13 = rol64(b13, 48) ^ b6;
4707 b9 = rol64(b9, 41) ^ b4;
4710 b1 = rol64(b1, 47) ^ b14;
4713 b5 = rol64(b5, 28) ^ b8;
4716 b3 = rol64(b3, 16) ^ b10;
4719 b7 = rol64(b7, 25) ^ b12;
4723 b1 = rol64(b1, 41) ^ b0;
4727 b3 = rol64(b3, 9) ^ b2;
4731 b5 = rol64(b5, 37) ^ b4;
4735 b7 = rol64(b7, 31) ^ b6;
4739 b9 = rol64(b9, 12) ^ b8;
4743 b11 = rol64(b11, 47) ^ b10;
4747 b13 = rol64(b13, 44) ^ b12;
4750 b14 += b15 + k10 + t2;
4751 b15 = rol64(b15, 30) ^ b14;
4754 b9 = rol64(b9, 16) ^ b0;
4757 b13 = rol64(b13, 34) ^ b2;
4760 b11 = rol64(b11, 56) ^ b6;
4763 b15 = rol64(b15, 51) ^ b4;
4766 b7 = rol64(b7, 4) ^ b10;
4769 b3 = rol64(b3, 53) ^ b12;
4772 b5 = rol64(b5, 42) ^ b14;
4775 b1 = rol64(b1, 41) ^ b8;
4778 b7 = rol64(b7, 31) ^ b0;
4781 b5 = rol64(b5, 44) ^ b2;
4784 b3 = rol64(b3, 47) ^ b4;
4787 b1 = rol64(b1, 46) ^ b6;
4790 b15 = rol64(b15, 19) ^ b12;
4793 b13 = rol64(b13, 42) ^ b14;
4796 b11 = rol64(b11, 44) ^ b8;
4799 b9 = rol64(b9, 25) ^ b10;
4802 b15 = rol64(b15, 9) ^ b0;
4805 b11 = rol64(b11, 48) ^ b2;
4808 b13 = rol64(b13, 35) ^ b6;
4811 b9 = rol64(b9, 52) ^ b4;
4814 b1 = rol64(b1, 23) ^ b14;
4817 b5 = rol64(b5, 31) ^ b8;
4820 b3 = rol64(b3, 37) ^ b10;
4823 b7 = rol64(b7, 20) ^ b12;
4827 b1 = rol64(b1, 24) ^ b0;
4831 b3 = rol64(b3, 13) ^ b2;
4835 b5 = rol64(b5, 8) ^ b4;
4839 b7 = rol64(b7, 47) ^ b6;
4843 b9 = rol64(b9, 8) ^ b8;
4847 b11 = rol64(b11, 17) ^ b10;
4851 b13 = rol64(b13, 22) ^ b12;
4854 b14 += b15 + k11 + t0;
4855 b15 = rol64(b15, 37) ^ b14;
4858 b9 = rol64(b9, 38) ^ b0;
4861 b13 = rol64(b13, 19) ^ b2;
4864 b11 = rol64(b11, 10) ^ b6;
4867 b15 = rol64(b15, 55) ^ b4;
4870 b7 = rol64(b7, 49) ^ b10;
4873 b3 = rol64(b3, 18) ^ b12;
4876 b5 = rol64(b5, 23) ^ b14;
4879 b1 = rol64(b1, 52) ^ b8;
4882 b7 = rol64(b7, 33) ^ b0;
4885 b5 = rol64(b5, 4) ^ b2;
4888 b3 = rol64(b3, 51) ^ b4;
4891 b1 = rol64(b1, 13) ^ b6;
4894 b15 = rol64(b15, 34) ^ b12;
4897 b13 = rol64(b13, 41) ^ b14;
4900 b11 = rol64(b11, 59) ^ b8;
4903 b9 = rol64(b9, 17) ^ b10;
4906 b15 = rol64(b15, 5) ^ b0;
4909 b11 = rol64(b11, 20) ^ b2;
4912 b13 = rol64(b13, 48) ^ b6;
4915 b9 = rol64(b9, 41) ^ b4;
4918 b1 = rol64(b1, 47) ^ b14;
4921 b5 = rol64(b5, 28) ^ b8;
4924 b3 = rol64(b3, 16) ^ b10;
4927 b7 = rol64(b7, 25) ^ b12;
4931 b1 = rol64(b1, 41) ^ b0;
4935 b3 = rol64(b3, 9) ^ b2;
4939 b5 = rol64(b5, 37) ^ b4;
4943 b7 = rol64(b7, 31) ^ b6;
4947 b9 = rol64(b9, 12) ^ b8;
4951 b11 = rol64(b11, 47) ^ b10;
4955 b13 = rol64(b13, 44) ^ b12;
4958 b14 += b15 + k12 + t1;
4959 b15 = rol64(b15, 30) ^ b14;
4962 b9 = rol64(b9, 16) ^ b0;
4965 b13 = rol64(b13, 34) ^ b2;
4968 b11 = rol64(b11, 56) ^ b6;
4971 b15 = rol64(b15, 51) ^ b4;
4974 b7 = rol64(b7, 4) ^ b10;
4977 b3 = rol64(b3, 53) ^ b12;
4980 b5 = rol64(b5, 42) ^ b14;
4983 b1 = rol64(b1, 41) ^ b8;
4986 b7 = rol64(b7, 31) ^ b0;
4989 b5 = rol64(b5, 44) ^ b2;
4992 b3 = rol64(b3, 47) ^ b4;
4995 b1 = rol64(b1, 46) ^ b6;
4998 b15 = rol64(b15, 19) ^ b12;
5001 b13 = rol64(b13, 42) ^ b14;
5004 b11 = rol64(b11, 44) ^ b8;
5007 b9 = rol64(b9, 25) ^ b10;
5010 b15 = rol64(b15, 9) ^ b0;
5013 b11 = rol64(b11, 48) ^ b2;
5016 b13 = rol64(b13, 35) ^ b6;
5019 b9 = rol64(b9, 52) ^ b4;
5022 b1 = rol64(b1, 23) ^ b14;
5025 b5 = rol64(b5, 31) ^ b8;
5028 b3 = rol64(b3, 37) ^ b10;
5031 b7 = rol64(b7, 20) ^ b12;
5035 b1 = rol64(b1, 24) ^ b0;
5039 b3 = rol64(b3, 13) ^ b2;
5043 b5 = rol64(b5, 8) ^ b4;
5047 b7 = rol64(b7, 47) ^ b6;
5051 b9 = rol64(b9, 8) ^ b8;
5055 b11 = rol64(b11, 17) ^ b10;
5059 b13 = rol64(b13, 22) ^ b12;
5062 b14 += b15 + k13 + t2;
5063 b15 = rol64(b15, 37) ^ b14;
5066 b9 = rol64(b9, 38) ^ b0;
5069 b13 = rol64(b13, 19) ^ b2;
5072 b11 = rol64(b11, 10) ^ b6;
5075 b15 = rol64(b15, 55) ^ b4;
5078 b7 = rol64(b7, 49) ^ b10;
5081 b3 = rol64(b3, 18) ^ b12;
5084 b5 = rol64(b5, 23) ^ b14;
5087 b1 = rol64(b1, 52) ^ b8;
5090 b7 = rol64(b7, 33) ^ b0;
5093 b5 = rol64(b5, 4) ^ b2;
5096 b3 = rol64(b3, 51) ^ b4;
5099 b1 = rol64(b1, 13) ^ b6;
5102 b15 = rol64(b15, 34) ^ b12;
5105 b13 = rol64(b13, 41) ^ b14;
5108 b11 = rol64(b11, 59) ^ b8;
5111 b9 = rol64(b9, 17) ^ b10;
5114 b15 = rol64(b15, 5) ^ b0;
5117 b11 = rol64(b11, 20) ^ b2;
5120 b13 = rol64(b13, 48) ^ b6;
5123 b9 = rol64(b9, 41) ^ b4;
5126 b1 = rol64(b1, 47) ^ b14;
5129 b5 = rol64(b5, 28) ^ b8;
5132 b3 = rol64(b3, 16) ^ b10;
5135 b7 = rol64(b7, 25) ^ b12;
5139 b1 = rol64(b1, 41) ^ b0;
5143 b3 = rol64(b3, 9) ^ b2;
5147 b5 = rol64(b5, 37) ^ b4;
5151 b7 = rol64(b7, 31) ^ b6;
5155 b9 = rol64(b9, 12) ^ b8;
5159 b11 = rol64(b11, 47) ^ b10;
5163 b13 = rol64(b13, 44) ^ b12;
5166 b14 += b15 + k14 + t0;
5167 b15 = rol64(b15, 30) ^ b14;
5170 b9 = rol64(b9, 16) ^ b0;
5173 b13 = rol64(b13, 34) ^ b2;
5176 b11 = rol64(b11, 56) ^ b6;
5179 b15 = rol64(b15, 51) ^ b4;
5182 b7 = rol64(b7, 4) ^ b10;
5185 b3 = rol64(b3, 53) ^ b12;
5188 b5 = rol64(b5, 42) ^ b14;
5191 b1 = rol64(b1, 41) ^ b8;
5194 b7 = rol64(b7, 31) ^ b0;
5197 b5 = rol64(b5, 44) ^ b2;
5200 b3 = rol64(b3, 47) ^ b4;
5203 b1 = rol64(b1, 46) ^ b6;
5206 b15 = rol64(b15, 19) ^ b12;
5209 b13 = rol64(b13, 42) ^ b14;
5212 b11 = rol64(b11, 44) ^ b8;
5215 b9 = rol64(b9, 25) ^ b10;
5218 b15 = rol64(b15, 9) ^ b0;
5221 b11 = rol64(b11, 48) ^ b2;
5224 b13 = rol64(b13, 35) ^ b6;
5227 b9 = rol64(b9, 52) ^ b4;
5230 b1 = rol64(b1, 23) ^ b14;
5233 b5 = rol64(b5, 31) ^ b8;
5236 b3 = rol64(b3, 37) ^ b10;
5239 b7 = rol64(b7, 20) ^ b12;
5243 b1 = rol64(b1, 24) ^ b0;
5247 b3 = rol64(b3, 13) ^ b2;
5251 b5 = rol64(b5, 8) ^ b4;
5255 b7 = rol64(b7, 47) ^ b6;
5259 b9 = rol64(b9, 8) ^ b8;
5263 b11 = rol64(b11, 17) ^ b10;
5267 b13 = rol64(b13, 22) ^ b12;
5270 b14 += b15 + k15 + t1;
5271 b15 = rol64(b15, 37) ^ b14;
5274 b9 = rol64(b9, 38) ^ b0;
5277 b13 = rol64(b13, 19) ^ b2;
5280 b11 = rol64(b11, 10) ^ b6;
5283 b15 = rol64(b15, 55) ^ b4;
5286 b7 = rol64(b7, 49) ^ b10;
5289 b3 = rol64(b3, 18) ^ b12;
5292 b5 = rol64(b5, 23) ^ b14;
5295 b1 = rol64(b1, 52) ^ b8;
5298 b7 = rol64(b7, 33) ^ b0;
5301 b5 = rol64(b5, 4) ^ b2;
5304 b3 = rol64(b3, 51) ^ b4;
5307 b1 = rol64(b1, 13) ^ b6;
5310 b15 = rol64(b15, 34) ^ b12;
5313 b13 = rol64(b13, 41) ^ b14;
5316 b11 = rol64(b11, 59) ^ b8;
5319 b9 = rol64(b9, 17) ^ b10;
5322 b15 = rol64(b15, 5) ^ b0;
5325 b11 = rol64(b11, 20) ^ b2;
5328 b13 = rol64(b13, 48) ^ b6;
5331 b9 = rol64(b9, 41) ^ b4;
5334 b1 = rol64(b1, 47) ^ b14;
5337 b5 = rol64(b5, 28) ^ b8;
5340 b3 = rol64(b3, 16) ^ b10;
5343 b7 = rol64(b7, 25) ^ b12;
5347 b1 = rol64(b1, 41) ^ b0;
5351 b3 = rol64(b3, 9) ^ b2;
5355 b5 = rol64(b5, 37) ^ b4;
5359 b7 = rol64(b7, 31) ^ b6;
5363 b9 = rol64(b9, 12) ^ b8;
5367 b11 = rol64(b11, 47) ^ b10;
5371 b13 = rol64(b13, 44) ^ b12;
5374 b14 += b15 + k16 + t2;
5375 b15 = rol64(b15, 30) ^ b14;
5378 b9 = rol64(b9, 16) ^ b0;
5381 b13 = rol64(b13, 34) ^ b2;
5384 b11 = rol64(b11, 56) ^ b6;
5387 b15 = rol64(b15, 51) ^ b4;
5390 b7 = rol64(b7, 4) ^ b10;
5393 b3 = rol64(b3, 53) ^ b12;
5396 b5 = rol64(b5, 42) ^ b14;
5399 b1 = rol64(b1, 41) ^ b8;
5402 b7 = rol64(b7, 31) ^ b0;
5405 b5 = rol64(b5, 44) ^ b2;
5408 b3 = rol64(b3, 47) ^ b4;
5411 b1 = rol64(b1, 46) ^ b6;
5414 b15 = rol64(b15, 19) ^ b12;
5417 b13 = rol64(b13, 42) ^ b14;
5420 b11 = rol64(b11, 44) ^ b8;
5423 b9 = rol64(b9, 25) ^ b10;
5426 b15 = rol64(b15, 9) ^ b0;
5429 b11 = rol64(b11, 48) ^ b2;
5432 b13 = rol64(b13, 35) ^ b6;
5435 b9 = rol64(b9, 52) ^ b4;
5438 b1 = rol64(b1, 23) ^ b14;
5441 b5 = rol64(b5, 31) ^ b8;
5444 b3 = rol64(b3, 37) ^ b10;
5447 b7 = rol64(b7, 20) ^ b12;
5449 output[0] = b0 + k3;
5450 output[1] = b1 + k4;
5451 output[2] = b2 + k5;
5452 output[3] = b3 + k6;
5453 output[4] = b4 + k7;
5454 output[5] = b5 + k8;
5455 output[6] = b6 + k9;
5456 output[7] = b7 + k10;
5457 output[8] = b8 + k11;
5458 output[9] = b9 + k12;
5459 output[10] = b10 + k13;
5460 output[11] = b11 + k14;
5461 output[12] = b12 + k15;
5462 output[13] = b13 + k16 + t2;
5463 output[14] = b14 + k0 + t0;
5464 output[15] = b15 + k1 + 20;
5467 void threefish_decrypt_1024(struct threefish_key *key_ctx, u64 *input,
5470 u64 b0 = input[0], b1 = input[1],
5471 b2 = input[2], b3 = input[3],
5472 b4 = input[4], b5 = input[5],
5473 b6 = input[6], b7 = input[7],
5474 b8 = input[8], b9 = input[9],
5475 b10 = input[10], b11 = input[11],
5476 b12 = input[12], b13 = input[13],
5477 b14 = input[14], b15 = input[15];
5478 u64 k0 = key_ctx->key[0], k1 = key_ctx->key[1],
5479 k2 = key_ctx->key[2], k3 = key_ctx->key[3],
5480 k4 = key_ctx->key[4], k5 = key_ctx->key[5],
5481 k6 = key_ctx->key[6], k7 = key_ctx->key[7],
5482 k8 = key_ctx->key[8], k9 = key_ctx->key[9],
5483 k10 = key_ctx->key[10], k11 = key_ctx->key[11],
5484 k12 = key_ctx->key[12], k13 = key_ctx->key[13],
5485 k14 = key_ctx->key[14], k15 = key_ctx->key[15],
5486 k16 = key_ctx->key[16];
5487 u64 t0 = key_ctx->tweak[0], t1 = key_ctx->tweak[1],
5488 t2 = key_ctx->tweak[2];
5508 b7 = ror64(tmp, 20);
5512 b3 = ror64(tmp, 37);
5516 b5 = ror64(tmp, 31);
5520 b1 = ror64(tmp, 23);
5524 b9 = ror64(tmp, 52);
5528 b13 = ror64(tmp, 35);
5532 b11 = ror64(tmp, 48);
5536 b15 = ror64(tmp, 9);
5540 b9 = ror64(tmp, 25);
5544 b11 = ror64(tmp, 44);
5548 b13 = ror64(tmp, 42);
5552 b15 = ror64(tmp, 19);
5556 b1 = ror64(tmp, 46);
5560 b3 = ror64(tmp, 47);
5564 b5 = ror64(tmp, 44);
5568 b7 = ror64(tmp, 31);
5572 b1 = ror64(tmp, 41);
5576 b5 = ror64(tmp, 42);
5580 b3 = ror64(tmp, 53);
5588 b15 = ror64(tmp, 51);
5592 b11 = ror64(tmp, 56);
5596 b13 = ror64(tmp, 34);
5600 b9 = ror64(tmp, 16);
5604 b15 = ror64(tmp, 30);
5605 b14 -= b15 + k16 + t2;
5609 b13 = ror64(tmp, 44);
5614 b11 = ror64(tmp, 47);
5619 b9 = ror64(tmp, 12);
5624 b7 = ror64(tmp, 31);
5629 b5 = ror64(tmp, 37);
5639 b1 = ror64(tmp, 41);
5644 b7 = ror64(tmp, 25);
5648 b3 = ror64(tmp, 16);
5652 b5 = ror64(tmp, 28);
5656 b1 = ror64(tmp, 47);
5660 b9 = ror64(tmp, 41);
5664 b13 = ror64(tmp, 48);
5668 b11 = ror64(tmp, 20);
5672 b15 = ror64(tmp, 5);
5676 b9 = ror64(tmp, 17);
5680 b11 = ror64(tmp, 59);
5684 b13 = ror64(tmp, 41);
5688 b15 = ror64(tmp, 34);
5692 b1 = ror64(tmp, 13);
5696 b3 = ror64(tmp, 51);
5704 b7 = ror64(tmp, 33);
5708 b1 = ror64(tmp, 52);
5712 b5 = ror64(tmp, 23);
5716 b3 = ror64(tmp, 18);
5720 b7 = ror64(tmp, 49);
5724 b15 = ror64(tmp, 55);
5728 b11 = ror64(tmp, 10);
5732 b13 = ror64(tmp, 19);
5736 b9 = ror64(tmp, 38);
5740 b15 = ror64(tmp, 37);
5741 b14 -= b15 + k15 + t1;
5745 b13 = ror64(tmp, 22);
5750 b11 = ror64(tmp, 17);
5760 b7 = ror64(tmp, 47);
5770 b3 = ror64(tmp, 13);
5775 b1 = ror64(tmp, 24);
5780 b7 = ror64(tmp, 20);
5784 b3 = ror64(tmp, 37);
5788 b5 = ror64(tmp, 31);
5792 b1 = ror64(tmp, 23);
5796 b9 = ror64(tmp, 52);
5800 b13 = ror64(tmp, 35);
5804 b11 = ror64(tmp, 48);
5808 b15 = ror64(tmp, 9);
5812 b9 = ror64(tmp, 25);
5816 b11 = ror64(tmp, 44);
5820 b13 = ror64(tmp, 42);
5824 b15 = ror64(tmp, 19);
5828 b1 = ror64(tmp, 46);
5832 b3 = ror64(tmp, 47);
5836 b5 = ror64(tmp, 44);
5840 b7 = ror64(tmp, 31);
5844 b1 = ror64(tmp, 41);
5848 b5 = ror64(tmp, 42);
5852 b3 = ror64(tmp, 53);
5860 b15 = ror64(tmp, 51);
5864 b11 = ror64(tmp, 56);
5868 b13 = ror64(tmp, 34);
5872 b9 = ror64(tmp, 16);
5876 b15 = ror64(tmp, 30);
5877 b14 -= b15 + k14 + t0;
5881 b13 = ror64(tmp, 44);
5886 b11 = ror64(tmp, 47);
5891 b9 = ror64(tmp, 12);
5896 b7 = ror64(tmp, 31);
5901 b5 = ror64(tmp, 37);
5911 b1 = ror64(tmp, 41);
5916 b7 = ror64(tmp, 25);
5920 b3 = ror64(tmp, 16);
5924 b5 = ror64(tmp, 28);
5928 b1 = ror64(tmp, 47);
5932 b9 = ror64(tmp, 41);
5936 b13 = ror64(tmp, 48);
5940 b11 = ror64(tmp, 20);
5944 b15 = ror64(tmp, 5);
5948 b9 = ror64(tmp, 17);
5952 b11 = ror64(tmp, 59);
5956 b13 = ror64(tmp, 41);
5960 b15 = ror64(tmp, 34);
5964 b1 = ror64(tmp, 13);
5968 b3 = ror64(tmp, 51);
5976 b7 = ror64(tmp, 33);
5980 b1 = ror64(tmp, 52);
5984 b5 = ror64(tmp, 23);
5988 b3 = ror64(tmp, 18);
5992 b7 = ror64(tmp, 49);
5996 b15 = ror64(tmp, 55);
6000 b11 = ror64(tmp, 10);
6004 b13 = ror64(tmp, 19);
6008 b9 = ror64(tmp, 38);
6012 b15 = ror64(tmp, 37);
6013 b14 -= b15 + k13 + t2;
6017 b13 = ror64(tmp, 22);
6022 b11 = ror64(tmp, 17);
6032 b7 = ror64(tmp, 47);
6042 b3 = ror64(tmp, 13);
6047 b1 = ror64(tmp, 24);
6052 b7 = ror64(tmp, 20);
6056 b3 = ror64(tmp, 37);
6060 b5 = ror64(tmp, 31);
6064 b1 = ror64(tmp, 23);
6068 b9 = ror64(tmp, 52);
6072 b13 = ror64(tmp, 35);
6076 b11 = ror64(tmp, 48);
6080 b15 = ror64(tmp, 9);
6084 b9 = ror64(tmp, 25);
6088 b11 = ror64(tmp, 44);
6092 b13 = ror64(tmp, 42);
6096 b15 = ror64(tmp, 19);
6100 b1 = ror64(tmp, 46);
6104 b3 = ror64(tmp, 47);
6108 b5 = ror64(tmp, 44);
6112 b7 = ror64(tmp, 31);
6116 b1 = ror64(tmp, 41);
6120 b5 = ror64(tmp, 42);
6124 b3 = ror64(tmp, 53);
6132 b15 = ror64(tmp, 51);
6136 b11 = ror64(tmp, 56);
6140 b13 = ror64(tmp, 34);
6144 b9 = ror64(tmp, 16);
6148 b15 = ror64(tmp, 30);
6149 b14 -= b15 + k12 + t1;
6153 b13 = ror64(tmp, 44);
6158 b11 = ror64(tmp, 47);
6163 b9 = ror64(tmp, 12);
6168 b7 = ror64(tmp, 31);
6173 b5 = ror64(tmp, 37);
6183 b1 = ror64(tmp, 41);
6188 b7 = ror64(tmp, 25);
6192 b3 = ror64(tmp, 16);
6196 b5 = ror64(tmp, 28);
6200 b1 = ror64(tmp, 47);
6204 b9 = ror64(tmp, 41);
6208 b13 = ror64(tmp, 48);
6212 b11 = ror64(tmp, 20);
6216 b15 = ror64(tmp, 5);
6220 b9 = ror64(tmp, 17);
6224 b11 = ror64(tmp, 59);
6228 b13 = ror64(tmp, 41);
6232 b15 = ror64(tmp, 34);
6236 b1 = ror64(tmp, 13);
6240 b3 = ror64(tmp, 51);
6248 b7 = ror64(tmp, 33);
6252 b1 = ror64(tmp, 52);
6256 b5 = ror64(tmp, 23);
6260 b3 = ror64(tmp, 18);
6264 b7 = ror64(tmp, 49);
6268 b15 = ror64(tmp, 55);
6272 b11 = ror64(tmp, 10);
6276 b13 = ror64(tmp, 19);
6280 b9 = ror64(tmp, 38);
6284 b15 = ror64(tmp, 37);
6285 b14 -= b15 + k11 + t0;
6289 b13 = ror64(tmp, 22);
6294 b11 = ror64(tmp, 17);
6304 b7 = ror64(tmp, 47);
6314 b3 = ror64(tmp, 13);
6319 b1 = ror64(tmp, 24);
6324 b7 = ror64(tmp, 20);
6328 b3 = ror64(tmp, 37);
6332 b5 = ror64(tmp, 31);
6336 b1 = ror64(tmp, 23);
6340 b9 = ror64(tmp, 52);
6344 b13 = ror64(tmp, 35);
6348 b11 = ror64(tmp, 48);
6352 b15 = ror64(tmp, 9);
6356 b9 = ror64(tmp, 25);
6360 b11 = ror64(tmp, 44);
6364 b13 = ror64(tmp, 42);
6368 b15 = ror64(tmp, 19);
6372 b1 = ror64(tmp, 46);
6376 b3 = ror64(tmp, 47);
6380 b5 = ror64(tmp, 44);
6384 b7 = ror64(tmp, 31);
6388 b1 = ror64(tmp, 41);
6392 b5 = ror64(tmp, 42);
6396 b3 = ror64(tmp, 53);
6404 b15 = ror64(tmp, 51);
6408 b11 = ror64(tmp, 56);
6412 b13 = ror64(tmp, 34);
6416 b9 = ror64(tmp, 16);
6420 b15 = ror64(tmp, 30);
6421 b14 -= b15 + k10 + t2;
6425 b13 = ror64(tmp, 44);
6430 b11 = ror64(tmp, 47);
6435 b9 = ror64(tmp, 12);
6440 b7 = ror64(tmp, 31);
6445 b5 = ror64(tmp, 37);
6455 b1 = ror64(tmp, 41);
6460 b7 = ror64(tmp, 25);
6464 b3 = ror64(tmp, 16);
6468 b5 = ror64(tmp, 28);
6472 b1 = ror64(tmp, 47);
6476 b9 = ror64(tmp, 41);
6480 b13 = ror64(tmp, 48);
6484 b11 = ror64(tmp, 20);
6488 b15 = ror64(tmp, 5);
6492 b9 = ror64(tmp, 17);
6496 b11 = ror64(tmp, 59);
6500 b13 = ror64(tmp, 41);
6504 b15 = ror64(tmp, 34);
6508 b1 = ror64(tmp, 13);
6512 b3 = ror64(tmp, 51);
6520 b7 = ror64(tmp, 33);
6524 b1 = ror64(tmp, 52);
6528 b5 = ror64(tmp, 23);
6532 b3 = ror64(tmp, 18);
6536 b7 = ror64(tmp, 49);
6540 b15 = ror64(tmp, 55);
6544 b11 = ror64(tmp, 10);
6548 b13 = ror64(tmp, 19);
6552 b9 = ror64(tmp, 38);
6556 b15 = ror64(tmp, 37);
6557 b14 -= b15 + k9 + t1;
6561 b13 = ror64(tmp, 22);
6566 b11 = ror64(tmp, 17);
6576 b7 = ror64(tmp, 47);
6586 b3 = ror64(tmp, 13);
6591 b1 = ror64(tmp, 24);
6596 b7 = ror64(tmp, 20);
6600 b3 = ror64(tmp, 37);
6604 b5 = ror64(tmp, 31);
6608 b1 = ror64(tmp, 23);
6612 b9 = ror64(tmp, 52);
6616 b13 = ror64(tmp, 35);
6620 b11 = ror64(tmp, 48);
6624 b15 = ror64(tmp, 9);
6628 b9 = ror64(tmp, 25);
6632 b11 = ror64(tmp, 44);
6636 b13 = ror64(tmp, 42);
6640 b15 = ror64(tmp, 19);
6644 b1 = ror64(tmp, 46);
6648 b3 = ror64(tmp, 47);
6652 b5 = ror64(tmp, 44);
6656 b7 = ror64(tmp, 31);
6660 b1 = ror64(tmp, 41);
6664 b5 = ror64(tmp, 42);
6668 b3 = ror64(tmp, 53);
6676 b15 = ror64(tmp, 51);
6680 b11 = ror64(tmp, 56);
6684 b13 = ror64(tmp, 34);
6688 b9 = ror64(tmp, 16);
6692 b15 = ror64(tmp, 30);
6693 b14 -= b15 + k8 + t0;
6697 b13 = ror64(tmp, 44);
6702 b11 = ror64(tmp, 47);
6707 b9 = ror64(tmp, 12);
6712 b7 = ror64(tmp, 31);
6717 b5 = ror64(tmp, 37);
6727 b1 = ror64(tmp, 41);
6732 b7 = ror64(tmp, 25);
6736 b3 = ror64(tmp, 16);
6740 b5 = ror64(tmp, 28);
6744 b1 = ror64(tmp, 47);
6748 b9 = ror64(tmp, 41);
6752 b13 = ror64(tmp, 48);
6756 b11 = ror64(tmp, 20);
6760 b15 = ror64(tmp, 5);
6764 b9 = ror64(tmp, 17);
6768 b11 = ror64(tmp, 59);
6772 b13 = ror64(tmp, 41);
6776 b15 = ror64(tmp, 34);
6780 b1 = ror64(tmp, 13);
6784 b3 = ror64(tmp, 51);
6792 b7 = ror64(tmp, 33);
6796 b1 = ror64(tmp, 52);
6800 b5 = ror64(tmp, 23);
6804 b3 = ror64(tmp, 18);
6808 b7 = ror64(tmp, 49);
6812 b15 = ror64(tmp, 55);
6816 b11 = ror64(tmp, 10);
6820 b13 = ror64(tmp, 19);
6824 b9 = ror64(tmp, 38);
6828 b15 = ror64(tmp, 37);
6829 b14 -= b15 + k7 + t2;
6833 b13 = ror64(tmp, 22);
6838 b11 = ror64(tmp, 17);
6848 b7 = ror64(tmp, 47);
6858 b3 = ror64(tmp, 13);
6863 b1 = ror64(tmp, 24);
6868 b7 = ror64(tmp, 20);
6872 b3 = ror64(tmp, 37);
6876 b5 = ror64(tmp, 31);
6880 b1 = ror64(tmp, 23);
6884 b9 = ror64(tmp, 52);
6888 b13 = ror64(tmp, 35);
6892 b11 = ror64(tmp, 48);
6896 b15 = ror64(tmp, 9);
6900 b9 = ror64(tmp, 25);
6904 b11 = ror64(tmp, 44);
6908 b13 = ror64(tmp, 42);
6912 b15 = ror64(tmp, 19);
6916 b1 = ror64(tmp, 46);
6920 b3 = ror64(tmp, 47);
6924 b5 = ror64(tmp, 44);
6928 b7 = ror64(tmp, 31);
6932 b1 = ror64(tmp, 41);
6936 b5 = ror64(tmp, 42);
6940 b3 = ror64(tmp, 53);
6948 b15 = ror64(tmp, 51);
6952 b11 = ror64(tmp, 56);
6956 b13 = ror64(tmp, 34);
6960 b9 = ror64(tmp, 16);
6964 b15 = ror64(tmp, 30);
6965 b14 -= b15 + k6 + t1;
6969 b13 = ror64(tmp, 44);
6974 b11 = ror64(tmp, 47);
6979 b9 = ror64(tmp, 12);
6984 b7 = ror64(tmp, 31);
6989 b5 = ror64(tmp, 37);
6999 b1 = ror64(tmp, 41);
7004 b7 = ror64(tmp, 25);
7008 b3 = ror64(tmp, 16);
7012 b5 = ror64(tmp, 28);
7016 b1 = ror64(tmp, 47);
7020 b9 = ror64(tmp, 41);
7024 b13 = ror64(tmp, 48);
7028 b11 = ror64(tmp, 20);
7032 b15 = ror64(tmp, 5);
7036 b9 = ror64(tmp, 17);
7040 b11 = ror64(tmp, 59);
7044 b13 = ror64(tmp, 41);
7048 b15 = ror64(tmp, 34);
7052 b1 = ror64(tmp, 13);
7056 b3 = ror64(tmp, 51);
7064 b7 = ror64(tmp, 33);
7068 b1 = ror64(tmp, 52);
7072 b5 = ror64(tmp, 23);
7076 b3 = ror64(tmp, 18);
7080 b7 = ror64(tmp, 49);
7084 b15 = ror64(tmp, 55);
7088 b11 = ror64(tmp, 10);
7092 b13 = ror64(tmp, 19);
7096 b9 = ror64(tmp, 38);
7100 b15 = ror64(tmp, 37);
7101 b14 -= b15 + k5 + t0;
7105 b13 = ror64(tmp, 22);
7110 b11 = ror64(tmp, 17);
7120 b7 = ror64(tmp, 47);
7130 b3 = ror64(tmp, 13);
7135 b1 = ror64(tmp, 24);
7140 b7 = ror64(tmp, 20);
7144 b3 = ror64(tmp, 37);
7148 b5 = ror64(tmp, 31);
7152 b1 = ror64(tmp, 23);
7156 b9 = ror64(tmp, 52);
7160 b13 = ror64(tmp, 35);
7164 b11 = ror64(tmp, 48);
7168 b15 = ror64(tmp, 9);
7172 b9 = ror64(tmp, 25);
7176 b11 = ror64(tmp, 44);
7180 b13 = ror64(tmp, 42);
7184 b15 = ror64(tmp, 19);
7188 b1 = ror64(tmp, 46);
7192 b3 = ror64(tmp, 47);
7196 b5 = ror64(tmp, 44);
7200 b7 = ror64(tmp, 31);
7204 b1 = ror64(tmp, 41);
7208 b5 = ror64(tmp, 42);
7212 b3 = ror64(tmp, 53);
7220 b15 = ror64(tmp, 51);
7224 b11 = ror64(tmp, 56);
7228 b13 = ror64(tmp, 34);
7232 b9 = ror64(tmp, 16);
7236 b15 = ror64(tmp, 30);
7237 b14 -= b15 + k4 + t2;
7241 b13 = ror64(tmp, 44);
7246 b11 = ror64(tmp, 47);
7251 b9 = ror64(tmp, 12);
7256 b7 = ror64(tmp, 31);
7261 b5 = ror64(tmp, 37);
7271 b1 = ror64(tmp, 41);
7276 b7 = ror64(tmp, 25);
7280 b3 = ror64(tmp, 16);
7284 b5 = ror64(tmp, 28);
7288 b1 = ror64(tmp, 47);
7292 b9 = ror64(tmp, 41);
7296 b13 = ror64(tmp, 48);
7300 b11 = ror64(tmp, 20);
7304 b15 = ror64(tmp, 5);
7308 b9 = ror64(tmp, 17);
7312 b11 = ror64(tmp, 59);
7316 b13 = ror64(tmp, 41);
7320 b15 = ror64(tmp, 34);
7324 b1 = ror64(tmp, 13);
7328 b3 = ror64(tmp, 51);
7336 b7 = ror64(tmp, 33);
7340 b1 = ror64(tmp, 52);
7344 b5 = ror64(tmp, 23);
7348 b3 = ror64(tmp, 18);
7352 b7 = ror64(tmp, 49);
7356 b15 = ror64(tmp, 55);
7360 b11 = ror64(tmp, 10);
7364 b13 = ror64(tmp, 19);
7368 b9 = ror64(tmp, 38);
7372 b15 = ror64(tmp, 37);
7373 b14 -= b15 + k3 + t1;
7377 b13 = ror64(tmp, 22);
7382 b11 = ror64(tmp, 17);
7392 b7 = ror64(tmp, 47);
7402 b3 = ror64(tmp, 13);
7407 b1 = ror64(tmp, 24);
7412 b7 = ror64(tmp, 20);
7416 b3 = ror64(tmp, 37);
7420 b5 = ror64(tmp, 31);
7424 b1 = ror64(tmp, 23);
7428 b9 = ror64(tmp, 52);
7432 b13 = ror64(tmp, 35);
7436 b11 = ror64(tmp, 48);
7440 b15 = ror64(tmp, 9);
7444 b9 = ror64(tmp, 25);
7448 b11 = ror64(tmp, 44);
7452 b13 = ror64(tmp, 42);
7456 b15 = ror64(tmp, 19);
7460 b1 = ror64(tmp, 46);
7464 b3 = ror64(tmp, 47);
7468 b5 = ror64(tmp, 44);
7472 b7 = ror64(tmp, 31);
7476 b1 = ror64(tmp, 41);
7480 b5 = ror64(tmp, 42);
7484 b3 = ror64(tmp, 53);
7492 b15 = ror64(tmp, 51);
7496 b11 = ror64(tmp, 56);
7500 b13 = ror64(tmp, 34);
7504 b9 = ror64(tmp, 16);
7508 b15 = ror64(tmp, 30);
7509 b14 -= b15 + k2 + t0;
7513 b13 = ror64(tmp, 44);
7518 b11 = ror64(tmp, 47);
7523 b9 = ror64(tmp, 12);
7528 b7 = ror64(tmp, 31);
7533 b5 = ror64(tmp, 37);
7543 b1 = ror64(tmp, 41);
7548 b7 = ror64(tmp, 25);
7552 b3 = ror64(tmp, 16);
7556 b5 = ror64(tmp, 28);
7560 b1 = ror64(tmp, 47);
7564 b9 = ror64(tmp, 41);
7568 b13 = ror64(tmp, 48);
7572 b11 = ror64(tmp, 20);
7576 b15 = ror64(tmp, 5);
7580 b9 = ror64(tmp, 17);
7584 b11 = ror64(tmp, 59);
7588 b13 = ror64(tmp, 41);
7592 b15 = ror64(tmp, 34);
7596 b1 = ror64(tmp, 13);
7600 b3 = ror64(tmp, 51);
7608 b7 = ror64(tmp, 33);
7612 b1 = ror64(tmp, 52);
7616 b5 = ror64(tmp, 23);
7620 b3 = ror64(tmp, 18);
7624 b7 = ror64(tmp, 49);
7628 b15 = ror64(tmp, 55);
7632 b11 = ror64(tmp, 10);
7636 b13 = ror64(tmp, 19);
7640 b9 = ror64(tmp, 38);
7644 b15 = ror64(tmp, 37);
7645 b14 -= b15 + k1 + t2;
7649 b13 = ror64(tmp, 22);
7654 b11 = ror64(tmp, 17);
7664 b7 = ror64(tmp, 47);
7674 b3 = ror64(tmp, 13);
7679 b1 = ror64(tmp, 24);
7684 b7 = ror64(tmp, 20);
7688 b3 = ror64(tmp, 37);
7692 b5 = ror64(tmp, 31);
7696 b1 = ror64(tmp, 23);
7700 b9 = ror64(tmp, 52);
7704 b13 = ror64(tmp, 35);
7708 b11 = ror64(tmp, 48);
7712 b15 = ror64(tmp, 9);
7716 b9 = ror64(tmp, 25);
7720 b11 = ror64(tmp, 44);
7724 b13 = ror64(tmp, 42);
7728 b15 = ror64(tmp, 19);
7732 b1 = ror64(tmp, 46);
7736 b3 = ror64(tmp, 47);
7740 b5 = ror64(tmp, 44);
7744 b7 = ror64(tmp, 31);
7748 b1 = ror64(tmp, 41);
7752 b5 = ror64(tmp, 42);
7756 b3 = ror64(tmp, 53);
7764 b15 = ror64(tmp, 51);
7768 b11 = ror64(tmp, 56);
7772 b13 = ror64(tmp, 34);
7776 b9 = ror64(tmp, 16);
7780 b15 = ror64(tmp, 30);
7781 b14 -= b15 + k0 + t1;
7785 b13 = ror64(tmp, 44);
7790 b11 = ror64(tmp, 47);
7795 b9 = ror64(tmp, 12);
7800 b7 = ror64(tmp, 31);
7805 b5 = ror64(tmp, 37);
7815 b1 = ror64(tmp, 41);
7820 b7 = ror64(tmp, 25);
7824 b3 = ror64(tmp, 16);
7828 b5 = ror64(tmp, 28);
7832 b1 = ror64(tmp, 47);
7836 b9 = ror64(tmp, 41);
7840 b13 = ror64(tmp, 48);
7844 b11 = ror64(tmp, 20);
7848 b15 = ror64(tmp, 5);
7852 b9 = ror64(tmp, 17);
7856 b11 = ror64(tmp, 59);
7860 b13 = ror64(tmp, 41);
7864 b15 = ror64(tmp, 34);
7868 b1 = ror64(tmp, 13);
7872 b3 = ror64(tmp, 51);
7880 b7 = ror64(tmp, 33);
7884 b1 = ror64(tmp, 52);
7888 b5 = ror64(tmp, 23);
7892 b3 = ror64(tmp, 18);
7896 b7 = ror64(tmp, 49);
7900 b15 = ror64(tmp, 55);
7904 b11 = ror64(tmp, 10);
7908 b13 = ror64(tmp, 19);
7912 b9 = ror64(tmp, 38);
7916 b15 = ror64(tmp, 37);
7917 b14 -= b15 + k16 + t0;
7921 b13 = ror64(tmp, 22);
7926 b11 = ror64(tmp, 17);
7936 b7 = ror64(tmp, 47);
7946 b3 = ror64(tmp, 13);
7951 b1 = ror64(tmp, 24);
7956 b7 = ror64(tmp, 20);
7960 b3 = ror64(tmp, 37);
7964 b5 = ror64(tmp, 31);
7968 b1 = ror64(tmp, 23);
7972 b9 = ror64(tmp, 52);
7976 b13 = ror64(tmp, 35);
7980 b11 = ror64(tmp, 48);
7984 b15 = ror64(tmp, 9);
7988 b9 = ror64(tmp, 25);
7992 b11 = ror64(tmp, 44);
7996 b13 = ror64(tmp, 42);
8000 b15 = ror64(tmp, 19);
8004 b1 = ror64(tmp, 46);
8008 b3 = ror64(tmp, 47);
8012 b5 = ror64(tmp, 44);
8016 b7 = ror64(tmp, 31);
8020 b1 = ror64(tmp, 41);
8024 b5 = ror64(tmp, 42);
8028 b3 = ror64(tmp, 53);
8036 b15 = ror64(tmp, 51);
8040 b11 = ror64(tmp, 56);
8044 b13 = ror64(tmp, 34);
8048 b9 = ror64(tmp, 16);
8052 b15 = ror64(tmp, 30);
8053 b14 -= b15 + k15 + t2;
8057 b13 = ror64(tmp, 44);
8062 b11 = ror64(tmp, 47);
8067 b9 = ror64(tmp, 12);
8072 b7 = ror64(tmp, 31);
8077 b5 = ror64(tmp, 37);
8087 b1 = ror64(tmp, 41);
8092 b7 = ror64(tmp, 25);
8096 b3 = ror64(tmp, 16);
8100 b5 = ror64(tmp, 28);
8104 b1 = ror64(tmp, 47);
8108 b9 = ror64(tmp, 41);
8112 b13 = ror64(tmp, 48);
8116 b11 = ror64(tmp, 20);
8120 b15 = ror64(tmp, 5);
8124 b9 = ror64(tmp, 17);
8128 b11 = ror64(tmp, 59);
8132 b13 = ror64(tmp, 41);
8136 b15 = ror64(tmp, 34);
8140 b1 = ror64(tmp, 13);
8144 b3 = ror64(tmp, 51);
8152 b7 = ror64(tmp, 33);
8156 b1 = ror64(tmp, 52);
8160 b5 = ror64(tmp, 23);
8164 b3 = ror64(tmp, 18);
8168 b7 = ror64(tmp, 49);
8172 b15 = ror64(tmp, 55);
8176 b11 = ror64(tmp, 10);
8180 b13 = ror64(tmp, 19);
8184 b9 = ror64(tmp, 38);
8188 b15 = ror64(tmp, 37);
8189 b14 -= b15 + k14 + t1;
8193 b13 = ror64(tmp, 22);
8198 b11 = ror64(tmp, 17);
8208 b7 = ror64(tmp, 47);
8218 b3 = ror64(tmp, 13);
8223 b1 = ror64(tmp, 24);