]>
git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - drivers/staging/skein/threefish_block.c
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);