summaryrefslogtreecommitdiff
path: root/whrlpool.cpp
diff options
context:
space:
mode:
authorweidai <weidai11@users.noreply.github.com>2006-12-09 17:08:13 +0000
committerweidai <weidai11@users.noreply.github.com>2006-12-09 17:08:13 +0000
commitfd0683ba199dfe651c44ec5ff06d79a30f841f4e (patch)
tree4be4772c218abc6b46c6550685c4b9eb524edec4 /whrlpool.cpp
parent89c4ed412bbf7be9285ca84a464fd7162c096e7e (diff)
downloadcryptopp-git-fd0683ba199dfe651c44ec5ff06d79a30f841f4e.tar.gz
Updated to Whirlpool version 3.0
Diffstat (limited to 'whrlpool.cpp')
-rw-r--r--whrlpool.cpp801
1 files changed, 280 insertions, 521 deletions
diff --git a/whrlpool.cpp b/whrlpool.cpp
index 63a3f80a..989281a3 100644
--- a/whrlpool.cpp
+++ b/whrlpool.cpp
@@ -1,6 +1,7 @@
// Whrlpool.cpp - modified by Kevin Springle from
// Paulo Barreto and Vincent Rijmen's public domain code, whirlpool.c.
// Any modifications are placed in the public domain
+// Updated to Whirlpool version 3.0 by Wei Dai
// This is the original introductory comment:
@@ -20,14 +21,28 @@
* ``The Whirlpool hashing function,''
* NESSIE submission, 2000 (tweaked version, 2001),
* <https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip>
- *
+ *
* @author Paulo S.L.M. Barreto
- * @author Vincent Rijmen.
+ * @author Vincent Rijmen.
*
- * @version 2.1 (2001.09.01)
+ * @version 3.0 (2003.03.12)
*
* =============================================================================
*
+ * Differences from version 2.1:
+ *
+ * - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, 9).
+ *
+ * =============================================================================
+ *
+ * Differences from version 2.0:
+ *
+ * - Generation of ISO/IEC 10118-3 test vectors.
+ * - Bug fix: nonzero carry was ignored when tallying the data length
+ * (this bug apparently only manifested itself when feeding data
+ * in pieces rather than in a single chunk at once).
+ * - Support for MS Visual C++ 64-bit integer arithmetic.
+ *
* Differences from version 1.0:
*
* - Original S-box replaced by the tweaked, hardware-efficient version.
@@ -99,527 +114,271 @@ void Whirlpool::TruncatedFinal(byte *hash, size_t size)
*/
static const word64 C0[256] = {
- W64LIT(0x1818281878c0d878), W64LIT(0x23236523af0526af),
- W64LIT(0xc6c657c6f97eb8f9), W64LIT(0xe8e825e86f13fb6f),
- W64LIT(0x87879487a14ccba1), W64LIT(0xb8b8d5b862a91162),
- W64LIT(0x0101030105080905), W64LIT(0x4f4fd14f6e420d6e),
- W64LIT(0x36365a36eead9bee), W64LIT(0xa6a6f7a60459ff04),
- W64LIT(0xd2d26bd2bdde0cbd), W64LIT(0xf5f502f506fb0e06),
- W64LIT(0x79798b7980ef9680), W64LIT(0x6f6fb16fce5f30ce),
- W64LIT(0x9191ae91effc6def), W64LIT(0x5252f65207aaf807),
- W64LIT(0x6060a060fd2747fd), W64LIT(0xbcbcd9bc76893576),
- W64LIT(0x9b9bb09bcdac37cd), W64LIT(0x8e8e8f8e8c048a8c),
- W64LIT(0xa3a3f8a31571d215), W64LIT(0x0c0c140c3c606c3c),
- W64LIT(0x7b7b8d7b8aff848a), W64LIT(0x35355f35e1b580e1),
- W64LIT(0x1d1d271d69e8f569), W64LIT(0xe0e03de04753b347),
- W64LIT(0xd7d764d7acf621ac), W64LIT(0xc2c25bc2ed5e9ced),
- W64LIT(0x2e2e722e966d4396), W64LIT(0x4b4bdd4b7a62297a),
- W64LIT(0xfefe1ffe21a35d21), W64LIT(0x5757f9571682d516),
- W64LIT(0x15153f1541a8bd41), W64LIT(0x77779977b69fe8b6),
- W64LIT(0x37375937eba592eb), W64LIT(0xe5e532e5567b9e56),
- W64LIT(0x9f9fbc9fd98c13d9), W64LIT(0xf0f00df017d32317),
- W64LIT(0x4a4ade4a7f6a207f), W64LIT(0xdada73da959e4495),
- W64LIT(0x5858e85825faa225), W64LIT(0xc9c946c9ca06cfca),
- W64LIT(0x29297b298d557c8d), W64LIT(0x0a0a1e0a22505a22),
- W64LIT(0xb1b1ceb14fe1504f), W64LIT(0xa0a0fda01a69c91a),
- W64LIT(0x6b6bbd6bda7f14da), W64LIT(0x85859285ab5cd9ab),
- W64LIT(0xbdbddabd73813c73), W64LIT(0x5d5de75d34d28f34),
- W64LIT(0x1010301050809050), W64LIT(0xf4f401f403f30703),
- W64LIT(0xcbcb40cbc016ddc0), W64LIT(0x3e3e423ec6edd3c6),
- W64LIT(0x05050f0511282d11), W64LIT(0x6767a967e61f78e6),
- W64LIT(0xe4e431e453739753), W64LIT(0x27276927bb2502bb),
- W64LIT(0x4141c34158327358), W64LIT(0x8b8b808b9d2ca79d),
- W64LIT(0xa7a7f4a70151f601), W64LIT(0x7d7d877d94cfb294),
- W64LIT(0x9595a295fbdc49fb), W64LIT(0xd8d875d89f8e569f),
- W64LIT(0xfbfb10fb308b7030), W64LIT(0xeeee2fee7123cd71),
- W64LIT(0x7c7c847c91c7bb91), W64LIT(0x6666aa66e31771e3),
- W64LIT(0xdddd7add8ea67b8e), W64LIT(0x171739174bb8af4b),
- W64LIT(0x4747c94746024546), W64LIT(0x9e9ebf9edc841adc),
- W64LIT(0xcaca43cac51ed4c5), W64LIT(0x2d2d772d99755899),
- W64LIT(0xbfbfdcbf79912e79), W64LIT(0x070709071b383f1b),
- W64LIT(0xadadeaad2301ac23), W64LIT(0x5a5aee5a2feab02f),
- W64LIT(0x83839883b56cefb5), W64LIT(0x33335533ff85b6ff),
- W64LIT(0x6363a563f23f5cf2), W64LIT(0x020206020a10120a),
- W64LIT(0xaaaae3aa38399338), W64LIT(0x71719371a8afdea8),
- W64LIT(0xc8c845c8cf0ec6cf), W64LIT(0x19192b197dc8d17d),
- W64LIT(0x4949db4970723b70), W64LIT(0xd9d976d99a865f9a),
- W64LIT(0xf2f20bf21dc3311d), W64LIT(0xe3e338e3484ba848),
- W64LIT(0x5b5bed5b2ae2b92a), W64LIT(0x888885889234bc92),
- W64LIT(0x9a9ab39ac8a43ec8), W64LIT(0x26266a26be2d0bbe),
- W64LIT(0x32325632fa8dbffa), W64LIT(0xb0b0cdb04ae9594a),
- W64LIT(0xe9e926e96a1bf26a), W64LIT(0x0f0f110f33787733),
- W64LIT(0xd5d562d5a6e633a6), W64LIT(0x80809d80ba74f4ba),
- W64LIT(0xbebedfbe7c99277c), W64LIT(0xcdcd4acdde26ebde),
- W64LIT(0x34345c34e4bd89e4), W64LIT(0x4848d848757a3275),
- W64LIT(0xffff1cff24ab5424), W64LIT(0x7a7a8e7a8ff78d8f),
- W64LIT(0x9090ad90eaf464ea), W64LIT(0x5f5fe15f3ec29d3e),
- W64LIT(0x20206020a01d3da0), W64LIT(0x6868b868d5670fd5),
- W64LIT(0x1a1a2e1a72d0ca72), W64LIT(0xaeaeefae2c19b72c),
- W64LIT(0xb4b4c1b45ec97d5e), W64LIT(0x5454fc54199ace19),
- W64LIT(0x9393a893e5ec7fe5), W64LIT(0x22226622aa0d2faa),
- W64LIT(0x6464ac64e90763e9), W64LIT(0xf1f10ef112db2a12),
- W64LIT(0x73739573a2bfcca2), W64LIT(0x121236125a90825a),
- W64LIT(0x4040c0405d3a7a5d), W64LIT(0x0808180828404828),
- W64LIT(0xc3c358c3e85695e8), W64LIT(0xecec29ec7b33df7b),
- W64LIT(0xdbdb70db90964d90), W64LIT(0xa1a1fea11f61c01f),
- W64LIT(0x8d8d8a8d831c9183), W64LIT(0x3d3d473dc9f5c8c9),
- W64LIT(0x9797a497f1cc5bf1), W64LIT(0x0000000000000000),
- W64LIT(0xcfcf4ccfd436f9d4), W64LIT(0x2b2b7d2b87456e87),
- W64LIT(0x76769a76b397e1b3), W64LIT(0x82829b82b064e6b0),
- W64LIT(0xd6d667d6a9fe28a9), W64LIT(0x1b1b2d1b77d8c377),
- W64LIT(0xb5b5c2b55bc1745b), W64LIT(0xafafecaf2911be29),
- W64LIT(0x6a6abe6adf771ddf), W64LIT(0x5050f0500dbaea0d),
- W64LIT(0x4545cf454c12574c), W64LIT(0xf3f308f318cb3818),
- W64LIT(0x30305030f09dadf0), W64LIT(0xefef2cef742bc474),
- W64LIT(0x3f3f413fc3e5dac3), W64LIT(0x5555ff551c92c71c),
- W64LIT(0xa2a2fba21079db10), W64LIT(0xeaea23ea6503e965),
- W64LIT(0x6565af65ec0f6aec), W64LIT(0xbabad3ba68b90368),
- W64LIT(0x2f2f712f93654a93), W64LIT(0xc0c05dc0e74e8ee7),
- W64LIT(0xdede7fde81be6081), W64LIT(0x1c1c241c6ce0fc6c),
- W64LIT(0xfdfd1afd2ebb462e), W64LIT(0x4d4dd74d64521f64),
- W64LIT(0x9292ab92e0e476e0), W64LIT(0x75759f75bc8ffabc),
- W64LIT(0x06060a061e30361e), W64LIT(0x8a8a838a9824ae98),
- W64LIT(0xb2b2cbb240f94b40), W64LIT(0xe6e637e659638559),
- W64LIT(0x0e0e120e36707e36), W64LIT(0x1f1f211f63f8e763),
- W64LIT(0x6262a662f73755f7), W64LIT(0xd4d461d4a3ee3aa3),
- W64LIT(0xa8a8e5a832298132), W64LIT(0x9696a796f4c452f4),
- W64LIT(0xf9f916f93a9b623a), W64LIT(0xc5c552c5f666a3f6),
- W64LIT(0x25256f25b13510b1), W64LIT(0x5959eb5920f2ab20),
- W64LIT(0x84849184ae54d0ae), W64LIT(0x72729672a7b7c5a7),
- W64LIT(0x39394b39ddd5ecdd), W64LIT(0x4c4cd44c615a1661),
- W64LIT(0x5e5ee25e3bca943b), W64LIT(0x7878887885e79f85),
- W64LIT(0x38384838d8dde5d8), W64LIT(0x8c8c898c86149886),
- W64LIT(0xd1d16ed1b2c617b2), W64LIT(0xa5a5f2a50b41e40b),
- W64LIT(0xe2e23be24d43a14d), W64LIT(0x6161a361f82f4ef8),
- W64LIT(0xb3b3c8b345f14245), W64LIT(0x21216321a51534a5),
- W64LIT(0x9c9cb99cd69408d6), W64LIT(0x1e1e221e66f0ee66),
- W64LIT(0x4343c54352226152), W64LIT(0xc7c754c7fc76b1fc),
- W64LIT(0xfcfc19fc2bb34f2b), W64LIT(0x04040c0414202414),
- W64LIT(0x5151f35108b2e308), W64LIT(0x9999b699c7bc25c7),
- W64LIT(0x6d6db76dc44f22c4), W64LIT(0x0d0d170d39686539),
- W64LIT(0xfafa13fa35837935), W64LIT(0xdfdf7cdf84b66984),
- W64LIT(0x7e7e827e9bd7a99b), W64LIT(0x24246c24b43d19b4),
- W64LIT(0x3b3b4d3bd7c5fed7), W64LIT(0xababe0ab3d319a3d),
- W64LIT(0xcece4fced13ef0d1), W64LIT(0x1111331155889955),
- W64LIT(0x8f8f8c8f890c8389), W64LIT(0x4e4ed24e6b4a046b),
- W64LIT(0xb7b7c4b751d16651), W64LIT(0xebeb20eb600be060),
- W64LIT(0x3c3c443cccfdc1cc), W64LIT(0x81819e81bf7cfdbf),
- W64LIT(0x9494a194fed440fe), W64LIT(0xf7f704f70ceb1c0c),
- W64LIT(0xb9b9d6b967a11867), W64LIT(0x131335135f988b5f),
- W64LIT(0x2c2c742c9c7d519c), W64LIT(0xd3d368d3b8d605b8),
- W64LIT(0xe7e734e75c6b8c5c), W64LIT(0x6e6eb26ecb5739cb),
- W64LIT(0xc4c451c4f36eaaf3), W64LIT(0x030305030f181b0f),
- W64LIT(0x5656fa56138adc13), W64LIT(0x4444cc44491a5e49),
- W64LIT(0x7f7f817f9edfa09e), W64LIT(0xa9a9e6a937218837),
- W64LIT(0x2a2a7e2a824d6782), W64LIT(0xbbbbd0bb6db10a6d),
- W64LIT(0xc1c15ec1e24687e2), W64LIT(0x5353f55302a2f102),
- W64LIT(0xdcdc79dc8bae728b), W64LIT(0x0b0b1d0b27585327),
- W64LIT(0x9d9dba9dd39c01d3), W64LIT(0x6c6cb46cc1472bc1),
- W64LIT(0x31315331f595a4f5), W64LIT(0x74749c74b987f3b9),
- W64LIT(0xf6f607f609e31509), W64LIT(0x4646ca46430a4c43),
- W64LIT(0xacace9ac2609a526), W64LIT(0x89898689973cb597),
- W64LIT(0x14143c1444a0b444), W64LIT(0xe1e13ee1425bba42),
- W64LIT(0x16163a164eb0a64e), W64LIT(0x3a3a4e3ad2cdf7d2),
- W64LIT(0x6969bb69d06f06d0), W64LIT(0x09091b092d48412d),
- W64LIT(0x70709070ada7d7ad), W64LIT(0xb6b6c7b654d96f54),
- W64LIT(0xd0d06dd0b7ce1eb7), W64LIT(0xeded2aed7e3bd67e),
- W64LIT(0xcccc49ccdb2ee2db), W64LIT(0x4242c642572a6857),
- W64LIT(0x9898b598c2b42cc2), W64LIT(0xa4a4f1a40e49ed0e),
- W64LIT(0x28287828885d7588), W64LIT(0x5c5ce45c31da8631),
- W64LIT(0xf8f815f83f936b3f), W64LIT(0x86869786a444c2a4),
+ W64LIT(0x18186018c07830d8), W64LIT(0x23238c2305af4626), W64LIT(0xc6c63fc67ef991b8), W64LIT(0xe8e887e8136fcdfb),
+ W64LIT(0x878726874ca113cb), W64LIT(0xb8b8dab8a9626d11), W64LIT(0x0101040108050209), W64LIT(0x4f4f214f426e9e0d),
+ W64LIT(0x3636d836adee6c9b), W64LIT(0xa6a6a2a6590451ff), W64LIT(0xd2d26fd2debdb90c), W64LIT(0xf5f5f3f5fb06f70e),
+ W64LIT(0x7979f979ef80f296), W64LIT(0x6f6fa16f5fcede30), W64LIT(0x91917e91fcef3f6d), W64LIT(0x52525552aa07a4f8),
+ W64LIT(0x60609d6027fdc047), W64LIT(0xbcbccabc89766535), W64LIT(0x9b9b569baccd2b37), W64LIT(0x8e8e028e048c018a),
+ W64LIT(0xa3a3b6a371155bd2), W64LIT(0x0c0c300c603c186c), W64LIT(0x7b7bf17bff8af684), W64LIT(0x3535d435b5e16a80),
+ W64LIT(0x1d1d741de8693af5), W64LIT(0xe0e0a7e05347ddb3), W64LIT(0xd7d77bd7f6acb321), W64LIT(0xc2c22fc25eed999c),
+ W64LIT(0x2e2eb82e6d965c43), W64LIT(0x4b4b314b627a9629), W64LIT(0xfefedffea321e15d), W64LIT(0x575741578216aed5),
+ W64LIT(0x15155415a8412abd), W64LIT(0x7777c1779fb6eee8), W64LIT(0x3737dc37a5eb6e92), W64LIT(0xe5e5b3e57b56d79e),
+ W64LIT(0x9f9f469f8cd92313), W64LIT(0xf0f0e7f0d317fd23), W64LIT(0x4a4a354a6a7f9420), W64LIT(0xdada4fda9e95a944),
+ W64LIT(0x58587d58fa25b0a2), W64LIT(0xc9c903c906ca8fcf), W64LIT(0x2929a429558d527c), W64LIT(0x0a0a280a5022145a),
+ W64LIT(0xb1b1feb1e14f7f50), W64LIT(0xa0a0baa0691a5dc9), W64LIT(0x6b6bb16b7fdad614), W64LIT(0x85852e855cab17d9),
+ W64LIT(0xbdbdcebd8173673c), W64LIT(0x5d5d695dd234ba8f), W64LIT(0x1010401080502090), W64LIT(0xf4f4f7f4f303f507),
+ W64LIT(0xcbcb0bcb16c08bdd), W64LIT(0x3e3ef83eedc67cd3), W64LIT(0x0505140528110a2d), W64LIT(0x676781671fe6ce78),
+ W64LIT(0xe4e4b7e47353d597), W64LIT(0x27279c2725bb4e02), W64LIT(0x4141194132588273), W64LIT(0x8b8b168b2c9d0ba7),
+ W64LIT(0xa7a7a6a7510153f6), W64LIT(0x7d7de97dcf94fab2), W64LIT(0x95956e95dcfb3749), W64LIT(0xd8d847d88e9fad56),
+ W64LIT(0xfbfbcbfb8b30eb70), W64LIT(0xeeee9fee2371c1cd), W64LIT(0x7c7ced7cc791f8bb), W64LIT(0x6666856617e3cc71),
+ W64LIT(0xdddd53dda68ea77b), W64LIT(0x17175c17b84b2eaf), W64LIT(0x4747014702468e45), W64LIT(0x9e9e429e84dc211a),
+ W64LIT(0xcaca0fca1ec589d4), W64LIT(0x2d2db42d75995a58), W64LIT(0xbfbfc6bf9179632e), W64LIT(0x07071c07381b0e3f),
+ W64LIT(0xadad8ead012347ac), W64LIT(0x5a5a755aea2fb4b0), W64LIT(0x838336836cb51bef), W64LIT(0x3333cc3385ff66b6),
+ W64LIT(0x636391633ff2c65c), W64LIT(0x02020802100a0412), W64LIT(0xaaaa92aa39384993), W64LIT(0x7171d971afa8e2de),
+ W64LIT(0xc8c807c80ecf8dc6), W64LIT(0x19196419c87d32d1), W64LIT(0x494939497270923b), W64LIT(0xd9d943d9869aaf5f),
+ W64LIT(0xf2f2eff2c31df931), W64LIT(0xe3e3abe34b48dba8), W64LIT(0x5b5b715be22ab6b9), W64LIT(0x88881a8834920dbc),
+ W64LIT(0x9a9a529aa4c8293e), W64LIT(0x262698262dbe4c0b), W64LIT(0x3232c8328dfa64bf), W64LIT(0xb0b0fab0e94a7d59),
+ W64LIT(0xe9e983e91b6acff2), W64LIT(0x0f0f3c0f78331e77), W64LIT(0xd5d573d5e6a6b733), W64LIT(0x80803a8074ba1df4),
+ W64LIT(0xbebec2be997c6127), W64LIT(0xcdcd13cd26de87eb), W64LIT(0x3434d034bde46889), W64LIT(0x48483d487a759032),
+ W64LIT(0xffffdbffab24e354), W64LIT(0x7a7af57af78ff48d), W64LIT(0x90907a90f4ea3d64), W64LIT(0x5f5f615fc23ebe9d),
+ W64LIT(0x202080201da0403d), W64LIT(0x6868bd6867d5d00f), W64LIT(0x1a1a681ad07234ca), W64LIT(0xaeae82ae192c41b7),
+ W64LIT(0xb4b4eab4c95e757d), W64LIT(0x54544d549a19a8ce), W64LIT(0x93937693ece53b7f), W64LIT(0x222288220daa442f),
+ W64LIT(0x64648d6407e9c863), W64LIT(0xf1f1e3f1db12ff2a), W64LIT(0x7373d173bfa2e6cc), W64LIT(0x12124812905a2482),
+ W64LIT(0x40401d403a5d807a), W64LIT(0x0808200840281048), W64LIT(0xc3c32bc356e89b95), W64LIT(0xecec97ec337bc5df),
+ W64LIT(0xdbdb4bdb9690ab4d), W64LIT(0xa1a1bea1611f5fc0), W64LIT(0x8d8d0e8d1c830791), W64LIT(0x3d3df43df5c97ac8),
+ W64LIT(0x97976697ccf1335b), W64LIT(0x0000000000000000), W64LIT(0xcfcf1bcf36d483f9), W64LIT(0x2b2bac2b4587566e),
+ W64LIT(0x7676c57697b3ece1), W64LIT(0x8282328264b019e6), W64LIT(0xd6d67fd6fea9b128), W64LIT(0x1b1b6c1bd87736c3),
+ W64LIT(0xb5b5eeb5c15b7774), W64LIT(0xafaf86af112943be), W64LIT(0x6a6ab56a77dfd41d), W64LIT(0x50505d50ba0da0ea),
+ W64LIT(0x45450945124c8a57), W64LIT(0xf3f3ebf3cb18fb38), W64LIT(0x3030c0309df060ad), W64LIT(0xefef9bef2b74c3c4),
+ W64LIT(0x3f3ffc3fe5c37eda), W64LIT(0x55554955921caac7), W64LIT(0xa2a2b2a2791059db), W64LIT(0xeaea8fea0365c9e9),
+ W64LIT(0x656589650fecca6a), W64LIT(0xbabad2bab9686903), W64LIT(0x2f2fbc2f65935e4a), W64LIT(0xc0c027c04ee79d8e),
+ W64LIT(0xdede5fdebe81a160), W64LIT(0x1c1c701ce06c38fc), W64LIT(0xfdfdd3fdbb2ee746), W64LIT(0x4d4d294d52649a1f),
+ W64LIT(0x92927292e4e03976), W64LIT(0x7575c9758fbceafa), W64LIT(0x06061806301e0c36), W64LIT(0x8a8a128a249809ae),
+ W64LIT(0xb2b2f2b2f940794b), W64LIT(0xe6e6bfe66359d185), W64LIT(0x0e0e380e70361c7e), W64LIT(0x1f1f7c1ff8633ee7),
+ W64LIT(0x6262956237f7c455), W64LIT(0xd4d477d4eea3b53a), W64LIT(0xa8a89aa829324d81), W64LIT(0x96966296c4f43152),
+ W64LIT(0xf9f9c3f99b3aef62), W64LIT(0xc5c533c566f697a3), W64LIT(0x2525942535b14a10), W64LIT(0x59597959f220b2ab),
+ W64LIT(0x84842a8454ae15d0), W64LIT(0x7272d572b7a7e4c5), W64LIT(0x3939e439d5dd72ec), W64LIT(0x4c4c2d4c5a619816),
+ W64LIT(0x5e5e655eca3bbc94), W64LIT(0x7878fd78e785f09f), W64LIT(0x3838e038ddd870e5), W64LIT(0x8c8c0a8c14860598),
+ W64LIT(0xd1d163d1c6b2bf17), W64LIT(0xa5a5aea5410b57e4), W64LIT(0xe2e2afe2434dd9a1), W64LIT(0x616199612ff8c24e),
+ W64LIT(0xb3b3f6b3f1457b42), W64LIT(0x2121842115a54234), W64LIT(0x9c9c4a9c94d62508), W64LIT(0x1e1e781ef0663cee),
+ W64LIT(0x4343114322528661), W64LIT(0xc7c73bc776fc93b1), W64LIT(0xfcfcd7fcb32be54f), W64LIT(0x0404100420140824),
+ W64LIT(0x51515951b208a2e3), W64LIT(0x99995e99bcc72f25), W64LIT(0x6d6da96d4fc4da22), W64LIT(0x0d0d340d68391a65),
+ W64LIT(0xfafacffa8335e979), W64LIT(0xdfdf5bdfb684a369), W64LIT(0x7e7ee57ed79bfca9), W64LIT(0x242490243db44819),
+ W64LIT(0x3b3bec3bc5d776fe), W64LIT(0xabab96ab313d4b9a), W64LIT(0xcece1fce3ed181f0), W64LIT(0x1111441188552299),
+ W64LIT(0x8f8f068f0c890383), W64LIT(0x4e4e254e4a6b9c04), W64LIT(0xb7b7e6b7d1517366), W64LIT(0xebeb8beb0b60cbe0),
+ W64LIT(0x3c3cf03cfdcc78c1), W64LIT(0x81813e817cbf1ffd), W64LIT(0x94946a94d4fe3540), W64LIT(0xf7f7fbf7eb0cf31c),
+ W64LIT(0xb9b9deb9a1676f18), W64LIT(0x13134c13985f268b), W64LIT(0x2c2cb02c7d9c5851), W64LIT(0xd3d36bd3d6b8bb05),
+ W64LIT(0xe7e7bbe76b5cd38c), W64LIT(0x6e6ea56e57cbdc39), W64LIT(0xc4c437c46ef395aa), W64LIT(0x03030c03180f061b),
+ W64LIT(0x565645568a13acdc), W64LIT(0x44440d441a49885e), W64LIT(0x7f7fe17fdf9efea0), W64LIT(0xa9a99ea921374f88),
+ W64LIT(0x2a2aa82a4d825467), W64LIT(0xbbbbd6bbb16d6b0a), W64LIT(0xc1c123c146e29f87), W64LIT(0x53535153a202a6f1),
+ W64LIT(0xdcdc57dcae8ba572), W64LIT(0x0b0b2c0b58271653), W64LIT(0x9d9d4e9d9cd32701), W64LIT(0x6c6cad6c47c1d82b),
+ W64LIT(0x3131c43195f562a4), W64LIT(0x7474cd7487b9e8f3), W64LIT(0xf6f6fff6e309f115), W64LIT(0x464605460a438c4c),
+ W64LIT(0xacac8aac092645a5), W64LIT(0x89891e893c970fb5), W64LIT(0x14145014a04428b4), W64LIT(0xe1e1a3e15b42dfba),
+ W64LIT(0x16165816b04e2ca6), W64LIT(0x3a3ae83acdd274f7), W64LIT(0x6969b9696fd0d206), W64LIT(0x09092409482d1241),
+ W64LIT(0x7070dd70a7ade0d7), W64LIT(0xb6b6e2b6d954716f), W64LIT(0xd0d067d0ceb7bd1e), W64LIT(0xeded93ed3b7ec7d6),
+ W64LIT(0xcccc17cc2edb85e2), W64LIT(0x424215422a578468), W64LIT(0x98985a98b4c22d2c), W64LIT(0xa4a4aaa4490e55ed),
+ W64LIT(0x2828a0285d885075), W64LIT(0x5c5c6d5cda31b886), W64LIT(0xf8f8c7f8933fed6b), W64LIT(0x8686228644a411c2),
};
static const word64 C1[256] = {
- W64LIT(0x781818281878c0d8), W64LIT(0xaf23236523af0526),
- W64LIT(0xf9c6c657c6f97eb8), W64LIT(0x6fe8e825e86f13fb),
- W64LIT(0xa187879487a14ccb), W64LIT(0x62b8b8d5b862a911),
- W64LIT(0x0501010301050809), W64LIT(0x6e4f4fd14f6e420d),
- W64LIT(0xee36365a36eead9b), W64LIT(0x04a6a6f7a60459ff),
- W64LIT(0xbdd2d26bd2bdde0c), W64LIT(0x06f5f502f506fb0e),
- W64LIT(0x8079798b7980ef96), W64LIT(0xce6f6fb16fce5f30),
- W64LIT(0xef9191ae91effc6d), W64LIT(0x075252f65207aaf8),
- W64LIT(0xfd6060a060fd2747), W64LIT(0x76bcbcd9bc768935),
- W64LIT(0xcd9b9bb09bcdac37), W64LIT(0x8c8e8e8f8e8c048a),
- W64LIT(0x15a3a3f8a31571d2), W64LIT(0x3c0c0c140c3c606c),
- W64LIT(0x8a7b7b8d7b8aff84), W64LIT(0xe135355f35e1b580),
- W64LIT(0x691d1d271d69e8f5), W64LIT(0x47e0e03de04753b3),
- W64LIT(0xacd7d764d7acf621), W64LIT(0xedc2c25bc2ed5e9c),
- W64LIT(0x962e2e722e966d43), W64LIT(0x7a4b4bdd4b7a6229),
- W64LIT(0x21fefe1ffe21a35d), W64LIT(0x165757f9571682d5),
- W64LIT(0x4115153f1541a8bd), W64LIT(0xb677779977b69fe8),
- W64LIT(0xeb37375937eba592), W64LIT(0x56e5e532e5567b9e),
- W64LIT(0xd99f9fbc9fd98c13), W64LIT(0x17f0f00df017d323),
- W64LIT(0x7f4a4ade4a7f6a20), W64LIT(0x95dada73da959e44),
- W64LIT(0x255858e85825faa2), W64LIT(0xcac9c946c9ca06cf),
- W64LIT(0x8d29297b298d557c), W64LIT(0x220a0a1e0a22505a),
- W64LIT(0x4fb1b1ceb14fe150), W64LIT(0x1aa0a0fda01a69c9),
- W64LIT(0xda6b6bbd6bda7f14), W64LIT(0xab85859285ab5cd9),
- W64LIT(0x73bdbddabd73813c), W64LIT(0x345d5de75d34d28f),
- W64LIT(0x5010103010508090), W64LIT(0x03f4f401f403f307),
- W64LIT(0xc0cbcb40cbc016dd), W64LIT(0xc63e3e423ec6edd3),
- W64LIT(0x1105050f0511282d), W64LIT(0xe66767a967e61f78),
- W64LIT(0x53e4e431e4537397), W64LIT(0xbb27276927bb2502),
- W64LIT(0x584141c341583273), W64LIT(0x9d8b8b808b9d2ca7),
- W64LIT(0x01a7a7f4a70151f6), W64LIT(0x947d7d877d94cfb2),
- W64LIT(0xfb9595a295fbdc49), W64LIT(0x9fd8d875d89f8e56),
- W64LIT(0x30fbfb10fb308b70), W64LIT(0x71eeee2fee7123cd),
- W64LIT(0x917c7c847c91c7bb), W64LIT(0xe36666aa66e31771),
- W64LIT(0x8edddd7add8ea67b), W64LIT(0x4b171739174bb8af),
- W64LIT(0x464747c947460245), W64LIT(0xdc9e9ebf9edc841a),
- W64LIT(0xc5caca43cac51ed4), W64LIT(0x992d2d772d997558),
- W64LIT(0x79bfbfdcbf79912e), W64LIT(0x1b070709071b383f),
- W64LIT(0x23adadeaad2301ac), W64LIT(0x2f5a5aee5a2feab0),
- W64LIT(0xb583839883b56cef), W64LIT(0xff33335533ff85b6),
- W64LIT(0xf26363a563f23f5c), W64LIT(0x0a020206020a1012),
- W64LIT(0x38aaaae3aa383993), W64LIT(0xa871719371a8afde),
- W64LIT(0xcfc8c845c8cf0ec6), W64LIT(0x7d19192b197dc8d1),
- W64LIT(0x704949db4970723b), W64LIT(0x9ad9d976d99a865f),
- W64LIT(0x1df2f20bf21dc331), W64LIT(0x48e3e338e3484ba8),
- W64LIT(0x2a5b5bed5b2ae2b9), W64LIT(0x92888885889234bc),
- W64LIT(0xc89a9ab39ac8a43e), W64LIT(0xbe26266a26be2d0b),
- W64LIT(0xfa32325632fa8dbf), W64LIT(0x4ab0b0cdb04ae959),
- W64LIT(0x6ae9e926e96a1bf2), W64LIT(0x330f0f110f337877),
- W64LIT(0xa6d5d562d5a6e633), W64LIT(0xba80809d80ba74f4),
- W64LIT(0x7cbebedfbe7c9927), W64LIT(0xdecdcd4acdde26eb),
- W64LIT(0xe434345c34e4bd89), W64LIT(0x754848d848757a32),
- W64LIT(0x24ffff1cff24ab54), W64LIT(0x8f7a7a8e7a8ff78d),
- W64LIT(0xea9090ad90eaf464), W64LIT(0x3e5f5fe15f3ec29d),
- W64LIT(0xa020206020a01d3d), W64LIT(0xd56868b868d5670f),
- W64LIT(0x721a1a2e1a72d0ca), W64LIT(0x2caeaeefae2c19b7),
- W64LIT(0x5eb4b4c1b45ec97d), W64LIT(0x195454fc54199ace),
- W64LIT(0xe59393a893e5ec7f), W64LIT(0xaa22226622aa0d2f),
- W64LIT(0xe96464ac64e90763), W64LIT(0x12f1f10ef112db2a),
- W64LIT(0xa273739573a2bfcc), W64LIT(0x5a121236125a9082),
- W64LIT(0x5d4040c0405d3a7a), W64LIT(0x2808081808284048),
- W64LIT(0xe8c3c358c3e85695), W64LIT(0x7becec29ec7b33df),
- W64LIT(0x90dbdb70db90964d), W64LIT(0x1fa1a1fea11f61c0),
- W64LIT(0x838d8d8a8d831c91), W64LIT(0xc93d3d473dc9f5c8),
- W64LIT(0xf19797a497f1cc5b), W64LIT(0x0000000000000000),
- W64LIT(0xd4cfcf4ccfd436f9), W64LIT(0x872b2b7d2b87456e),
- W64LIT(0xb376769a76b397e1), W64LIT(0xb082829b82b064e6),
- W64LIT(0xa9d6d667d6a9fe28), W64LIT(0x771b1b2d1b77d8c3),
- W64LIT(0x5bb5b5c2b55bc174), W64LIT(0x29afafecaf2911be),
- W64LIT(0xdf6a6abe6adf771d), W64LIT(0x0d5050f0500dbaea),
- W64LIT(0x4c4545cf454c1257), W64LIT(0x18f3f308f318cb38),
- W64LIT(0xf030305030f09dad), W64LIT(0x74efef2cef742bc4),
- W64LIT(0xc33f3f413fc3e5da), W64LIT(0x1c5555ff551c92c7),
- W64LIT(0x10a2a2fba21079db), W64LIT(0x65eaea23ea6503e9),
- W64LIT(0xec6565af65ec0f6a), W64LIT(0x68babad3ba68b903),
- W64LIT(0x932f2f712f93654a), W64LIT(0xe7c0c05dc0e74e8e),
- W64LIT(0x81dede7fde81be60), W64LIT(0x6c1c1c241c6ce0fc),
- W64LIT(0x2efdfd1afd2ebb46), W64LIT(0x644d4dd74d64521f),
- W64LIT(0xe09292ab92e0e476), W64LIT(0xbc75759f75bc8ffa),
- W64LIT(0x1e06060a061e3036), W64LIT(0x988a8a838a9824ae),
- W64LIT(0x40b2b2cbb240f94b), W64LIT(0x59e6e637e6596385),
- W64LIT(0x360e0e120e36707e), W64LIT(0x631f1f211f63f8e7),
- W64LIT(0xf76262a662f73755), W64LIT(0xa3d4d461d4a3ee3a),
- W64LIT(0x32a8a8e5a8322981), W64LIT(0xf49696a796f4c452),
- W64LIT(0x3af9f916f93a9b62), W64LIT(0xf6c5c552c5f666a3),
- W64LIT(0xb125256f25b13510), W64LIT(0x205959eb5920f2ab),
- W64LIT(0xae84849184ae54d0), W64LIT(0xa772729672a7b7c5),
- W64LIT(0xdd39394b39ddd5ec), W64LIT(0x614c4cd44c615a16),
- W64LIT(0x3b5e5ee25e3bca94), W64LIT(0x857878887885e79f),
- W64LIT(0xd838384838d8dde5), W64LIT(0x868c8c898c861498),
- W64LIT(0xb2d1d16ed1b2c617), W64LIT(0x0ba5a5f2a50b41e4),
- W64LIT(0x4de2e23be24d43a1), W64LIT(0xf86161a361f82f4e),
- W64LIT(0x45b3b3c8b345f142), W64LIT(0xa521216321a51534),
- W64LIT(0xd69c9cb99cd69408), W64LIT(0x661e1e221e66f0ee),
- W64LIT(0x524343c543522261), W64LIT(0xfcc7c754c7fc76b1),
- W64LIT(0x2bfcfc19fc2bb34f), W64LIT(0x1404040c04142024),
- W64LIT(0x085151f35108b2e3), W64LIT(0xc79999b699c7bc25),
- W64LIT(0xc46d6db76dc44f22), W64LIT(0x390d0d170d396865),
- W64LIT(0x35fafa13fa358379), W64LIT(0x84dfdf7cdf84b669),
- W64LIT(0x9b7e7e827e9bd7a9), W64LIT(0xb424246c24b43d19),
- W64LIT(0xd73b3b4d3bd7c5fe), W64LIT(0x3dababe0ab3d319a),
- W64LIT(0xd1cece4fced13ef0), W64LIT(0x5511113311558899),
- W64LIT(0x898f8f8c8f890c83), W64LIT(0x6b4e4ed24e6b4a04),
- W64LIT(0x51b7b7c4b751d166), W64LIT(0x60ebeb20eb600be0),
- W64LIT(0xcc3c3c443cccfdc1), W64LIT(0xbf81819e81bf7cfd),
- W64LIT(0xfe9494a194fed440), W64LIT(0x0cf7f704f70ceb1c),
- W64LIT(0x67b9b9d6b967a118), W64LIT(0x5f131335135f988b),
- W64LIT(0x9c2c2c742c9c7d51), W64LIT(0xb8d3d368d3b8d605),
- W64LIT(0x5ce7e734e75c6b8c), W64LIT(0xcb6e6eb26ecb5739),
- W64LIT(0xf3c4c451c4f36eaa), W64LIT(0x0f030305030f181b),
- W64LIT(0x135656fa56138adc), W64LIT(0x494444cc44491a5e),
- W64LIT(0x9e7f7f817f9edfa0), W64LIT(0x37a9a9e6a9372188),
- W64LIT(0x822a2a7e2a824d67), W64LIT(0x6dbbbbd0bb6db10a),
- W64LIT(0xe2c1c15ec1e24687), W64LIT(0x025353f55302a2f1),
- W64LIT(0x8bdcdc79dc8bae72), W64LIT(0x270b0b1d0b275853),
- W64LIT(0xd39d9dba9dd39c01), W64LIT(0xc16c6cb46cc1472b),
- W64LIT(0xf531315331f595a4), W64LIT(0xb974749c74b987f3),
- W64LIT(0x09f6f607f609e315), W64LIT(0x434646ca46430a4c),
- W64LIT(0x26acace9ac2609a5), W64LIT(0x9789898689973cb5),
- W64LIT(0x4414143c1444a0b4), W64LIT(0x42e1e13ee1425bba),
- W64LIT(0x4e16163a164eb0a6), W64LIT(0xd23a3a4e3ad2cdf7),
- W64LIT(0xd06969bb69d06f06), W64LIT(0x2d09091b092d4841),
- W64LIT(0xad70709070ada7d7), W64LIT(0x54b6b6c7b654d96f),
- W64LIT(0xb7d0d06dd0b7ce1e), W64LIT(0x7eeded2aed7e3bd6),
- W64LIT(0xdbcccc49ccdb2ee2), W64LIT(0x574242c642572a68),
- W64LIT(0xc29898b598c2b42c), W64LIT(0x0ea4a4f1a40e49ed),
- W64LIT(0x8828287828885d75), W64LIT(0x315c5ce45c31da86),
- W64LIT(0x3ff8f815f83f936b), W64LIT(0xa486869786a444c2),
+ W64LIT(0xd818186018c07830), W64LIT(0x2623238c2305af46), W64LIT(0xb8c6c63fc67ef991), W64LIT(0xfbe8e887e8136fcd),
+ W64LIT(0xcb878726874ca113), W64LIT(0x11b8b8dab8a9626d), W64LIT(0x0901010401080502), W64LIT(0x0d4f4f214f426e9e),
+ W64LIT(0x9b3636d836adee6c), W64LIT(0xffa6a6a2a6590451), W64LIT(0x0cd2d26fd2debdb9), W64LIT(0x0ef5f5f3f5fb06f7),
+ W64LIT(0x967979f979ef80f2), W64LIT(0x306f6fa16f5fcede), W64LIT(0x6d91917e91fcef3f), W64LIT(0xf852525552aa07a4),
+ W64LIT(0x4760609d6027fdc0), W64LIT(0x35bcbccabc897665), W64LIT(0x379b9b569baccd2b), W64LIT(0x8a8e8e028e048c01),
+ W64LIT(0xd2a3a3b6a371155b), W64LIT(0x6c0c0c300c603c18), W64LIT(0x847b7bf17bff8af6), W64LIT(0x803535d435b5e16a),
+ W64LIT(0xf51d1d741de8693a), W64LIT(0xb3e0e0a7e05347dd), W64LIT(0x21d7d77bd7f6acb3), W64LIT(0x9cc2c22fc25eed99),
+ W64LIT(0x432e2eb82e6d965c), W64LIT(0x294b4b314b627a96), W64LIT(0x5dfefedffea321e1), W64LIT(0xd5575741578216ae),
+ W64LIT(0xbd15155415a8412a), W64LIT(0xe87777c1779fb6ee), W64LIT(0x923737dc37a5eb6e), W64LIT(0x9ee5e5b3e57b56d7),
+ W64LIT(0x139f9f469f8cd923), W64LIT(0x23f0f0e7f0d317fd), W64LIT(0x204a4a354a6a7f94), W64LIT(0x44dada4fda9e95a9),
+ W64LIT(0xa258587d58fa25b0), W64LIT(0xcfc9c903c906ca8f), W64LIT(0x7c2929a429558d52), W64LIT(0x5a0a0a280a502214),
+ W64LIT(0x50b1b1feb1e14f7f), W64LIT(0xc9a0a0baa0691a5d), W64LIT(0x146b6bb16b7fdad6), W64LIT(0xd985852e855cab17),
+ W64LIT(0x3cbdbdcebd817367), W64LIT(0x8f5d5d695dd234ba), W64LIT(0x9010104010805020), W64LIT(0x07f4f4f7f4f303f5),
+ W64LIT(0xddcbcb0bcb16c08b), W64LIT(0xd33e3ef83eedc67c), W64LIT(0x2d0505140528110a), W64LIT(0x78676781671fe6ce),
+ W64LIT(0x97e4e4b7e47353d5), W64LIT(0x0227279c2725bb4e), W64LIT(0x7341411941325882), W64LIT(0xa78b8b168b2c9d0b),
+ W64LIT(0xf6a7a7a6a7510153), W64LIT(0xb27d7de97dcf94fa), W64LIT(0x4995956e95dcfb37), W64LIT(0x56d8d847d88e9fad),
+ W64LIT(0x70fbfbcbfb8b30eb), W64LIT(0xcdeeee9fee2371c1), W64LIT(0xbb7c7ced7cc791f8), W64LIT(0x716666856617e3cc),
+ W64LIT(0x7bdddd53dda68ea7), W64LIT(0xaf17175c17b84b2e), W64LIT(0x454747014702468e), W64LIT(0x1a9e9e429e84dc21),
+ W64LIT(0xd4caca0fca1ec589), W64LIT(0x582d2db42d75995a), W64LIT(0x2ebfbfc6bf917963), W64LIT(0x3f07071c07381b0e),
+ W64LIT(0xacadad8ead012347), W64LIT(0xb05a5a755aea2fb4), W64LIT(0xef838336836cb51b), W64LIT(0xb63333cc3385ff66),
+ W64LIT(0x5c636391633ff2c6), W64LIT(0x1202020802100a04), W64LIT(0x93aaaa92aa393849), W64LIT(0xde7171d971afa8e2),
+ W64LIT(0xc6c8c807c80ecf8d), W64LIT(0xd119196419c87d32), W64LIT(0x3b49493949727092), W64LIT(0x5fd9d943d9869aaf),
+ W64LIT(0x31f2f2eff2c31df9), W64LIT(0xa8e3e3abe34b48db), W64LIT(0xb95b5b715be22ab6), W64LIT(0xbc88881a8834920d),
+ W64LIT(0x3e9a9a529aa4c829), W64LIT(0x0b262698262dbe4c), W64LIT(0xbf3232c8328dfa64), W64LIT(0x59b0b0fab0e94a7d),
+ W64LIT(0xf2e9e983e91b6acf), W64LIT(0x770f0f3c0f78331e), W64LIT(0x33d5d573d5e6a6b7), W64LIT(0xf480803a8074ba1d),
+ W64LIT(0x27bebec2be997c61), W64LIT(0xebcdcd13cd26de87), W64LIT(0x893434d034bde468), W64LIT(0x3248483d487a7590),
+ W64LIT(0x54ffffdbffab24e3), W64LIT(0x8d7a7af57af78ff4), W64LIT(0x6490907a90f4ea3d), W64LIT(0x9d5f5f615fc23ebe),
+ W64LIT(0x3d202080201da040), W64LIT(0x0f6868bd6867d5d0), W64LIT(0xca1a1a681ad07234), W64LIT(0xb7aeae82ae192c41),
+ W64LIT(0x7db4b4eab4c95e75), W64LIT(0xce54544d549a19a8), W64LIT(0x7f93937693ece53b), W64LIT(0x2f222288220daa44),
+ W64LIT(0x6364648d6407e9c8), W64LIT(0x2af1f1e3f1db12ff), W64LIT(0xcc7373d173bfa2e6), W64LIT(0x8212124812905a24),
+ W64LIT(0x7a40401d403a5d80), W64LIT(0x4808082008402810), W64LIT(0x95c3c32bc356e89b), W64LIT(0xdfecec97ec337bc5),
+ W64LIT(0x4ddbdb4bdb9690ab), W64LIT(0xc0a1a1bea1611f5f), W64LIT(0x918d8d0e8d1c8307), W64LIT(0xc83d3df43df5c97a),
+ W64LIT(0x5b97976697ccf133), W64LIT(0x0000000000000000), W64LIT(0xf9cfcf1bcf36d483), W64LIT(0x6e2b2bac2b458756),
+ W64LIT(0xe17676c57697b3ec), W64LIT(0xe68282328264b019), W64LIT(0x28d6d67fd6fea9b1), W64LIT(0xc31b1b6c1bd87736),
+ W64LIT(0x74b5b5eeb5c15b77), W64LIT(0xbeafaf86af112943), W64LIT(0x1d6a6ab56a77dfd4), W64LIT(0xea50505d50ba0da0),
+ W64LIT(0x5745450945124c8a), W64LIT(0x38f3f3ebf3cb18fb), W64LIT(0xad3030c0309df060), W64LIT(0xc4efef9bef2b74c3),
+ W64LIT(0xda3f3ffc3fe5c37e), W64LIT(0xc755554955921caa), W64LIT(0xdba2a2b2a2791059), W64LIT(0xe9eaea8fea0365c9),
+ W64LIT(0x6a656589650fecca), W64LIT(0x03babad2bab96869), W64LIT(0x4a2f2fbc2f65935e), W64LIT(0x8ec0c027c04ee79d),
+ W64LIT(0x60dede5fdebe81a1), W64LIT(0xfc1c1c701ce06c38), W64LIT(0x46fdfdd3fdbb2ee7), W64LIT(0x1f4d4d294d52649a),
+ W64LIT(0x7692927292e4e039), W64LIT(0xfa7575c9758fbcea), W64LIT(0x3606061806301e0c), W64LIT(0xae8a8a128a249809),
+ W64LIT(0x4bb2b2f2b2f94079), W64LIT(0x85e6e6bfe66359d1), W64LIT(0x7e0e0e380e70361c), W64LIT(0xe71f1f7c1ff8633e),
+ W64LIT(0x556262956237f7c4), W64LIT(0x3ad4d477d4eea3b5), W64LIT(0x81a8a89aa829324d), W64LIT(0x5296966296c4f431),
+ W64LIT(0x62f9f9c3f99b3aef), W64LIT(0xa3c5c533c566f697), W64LIT(0x102525942535b14a), W64LIT(0xab59597959f220b2),
+ W64LIT(0xd084842a8454ae15), W64LIT(0xc57272d572b7a7e4), W64LIT(0xec3939e439d5dd72), W64LIT(0x164c4c2d4c5a6198),
+ W64LIT(0x945e5e655eca3bbc), W64LIT(0x9f7878fd78e785f0), W64LIT(0xe53838e038ddd870), W64LIT(0x988c8c0a8c148605),
+ W64LIT(0x17d1d163d1c6b2bf), W64LIT(0xe4a5a5aea5410b57), W64LIT(0xa1e2e2afe2434dd9), W64LIT(0x4e616199612ff8c2),
+ W64LIT(0x42b3b3f6b3f1457b), W64LIT(0x342121842115a542), W64LIT(0x089c9c4a9c94d625), W64LIT(0xee1e1e781ef0663c),
+ W64LIT(0x6143431143225286), W64LIT(0xb1c7c73bc776fc93), W64LIT(0x4ffcfcd7fcb32be5), W64LIT(0x2404041004201408),
+ W64LIT(0xe351515951b208a2), W64LIT(0x2599995e99bcc72f), W64LIT(0x226d6da96d4fc4da), W64LIT(0x650d0d340d68391a),
+ W64LIT(0x79fafacffa8335e9), W64LIT(0x69dfdf5bdfb684a3), W64LIT(0xa97e7ee57ed79bfc), W64LIT(0x19242490243db448),
+ W64LIT(0xfe3b3bec3bc5d776), W64LIT(0x9aabab96ab313d4b), W64LIT(0xf0cece1fce3ed181), W64LIT(0x9911114411885522),
+ W64LIT(0x838f8f068f0c8903), W64LIT(0x044e4e254e4a6b9c), W64LIT(0x66b7b7e6b7d15173), W64LIT(0xe0ebeb8beb0b60cb),
+ W64LIT(0xc13c3cf03cfdcc78), W64LIT(0xfd81813e817cbf1f), W64LIT(0x4094946a94d4fe35), W64LIT(0x1cf7f7fbf7eb0cf3),
+ W64LIT(0x18b9b9deb9a1676f), W64LIT(0x8b13134c13985f26), W64LIT(0x512c2cb02c7d9c58), W64LIT(0x05d3d36bd3d6b8bb),
+ W64LIT(0x8ce7e7bbe76b5cd3), W64LIT(0x396e6ea56e57cbdc), W64LIT(0xaac4c437c46ef395), W64LIT(0x1b03030c03180f06),
+ W64LIT(0xdc565645568a13ac), W64LIT(0x5e44440d441a4988), W64LIT(0xa07f7fe17fdf9efe), W64LIT(0x88a9a99ea921374f),
+ W64LIT(0x672a2aa82a4d8254), W64LIT(0x0abbbbd6bbb16d6b), W64LIT(0x87c1c123c146e29f), W64LIT(0xf153535153a202a6),
+ W64LIT(0x72dcdc57dcae8ba5), W64LIT(0x530b0b2c0b582716), W64LIT(0x019d9d4e9d9cd327), W64LIT(0x2b6c6cad6c47c1d8),
+ W64LIT(0xa43131c43195f562), W64LIT(0xf37474cd7487b9e8), W64LIT(0x15f6f6fff6e309f1), W64LIT(0x4c464605460a438c),
+ W64LIT(0xa5acac8aac092645), W64LIT(0xb589891e893c970f), W64LIT(0xb414145014a04428), W64LIT(0xbae1e1a3e15b42df),
+ W64LIT(0xa616165816b04e2c), W64LIT(0xf73a3ae83acdd274), W64LIT(0x066969b9696fd0d2), W64LIT(0x4109092409482d12),
+ W64LIT(0xd77070dd70a7ade0), W64LIT(0x6fb6b6e2b6d95471), W64LIT(0x1ed0d067d0ceb7bd), W64LIT(0xd6eded93ed3b7ec7),
+ W64LIT(0xe2cccc17cc2edb85), W64LIT(0x68424215422a5784), W64LIT(0x2c98985a98b4c22d), W64LIT(0xeda4a4aaa4490e55),
+ W64LIT(0x752828a0285d8850), W64LIT(0x865c5c6d5cda31b8), W64LIT(0x6bf8f8c7f8933fed), W64LIT(0xc28686228644a411),
};
static const word64 C2[256] = {
- W64LIT(0xd8781818281878c0), W64LIT(0x26af23236523af05),
- W64LIT(0xb8f9c6c657c6f97e), W64LIT(0xfb6fe8e825e86f13),
- W64LIT(0xcba187879487a14c), W64LIT(0x1162b8b8d5b862a9),
- W64LIT(0x0905010103010508), W64LIT(0x0d6e4f4fd14f6e42),
- W64LIT(0x9bee36365a36eead), W64LIT(0xff04a6a6f7a60459),
- W64LIT(0x0cbdd2d26bd2bdde), W64LIT(0x0e06f5f502f506fb),
- W64LIT(0x968079798b7980ef), W64LIT(0x30ce6f6fb16fce5f),
- W64LIT(0x6def9191ae91effc), W64LIT(0xf8075252f65207aa),
- W64LIT(0x47fd6060a060fd27), W64LIT(0x3576bcbcd9bc7689),
- W64LIT(0x37cd9b9bb09bcdac), W64LIT(0x8a8c8e8e8f8e8c04),
- W64LIT(0xd215a3a3f8a31571), W64LIT(0x6c3c0c0c140c3c60),
- W64LIT(0x848a7b7b8d7b8aff), W64LIT(0x80e135355f35e1b5),
- W64LIT(0xf5691d1d271d69e8), W64LIT(0xb347e0e03de04753),
- W64LIT(0x21acd7d764d7acf6), W64LIT(0x9cedc2c25bc2ed5e),
- W64LIT(0x43962e2e722e966d), W64LIT(0x297a4b4bdd4b7a62),
- W64LIT(0x5d21fefe1ffe21a3), W64LIT(0xd5165757f9571682),
- W64LIT(0xbd4115153f1541a8), W64LIT(0xe8b677779977b69f),
- W64LIT(0x92eb37375937eba5), W64LIT(0x9e56e5e532e5567b),
- W64LIT(0x13d99f9fbc9fd98c), W64LIT(0x2317f0f00df017d3),
- W64LIT(0x207f4a4ade4a7f6a), W64LIT(0x4495dada73da959e),
- W64LIT(0xa2255858e85825fa), W64LIT(0xcfcac9c946c9ca06),
- W64LIT(0x7c8d29297b298d55), W64LIT(0x5a220a0a1e0a2250),
- W64LIT(0x504fb1b1ceb14fe1), W64LIT(0xc91aa0a0fda01a69),
- W64LIT(0x14da6b6bbd6bda7f), W64LIT(0xd9ab85859285ab5c),
- W64LIT(0x3c73bdbddabd7381), W64LIT(0x8f345d5de75d34d2),
- W64LIT(0x9050101030105080), W64LIT(0x0703f4f401f403f3),
- W64LIT(0xddc0cbcb40cbc016), W64LIT(0xd3c63e3e423ec6ed),
- W64LIT(0x2d1105050f051128), W64LIT(0x78e66767a967e61f),
- W64LIT(0x9753e4e431e45373), W64LIT(0x02bb27276927bb25),
- W64LIT(0x73584141c3415832), W64LIT(0xa79d8b8b808b9d2c),
- W64LIT(0xf601a7a7f4a70151), W64LIT(0xb2947d7d877d94cf),
- W64LIT(0x49fb9595a295fbdc), W64LIT(0x569fd8d875d89f8e),
- W64LIT(0x7030fbfb10fb308b), W64LIT(0xcd71eeee2fee7123),
- W64LIT(0xbb917c7c847c91c7), W64LIT(0x71e36666aa66e317),
- W64LIT(0x7b8edddd7add8ea6), W64LIT(0xaf4b171739174bb8),
- W64LIT(0x45464747c9474602), W64LIT(0x1adc9e9ebf9edc84),
- W64LIT(0xd4c5caca43cac51e), W64LIT(0x58992d2d772d9975),
- W64LIT(0x2e79bfbfdcbf7991), W64LIT(0x3f1b070709071b38),
- W64LIT(0xac23adadeaad2301), W64LIT(0xb02f5a5aee5a2fea),
- W64LIT(0xefb583839883b56c), W64LIT(0xb6ff33335533ff85),
- W64LIT(0x5cf26363a563f23f), W64LIT(0x120a020206020a10),
- W64LIT(0x9338aaaae3aa3839), W64LIT(0xdea871719371a8af),
- W64LIT(0xc6cfc8c845c8cf0e), W64LIT(0xd17d19192b197dc8),
- W64LIT(0x3b704949db497072), W64LIT(0x5f9ad9d976d99a86),
- W64LIT(0x311df2f20bf21dc3), W64LIT(0xa848e3e338e3484b),
- W64LIT(0xb92a5b5bed5b2ae2), W64LIT(0xbc92888885889234),
- W64LIT(0x3ec89a9ab39ac8a4), W64LIT(0x0bbe26266a26be2d),
- W64LIT(0xbffa32325632fa8d), W64LIT(0x594ab0b0cdb04ae9),
- W64LIT(0xf26ae9e926e96a1b), W64LIT(0x77330f0f110f3378),
- W64LIT(0x33a6d5d562d5a6e6), W64LIT(0xf4ba80809d80ba74),
- W64LIT(0x277cbebedfbe7c99), W64LIT(0xebdecdcd4acdde26),
- W64LIT(0x89e434345c34e4bd), W64LIT(0x32754848d848757a),
- W64LIT(0x5424ffff1cff24ab), W64LIT(0x8d8f7a7a8e7a8ff7),
- W64LIT(0x64ea9090ad90eaf4), W64LIT(0x9d3e5f5fe15f3ec2),
- W64LIT(0x3da020206020a01d), W64LIT(0x0fd56868b868d567),
- W64LIT(0xca721a1a2e1a72d0), W64LIT(0xb72caeaeefae2c19),
- W64LIT(0x7d5eb4b4c1b45ec9), W64LIT(0xce195454fc54199a),
- W64LIT(0x7fe59393a893e5ec), W64LIT(0x2faa22226622aa0d),
- W64LIT(0x63e96464ac64e907), W64LIT(0x2a12f1f10ef112db),
- W64LIT(0xcca273739573a2bf), W64LIT(0x825a121236125a90),
- W64LIT(0x7a5d4040c0405d3a), W64LIT(0x4828080818082840),
- W64LIT(0x95e8c3c358c3e856), W64LIT(0xdf7becec29ec7b33),
- W64LIT(0x4d90dbdb70db9096), W64LIT(0xc01fa1a1fea11f61),
- W64LIT(0x91838d8d8a8d831c), W64LIT(0xc8c93d3d473dc9f5),
- W64LIT(0x5bf19797a497f1cc), W64LIT(0x0000000000000000),
- W64LIT(0xf9d4cfcf4ccfd436), W64LIT(0x6e872b2b7d2b8745),
- W64LIT(0xe1b376769a76b397), W64LIT(0xe6b082829b82b064),
- W64LIT(0x28a9d6d667d6a9fe), W64LIT(0xc3771b1b2d1b77d8),
- W64LIT(0x745bb5b5c2b55bc1), W64LIT(0xbe29afafecaf2911),
- W64LIT(0x1ddf6a6abe6adf77), W64LIT(0xea0d5050f0500dba),
- W64LIT(0x574c4545cf454c12), W64LIT(0x3818f3f308f318cb),
- W64LIT(0xadf030305030f09d), W64LIT(0xc474efef2cef742b),
- W64LIT(0xdac33f3f413fc3e5), W64LIT(0xc71c5555ff551c92),
- W64LIT(0xdb10a2a2fba21079), W64LIT(0xe965eaea23ea6503),
- W64LIT(0x6aec6565af65ec0f), W64LIT(0x0368babad3ba68b9),
- W64LIT(0x4a932f2f712f9365), W64LIT(0x8ee7c0c05dc0e74e),
- W64LIT(0x6081dede7fde81be), W64LIT(0xfc6c1c1c241c6ce0),
- W64LIT(0x462efdfd1afd2ebb), W64LIT(0x1f644d4dd74d6452),
- W64LIT(0x76e09292ab92e0e4), W64LIT(0xfabc75759f75bc8f),
- W64LIT(0x361e06060a061e30), W64LIT(0xae988a8a838a9824),
- W64LIT(0x4b40b2b2cbb240f9), W64LIT(0x8559e6e637e65963),
- W64LIT(0x7e360e0e120e3670), W64LIT(0xe7631f1f211f63f8),
- W64LIT(0x55f76262a662f737), W64LIT(0x3aa3d4d461d4a3ee),
- W64LIT(0x8132a8a8e5a83229), W64LIT(0x52f49696a796f4c4),
- W64LIT(0x623af9f916f93a9b), W64LIT(0xa3f6c5c552c5f666),
- W64LIT(0x10b125256f25b135), W64LIT(0xab205959eb5920f2),
- W64LIT(0xd0ae84849184ae54), W64LIT(0xc5a772729672a7b7),
- W64LIT(0xecdd39394b39ddd5), W64LIT(0x16614c4cd44c615a),
- W64LIT(0x943b5e5ee25e3bca), W64LIT(0x9f857878887885e7),
- W64LIT(0xe5d838384838d8dd), W64LIT(0x98868c8c898c8614),
- W64LIT(0x17b2d1d16ed1b2c6), W64LIT(0xe40ba5a5f2a50b41),
- W64LIT(0xa14de2e23be24d43), W64LIT(0x4ef86161a361f82f),
- W64LIT(0x4245b3b3c8b345f1), W64LIT(0x34a521216321a515),
- W64LIT(0x08d69c9cb99cd694), W64LIT(0xee661e1e221e66f0),
- W64LIT(0x61524343c5435222), W64LIT(0xb1fcc7c754c7fc76),
- W64LIT(0x4f2bfcfc19fc2bb3), W64LIT(0x241404040c041420),
- W64LIT(0xe3085151f35108b2), W64LIT(0x25c79999b699c7bc),
- W64LIT(0x22c46d6db76dc44f), W64LIT(0x65390d0d170d3968),
- W64LIT(0x7935fafa13fa3583), W64LIT(0x6984dfdf7cdf84b6),
- W64LIT(0xa99b7e7e827e9bd7), W64LIT(0x19b424246c24b43d),
- W64LIT(0xfed73b3b4d3bd7c5), W64LIT(0x9a3dababe0ab3d31),
- W64LIT(0xf0d1cece4fced13e), W64LIT(0x9955111133115588),
- W64LIT(0x83898f8f8c8f890c), W64LIT(0x046b4e4ed24e6b4a),
- W64LIT(0x6651b7b7c4b751d1), W64LIT(0xe060ebeb20eb600b),
- W64LIT(0xc1cc3c3c443cccfd), W64LIT(0xfdbf81819e81bf7c),
- W64LIT(0x40fe9494a194fed4), W64LIT(0x1c0cf7f704f70ceb),
- W64LIT(0x1867b9b9d6b967a1), W64LIT(0x8b5f131335135f98),
- W64LIT(0x519c2c2c742c9c7d), W64LIT(0x05b8d3d368d3b8d6),
- W64LIT(0x8c5ce7e734e75c6b), W64LIT(0x39cb6e6eb26ecb57),
- W64LIT(0xaaf3c4c451c4f36e), W64LIT(0x1b0f030305030f18),
- W64LIT(0xdc135656fa56138a), W64LIT(0x5e494444cc44491a),
- W64LIT(0xa09e7f7f817f9edf), W64LIT(0x8837a9a9e6a93721),
- W64LIT(0x67822a2a7e2a824d), W64LIT(0x0a6dbbbbd0bb6db1),
- W64LIT(0x87e2c1c15ec1e246), W64LIT(0xf1025353f55302a2),
- W64LIT(0x728bdcdc79dc8bae), W64LIT(0x53270b0b1d0b2758),
- W64LIT(0x01d39d9dba9dd39c), W64LIT(0x2bc16c6cb46cc147),
- W64LIT(0xa4f531315331f595), W64LIT(0xf3b974749c74b987),
- W64LIT(0x1509f6f607f609e3), W64LIT(0x4c434646ca46430a),
- W64LIT(0xa526acace9ac2609), W64LIT(0xb59789898689973c),
- W64LIT(0xb44414143c1444a0), W64LIT(0xba42e1e13ee1425b),
- W64LIT(0xa64e16163a164eb0), W64LIT(0xf7d23a3a4e3ad2cd),
- W64LIT(0x06d06969bb69d06f), W64LIT(0x412d09091b092d48),
- W64LIT(0xd7ad70709070ada7), W64LIT(0x6f54b6b6c7b654d9),
- W64LIT(0x1eb7d0d06dd0b7ce), W64LIT(0xd67eeded2aed7e3b),
- W64LIT(0xe2dbcccc49ccdb2e), W64LIT(0x68574242c642572a),
- W64LIT(0x2cc29898b598c2b4), W64LIT(0xed0ea4a4f1a40e49),
- W64LIT(0x758828287828885d), W64LIT(0x86315c5ce45c31da),
- W64LIT(0x6b3ff8f815f83f93), W64LIT(0xc2a486869786a444),
+ W64LIT(0x30d818186018c078), W64LIT(0x462623238c2305af), W64LIT(0x91b8c6c63fc67ef9), W64LIT(0xcdfbe8e887e8136f),
+ W64LIT(0x13cb878726874ca1), W64LIT(0x6d11b8b8dab8a962), W64LIT(0x0209010104010805), W64LIT(0x9e0d4f4f214f426e),
+ W64LIT(0x6c9b3636d836adee), W64LIT(0x51ffa6a6a2a65904), W64LIT(0xb90cd2d26fd2debd), W64LIT(0xf70ef5f5f3f5fb06),
+ W64LIT(0xf2967979f979ef80), W64LIT(0xde306f6fa16f5fce), W64LIT(0x3f6d91917e91fcef), W64LIT(0xa4f852525552aa07),
+ W64LIT(0xc04760609d6027fd), W64LIT(0x6535bcbccabc8976), W64LIT(0x2b379b9b569baccd), W64LIT(0x018a8e8e028e048c),
+ W64LIT(0x5bd2a3a3b6a37115), W64LIT(0x186c0c0c300c603c), W64LIT(0xf6847b7bf17bff8a), W64LIT(0x6a803535d435b5e1),
+ W64LIT(0x3af51d1d741de869), W64LIT(0xddb3e0e0a7e05347), W64LIT(0xb321d7d77bd7f6ac), W64LIT(0x999cc2c22fc25eed),
+ W64LIT(0x5c432e2eb82e6d96), W64LIT(0x96294b4b314b627a), W64LIT(0xe15dfefedffea321), W64LIT(0xaed5575741578216),
+ W64LIT(0x2abd15155415a841), W64LIT(0xeee87777c1779fb6), W64LIT(0x6e923737dc37a5eb), W64LIT(0xd79ee5e5b3e57b56),
+ W64LIT(0x23139f9f469f8cd9), W64LIT(0xfd23f0f0e7f0d317), W64LIT(0x94204a4a354a6a7f), W64LIT(0xa944dada4fda9e95),
+ W64LIT(0xb0a258587d58fa25), W64LIT(0x8fcfc9c903c906ca), W64LIT(0x527c2929a429558d), W64LIT(0x145a0a0a280a5022),
+ W64LIT(0x7f50b1b1feb1e14f), W64LIT(0x5dc9a0a0baa0691a), W64LIT(0xd6146b6bb16b7fda), W64LIT(0x17d985852e855cab),
+ W64LIT(0x673cbdbdcebd8173), W64LIT(0xba8f5d5d695dd234), W64LIT(0x2090101040108050), W64LIT(0xf507f4f4f7f4f303),
+ W64LIT(0x8bddcbcb0bcb16c0), W64LIT(0x7cd33e3ef83eedc6), W64LIT(0x0a2d050514052811), W64LIT(0xce78676781671fe6),
+ W64LIT(0xd597e4e4b7e47353), W64LIT(0x4e0227279c2725bb), W64LIT(0x8273414119413258), W64LIT(0x0ba78b8b168b2c9d),
+ W64LIT(0x53f6a7a7a6a75101), W64LIT(0xfab27d7de97dcf94), W64LIT(0x374995956e95dcfb), W64LIT(0xad56d8d847d88e9f),
+ W64LIT(0xeb70fbfbcbfb8b30), W64LIT(0xc1cdeeee9fee2371), W64LIT(0xf8bb7c7ced7cc791), W64LIT(0xcc716666856617e3),
+ W64LIT(0xa77bdddd53dda68e), W64LIT(0x2eaf17175c17b84b), W64LIT(0x8e45474701470246), W64LIT(0x211a9e9e429e84dc),
+ W64LIT(0x89d4caca0fca1ec5), W64LIT(0x5a582d2db42d7599), W64LIT(0x632ebfbfc6bf9179), W64LIT(0x0e3f07071c07381b),
+ W64LIT(0x47acadad8ead0123), W64LIT(0xb4b05a5a755aea2f), W64LIT(0x1bef838336836cb5), W64LIT(0x66b63333cc3385ff),
+ W64LIT(0xc65c636391633ff2), W64LIT(0x041202020802100a), W64LIT(0x4993aaaa92aa3938), W64LIT(0xe2de7171d971afa8),
+ W64LIT(0x8dc6c8c807c80ecf), W64LIT(0x32d119196419c87d), W64LIT(0x923b494939497270), W64LIT(0xaf5fd9d943d9869a),
+ W64LIT(0xf931f2f2eff2c31d), W64LIT(0xdba8e3e3abe34b48), W64LIT(0xb6b95b5b715be22a), W64LIT(0x0dbc88881a883492),
+ W64LIT(0x293e9a9a529aa4c8), W64LIT(0x4c0b262698262dbe), W64LIT(0x64bf3232c8328dfa), W64LIT(0x7d59b0b0fab0e94a),
+ W64LIT(0xcff2e9e983e91b6a), W64LIT(0x1e770f0f3c0f7833), W64LIT(0xb733d5d573d5e6a6), W64LIT(0x1df480803a8074ba),
+ W64LIT(0x6127bebec2be997c), W64LIT(0x87ebcdcd13cd26de), W64LIT(0x68893434d034bde4), W64LIT(0x903248483d487a75),
+ W64LIT(0xe354ffffdbffab24), W64LIT(0xf48d7a7af57af78f), W64LIT(0x3d6490907a90f4ea), W64LIT(0xbe9d5f5f615fc23e),
+ W64LIT(0x403d202080201da0), W64LIT(0xd00f6868bd6867d5), W64LIT(0x34ca1a1a681ad072), W64LIT(0x41b7aeae82ae192c),
+ W64LIT(0x757db4b4eab4c95e), W64LIT(0xa8ce54544d549a19), W64LIT(0x3b7f93937693ece5), W64LIT(0x442f222288220daa),
+ W64LIT(0xc86364648d6407e9), W64LIT(0xff2af1f1e3f1db12), W64LIT(0xe6cc7373d173bfa2), W64LIT(0x248212124812905a),
+ W64LIT(0x807a40401d403a5d), W64LIT(0x1048080820084028), W64LIT(0x9b95c3c32bc356e8), W64LIT(0xc5dfecec97ec337b),
+ W64LIT(0xab4ddbdb4bdb9690), W64LIT(0x5fc0a1a1bea1611f), W64LIT(0x07918d8d0e8d1c83), W64LIT(0x7ac83d3df43df5c9),
+ W64LIT(0x335b97976697ccf1), W64LIT(0x0000000000000000), W64LIT(0x83f9cfcf1bcf36d4), W64LIT(0x566e2b2bac2b4587),
+ W64LIT(0xece17676c57697b3), W64LIT(0x19e68282328264b0), W64LIT(0xb128d6d67fd6fea9), W64LIT(0x36c31b1b6c1bd877),
+ W64LIT(0x7774b5b5eeb5c15b), W64LIT(0x43beafaf86af1129), W64LIT(0xd41d6a6ab56a77df), W64LIT(0xa0ea50505d50ba0d),
+ W64LIT(0x8a5745450945124c), W64LIT(0xfb38f3f3ebf3cb18), W64LIT(0x60ad3030c0309df0), W64LIT(0xc3c4efef9bef2b74),
+ W64LIT(0x7eda3f3ffc3fe5c3), W64LIT(0xaac755554955921c), W64LIT(0x59dba2a2b2a27910), W64LIT(0xc9e9eaea8fea0365),
+ W64LIT(0xca6a656589650fec), W64LIT(0x6903babad2bab968), W64LIT(0x5e4a2f2fbc2f6593), W64LIT(0x9d8ec0c027c04ee7),
+ W64LIT(0xa160dede5fdebe81), W64LIT(0x38fc1c1c701ce06c), W64LIT(0xe746fdfdd3fdbb2e), W64LIT(0x9a1f4d4d294d5264),
+ W64LIT(0x397692927292e4e0), W64LIT(0xeafa7575c9758fbc), W64LIT(0x0c3606061806301e), W64LIT(0x09ae8a8a128a2498),
+ W64LIT(0x794bb2b2f2b2f940), W64LIT(0xd185e6e6bfe66359), W64LIT(0x1c7e0e0e380e7036), W64LIT(0x3ee71f1f7c1ff863),
+ W64LIT(0xc4556262956237f7), W64LIT(0xb53ad4d477d4eea3), W64LIT(0x4d81a8a89aa82932), W64LIT(0x315296966296c4f4),
+ W64LIT(0xef62f9f9c3f99b3a), W64LIT(0x97a3c5c533c566f6), W64LIT(0x4a102525942535b1), W64LIT(0xb2ab59597959f220),
+ W64LIT(0x15d084842a8454ae), W64LIT(0xe4c57272d572b7a7), W64LIT(0x72ec3939e439d5dd), W64LIT(0x98164c4c2d4c5a61),
+ W64LIT(0xbc945e5e655eca3b), W64LIT(0xf09f7878fd78e785), W64LIT(0x70e53838e038ddd8), W64LIT(0x05988c8c0a8c1486),
+ W64LIT(0xbf17d1d163d1c6b2), W64LIT(0x57e4a5a5aea5410b), W64LIT(0xd9a1e2e2afe2434d), W64LIT(0xc24e616199612ff8),
+ W64LIT(0x7b42b3b3f6b3f145), W64LIT(0x42342121842115a5), W64LIT(0x25089c9c4a9c94d6), W64LIT(0x3cee1e1e781ef066),
+ W64LIT(0x8661434311432252), W64LIT(0x93b1c7c73bc776fc), W64LIT(0xe54ffcfcd7fcb32b), W64LIT(0x0824040410042014),
+ W64LIT(0xa2e351515951b208), W64LIT(0x2f2599995e99bcc7), W64LIT(0xda226d6da96d4fc4), W64LIT(0x1a650d0d340d6839),
+ W64LIT(0xe979fafacffa8335), W64LIT(0xa369dfdf5bdfb684), W64LIT(0xfca97e7ee57ed79b), W64LIT(0x4819242490243db4),
+ W64LIT(0x76fe3b3bec3bc5d7), W64LIT(0x4b9aabab96ab313d), W64LIT(0x81f0cece1fce3ed1), W64LIT(0x2299111144118855),
+ W64LIT(0x03838f8f068f0c89), W64LIT(0x9c044e4e254e4a6b), W64LIT(0x7366b7b7e6b7d151), W64LIT(0xcbe0ebeb8beb0b60),
+ W64LIT(0x78c13c3cf03cfdcc), W64LIT(0x1ffd81813e817cbf), W64LIT(0x354094946a94d4fe), W64LIT(0xf31cf7f7fbf7eb0c),
+ W64LIT(0x6f18b9b9deb9a167), W64LIT(0x268b13134c13985f), W64LIT(0x58512c2cb02c7d9c), W64LIT(0xbb05d3d36bd3d6b8),
+ W64LIT(0xd38ce7e7bbe76b5c), W64LIT(0xdc396e6ea56e57cb), W64LIT(0x95aac4c437c46ef3), W64LIT(0x061b03030c03180f),
+ W64LIT(0xacdc565645568a13), W64LIT(0x885e44440d441a49), W64LIT(0xfea07f7fe17fdf9e), W64LIT(0x4f88a9a99ea92137),
+ W64LIT(0x54672a2aa82a4d82), W64LIT(0x6b0abbbbd6bbb16d), W64LIT(0x9f87c1c123c146e2), W64LIT(0xa6f153535153a202),
+ W64LIT(0xa572dcdc57dcae8b), W64LIT(0x16530b0b2c0b5827), W64LIT(0x27019d9d4e9d9cd3), W64LIT(0xd82b6c6cad6c47c1),
+ W64LIT(0x62a43131c43195f5), W64LIT(0xe8f37474cd7487b9), W64LIT(0xf115f6f6fff6e309), W64LIT(0x8c4c464605460a43),
+ W64LIT(0x45a5acac8aac0926), W64LIT(0x0fb589891e893c97), W64LIT(0x28b414145014a044), W64LIT(0xdfbae1e1a3e15b42),
+ W64LIT(0x2ca616165816b04e), W64LIT(0x74f73a3ae83acdd2), W64LIT(0xd2066969b9696fd0), W64LIT(0x124109092409482d),
+ W64LIT(0xe0d77070dd70a7ad), W64LIT(0x716fb6b6e2b6d954), W64LIT(0xbd1ed0d067d0ceb7), W64LIT(0xc7d6eded93ed3b7e),
+ W64LIT(0x85e2cccc17cc2edb), W64LIT(0x8468424215422a57), W64LIT(0x2d2c98985a98b4c2), W64LIT(0x55eda4a4aaa4490e),
+ W64LIT(0x50752828a0285d88), W64LIT(0xb8865c5c6d5cda31), W64LIT(0xed6bf8f8c7f8933f), W64LIT(0x11c28686228644a4),
};
static const word64 C3[256] = {
- W64LIT(0xc0d8781818281878), W64LIT(0x0526af23236523af),
- W64LIT(0x7eb8f9c6c657c6f9), W64LIT(0x13fb6fe8e825e86f),
- W64LIT(0x4ccba187879487a1), W64LIT(0xa91162b8b8d5b862),
- W64LIT(0x0809050101030105), W64LIT(0x420d6e4f4fd14f6e),
- W64LIT(0xad9bee36365a36ee), W64LIT(0x59ff04a6a6f7a604),
- W64LIT(0xde0cbdd2d26bd2bd), W64LIT(0xfb0e06f5f502f506),
- W64LIT(0xef968079798b7980), W64LIT(0x5f30ce6f6fb16fce),
- W64LIT(0xfc6def9191ae91ef), W64LIT(0xaaf8075252f65207),
- W64LIT(0x2747fd6060a060fd), W64LIT(0x893576bcbcd9bc76),
- W64LIT(0xac37cd9b9bb09bcd), W64LIT(0x048a8c8e8e8f8e8c),
- W64LIT(0x71d215a3a3f8a315), W64LIT(0x606c3c0c0c140c3c),
- W64LIT(0xff848a7b7b8d7b8a), W64LIT(0xb580e135355f35e1),
- W64LIT(0xe8f5691d1d271d69), W64LIT(0x53b347e0e03de047),
- W64LIT(0xf621acd7d764d7ac), W64LIT(0x5e9cedc2c25bc2ed),
- W64LIT(0x6d43962e2e722e96), W64LIT(0x62297a4b4bdd4b7a),
- W64LIT(0xa35d21fefe1ffe21), W64LIT(0x82d5165757f95716),
- W64LIT(0xa8bd4115153f1541), W64LIT(0x9fe8b677779977b6),
- W64LIT(0xa592eb37375937eb), W64LIT(0x7b9e56e5e532e556),
- W64LIT(0x8c13d99f9fbc9fd9), W64LIT(0xd32317f0f00df017),
- W64LIT(0x6a207f4a4ade4a7f), W64LIT(0x9e4495dada73da95),
- W64LIT(0xfaa2255858e85825), W64LIT(0x06cfcac9c946c9ca),
- W64LIT(0x557c8d29297b298d), W64LIT(0x505a220a0a1e0a22),
- W64LIT(0xe1504fb1b1ceb14f), W64LIT(0x69c91aa0a0fda01a),
- W64LIT(0x7f14da6b6bbd6bda), W64LIT(0x5cd9ab85859285ab),
- W64LIT(0x813c73bdbddabd73), W64LIT(0xd28f345d5de75d34),
- W64LIT(0x8090501010301050), W64LIT(0xf30703f4f401f403),
- W64LIT(0x16ddc0cbcb40cbc0), W64LIT(0xedd3c63e3e423ec6),
- W64LIT(0x282d1105050f0511), W64LIT(0x1f78e66767a967e6),
- W64LIT(0x739753e4e431e453), W64LIT(0x2502bb27276927bb),
- W64LIT(0x3273584141c34158), W64LIT(0x2ca79d8b8b808b9d),
- W64LIT(0x51f601a7a7f4a701), W64LIT(0xcfb2947d7d877d94),
- W64LIT(0xdc49fb9595a295fb), W64LIT(0x8e569fd8d875d89f),
- W64LIT(0x8b7030fbfb10fb30), W64LIT(0x23cd71eeee2fee71),
- W64LIT(0xc7bb917c7c847c91), W64LIT(0x1771e36666aa66e3),
- W64LIT(0xa67b8edddd7add8e), W64LIT(0xb8af4b171739174b),
- W64LIT(0x0245464747c94746), W64LIT(0x841adc9e9ebf9edc),
- W64LIT(0x1ed4c5caca43cac5), W64LIT(0x7558992d2d772d99),
- W64LIT(0x912e79bfbfdcbf79), W64LIT(0x383f1b070709071b),
- W64LIT(0x01ac23adadeaad23), W64LIT(0xeab02f5a5aee5a2f),
- W64LIT(0x6cefb583839883b5), W64LIT(0x85b6ff33335533ff),
- W64LIT(0x3f5cf26363a563f2), W64LIT(0x10120a020206020a),
- W64LIT(0x399338aaaae3aa38), W64LIT(0xafdea871719371a8),
- W64LIT(0x0ec6cfc8c845c8cf), W64LIT(0xc8d17d19192b197d),
- W64LIT(0x723b704949db4970), W64LIT(0x865f9ad9d976d99a),
- W64LIT(0xc3311df2f20bf21d), W64LIT(0x4ba848e3e338e348),
- W64LIT(0xe2b92a5b5bed5b2a), W64LIT(0x34bc928888858892),
- W64LIT(0xa43ec89a9ab39ac8), W64LIT(0x2d0bbe26266a26be),
- W64LIT(0x8dbffa32325632fa), W64LIT(0xe9594ab0b0cdb04a),
- W64LIT(0x1bf26ae9e926e96a), W64LIT(0x7877330f0f110f33),
- W64LIT(0xe633a6d5d562d5a6), W64LIT(0x74f4ba80809d80ba),
- W64LIT(0x99277cbebedfbe7c), W64LIT(0x26ebdecdcd4acdde),
- W64LIT(0xbd89e434345c34e4), W64LIT(0x7a32754848d84875),
- W64LIT(0xab5424ffff1cff24), W64LIT(0xf78d8f7a7a8e7a8f),
- W64LIT(0xf464ea9090ad90ea), W64LIT(0xc29d3e5f5fe15f3e),
- W64LIT(0x1d3da020206020a0), W64LIT(0x670fd56868b868d5),
- W64LIT(0xd0ca721a1a2e1a72), W64LIT(0x19b72caeaeefae2c),
- W64LIT(0xc97d5eb4b4c1b45e), W64LIT(0x9ace195454fc5419),
- W64LIT(0xec7fe59393a893e5), W64LIT(0x0d2faa22226622aa),
- W64LIT(0x0763e96464ac64e9), W64LIT(0xdb2a12f1f10ef112),
- W64LIT(0xbfcca273739573a2), W64LIT(0x90825a121236125a),
- W64LIT(0x3a7a5d4040c0405d), W64LIT(0x4048280808180828),
- W64LIT(0x5695e8c3c358c3e8), W64LIT(0x33df7becec29ec7b),
- W64LIT(0x964d90dbdb70db90), W64LIT(0x61c01fa1a1fea11f),
- W64LIT(0x1c91838d8d8a8d83), W64LIT(0xf5c8c93d3d473dc9),
- W64LIT(0xcc5bf19797a497f1), W64LIT(0x0000000000000000),
- W64LIT(0x36f9d4cfcf4ccfd4), W64LIT(0x456e872b2b7d2b87),
- W64LIT(0x97e1b376769a76b3), W64LIT(0x64e6b082829b82b0),
- W64LIT(0xfe28a9d6d667d6a9), W64LIT(0xd8c3771b1b2d1b77),
- W64LIT(0xc1745bb5b5c2b55b), W64LIT(0x11be29afafecaf29),
- W64LIT(0x771ddf6a6abe6adf), W64LIT(0xbaea0d5050f0500d),
- W64LIT(0x12574c4545cf454c), W64LIT(0xcb3818f3f308f318),
- W64LIT(0x9dadf030305030f0), W64LIT(0x2bc474efef2cef74),
- W64LIT(0xe5dac33f3f413fc3), W64LIT(0x92c71c5555ff551c),
- W64LIT(0x79db10a2a2fba210), W64LIT(0x03e965eaea23ea65),
- W64LIT(0x0f6aec6565af65ec), W64LIT(0xb90368babad3ba68),
- W64LIT(0x654a932f2f712f93), W64LIT(0x4e8ee7c0c05dc0e7),
- W64LIT(0xbe6081dede7fde81), W64LIT(0xe0fc6c1c1c241c6c),
- W64LIT(0xbb462efdfd1afd2e), W64LIT(0x521f644d4dd74d64),
- W64LIT(0xe476e09292ab92e0), W64LIT(0x8ffabc75759f75bc),
- W64LIT(0x30361e06060a061e), W64LIT(0x24ae988a8a838a98),
- W64LIT(0xf94b40b2b2cbb240), W64LIT(0x638559e6e637e659),
- W64LIT(0x707e360e0e120e36), W64LIT(0xf8e7631f1f211f63),
- W64LIT(0x3755f76262a662f7), W64LIT(0xee3aa3d4d461d4a3),
- W64LIT(0x298132a8a8e5a832), W64LIT(0xc452f49696a796f4),
- W64LIT(0x9b623af9f916f93a), W64LIT(0x66a3f6c5c552c5f6),
- W64LIT(0x3510b125256f25b1), W64LIT(0xf2ab205959eb5920),
- W64LIT(0x54d0ae84849184ae), W64LIT(0xb7c5a772729672a7),
- W64LIT(0xd5ecdd39394b39dd), W64LIT(0x5a16614c4cd44c61),
- W64LIT(0xca943b5e5ee25e3b), W64LIT(0xe79f857878887885),
- W64LIT(0xdde5d838384838d8), W64LIT(0x1498868c8c898c86),
- W64LIT(0xc617b2d1d16ed1b2), W64LIT(0x41e40ba5a5f2a50b),
- W64LIT(0x43a14de2e23be24d), W64LIT(0x2f4ef86161a361f8),
- W64LIT(0xf14245b3b3c8b345), W64LIT(0x1534a521216321a5),
- W64LIT(0x9408d69c9cb99cd6), W64LIT(0xf0ee661e1e221e66),
- W64LIT(0x2261524343c54352), W64LIT(0x76b1fcc7c754c7fc),
- W64LIT(0xb34f2bfcfc19fc2b), W64LIT(0x20241404040c0414),
- W64LIT(0xb2e3085151f35108), W64LIT(0xbc25c79999b699c7),
- W64LIT(0x4f22c46d6db76dc4), W64LIT(0x6865390d0d170d39),
- W64LIT(0x837935fafa13fa35), W64LIT(0xb66984dfdf7cdf84),
- W64LIT(0xd7a99b7e7e827e9b), W64LIT(0x3d19b424246c24b4),
- W64LIT(0xc5fed73b3b4d3bd7), W64LIT(0x319a3dababe0ab3d),
- W64LIT(0x3ef0d1cece4fced1), W64LIT(0x8899551111331155),
- W64LIT(0x0c83898f8f8c8f89), W64LIT(0x4a046b4e4ed24e6b),
- W64LIT(0xd16651b7b7c4b751), W64LIT(0x0be060ebeb20eb60),
- W64LIT(0xfdc1cc3c3c443ccc), W64LIT(0x7cfdbf81819e81bf),
- W64LIT(0xd440fe9494a194fe), W64LIT(0xeb1c0cf7f704f70c),
- W64LIT(0xa11867b9b9d6b967), W64LIT(0x988b5f131335135f),
- W64LIT(0x7d519c2c2c742c9c), W64LIT(0xd605b8d3d368d3b8),
- W64LIT(0x6b8c5ce7e734e75c), W64LIT(0x5739cb6e6eb26ecb),
- W64LIT(0x6eaaf3c4c451c4f3), W64LIT(0x181b0f030305030f),
- W64LIT(0x8adc135656fa5613), W64LIT(0x1a5e494444cc4449),
- W64LIT(0xdfa09e7f7f817f9e), W64LIT(0x218837a9a9e6a937),
- W64LIT(0x4d67822a2a7e2a82), W64LIT(0xb10a6dbbbbd0bb6d),
- W64LIT(0x4687e2c1c15ec1e2), W64LIT(0xa2f1025353f55302),
- W64LIT(0xae728bdcdc79dc8b), W64LIT(0x5853270b0b1d0b27),
- W64LIT(0x9c01d39d9dba9dd3), W64LIT(0x472bc16c6cb46cc1),
- W64LIT(0x95a4f531315331f5), W64LIT(0x87f3b974749c74b9),
- W64LIT(0xe31509f6f607f609), W64LIT(0x0a4c434646ca4643),
- W64LIT(0x09a526acace9ac26), W64LIT(0x3cb5978989868997),
- W64LIT(0xa0b44414143c1444), W64LIT(0x5bba42e1e13ee142),
- W64LIT(0xb0a64e16163a164e), W64LIT(0xcdf7d23a3a4e3ad2),
- W64LIT(0x6f06d06969bb69d0), W64LIT(0x48412d09091b092d),
- W64LIT(0xa7d7ad70709070ad), W64LIT(0xd96f54b6b6c7b654),
- W64LIT(0xce1eb7d0d06dd0b7), W64LIT(0x3bd67eeded2aed7e),
- W64LIT(0x2ee2dbcccc49ccdb), W64LIT(0x2a68574242c64257),
- W64LIT(0xb42cc29898b598c2), W64LIT(0x49ed0ea4a4f1a40e),
- W64LIT(0x5d75882828782888), W64LIT(0xda86315c5ce45c31),
- W64LIT(0x936b3ff8f815f83f), W64LIT(0x44c2a486869786a4),
+ W64LIT(0x7830d818186018c0), W64LIT(0xaf462623238c2305), W64LIT(0xf991b8c6c63fc67e), W64LIT(0x6fcdfbe8e887e813),
+ W64LIT(0xa113cb878726874c), W64LIT(0x626d11b8b8dab8a9), W64LIT(0x0502090101040108), W64LIT(0x6e9e0d4f4f214f42),
+ W64LIT(0xee6c9b3636d836ad), W64LIT(0x0451ffa6a6a2a659), W64LIT(0xbdb90cd2d26fd2de), W64LIT(0x06f70ef5f5f3f5fb),
+ W64LIT(0x80f2967979f979ef), W64LIT(0xcede306f6fa16f5f), W64LIT(0xef3f6d91917e91fc), W64LIT(0x07a4f852525552aa),
+ W64LIT(0xfdc04760609d6027), W64LIT(0x766535bcbccabc89), W64LIT(0xcd2b379b9b569bac), W64LIT(0x8c018a8e8e028e04),
+ W64LIT(0x155bd2a3a3b6a371), W64LIT(0x3c186c0c0c300c60), W64LIT(0x8af6847b7bf17bff), W64LIT(0xe16a803535d435b5),
+ W64LIT(0x693af51d1d741de8), W64LIT(0x47ddb3e0e0a7e053), W64LIT(0xacb321d7d77bd7f6), W64LIT(0xed999cc2c22fc25e),
+ W64LIT(0x965c432e2eb82e6d), W64LIT(0x7a96294b4b314b62), W64LIT(0x21e15dfefedffea3), W64LIT(0x16aed55757415782),
+ W64LIT(0x412abd15155415a8), W64LIT(0xb6eee87777c1779f), W64LIT(0xeb6e923737dc37a5), W64LIT(0x56d79ee5e5b3e57b),
+ W64LIT(0xd923139f9f469f8c), W64LIT(0x17fd23f0f0e7f0d3), W64LIT(0x7f94204a4a354a6a), W64LIT(0x95a944dada4fda9e),
+ W64LIT(0x25b0a258587d58fa), W64LIT(0xca8fcfc9c903c906), W64LIT(0x8d527c2929a42955), W64LIT(0x22145a0a0a280a50),
+ W64LIT(0x4f7f50b1b1feb1e1), W64LIT(0x1a5dc9a0a0baa069), W64LIT(0xdad6146b6bb16b7f), W64LIT(0xab17d985852e855c),
+ W64LIT(0x73673cbdbdcebd81), W64LIT(0x34ba8f5d5d695dd2), W64LIT(0x5020901010401080), W64LIT(0x03f507f4f4f7f4f3),
+ W64LIT(0xc08bddcbcb0bcb16), W64LIT(0xc67cd33e3ef83eed), W64LIT(0x110a2d0505140528), W64LIT(0xe6ce78676781671f),
+ W64LIT(0x53d597e4e4b7e473), W64LIT(0xbb4e0227279c2725), W64LIT(0x5882734141194132), W64LIT(0x9d0ba78b8b168b2c),
+ W64LIT(0x0153f6a7a7a6a751), W64LIT(0x94fab27d7de97dcf), W64LIT(0xfb374995956e95dc), W64LIT(0x9fad56d8d847d88e),
+ W64LIT(0x30eb70fbfbcbfb8b), W64LIT(0x71c1cdeeee9fee23), W64LIT(0x91f8bb7c7ced7cc7), W64LIT(0xe3cc716666856617),
+ W64LIT(0x8ea77bdddd53dda6), W64LIT(0x4b2eaf17175c17b8), W64LIT(0x468e454747014702), W64LIT(0xdc211a9e9e429e84),
+ W64LIT(0xc589d4caca0fca1e), W64LIT(0x995a582d2db42d75), W64LIT(0x79632ebfbfc6bf91), W64LIT(0x1b0e3f07071c0738),
+ W64LIT(0x2347acadad8ead01), W64LIT(0x2fb4b05a5a755aea), W64LIT(0xb51bef838336836c), W64LIT(0xff66b63333cc3385),
+ W64LIT(0xf2c65c636391633f), W64LIT(0x0a04120202080210), W64LIT(0x384993aaaa92aa39), W64LIT(0xa8e2de7171d971af),
+ W64LIT(0xcf8dc6c8c807c80e), W64LIT(0x7d32d119196419c8), W64LIT(0x70923b4949394972), W64LIT(0x9aaf5fd9d943d986),
+ W64LIT(0x1df931f2f2eff2c3), W64LIT(0x48dba8e3e3abe34b), W64LIT(0x2ab6b95b5b715be2), W64LIT(0x920dbc88881a8834),
+ W64LIT(0xc8293e9a9a529aa4), W64LIT(0xbe4c0b262698262d), W64LIT(0xfa64bf3232c8328d), W64LIT(0x4a7d59b0b0fab0e9),
+ W64LIT(0x6acff2e9e983e91b), W64LIT(0x331e770f0f3c0f78), W64LIT(0xa6b733d5d573d5e6), W64LIT(0xba1df480803a8074),
+ W64LIT(0x7c6127bebec2be99), W64LIT(0xde87ebcdcd13cd26), W64LIT(0xe468893434d034bd), W64LIT(0x75903248483d487a),
+ W64LIT(0x24e354ffffdbffab), W64LIT(0x8ff48d7a7af57af7), W64LIT(0xea3d6490907a90f4), W64LIT(0x3ebe9d5f5f615fc2),
+ W64LIT(0xa0403d202080201d), W64LIT(0xd5d00f6868bd6867), W64LIT(0x7234ca1a1a681ad0), W64LIT(0x2c41b7aeae82ae19),
+ W64LIT(0x5e757db4b4eab4c9), W64LIT(0x19a8ce54544d549a), W64LIT(0xe53b7f93937693ec), W64LIT(0xaa442f222288220d),
+ W64LIT(0xe9c86364648d6407), W64LIT(0x12ff2af1f1e3f1db), W64LIT(0xa2e6cc7373d173bf), W64LIT(0x5a24821212481290),
+ W64LIT(0x5d807a40401d403a), W64LIT(0x2810480808200840), W64LIT(0xe89b95c3c32bc356), W64LIT(0x7bc5dfecec97ec33),
+ W64LIT(0x90ab4ddbdb4bdb96), W64LIT(0x1f5fc0a1a1bea161), W64LIT(0x8307918d8d0e8d1c), W64LIT(0xc97ac83d3df43df5),
+ W64LIT(0xf1335b97976697cc), W64LIT(0x0000000000000000), W64LIT(0xd483f9cfcf1bcf36), W64LIT(0x87566e2b2bac2b45),
+ W64LIT(0xb3ece17676c57697), W64LIT(0xb019e68282328264), W64LIT(0xa9b128d6d67fd6fe), W64LIT(0x7736c31b1b6c1bd8),
+ W64LIT(0x5b7774b5b5eeb5c1), W64LIT(0x2943beafaf86af11), W64LIT(0xdfd41d6a6ab56a77), W64LIT(0x0da0ea50505d50ba),
+ W64LIT(0x4c8a574545094512), W64LIT(0x18fb38f3f3ebf3cb), W64LIT(0xf060ad3030c0309d), W64LIT(0x74c3c4efef9bef2b),
+ W64LIT(0xc37eda3f3ffc3fe5), W64LIT(0x1caac75555495592), W64LIT(0x1059dba2a2b2a279), W64LIT(0x65c9e9eaea8fea03),
+ W64LIT(0xecca6a656589650f), W64LIT(0x686903babad2bab9), W64LIT(0x935e4a2f2fbc2f65), W64LIT(0xe79d8ec0c027c04e),
+ W64LIT(0x81a160dede5fdebe), W64LIT(0x6c38fc1c1c701ce0), W64LIT(0x2ee746fdfdd3fdbb), W64LIT(0x649a1f4d4d294d52),
+ W64LIT(0xe0397692927292e4), W64LIT(0xbceafa7575c9758f), W64LIT(0x1e0c360606180630), W64LIT(0x9809ae8a8a128a24),
+ W64LIT(0x40794bb2b2f2b2f9), W64LIT(0x59d185e6e6bfe663), W64LIT(0x361c7e0e0e380e70), W64LIT(0x633ee71f1f7c1ff8),
+ W64LIT(0xf7c4556262956237), W64LIT(0xa3b53ad4d477d4ee), W64LIT(0x324d81a8a89aa829), W64LIT(0xf4315296966296c4),
+ W64LIT(0x3aef62f9f9c3f99b), W64LIT(0xf697a3c5c533c566), W64LIT(0xb14a102525942535), W64LIT(0x20b2ab59597959f2),
+ W64LIT(0xae15d084842a8454), W64LIT(0xa7e4c57272d572b7), W64LIT(0xdd72ec3939e439d5), W64LIT(0x6198164c4c2d4c5a),
+ W64LIT(0x3bbc945e5e655eca), W64LIT(0x85f09f7878fd78e7), W64LIT(0xd870e53838e038dd), W64LIT(0x8605988c8c0a8c14),
+ W64LIT(0xb2bf17d1d163d1c6), W64LIT(0x0b57e4a5a5aea541), W64LIT(0x4dd9a1e2e2afe243), W64LIT(0xf8c24e616199612f),
+ W64LIT(0x457b42b3b3f6b3f1), W64LIT(0xa542342121842115), W64LIT(0xd625089c9c4a9c94), W64LIT(0x663cee1e1e781ef0),
+ W64LIT(0x5286614343114322), W64LIT(0xfc93b1c7c73bc776), W64LIT(0x2be54ffcfcd7fcb3), W64LIT(0x1408240404100420),
+ W64LIT(0x08a2e351515951b2), W64LIT(0xc72f2599995e99bc), W64LIT(0xc4da226d6da96d4f), W64LIT(0x391a650d0d340d68),
+ W64LIT(0x35e979fafacffa83), W64LIT(0x84a369dfdf5bdfb6), W64LIT(0x9bfca97e7ee57ed7), W64LIT(0xb44819242490243d),
+ W64LIT(0xd776fe3b3bec3bc5), W64LIT(0x3d4b9aabab96ab31), W64LIT(0xd181f0cece1fce3e), W64LIT(0x5522991111441188),
+ W64LIT(0x8903838f8f068f0c), W64LIT(0x6b9c044e4e254e4a), W64LIT(0x517366b7b7e6b7d1), W64LIT(0x60cbe0ebeb8beb0b),
+ W64LIT(0xcc78c13c3cf03cfd), W64LIT(0xbf1ffd81813e817c), W64LIT(0xfe354094946a94d4), W64LIT(0x0cf31cf7f7fbf7eb),
+ W64LIT(0x676f18b9b9deb9a1), W64LIT(0x5f268b13134c1398), W64LIT(0x9c58512c2cb02c7d), W64LIT(0xb8bb05d3d36bd3d6),
+ W64LIT(0x5cd38ce7e7bbe76b), W64LIT(0xcbdc396e6ea56e57), W64LIT(0xf395aac4c437c46e), W64LIT(0x0f061b03030c0318),
+ W64LIT(0x13acdc565645568a), W64LIT(0x49885e44440d441a), W64LIT(0x9efea07f7fe17fdf), W64LIT(0x374f88a9a99ea921),
+ W64LIT(0x8254672a2aa82a4d), W64LIT(0x6d6b0abbbbd6bbb1), W64LIT(0xe29f87c1c123c146), W64LIT(0x02a6f153535153a2),
+ W64LIT(0x8ba572dcdc57dcae), W64LIT(0x2716530b0b2c0b58), W64LIT(0xd327019d9d4e9d9c), W64LIT(0xc1d82b6c6cad6c47),
+ W64LIT(0xf562a43131c43195), W64LIT(0xb9e8f37474cd7487), W64LIT(0x09f115f6f6fff6e3), W64LIT(0x438c4c464605460a),
+ W64LIT(0x2645a5acac8aac09), W64LIT(0x970fb589891e893c), W64LIT(0x4428b414145014a0), W64LIT(0x42dfbae1e1a3e15b),
+ W64LIT(0x4e2ca616165816b0), W64LIT(0xd274f73a3ae83acd), W64LIT(0xd0d2066969b9696f), W64LIT(0x2d12410909240948),
+ W64LIT(0xade0d77070dd70a7), W64LIT(0x54716fb6b6e2b6d9), W64LIT(0xb7bd1ed0d067d0ce), W64LIT(0x7ec7d6eded93ed3b),
+ W64LIT(0xdb85e2cccc17cc2e), W64LIT(0x578468424215422a), W64LIT(0xc22d2c98985a98b4), W64LIT(0x0e55eda4a4aaa449),
+ W64LIT(0x8850752828a0285d), W64LIT(0x31b8865c5c6d5cda), W64LIT(0x3fed6bf8f8c7f893), W64LIT(0xa411c28686228644),
};
static const word64 rc[R] = {
@@ -638,7 +397,6 @@ static const word64 rc[R] = {
// Whirlpool basic transformation. Transforms state based on block.
void Whirlpool::Transform(word64 *digest, const word64 *block)
{
- word64 w[8]; // temporary storage
word64 s[8]; // the cipher state
word64 k[8]; // the round key
@@ -656,26 +414,27 @@ void Whirlpool::Transform(word64 *digest, const word64 *block)
// Iterate over all rounds:
for (int r = 0; r < R; r++)
{
+ word64 w0, w1, w2, w3, w4, w5, w6, w7; // temporary storage
word64 t;
// Compute K^r from K^{r-1}:
#define K(i,j) GETBYTE(k[(i+j+1)%8], j)
#define KS(i) \
t = C0[K(i,3)] ^ C1[K(i,2)] ^ C2[K(i,1)] ^ C3[K(i,0)]; \
- w[i] = (t >> 32) ^ (t << 32) ^ C0[K(i,7)] ^ C1[K(i,6)] ^ C2[K(i,5)] ^ C3[K(i,4)];
+ w##i = rotrFixed(t, 32) ^ C0[K(i,7)] ^ C1[K(i,6)] ^ C2[K(i,5)] ^ C3[K(i,4)];
KS(0); KS(1); KS(2); KS(3); KS(4); KS(5); KS(6); KS(7);
- k[0] = w[0] ^ rc[r];
- k[1] = w[1]; k[2] = w[2]; k[3] = w[3]; k[4] = w[4]; k[5] = w[5]; k[6] = w[6]; k[7] = w[7];
+ k[0] = w0 ^ rc[r];
+ k[1] = w1; k[2] = w2; k[3] = w3; k[4] = w4; k[5] = w5; k[6] = w6; k[7] = w7;
// Apply the r-th round transformation:
#define S(i,j) GETBYTE(s[(i+j+1)%8], j)
#define TS(i) \
t = C0[S(i,3)] ^ C1[S(i,2)] ^ C2[S(i,1)] ^ C3[S(i,0)]; \
- w[i] = (t >> 32) ^ (t << 32) ^ C0[S(i,7)] ^ C1[S(i,6)] ^ C2[S(i,5)] ^ C3[S(i,4)] ^ k[i];
+ w##i = rotrFixed(t, 32) ^ C0[S(i,7)] ^ C1[S(i,6)] ^ C2[S(i,5)] ^ C3[S(i,4)] ^ k[i];
TS(0); TS(1); TS(2); TS(3); TS(4); TS(5); TS(6); TS(7);
- s[0] = w[0]; s[1] = w[1]; s[2] = w[2]; s[3] = w[3]; s[4] = w[4]; s[5] = w[5]; s[6] = w[6]; s[7] = w[7];
+ s[0] = w0; s[1] = w1; s[2] = w2; s[3] = w3; s[4] = w4; s[5] = w5; s[6] = w6; s[7] = w7;
}
// Apply the rest of the Miyaguchi-Preneel compression function: