install.sh and uninstall.sh
[rofl0r-kripto.git] / lib / block / khazad.c
blob1b042c2485819509ed5e7779e36a7f7d5bbff0a8
1 /*
2 * Written in 2013 by Gregor Pintar <grpintar@gmail.com>
4 * To the extent possible under law, the author(s) have dedicated
5 * all copyright and related and neighboring rights to this software
6 * to the public domain worldwide.
7 *
8 * This software is distributed without any warranty.
10 * You should have received a copy of the CC0 Public Domain Dedication.
11 * If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
14 #include <stdint.h>
15 #include <stdlib.h>
17 #include <kripto/cast.h>
18 #include <kripto/loadstore.h>
19 #include <kripto/memwipe.h>
20 #include <kripto/block.h>
21 #include <kripto/desc/block.h>
22 #include <kripto/object/block.h>
24 #include <kripto/block/khazad.h>
26 struct kripto_block
28 struct kripto_block_object obj;
29 unsigned int r;
30 size_t size;
31 uint64_t *k;
32 uint64_t *dk;
35 static const uint64_t t0[256] =
37 0xBAD3D268BBB96A01, 0x54FC4D19E59A66B1, 0x2F71BC93E26514CD, 0x749CCDB925871B51,
38 0x53F55102F7A257A4, 0xD3686BB8D0D6BE03, 0xD26B6FBDD6DEB504, 0x4DD72964B35285FE,
39 0x50F05D0DFDBA4AAD, 0xACE98A26CF09E063, 0x8D8A0E83091C9684, 0xBFDCC679A5914D1A,
40 0x7090DDAD3DA7374D, 0x52F65507F1AA5CA3, 0x9AB352C87BA417E1, 0x4CD42D61B55A8EF9,
41 0xEA238F65460320AC, 0xD56273A6C4E68411, 0x97A466F155CC68C2, 0xD16E63B2DCC6A80D,
42 0x3355CCFFAA85D099, 0x51F35908FBB241AA, 0x5BED712AC7E20F9C, 0xA6F7A204F359AE55,
43 0xDE7F5F81FEBEC120, 0x48D83D75AD7AA2E5, 0xA8E59A32D729CC7F, 0x99B65EC771BC0AE8,
44 0xDB704B90E096E63B, 0x3256C8FAAC8DDB9E, 0xB7C4E65195D11522, 0xFC19D72B32B3AACE,
45 0xE338AB48704B7393, 0x9EBF42DC63843BFD, 0x91AE7EEF41FC52D0, 0x9BB056CD7DAC1CE6,
46 0xE23BAF4D76437894, 0xBBD0D66DBDB16106, 0x41C319589B32F1DA, 0x6EB2A5CB7957E517,
47 0xA5F2AE0BF941B35C, 0xCB400BC08016564B, 0x6BBDB1DA677FC20C, 0x95A26EFB59DC7ECC,
48 0xA1FEBE1FE1619F40, 0xF308EB1810CBC3E3, 0xB1CEFE4F81E12F30, 0x0206080A0C10160E,
49 0xCC4917DB922E675E, 0xC45137F3A26E3F66, 0x1D2774694EE8CF53, 0x143C504478A09C6C,
50 0xC3582BE8B0560E73, 0x63A591F2573F9A34, 0xDA734F95E69EED3C, 0x5DE76934D3D2358E,
51 0x5FE1613EDFC22380, 0xDC79578BF2AED72E, 0x7D87E99413CF486E, 0xCD4A13DE94266C59,
52 0x7F81E19E1FDF5E60, 0x5AEE752FC1EA049B, 0x6CB4ADC17547F319, 0x5CE46D31D5DA3E89,
53 0xF704FB0C08EBEFFF, 0x266A98BED42D47F2, 0xFF1CDB2438ABB7C7, 0xED2A937E543B11B9,
54 0xE825876F4A1336A2, 0x9DBA4ED3699C26F4, 0x6FB1A1CE7F5FEE10, 0x8E8F028C03048B8D,
55 0x192B647D56C8E34F, 0xA0FDBA1AE7699447, 0xF00DE7171AD3DEEA, 0x89861E97113CBA98,
56 0x0F113C332278692D, 0x07091C1B12383115, 0xAFEC8629C511FD6A, 0xFB10CB30208B9BDB,
57 0x0818202830405838, 0x153F54417EA8976B, 0x0D1734392E687F23, 0x040C101418202C1C,
58 0x0103040506080B07, 0x64AC8DE94507AB21, 0xDF7C5B84F8B6CA27, 0x769AC5B329970D5F,
59 0x798BF9800BEF6472, 0xDD7A538EF4A6DC29, 0x3D47F4C98EF5B2B3, 0x163A584E74B08A62,
60 0x3F41FCC382E5A4BD, 0x3759DCEBB2A5FC85, 0x6DB7A9C4734FF81E, 0x3848E0D890DD95A8,
61 0xB9D6DE67B1A17708, 0x7395D1A237BF2A44, 0xE926836A4C1B3DA5, 0x355FD4E1BEB5EA8B,
62 0x55FF491CE3926DB6, 0x7193D9A83BAF3C4A, 0x7B8DF18A07FF727C, 0x8C890A860F149D83,
63 0x7296D5A731B72143, 0x88851A921734B19F, 0xF607FF090EE3E4F8, 0x2A7EA882FC4D33D6,
64 0x3E42F8C684EDAFBA, 0x5EE2653BD9CA2887, 0x27699CBBD2254CF5, 0x46CA0543890AC0CF,
65 0x0C14303C28607424, 0x65AF89EC430FA026, 0x68B8BDD56D67DF05, 0x61A399F85B2F8C3A,
66 0x03050C0F0A181D09, 0xC15E23E2BC46187D, 0x57F94116EF827BB8, 0xD6677FA9CEFE9918,
67 0xD976439AEC86F035, 0x58E87D25CDFA1295, 0xD875479FEA8EFB32, 0x66AA85E34917BD2F,
68 0xD7647BACC8F6921F, 0x3A4EE8D29CCD83A6, 0xC84507CF8A0E4B42, 0x3C44F0CC88FDB9B4,
69 0xFA13CF35268390DC, 0x96A762F453C463C5, 0xA7F4A601F551A552, 0x98B55AC277B401EF,
70 0xEC29977B52331ABE, 0xB8D5DA62B7A97C0F, 0xC7543BFCA876226F, 0xAEEF822CC319F66D,
71 0x69BBB9D06B6FD402, 0x4BDD317AA762BFEC, 0xABE0963DDD31D176, 0xA9E69E37D121C778,
72 0x67A981E64F1FB628, 0x0A1E28223C504E36, 0x47C901468F02CBC8, 0xF20BEF1D16C3C8E4,
73 0xB5C2EE5B99C1032C, 0x226688AACC0D6BEE, 0xE532B356647B4981, 0xEE2F9F715E230CB0,
74 0xBEDFC27CA399461D, 0x2B7DAC87FA4538D1, 0x819E3EBF217CE2A0, 0x1236485A6C90A67E,
75 0x839836B52D6CF4AE, 0x1B2D6C775AD8F541, 0x0E1238362470622A, 0x23658CAFCA0560E9,
76 0xF502F30604FBF9F1, 0x45CF094C8312DDC6, 0x216384A5C61576E7, 0xCE4F1FD19E3E7150,
77 0x49DB3970AB72A9E2, 0x2C74B09CE87D09C4, 0xF916C33A2C9B8DD5, 0xE637BF596E635488,
78 0xB6C7E25493D91E25, 0x2878A088F05D25D8, 0x17395C4B72B88165, 0x829B32B02B64FFA9,
79 0x1A2E68725CD0FE46, 0x8B80169D1D2CAC96, 0xFE1FDF213EA3BCC0, 0x8A8312981B24A791,
80 0x091B242D3648533F, 0xC94603CA8C064045, 0x879426A1354CD8B2, 0x4ED2256BB94A98F7,
81 0xE13EA3427C5B659D, 0x2E72B896E46D1FCA, 0xE431B75362734286, 0xE03DA7477A536E9A,
82 0xEB208B60400B2BAB, 0x90AD7AEA47F459D7, 0xA4F1AA0EFF49B85B, 0x1E22786644F0D25A,
83 0x85922EAB395CCEBC, 0x60A09DFD5D27873D, 0x0000000000000000, 0x256F94B1DE355AFB,
84 0xF401F70302F3F2F6, 0xF10EE3121CDBD5ED, 0x94A16AFE5FD475CB, 0x0B1D2C273A584531,
85 0xE734BB5C686B5F8F, 0x759FC9BC238F1056, 0xEF2C9B74582B07B7, 0x345CD0E4B8BDE18C,
86 0x3153C4F5A695C697, 0xD46177A3C2EE8F16, 0xD06D67B7DACEA30A, 0x869722A43344D3B5,
87 0x7E82E59B19D75567, 0xADEA8E23C901EB64, 0xFD1AD32E34BBA1C9, 0x297BA48DF6552EDF,
88 0x3050C0F0A09DCD90, 0x3B4DECD79AC588A1, 0x9FBC46D9658C30FA, 0xF815C73F2A9386D2,
89 0xC6573FF9AE7E2968, 0x13354C5F6A98AD79, 0x060A181E14303A12, 0x050F14111E28271B,
90 0xC55233F6A4663461, 0x113344556688BB77, 0x7799C1B62F9F0658, 0x7C84ED9115C74369,
91 0x7A8EF58F01F7797B, 0x7888FD850DE76F75, 0x365AD8EEB4ADF782, 0x1C24706C48E0C454,
92 0x394BE4DD96D59EAF, 0x59EB7920CBF21992, 0x1828607850C0E848, 0x56FA4513E98A70BF,
93 0xB3C8F6458DF1393E, 0xB0CDFA4A87E92437, 0x246C90B4D83D51FC, 0x206080A0C01D7DE0,
94 0xB2CBF2408BF93239, 0x92AB72E04BE44FD9, 0xA3F8B615ED71894E, 0xC05D27E7BA4E137A,
95 0x44CC0D49851AD6C1, 0x62A695F751379133, 0x103040506080B070, 0xB4C1EA5E9FC9082B,
96 0x84912AAE3F54C5BB, 0x43C511529722E7D4, 0x93A876E54DEC44DE, 0xC25B2FEDB65E0574,
97 0x4ADE357FA16AB4EB, 0xBDDACE73A9815B14, 0x8F8C0689050C808A, 0x2D77B499EE7502C3,
98 0xBCD9CA76AF895013, 0x9CB94AD66F942DF3, 0x6ABEB5DF6177C90B, 0x40C01D5D9D3AFADD,
99 0xCF4C1BD498367A57, 0xA2FBB210EB798249, 0x809D3ABA2774E9A7, 0x4FD1216EBF4293F0,
100 0x1F217C6342F8D95D, 0xCA430FC5861E5D4C, 0xAAE39238DB39DA71, 0x42C61557912AECD3
103 static const uint64_t t1[256] =
105 0xD3BA68D2B9BB016A, 0xFC54194D9AE5B166, 0x712F93BC65E2CD14, 0x9C74B9CD8725511B,
106 0xF5530251A2F7A457, 0x68D3B86BD6D003BE, 0x6BD2BD6FDED604B5, 0xD74D642952B3FE85,
107 0xF0500D5DBAFDAD4A, 0xE9AC268A09CF63E0, 0x8A8D830E1C098496, 0xDCBF79C691A51A4D,
108 0x9070ADDDA73D4D37, 0xF6520755AAF1A35C, 0xB39AC852A47BE117, 0xD44C612D5AB5F98E,
109 0x23EA658F0346AC20, 0x62D5A673E6C41184, 0xA497F166CC55C268, 0x6ED1B263C6DC0DA8,
110 0x5533FFCC85AA99D0, 0xF3510859B2FBAA41, 0xED5B2A71E2C79C0F, 0xF7A604A259F355AE,
111 0x7FDE815FBEFE20C1, 0xD848753D7AADE5A2, 0xE5A8329A29D77FCC, 0xB699C75EBC71E80A,
112 0x70DB904B96E03BE6, 0x5632FAC88DAC9EDB, 0xC4B751E6D1952215, 0x19FC2BD7B332CEAA,
113 0x38E348AB4B709373, 0xBF9EDC428463FD3B, 0xAE91EF7EFC41D052, 0xB09BCD56AC7DE61C,
114 0x3BE24DAF43769478, 0xD0BB6DD6B1BD0661, 0xC3415819329BDAF1, 0xB26ECBA5577917E5,
115 0xF2A50BAE41F95CB3, 0x40CBC00B16804B56, 0xBD6BDAB17F670CC2, 0xA295FB6EDC59CC7E,
116 0xFEA11FBE61E1409F, 0x08F318EBCB10E3C3, 0xCEB14FFEE181302F, 0x06020A08100C0E16,
117 0x49CCDB172E925E67, 0x51C4F3376EA2663F, 0x271D6974E84E53CF, 0x3C144450A0786C9C,
118 0x58C3E82B56B0730E, 0xA563F2913F57349A, 0x73DA954F9EE63CED, 0xE75D3469D2D38E35,
119 0xE15F3E61C2DF8023, 0x79DC8B57AEF22ED7, 0x877D94E9CF136E48, 0x4ACDDE132694596C,
120 0x817F9EE1DF1F605E, 0xEE5A2F75EAC19B04, 0xB46CC1AD477519F3, 0xE45C316DDAD5893E,
121 0x04F70CFBEB08FFEF, 0x6A26BE982DD4F247, 0x1CFF24DBAB38C7B7, 0x2AED7E933B54B911,
122 0x25E86F87134AA236, 0xBA9DD34E9C69F426, 0xB16FCEA15F7F10EE, 0x8F8E8C0204038D8B,
123 0x2B197D64C8564FE3, 0xFDA01ABA69E74794, 0x0DF017E7D31AEADE, 0x8689971E3C1198BA,
124 0x110F333C78222D69, 0x09071B1C38121531, 0xECAF298611C56AFD, 0x10FB30CB8B20DB9B,
125 0x1808282040303858, 0x3F154154A87E6B97, 0x170D3934682E237F, 0x0C04141020181C2C,
126 0x030105040806070B, 0xAC64E98D074521AB, 0x7CDF845BB6F827CA, 0x9A76B3C597295F0D,
127 0x8B7980F9EF0B7264, 0x7ADD8E53A6F429DC, 0x473DC9F4F58EB3B2, 0x3A164E58B074628A,
128 0x413FC3FCE582BDA4, 0x5937EBDCA5B285FC, 0xB76DC4A94F731EF8, 0x4838D8E0DD90A895,
129 0xD6B967DEA1B10877, 0x9573A2D1BF37442A, 0x26E96A831B4CA53D, 0x5F35E1D4B5BE8BEA,
130 0xFF551C4992E3B66D, 0x9371A8D9AF3B4A3C, 0x8D7B8AF1FF077C72, 0x898C860A140F839D,
131 0x9672A7D5B7314321, 0x8588921A34179FB1, 0x07F609FFE30EF8E4, 0x7E2A82A84DFCD633,
132 0x423EC6F8ED84BAAF, 0xE25E3B65CAD98728, 0x6927BB9C25D2F54C, 0xCA4643050A89CFC0,
133 0x140C3C3060282474, 0xAF65EC890F4326A0, 0xB868D5BD676D05DF, 0xA361F8992F5B3A8C,
134 0x05030F0C180A091D, 0x5EC1E22346BC7D18, 0xF957164182EFB87B, 0x67D6A97FFECE1899,
135 0x76D99A4386EC35F0, 0xE858257DFACD9512, 0x75D89F478EEA32FB, 0xAA66E38517492FBD,
136 0x64D7AC7BF6C81F92, 0x4E3AD2E8CD9CA683, 0x45C8CF070E8A424B, 0x443CCCF0FD88B4B9,
137 0x13FA35CF8326DC90, 0xA796F462C453C563, 0xF4A701A651F552A5, 0xB598C25AB477EF01,
138 0x29EC7B973352BE1A, 0xD5B862DAA9B70F7C, 0x54C7FC3B76A86F22, 0xEFAE2C8219C36DF6,
139 0xBB69D0B96F6B02D4, 0xDD4B7A3162A7ECBF, 0xE0AB3D9631DD76D1, 0xE6A9379E21D178C7,
140 0xA967E6811F4F28B6, 0x1E0A2228503C364E, 0xC9474601028FC8CB, 0x0BF21DEFC316E4C8,
141 0xC2B55BEEC1992C03, 0x6622AA880DCCEE6B, 0x32E556B37B648149, 0x2FEE719F235EB00C,
142 0xDFBE7CC299A31D46, 0x7D2B87AC45FAD138, 0x9E81BF3E7C21A0E2, 0x36125A48906C7EA6,
143 0x9883B5366C2DAEF4, 0x2D1B776CD85A41F5, 0x120E363870242A62, 0x6523AF8C05CAE960,
144 0x02F506F3FB04F1F9, 0xCF454C091283C6DD, 0x6321A58415C6E776, 0x4FCED11F3E9E5071,
145 0xDB49703972ABE2A9, 0x742C9CB07DE8C409, 0x16F93AC39B2CD58D, 0x37E659BF636E8854,
146 0xC7B654E2D993251E, 0x782888A05DF0D825, 0x39174B5CB8726581, 0x9B82B032642BA9FF,
147 0x2E1A7268D05C46FE, 0x808B9D162C1D96AC, 0x1FFE21DFA33EC0BC, 0x838A9812241B91A7,
148 0x1B092D2448363F53, 0x46C9CA03068C4540, 0x9487A1264C35B2D8, 0xD24E6B254AB9F798,
149 0x3EE142A35B7C9D65, 0x722E96B86DE4CA1F, 0x31E453B773628642, 0x3DE047A7537A9A6E,
150 0x20EB608B0B40AB2B, 0xAD90EA7AF447D759, 0xF1A40EAA49FF5BB8, 0x221E6678F0445AD2,
151 0x9285AB2E5C39BCCE, 0xA060FD9D275D3D87, 0x0000000000000000, 0x6F25B19435DEFB5A,
152 0x01F403F7F302F6F2, 0x0EF112E3DB1CEDD5, 0xA194FE6AD45FCB75, 0x1D0B272C583A3145,
153 0x34E75CBB6B688F5F, 0x9F75BCC98F235610, 0x2CEF749B2B58B707, 0x5C34E4D0BDB88CE1,
154 0x5331F5C495A697C6, 0x61D4A377EEC2168F, 0x6DD0B767CEDA0AA3, 0x9786A4224433B5D3,
155 0x827E9BE5D7196755, 0xEAAD238E01C964EB, 0x1AFD2ED3BB34C9A1, 0x7B298DA455F6DF2E,
156 0x5030F0C09DA090CD, 0x4D3BD7ECC59AA188, 0xBC9FD9468C65FA30, 0x15F83FC7932AD286,
157 0x57C6F93F7EAE6829, 0x35135F4C986A79AD, 0x0A061E183014123A, 0x0F051114281E1B27,
158 0x52C5F63366A46134, 0x33115544886677BB, 0x9977B6C19F2F5806, 0x847C91EDC7156943,
159 0x8E7A8FF5F7017B79, 0x887885FDE70D756F, 0x5A36EED8ADB482F7, 0x241C6C70E04854C4,
160 0x4B39DDE4D596AF9E, 0xEB592079F2CB9219, 0x28187860C05048E8, 0xFA5613458AE9BF70,
161 0xC8B345F6F18D3E39, 0xCDB04AFAE9873724, 0x6C24B4903DD8FC51, 0x6020A0801DC0E07D,
162 0xCBB240F2F98B3932, 0xAB92E072E44BD94F, 0xF8A315B671ED4E89, 0x5DC0E7274EBA7A13,
163 0xCC44490D1A85C1D6, 0xA662F79537513391, 0x30105040806070B0, 0xC1B45EEAC99F2B08,
164 0x9184AE2A543FBBC5, 0xC54352112297D4E7, 0xA893E576EC4DDE44, 0x5BC2ED2F5EB67405,
165 0xDE4A7F356AA1EBB4, 0xDABD73CE81A9145B, 0x8C8F89060C058A80, 0x772D99B475EEC302,
166 0xD9BC76CA89AF1350, 0xB99CD64A946FF32D, 0xBE6ADFB577610BC9, 0xC0405D1D3A9DDDFA,
167 0x4CCFD41B3698577A, 0xFBA210B279EB4982, 0x9D80BA3A7427A7E9, 0xD14F6E2142BFF093,
168 0x211F637CF8425DD9, 0x43CAC50F1E864C5D, 0xE3AA389239DB71DA, 0xC64257152A91D3EC
171 static const uint64_t t2[256] =
173 0xD268BAD36A01BBB9, 0x4D1954FC66B1E59A, 0xBC932F7114CDE265, 0xCDB9749C1B512587,
174 0x510253F557A4F7A2, 0x6BB8D368BE03D0D6, 0x6FBDD26BB504D6DE, 0x29644DD785FEB352,
175 0x5D0D50F04AADFDBA, 0x8A26ACE9E063CF09, 0x0E838D8A9684091C, 0xC679BFDC4D1AA591,
176 0xDDAD7090374D3DA7, 0x550752F65CA3F1AA, 0x52C89AB317E17BA4, 0x2D614CD48EF9B55A,
177 0x8F65EA2320AC4603, 0x73A6D5628411C4E6, 0x66F197A468C255CC, 0x63B2D16EA80DDCC6,
178 0xCCFF3355D099AA85, 0x590851F341AAFBB2, 0x712A5BED0F9CC7E2, 0xA204A6F7AE55F359,
179 0x5F81DE7FC120FEBE, 0x3D7548D8A2E5AD7A, 0x9A32A8E5CC7FD729, 0x5EC799B60AE871BC,
180 0x4B90DB70E63BE096, 0xC8FA3256DB9EAC8D, 0xE651B7C4152295D1, 0xD72BFC19AACE32B3,
181 0xAB48E3387393704B, 0x42DC9EBF3BFD6384, 0x7EEF91AE52D041FC, 0x56CD9BB01CE67DAC,
182 0xAF4DE23B78947643, 0xD66DBBD06106BDB1, 0x195841C3F1DA9B32, 0xA5CB6EB2E5177957,
183 0xAE0BA5F2B35CF941, 0x0BC0CB40564B8016, 0xB1DA6BBDC20C677F, 0x6EFB95A27ECC59DC,
184 0xBE1FA1FE9F40E161, 0xEB18F308C3E310CB, 0xFE4FB1CE2F3081E1, 0x080A0206160E0C10,
185 0x17DBCC49675E922E, 0x37F3C4513F66A26E, 0x74691D27CF534EE8, 0x5044143C9C6C78A0,
186 0x2BE8C3580E73B056, 0x91F263A59A34573F, 0x4F95DA73ED3CE69E, 0x69345DE7358ED3D2,
187 0x613E5FE12380DFC2, 0x578BDC79D72EF2AE, 0xE9947D87486E13CF, 0x13DECD4A6C599426,
188 0xE19E7F815E601FDF, 0x752F5AEE049BC1EA, 0xADC16CB4F3197547, 0x6D315CE43E89D5DA,
189 0xFB0CF704EFFF08EB, 0x98BE266A47F2D42D, 0xDB24FF1CB7C738AB, 0x937EED2A11B9543B,
190 0x876FE82536A24A13, 0x4ED39DBA26F4699C, 0xA1CE6FB1EE107F5F, 0x028C8E8F8B8D0304,
191 0x647D192BE34F56C8, 0xBA1AA0FD9447E769, 0xE717F00DDEEA1AD3, 0x1E978986BA98113C,
192 0x3C330F11692D2278, 0x1C1B070931151238, 0x8629AFECFD6AC511, 0xCB30FB109BDB208B,
193 0x2028081858383040, 0x5441153F976B7EA8, 0x34390D177F232E68, 0x1014040C2C1C1820,
194 0x040501030B070608, 0x8DE964ACAB214507, 0x5B84DF7CCA27F8B6, 0xC5B3769A0D5F2997,
195 0xF980798B64720BEF, 0x538EDD7ADC29F4A6, 0xF4C93D47B2B38EF5, 0x584E163A8A6274B0,
196 0xFCC33F41A4BD82E5, 0xDCEB3759FC85B2A5, 0xA9C46DB7F81E734F, 0xE0D8384895A890DD,
197 0xDE67B9D67708B1A1, 0xD1A273952A4437BF, 0x836AE9263DA54C1B, 0xD4E1355FEA8BBEB5,
198 0x491C55FF6DB6E392, 0xD9A871933C4A3BAF, 0xF18A7B8D727C07FF, 0x0A868C899D830F14,
199 0xD5A77296214331B7, 0x1A928885B19F1734, 0xFF09F607E4F80EE3, 0xA8822A7E33D6FC4D,
200 0xF8C63E42AFBA84ED, 0x653B5EE22887D9CA, 0x9CBB27694CF5D225, 0x054346CAC0CF890A,
201 0x303C0C1474242860, 0x89EC65AFA026430F, 0xBDD568B8DF056D67, 0x99F861A38C3A5B2F,
202 0x0C0F03051D090A18, 0x23E2C15E187DBC46, 0x411657F97BB8EF82, 0x7FA9D6679918CEFE,
203 0x439AD976F035EC86, 0x7D2558E81295CDFA, 0x479FD875FB32EA8E, 0x85E366AABD2F4917,
204 0x7BACD764921FC8F6, 0xE8D23A4E83A69CCD, 0x07CFC8454B428A0E, 0xF0CC3C44B9B488FD,
205 0xCF35FA1390DC2683, 0x62F496A763C553C4, 0xA601A7F4A552F551, 0x5AC298B501EF77B4,
206 0x977BEC291ABE5233, 0xDA62B8D57C0FB7A9, 0x3BFCC754226FA876, 0x822CAEEFF66DC319,
207 0xB9D069BBD4026B6F, 0x317A4BDDBFECA762, 0x963DABE0D176DD31, 0x9E37A9E6C778D121,
208 0x81E667A9B6284F1F, 0x28220A1E4E363C50, 0x014647C9CBC88F02, 0xEF1DF20BC8E416C3,
209 0xEE5BB5C2032C99C1, 0x88AA22666BEECC0D, 0xB356E5324981647B, 0x9F71EE2F0CB05E23,
210 0xC27CBEDF461DA399, 0xAC872B7D38D1FA45, 0x3EBF819EE2A0217C, 0x485A1236A67E6C90,
211 0x36B58398F4AE2D6C, 0x6C771B2DF5415AD8, 0x38360E12622A2470, 0x8CAF236560E9CA05,
212 0xF306F502F9F104FB, 0x094C45CFDDC68312, 0x84A5216376E7C615, 0x1FD1CE4F71509E3E,
213 0x397049DBA9E2AB72, 0xB09C2C7409C4E87D, 0xC33AF9168DD52C9B, 0xBF59E63754886E63,
214 0xE254B6C71E2593D9, 0xA088287825D8F05D, 0x5C4B1739816572B8, 0x32B0829BFFA92B64,
215 0x68721A2EFE465CD0, 0x169D8B80AC961D2C, 0xDF21FE1FBCC03EA3, 0x12988A83A7911B24,
216 0x242D091B533F3648, 0x03CAC94640458C06, 0x26A18794D8B2354C, 0x256B4ED298F7B94A,
217 0xA342E13E659D7C5B, 0xB8962E721FCAE46D, 0xB753E43142866273, 0xA747E03D6E9A7A53,
218 0x8B60EB202BAB400B, 0x7AEA90AD59D747F4, 0xAA0EA4F1B85BFF49, 0x78661E22D25A44F0,
219 0x2EAB8592CEBC395C, 0x9DFD60A0873D5D27, 0x0000000000000000, 0x94B1256F5AFBDE35,
220 0xF703F401F2F602F3, 0xE312F10ED5ED1CDB, 0x6AFE94A175CB5FD4, 0x2C270B1D45313A58,
221 0xBB5CE7345F8F686B, 0xC9BC759F1056238F, 0x9B74EF2C07B7582B, 0xD0E4345CE18CB8BD,
222 0xC4F53153C697A695, 0x77A3D4618F16C2EE, 0x67B7D06DA30ADACE, 0x22A48697D3B53344,
223 0xE59B7E82556719D7, 0x8E23ADEAEB64C901, 0xD32EFD1AA1C934BB, 0xA48D297B2EDFF655,
224 0xC0F03050CD90A09D, 0xECD73B4D88A19AC5, 0x46D99FBC30FA658C, 0xC73FF81586D22A93,
225 0x3FF9C6572968AE7E, 0x4C5F1335AD796A98, 0x181E060A3A121430, 0x1411050F271B1E28,
226 0x33F6C5523461A466, 0x44551133BB776688, 0xC1B6779906582F9F, 0xED917C84436915C7,
227 0xF58F7A8E797B01F7, 0xFD8578886F750DE7, 0xD8EE365AF782B4AD, 0x706C1C24C45448E0,
228 0xE4DD394B9EAF96D5, 0x792059EB1992CBF2, 0x60781828E84850C0, 0x451356FA70BFE98A,
229 0xF645B3C8393E8DF1, 0xFA4AB0CD243787E9, 0x90B4246C51FCD83D, 0x80A020607DE0C01D,
230 0xF240B2CB32398BF9, 0x72E092AB4FD94BE4, 0xB615A3F8894EED71, 0x27E7C05D137ABA4E,
231 0x0D4944CCD6C1851A, 0x95F762A691335137, 0x40501030B0706080, 0xEA5EB4C1082B9FC9,
232 0x2AAE8491C5BB3F54, 0x115243C5E7D49722, 0x76E593A844DE4DEC, 0x2FEDC25B0574B65E,
233 0x357F4ADEB4EBA16A, 0xCE73BDDA5B14A981, 0x06898F8C808A050C, 0xB4992D7702C3EE75,
234 0xCA76BCD95013AF89, 0x4AD69CB92DF36F94, 0xB5DF6ABEC90B6177, 0x1D5D40C0FADD9D3A,
235 0x1BD4CF4C7A579836, 0xB210A2FB8249EB79, 0x3ABA809DE9A72774, 0x216E4FD193F0BF42,
236 0x7C631F21D95D42F8, 0x0FC5CA435D4C861E, 0x9238AAE3DA71DB39, 0x155742C6ECD3912A
239 static const uint64_t t3[256] =
241 0x68D2D3BA016AB9BB, 0x194DFC54B1669AE5, 0x93BC712FCD1465E2, 0xB9CD9C74511B8725,
242 0x0251F553A457A2F7, 0xB86B68D303BED6D0, 0xBD6F6BD204B5DED6, 0x6429D74DFE8552B3,
243 0x0D5DF050AD4ABAFD, 0x268AE9AC63E009CF, 0x830E8A8D84961C09, 0x79C6DCBF1A4D91A5,
244 0xADDD90704D37A73D, 0x0755F652A35CAAF1, 0xC852B39AE117A47B, 0x612DD44CF98E5AB5,
245 0x658F23EAAC200346, 0xA67362D51184E6C4, 0xF166A497C268CC55, 0xB2636ED10DA8C6DC,
246 0xFFCC553399D085AA, 0x0859F351AA41B2FB, 0x2A71ED5B9C0FE2C7, 0x04A2F7A655AE59F3,
247 0x815F7FDE20C1BEFE, 0x753DD848E5A27AAD, 0x329AE5A87FCC29D7, 0xC75EB699E80ABC71,
248 0x904B70DB3BE696E0, 0xFAC856329EDB8DAC, 0x51E6C4B72215D195, 0x2BD719FCCEAAB332,
249 0x48AB38E393734B70, 0xDC42BF9EFD3B8463, 0xEF7EAE91D052FC41, 0xCD56B09BE61CAC7D,
250 0x4DAF3BE294784376, 0x6DD6D0BB0661B1BD, 0x5819C341DAF1329B, 0xCBA5B26E17E55779,
251 0x0BAEF2A55CB341F9, 0xC00B40CB4B561680, 0xDAB1BD6B0CC27F67, 0xFB6EA295CC7EDC59,
252 0x1FBEFEA1409F61E1, 0x18EB08F3E3C3CB10, 0x4FFECEB1302FE181, 0x0A0806020E16100C,
253 0xDB1749CC5E672E92, 0xF33751C4663F6EA2, 0x6974271D53CFE84E, 0x44503C146C9CA078,
254 0xE82B58C3730E56B0, 0xF291A563349A3F57, 0x954F73DA3CED9EE6, 0x3469E75D8E35D2D3,
255 0x3E61E15F8023C2DF, 0x8B5779DC2ED7AEF2, 0x94E9877D6E48CF13, 0xDE134ACD596C2694,
256 0x9EE1817F605EDF1F, 0x2F75EE5A9B04EAC1, 0xC1ADB46C19F34775, 0x316DE45C893EDAD5,
257 0x0CFB04F7FFEFEB08, 0xBE986A26F2472DD4, 0x24DB1CFFC7B7AB38, 0x7E932AEDB9113B54,
258 0x6F8725E8A236134A, 0xD34EBA9DF4269C69, 0xCEA1B16F10EE5F7F, 0x8C028F8E8D8B0403,
259 0x7D642B194FE3C856, 0x1ABAFDA0479469E7, 0x17E70DF0EADED31A, 0x971E868998BA3C11,
260 0x333C110F2D697822, 0x1B1C090715313812, 0x2986ECAF6AFD11C5, 0x30CB10FBDB9B8B20,
261 0x2820180838584030, 0x41543F156B97A87E, 0x3934170D237F682E, 0x14100C041C2C2018,
262 0x05040301070B0806, 0xE98DAC6421AB0745, 0x845B7CDF27CAB6F8, 0xB3C59A765F0D9729,
263 0x80F98B797264EF0B, 0x8E537ADD29DCA6F4, 0xC9F4473DB3B2F58E, 0x4E583A16628AB074,
264 0xC3FC413FBDA4E582, 0xEBDC593785FCA5B2, 0xC4A9B76D1EF84F73, 0xD8E04838A895DD90,
265 0x67DED6B90877A1B1, 0xA2D19573442ABF37, 0x6A8326E9A53D1B4C, 0xE1D45F358BEAB5BE,
266 0x1C49FF55B66D92E3, 0xA8D993714A3CAF3B, 0x8AF18D7B7C72FF07, 0x860A898C839D140F,
267 0xA7D596724321B731, 0x921A85889FB13417, 0x09FF07F6F8E4E30E, 0x82A87E2AD6334DFC,
268 0xC6F8423EBAAFED84, 0x3B65E25E8728CAD9, 0xBB9C6927F54C25D2, 0x4305CA46CFC00A89,
269 0x3C30140C24746028, 0xEC89AF6526A00F43, 0xD5BDB86805DF676D, 0xF899A3613A8C2F5B,
270 0x0F0C0503091D180A, 0xE2235EC17D1846BC, 0x1641F957B87B82EF, 0xA97F67D61899FECE,
271 0x9A4376D935F086EC, 0x257DE8589512FACD, 0x9F4775D832FB8EEA, 0xE385AA662FBD1749,
272 0xAC7B64D71F92F6C8, 0xD2E84E3AA683CD9C, 0xCF0745C8424B0E8A, 0xCCF0443CB4B9FD88,
273 0x35CF13FADC908326, 0xF462A796C563C453, 0x01A6F4A752A551F5, 0xC25AB598EF01B477,
274 0x7B9729ECBE1A3352, 0x62DAD5B80F7CA9B7, 0xFC3B54C76F2276A8, 0x2C82EFAE6DF619C3,
275 0xD0B9BB6902D46F6B, 0x7A31DD4BECBF62A7, 0x3D96E0AB76D131DD, 0x379EE6A978C721D1,
276 0xE681A96728B61F4F, 0x22281E0A364E503C, 0x4601C947C8CB028F, 0x1DEF0BF2E4C8C316,
277 0x5BEEC2B52C03C199, 0xAA886622EE6B0DCC, 0x56B332E581497B64, 0x719F2FEEB00C235E,
278 0x7CC2DFBE1D4699A3, 0x87AC7D2BD13845FA, 0xBF3E9E81A0E27C21, 0x5A4836127EA6906C,
279 0xB5369883AEF46C2D, 0x776C2D1B41F5D85A, 0x3638120E2A627024, 0xAF8C6523E96005CA,
280 0x06F302F5F1F9FB04, 0x4C09CF45C6DD1283, 0xA5846321E77615C6, 0xD11F4FCE50713E9E,
281 0x7039DB49E2A972AB, 0x9CB0742CC4097DE8, 0x3AC316F9D58D9B2C, 0x59BF37E68854636E,
282 0x54E2C7B6251ED993, 0x88A07828D8255DF0, 0x4B5C39176581B872, 0xB0329B82A9FF642B,
283 0x72682E1A46FED05C, 0x9D16808B96AC2C1D, 0x21DF1FFEC0BCA33E, 0x9812838A91A7241B,
284 0x2D241B093F534836, 0xCA0346C94540068C, 0xA1269487B2D84C35, 0x6B25D24EF7984AB9,
285 0x42A33EE19D655B7C, 0x96B8722ECA1F6DE4, 0x53B731E486427362, 0x47A73DE09A6E537A,
286 0x608B20EBAB2B0B40, 0xEA7AAD90D759F447, 0x0EAAF1A45BB849FF, 0x6678221E5AD2F044,
287 0xAB2E9285BCCE5C39, 0xFD9DA0603D87275D, 0x0000000000000000, 0xB1946F25FB5A35DE,
288 0x03F701F4F6F2F302, 0x12E30EF1EDD5DB1C, 0xFE6AA194CB75D45F, 0x272C1D0B3145583A,
289 0x5CBB34E78F5F6B68, 0xBCC99F7556108F23, 0x749B2CEFB7072B58, 0xE4D05C348CE1BDB8,
290 0xF5C4533197C695A6, 0xA37761D4168FEEC2, 0xB7676DD00AA3CEDA, 0xA4229786B5D34433,
291 0x9BE5827E6755D719, 0x238EEAAD64EB01C9, 0x2ED31AFDC9A1BB34, 0x8DA47B29DF2E55F6,
292 0xF0C0503090CD9DA0, 0xD7EC4D3BA188C59A, 0xD946BC9FFA308C65, 0x3FC715F8D286932A,
293 0xF93F57C668297EAE, 0x5F4C351379AD986A, 0x1E180A06123A3014, 0x11140F051B27281E,
294 0xF63352C5613466A4, 0x5544331177BB8866, 0xB6C1997758069F2F, 0x91ED847C6943C715,
295 0x8FF58E7A7B79F701, 0x85FD8878756FE70D, 0xEED85A3682F7ADB4, 0x6C70241C54C4E048,
296 0xDDE44B39AF9ED596, 0x2079EB599219F2CB, 0x7860281848E8C050, 0x1345FA56BF708AE9,
297 0x45F6C8B33E39F18D, 0x4AFACDB03724E987, 0xB4906C24FC513DD8, 0xA0806020E07D1DC0,
298 0x40F2CBB23932F98B, 0xE072AB92D94FE44B, 0x15B6F8A34E8971ED, 0xE7275DC07A134EBA,
299 0x490DCC44C1D61A85, 0xF795A66233913751, 0x5040301070B08060, 0x5EEAC1B42B08C99F,
300 0xAE2A9184BBC5543F, 0x5211C543D4E72297, 0xE576A893DE44EC4D, 0xED2F5BC274055EB6,
301 0x7F35DE4AEBB46AA1, 0x73CEDABD145B81A9, 0x89068C8F8A800C05, 0x99B4772DC30275EE,
302 0x76CAD9BC135089AF, 0xD64AB99CF32D946F, 0xDFB5BE6A0BC97761, 0x5D1DC040DDFA3A9D,
303 0xD41B4CCF577A3698, 0x10B2FBA2498279EB, 0xBA3A9D80A7E97427, 0x6E21D14FF09342BF,
304 0x637C211F5DD9F842, 0xC50F43CA4C5D1E86, 0x3892E3AA71DA39DB, 0x5715C642D3EC2A91
307 static const uint64_t t4[256] =
309 0xBBB96A01BAD3D268, 0xE59A66B154FC4D19, 0xE26514CD2F71BC93, 0x25871B51749CCDB9,
310 0xF7A257A453F55102, 0xD0D6BE03D3686BB8, 0xD6DEB504D26B6FBD, 0xB35285FE4DD72964,
311 0xFDBA4AAD50F05D0D, 0xCF09E063ACE98A26, 0x091C96848D8A0E83, 0xA5914D1ABFDCC679,
312 0x3DA7374D7090DDAD, 0xF1AA5CA352F65507, 0x7BA417E19AB352C8, 0xB55A8EF94CD42D61,
313 0x460320ACEA238F65, 0xC4E68411D56273A6, 0x55CC68C297A466F1, 0xDCC6A80DD16E63B2,
314 0xAA85D0993355CCFF, 0xFBB241AA51F35908, 0xC7E20F9C5BED712A, 0xF359AE55A6F7A204,
315 0xFEBEC120DE7F5F81, 0xAD7AA2E548D83D75, 0xD729CC7FA8E59A32, 0x71BC0AE899B65EC7,
316 0xE096E63BDB704B90, 0xAC8DDB9E3256C8FA, 0x95D11522B7C4E651, 0x32B3AACEFC19D72B,
317 0x704B7393E338AB48, 0x63843BFD9EBF42DC, 0x41FC52D091AE7EEF, 0x7DAC1CE69BB056CD,
318 0x76437894E23BAF4D, 0xBDB16106BBD0D66D, 0x9B32F1DA41C31958, 0x7957E5176EB2A5CB,
319 0xF941B35CA5F2AE0B, 0x8016564BCB400BC0, 0x677FC20C6BBDB1DA, 0x59DC7ECC95A26EFB,
320 0xE1619F40A1FEBE1F, 0x10CBC3E3F308EB18, 0x81E12F30B1CEFE4F, 0x0C10160E0206080A,
321 0x922E675ECC4917DB, 0xA26E3F66C45137F3, 0x4EE8CF531D277469, 0x78A09C6C143C5044,
322 0xB0560E73C3582BE8, 0x573F9A3463A591F2, 0xE69EED3CDA734F95, 0xD3D2358E5DE76934,
323 0xDFC223805FE1613E, 0xF2AED72EDC79578B, 0x13CF486E7D87E994, 0x94266C59CD4A13DE,
324 0x1FDF5E607F81E19E, 0xC1EA049B5AEE752F, 0x7547F3196CB4ADC1, 0xD5DA3E895CE46D31,
325 0x08EBEFFFF704FB0C, 0xD42D47F2266A98BE, 0x38ABB7C7FF1CDB24, 0x543B11B9ED2A937E,
326 0x4A1336A2E825876F, 0x699C26F49DBA4ED3, 0x7F5FEE106FB1A1CE, 0x03048B8D8E8F028C,
327 0x56C8E34F192B647D, 0xE7699447A0FDBA1A, 0x1AD3DEEAF00DE717, 0x113CBA9889861E97,
328 0x2278692D0F113C33, 0x1238311507091C1B, 0xC511FD6AAFEC8629, 0x208B9BDBFB10CB30,
329 0x3040583808182028, 0x7EA8976B153F5441, 0x2E687F230D173439, 0x18202C1C040C1014,
330 0x06080B0701030405, 0x4507AB2164AC8DE9, 0xF8B6CA27DF7C5B84, 0x29970D5F769AC5B3,
331 0x0BEF6472798BF980, 0xF4A6DC29DD7A538E, 0x8EF5B2B33D47F4C9, 0x74B08A62163A584E,
332 0x82E5A4BD3F41FCC3, 0xB2A5FC853759DCEB, 0x734FF81E6DB7A9C4, 0x90DD95A83848E0D8,
333 0xB1A17708B9D6DE67, 0x37BF2A447395D1A2, 0x4C1B3DA5E926836A, 0xBEB5EA8B355FD4E1,
334 0xE3926DB655FF491C, 0x3BAF3C4A7193D9A8, 0x07FF727C7B8DF18A, 0x0F149D838C890A86,
335 0x31B721437296D5A7, 0x1734B19F88851A92, 0x0EE3E4F8F607FF09, 0xFC4D33D62A7EA882,
336 0x84EDAFBA3E42F8C6, 0xD9CA28875EE2653B, 0xD2254CF527699CBB, 0x890AC0CF46CA0543,
337 0x286074240C14303C, 0x430FA02665AF89EC, 0x6D67DF0568B8BDD5, 0x5B2F8C3A61A399F8,
338 0x0A181D0903050C0F, 0xBC46187DC15E23E2, 0xEF827BB857F94116, 0xCEFE9918D6677FA9,
339 0xEC86F035D976439A, 0xCDFA129558E87D25, 0xEA8EFB32D875479F, 0x4917BD2F66AA85E3,
340 0xC8F6921FD7647BAC, 0x9CCD83A63A4EE8D2, 0x8A0E4B42C84507CF, 0x88FDB9B43C44F0CC,
341 0x268390DCFA13CF35, 0x53C463C596A762F4, 0xF551A552A7F4A601, 0x77B401EF98B55AC2,
342 0x52331ABEEC29977B, 0xB7A97C0FB8D5DA62, 0xA876226FC7543BFC, 0xC319F66DAEEF822C,
343 0x6B6FD40269BBB9D0, 0xA762BFEC4BDD317A, 0xDD31D176ABE0963D, 0xD121C778A9E69E37,
344 0x4F1FB62867A981E6, 0x3C504E360A1E2822, 0x8F02CBC847C90146, 0x16C3C8E4F20BEF1D,
345 0x99C1032CB5C2EE5B, 0xCC0D6BEE226688AA, 0x647B4981E532B356, 0x5E230CB0EE2F9F71,
346 0xA399461DBEDFC27C, 0xFA4538D12B7DAC87, 0x217CE2A0819E3EBF, 0x6C90A67E1236485A,
347 0x2D6CF4AE839836B5, 0x5AD8F5411B2D6C77, 0x2470622A0E123836, 0xCA0560E923658CAF,
348 0x04FBF9F1F502F306, 0x8312DDC645CF094C, 0xC61576E7216384A5, 0x9E3E7150CE4F1FD1,
349 0xAB72A9E249DB3970, 0xE87D09C42C74B09C, 0x2C9B8DD5F916C33A, 0x6E635488E637BF59,
350 0x93D91E25B6C7E254, 0xF05D25D82878A088, 0x72B8816517395C4B, 0x2B64FFA9829B32B0,
351 0x5CD0FE461A2E6872, 0x1D2CAC968B80169D, 0x3EA3BCC0FE1FDF21, 0x1B24A7918A831298,
352 0x3648533F091B242D, 0x8C064045C94603CA, 0x354CD8B2879426A1, 0xB94A98F74ED2256B,
353 0x7C5B659DE13EA342, 0xE46D1FCA2E72B896, 0x62734286E431B753, 0x7A536E9AE03DA747,
354 0x400B2BABEB208B60, 0x47F459D790AD7AEA, 0xFF49B85BA4F1AA0E, 0x44F0D25A1E227866,
355 0x395CCEBC85922EAB, 0x5D27873D60A09DFD, 0x0000000000000000, 0xDE355AFB256F94B1,
356 0x02F3F2F6F401F703, 0x1CDBD5EDF10EE312, 0x5FD475CB94A16AFE, 0x3A5845310B1D2C27,
357 0x686B5F8FE734BB5C, 0x238F1056759FC9BC, 0x582B07B7EF2C9B74, 0xB8BDE18C345CD0E4,
358 0xA695C6973153C4F5, 0xC2EE8F16D46177A3, 0xDACEA30AD06D67B7, 0x3344D3B5869722A4,
359 0x19D755677E82E59B, 0xC901EB64ADEA8E23, 0x34BBA1C9FD1AD32E, 0xF6552EDF297BA48D,
360 0xA09DCD903050C0F0, 0x9AC588A13B4DECD7, 0x658C30FA9FBC46D9, 0x2A9386D2F815C73F,
361 0xAE7E2968C6573FF9, 0x6A98AD7913354C5F, 0x14303A12060A181E, 0x1E28271B050F1411,
362 0xA4663461C55233F6, 0x6688BB7711334455, 0x2F9F06587799C1B6, 0x15C743697C84ED91,
363 0x01F7797B7A8EF58F, 0x0DE76F757888FD85, 0xB4ADF782365AD8EE, 0x48E0C4541C24706C,
364 0x96D59EAF394BE4DD, 0xCBF2199259EB7920, 0x50C0E84818286078, 0xE98A70BF56FA4513,
365 0x8DF1393EB3C8F645, 0x87E92437B0CDFA4A, 0xD83D51FC246C90B4, 0xC01D7DE0206080A0,
366 0x8BF93239B2CBF240, 0x4BE44FD992AB72E0, 0xED71894EA3F8B615, 0xBA4E137AC05D27E7,
367 0x851AD6C144CC0D49, 0x5137913362A695F7, 0x6080B07010304050, 0x9FC9082BB4C1EA5E,
368 0x3F54C5BB84912AAE, 0x9722E7D443C51152, 0x4DEC44DE93A876E5, 0xB65E0574C25B2FED,
369 0xA16AB4EB4ADE357F, 0xA9815B14BDDACE73, 0x050C808A8F8C0689, 0xEE7502C32D77B499,
370 0xAF895013BCD9CA76, 0x6F942DF39CB94AD6, 0x6177C90B6ABEB5DF, 0x9D3AFADD40C01D5D,
371 0x98367A57CF4C1BD4, 0xEB798249A2FBB210, 0x2774E9A7809D3ABA, 0xBF4293F04FD1216E,
372 0x42F8D95D1F217C63, 0x861E5D4CCA430FC5, 0xDB39DA71AAE39238, 0x912AECD342C61557
375 static const uint64_t t5[256] =
377 0xB9BB016AD3BA68D2, 0x9AE5B166FC54194D, 0x65E2CD14712F93BC, 0x8725511B9C74B9CD,
378 0xA2F7A457F5530251, 0xD6D003BE68D3B86B, 0xDED604B56BD2BD6F, 0x52B3FE85D74D6429,
379 0xBAFDAD4AF0500D5D, 0x09CF63E0E9AC268A, 0x1C0984968A8D830E, 0x91A51A4DDCBF79C6,
380 0xA73D4D379070ADDD, 0xAAF1A35CF6520755, 0xA47BE117B39AC852, 0x5AB5F98ED44C612D,
381 0x0346AC2023EA658F, 0xE6C4118462D5A673, 0xCC55C268A497F166, 0xC6DC0DA86ED1B263,
382 0x85AA99D05533FFCC, 0xB2FBAA41F3510859, 0xE2C79C0FED5B2A71, 0x59F355AEF7A604A2,
383 0xBEFE20C17FDE815F, 0x7AADE5A2D848753D, 0x29D77FCCE5A8329A, 0xBC71E80AB699C75E,
384 0x96E03BE670DB904B, 0x8DAC9EDB5632FAC8, 0xD1952215C4B751E6, 0xB332CEAA19FC2BD7,
385 0x4B70937338E348AB, 0x8463FD3BBF9EDC42, 0xFC41D052AE91EF7E, 0xAC7DE61CB09BCD56,
386 0x437694783BE24DAF, 0xB1BD0661D0BB6DD6, 0x329BDAF1C3415819, 0x577917E5B26ECBA5,
387 0x41F95CB3F2A50BAE, 0x16804B5640CBC00B, 0x7F670CC2BD6BDAB1, 0xDC59CC7EA295FB6E,
388 0x61E1409FFEA11FBE, 0xCB10E3C308F318EB, 0xE181302FCEB14FFE, 0x100C0E1606020A08,
389 0x2E925E6749CCDB17, 0x6EA2663F51C4F337, 0xE84E53CF271D6974, 0xA0786C9C3C144450,
390 0x56B0730E58C3E82B, 0x3F57349AA563F291, 0x9EE63CED73DA954F, 0xD2D38E35E75D3469,
391 0xC2DF8023E15F3E61, 0xAEF22ED779DC8B57, 0xCF136E48877D94E9, 0x2694596C4ACDDE13,
392 0xDF1F605E817F9EE1, 0xEAC19B04EE5A2F75, 0x477519F3B46CC1AD, 0xDAD5893EE45C316D,
393 0xEB08FFEF04F70CFB, 0x2DD4F2476A26BE98, 0xAB38C7B71CFF24DB, 0x3B54B9112AED7E93,
394 0x134AA23625E86F87, 0x9C69F426BA9DD34E, 0x5F7F10EEB16FCEA1, 0x04038D8B8F8E8C02,
395 0xC8564FE32B197D64, 0x69E74794FDA01ABA, 0xD31AEADE0DF017E7, 0x3C1198BA8689971E,
396 0x78222D69110F333C, 0x3812153109071B1C, 0x11C56AFDECAF2986, 0x8B20DB9B10FB30CB,
397 0x4030385818082820, 0xA87E6B973F154154, 0x682E237F170D3934, 0x20181C2C0C041410,
398 0x0806070B03010504, 0x074521ABAC64E98D, 0xB6F827CA7CDF845B, 0x97295F0D9A76B3C5,
399 0xEF0B72648B7980F9, 0xA6F429DC7ADD8E53, 0xF58EB3B2473DC9F4, 0xB074628A3A164E58,
400 0xE582BDA4413FC3FC, 0xA5B285FC5937EBDC, 0x4F731EF8B76DC4A9, 0xDD90A8954838D8E0,
401 0xA1B10877D6B967DE, 0xBF37442A9573A2D1, 0x1B4CA53D26E96A83, 0xB5BE8BEA5F35E1D4,
402 0x92E3B66DFF551C49, 0xAF3B4A3C9371A8D9, 0xFF077C728D7B8AF1, 0x140F839D898C860A,
403 0xB73143219672A7D5, 0x34179FB18588921A, 0xE30EF8E407F609FF, 0x4DFCD6337E2A82A8,
404 0xED84BAAF423EC6F8, 0xCAD98728E25E3B65, 0x25D2F54C6927BB9C, 0x0A89CFC0CA464305,
405 0x60282474140C3C30, 0x0F4326A0AF65EC89, 0x676D05DFB868D5BD, 0x2F5B3A8CA361F899,
406 0x180A091D05030F0C, 0x46BC7D185EC1E223, 0x82EFB87BF9571641, 0xFECE189967D6A97F,
407 0x86EC35F076D99A43, 0xFACD9512E858257D, 0x8EEA32FB75D89F47, 0x17492FBDAA66E385,
408 0xF6C81F9264D7AC7B, 0xCD9CA6834E3AD2E8, 0x0E8A424B45C8CF07, 0xFD88B4B9443CCCF0,
409 0x8326DC9013FA35CF, 0xC453C563A796F462, 0x51F552A5F4A701A6, 0xB477EF01B598C25A,
410 0x3352BE1A29EC7B97, 0xA9B70F7CD5B862DA, 0x76A86F2254C7FC3B, 0x19C36DF6EFAE2C82,
411 0x6F6B02D4BB69D0B9, 0x62A7ECBFDD4B7A31, 0x31DD76D1E0AB3D96, 0x21D178C7E6A9379E,
412 0x1F4F28B6A967E681, 0x503C364E1E0A2228, 0x028FC8CBC9474601, 0xC316E4C80BF21DEF,
413 0xC1992C03C2B55BEE, 0x0DCCEE6B6622AA88, 0x7B64814932E556B3, 0x235EB00C2FEE719F,
414 0x99A31D46DFBE7CC2, 0x45FAD1387D2B87AC, 0x7C21A0E29E81BF3E, 0x906C7EA636125A48,
415 0x6C2DAEF49883B536, 0xD85A41F52D1B776C, 0x70242A62120E3638, 0x05CAE9606523AF8C,
416 0xFB04F1F902F506F3, 0x1283C6DDCF454C09, 0x15C6E7766321A584, 0x3E9E50714FCED11F,
417 0x72ABE2A9DB497039, 0x7DE8C409742C9CB0, 0x9B2CD58D16F93AC3, 0x636E885437E659BF,
418 0xD993251EC7B654E2, 0x5DF0D825782888A0, 0xB872658139174B5C, 0x642BA9FF9B82B032,
419 0xD05C46FE2E1A7268, 0x2C1D96AC808B9D16, 0xA33EC0BC1FFE21DF, 0x241B91A7838A9812,
420 0x48363F531B092D24, 0x068C454046C9CA03, 0x4C35B2D89487A126, 0x4AB9F798D24E6B25,
421 0x5B7C9D653EE142A3, 0x6DE4CA1F722E96B8, 0x7362864231E453B7, 0x537A9A6E3DE047A7,
422 0x0B40AB2B20EB608B, 0xF447D759AD90EA7A, 0x49FF5BB8F1A40EAA, 0xF0445AD2221E6678,
423 0x5C39BCCE9285AB2E, 0x275D3D87A060FD9D, 0x0000000000000000, 0x35DEFB5A6F25B194,
424 0xF302F6F201F403F7, 0xDB1CEDD50EF112E3, 0xD45FCB75A194FE6A, 0x583A31451D0B272C,
425 0x6B688F5F34E75CBB, 0x8F2356109F75BCC9, 0x2B58B7072CEF749B, 0xBDB88CE15C34E4D0,
426 0x95A697C65331F5C4, 0xEEC2168F61D4A377, 0xCEDA0AA36DD0B767, 0x4433B5D39786A422,
427 0xD7196755827E9BE5, 0x01C964EBEAAD238E, 0xBB34C9A11AFD2ED3, 0x55F6DF2E7B298DA4,
428 0x9DA090CD5030F0C0, 0xC59AA1884D3BD7EC, 0x8C65FA30BC9FD946, 0x932AD28615F83FC7,
429 0x7EAE682957C6F93F, 0x986A79AD35135F4C, 0x3014123A0A061E18, 0x281E1B270F051114,
430 0x66A4613452C5F633, 0x886677BB33115544, 0x9F2F58069977B6C1, 0xC7156943847C91ED,
431 0xF7017B798E7A8FF5, 0xE70D756F887885FD, 0xADB482F75A36EED8, 0xE04854C4241C6C70,
432 0xD596AF9E4B39DDE4, 0xF2CB9219EB592079, 0xC05048E828187860, 0x8AE9BF70FA561345,
433 0xF18D3E39C8B345F6, 0xE9873724CDB04AFA, 0x3DD8FC516C24B490, 0x1DC0E07D6020A080,
434 0xF98B3932CBB240F2, 0xE44BD94FAB92E072, 0x71ED4E89F8A315B6, 0x4EBA7A135DC0E727,
435 0x1A85C1D6CC44490D, 0x37513391A662F795, 0x806070B030105040, 0xC99F2B08C1B45EEA,
436 0x543FBBC59184AE2A, 0x2297D4E7C5435211, 0xEC4DDE44A893E576, 0x5EB674055BC2ED2F,
437 0x6AA1EBB4DE4A7F35, 0x81A9145BDABD73CE, 0x0C058A808C8F8906, 0x75EEC302772D99B4,
438 0x89AF1350D9BC76CA, 0x946FF32DB99CD64A, 0x77610BC9BE6ADFB5, 0x3A9DDDFAC0405D1D,
439 0x3698577A4CCFD41B, 0x79EB4982FBA210B2, 0x7427A7E99D80BA3A, 0x42BFF093D14F6E21,
440 0xF8425DD9211F637C, 0x1E864C5D43CAC50F, 0x39DB71DAE3AA3892, 0x2A91D3ECC6425715
443 static const uint64_t t6[256] =
445 0x6A01BBB9D268BAD3, 0x66B1E59A4D1954FC, 0x14CDE265BC932F71, 0x1B512587CDB9749C,
446 0x57A4F7A2510253F5, 0xBE03D0D66BB8D368, 0xB504D6DE6FBDD26B, 0x85FEB35229644DD7,
447 0x4AADFDBA5D0D50F0, 0xE063CF098A26ACE9, 0x9684091C0E838D8A, 0x4D1AA591C679BFDC,
448 0x374D3DA7DDAD7090, 0x5CA3F1AA550752F6, 0x17E17BA452C89AB3, 0x8EF9B55A2D614CD4,
449 0x20AC46038F65EA23, 0x8411C4E673A6D562, 0x68C255CC66F197A4, 0xA80DDCC663B2D16E,
450 0xD099AA85CCFF3355, 0x41AAFBB2590851F3, 0x0F9CC7E2712A5BED, 0xAE55F359A204A6F7,
451 0xC120FEBE5F81DE7F, 0xA2E5AD7A3D7548D8, 0xCC7FD7299A32A8E5, 0x0AE871BC5EC799B6,
452 0xE63BE0964B90DB70, 0xDB9EAC8DC8FA3256, 0x152295D1E651B7C4, 0xAACE32B3D72BFC19,
453 0x7393704BAB48E338, 0x3BFD638442DC9EBF, 0x52D041FC7EEF91AE, 0x1CE67DAC56CD9BB0,
454 0x78947643AF4DE23B, 0x6106BDB1D66DBBD0, 0xF1DA9B32195841C3, 0xE5177957A5CB6EB2,
455 0xB35CF941AE0BA5F2, 0x564B80160BC0CB40, 0xC20C677FB1DA6BBD, 0x7ECC59DC6EFB95A2,
456 0x9F40E161BE1FA1FE, 0xC3E310CBEB18F308, 0x2F3081E1FE4FB1CE, 0x160E0C10080A0206,
457 0x675E922E17DBCC49, 0x3F66A26E37F3C451, 0xCF534EE874691D27, 0x9C6C78A05044143C,
458 0x0E73B0562BE8C358, 0x9A34573F91F263A5, 0xED3CE69E4F95DA73, 0x358ED3D269345DE7,
459 0x2380DFC2613E5FE1, 0xD72EF2AE578BDC79, 0x486E13CFE9947D87, 0x6C59942613DECD4A,
460 0x5E601FDFE19E7F81, 0x049BC1EA752F5AEE, 0xF3197547ADC16CB4, 0x3E89D5DA6D315CE4,
461 0xEFFF08EBFB0CF704, 0x47F2D42D98BE266A, 0xB7C738ABDB24FF1C, 0x11B9543B937EED2A,
462 0x36A24A13876FE825, 0x26F4699C4ED39DBA, 0xEE107F5FA1CE6FB1, 0x8B8D0304028C8E8F,
463 0xE34F56C8647D192B, 0x9447E769BA1AA0FD, 0xDEEA1AD3E717F00D, 0xBA98113C1E978986,
464 0x692D22783C330F11, 0x311512381C1B0709, 0xFD6AC5118629AFEC, 0x9BDB208BCB30FB10,
465 0x5838304020280818, 0x976B7EA85441153F, 0x7F232E6834390D17, 0x2C1C18201014040C,
466 0x0B07060804050103, 0xAB2145078DE964AC, 0xCA27F8B65B84DF7C, 0x0D5F2997C5B3769A,
467 0x64720BEFF980798B, 0xDC29F4A6538EDD7A, 0xB2B38EF5F4C93D47, 0x8A6274B0584E163A,
468 0xA4BD82E5FCC33F41, 0xFC85B2A5DCEB3759, 0xF81E734FA9C46DB7, 0x95A890DDE0D83848,
469 0x7708B1A1DE67B9D6, 0x2A4437BFD1A27395, 0x3DA54C1B836AE926, 0xEA8BBEB5D4E1355F,
470 0x6DB6E392491C55FF, 0x3C4A3BAFD9A87193, 0x727C07FFF18A7B8D, 0x9D830F140A868C89,
471 0x214331B7D5A77296, 0xB19F17341A928885, 0xE4F80EE3FF09F607, 0x33D6FC4DA8822A7E,
472 0xAFBA84EDF8C63E42, 0x2887D9CA653B5EE2, 0x4CF5D2259CBB2769, 0xC0CF890A054346CA,
473 0x74242860303C0C14, 0xA026430F89EC65AF, 0xDF056D67BDD568B8, 0x8C3A5B2F99F861A3,
474 0x1D090A180C0F0305, 0x187DBC4623E2C15E, 0x7BB8EF82411657F9, 0x9918CEFE7FA9D667,
475 0xF035EC86439AD976, 0x1295CDFA7D2558E8, 0xFB32EA8E479FD875, 0xBD2F491785E366AA,
476 0x921FC8F67BACD764, 0x83A69CCDE8D23A4E, 0x4B428A0E07CFC845, 0xB9B488FDF0CC3C44,
477 0x90DC2683CF35FA13, 0x63C553C462F496A7, 0xA552F551A601A7F4, 0x01EF77B45AC298B5,
478 0x1ABE5233977BEC29, 0x7C0FB7A9DA62B8D5, 0x226FA8763BFCC754, 0xF66DC319822CAEEF,
479 0xD4026B6FB9D069BB, 0xBFECA762317A4BDD, 0xD176DD31963DABE0, 0xC778D1219E37A9E6,
480 0xB6284F1F81E667A9, 0x4E363C5028220A1E, 0xCBC88F02014647C9, 0xC8E416C3EF1DF20B,
481 0x032C99C1EE5BB5C2, 0x6BEECC0D88AA2266, 0x4981647BB356E532, 0x0CB05E239F71EE2F,
482 0x461DA399C27CBEDF, 0x38D1FA45AC872B7D, 0xE2A0217C3EBF819E, 0xA67E6C90485A1236,
483 0xF4AE2D6C36B58398, 0xF5415AD86C771B2D, 0x622A247038360E12, 0x60E9CA058CAF2365,
484 0xF9F104FBF306F502, 0xDDC68312094C45CF, 0x76E7C61584A52163, 0x71509E3E1FD1CE4F,
485 0xA9E2AB72397049DB, 0x09C4E87DB09C2C74, 0x8DD52C9BC33AF916, 0x54886E63BF59E637,
486 0x1E2593D9E254B6C7, 0x25D8F05DA0882878, 0x816572B85C4B1739, 0xFFA92B6432B0829B,
487 0xFE465CD068721A2E, 0xAC961D2C169D8B80, 0xBCC03EA3DF21FE1F, 0xA7911B2412988A83,
488 0x533F3648242D091B, 0x40458C0603CAC946, 0xD8B2354C26A18794, 0x98F7B94A256B4ED2,
489 0x659D7C5BA342E13E, 0x1FCAE46DB8962E72, 0x42866273B753E431, 0x6E9A7A53A747E03D,
490 0x2BAB400B8B60EB20, 0x59D747F47AEA90AD, 0xB85BFF49AA0EA4F1, 0xD25A44F078661E22,
491 0xCEBC395C2EAB8592, 0x873D5D279DFD60A0, 0x0000000000000000, 0x5AFBDE3594B1256F,
492 0xF2F602F3F703F401, 0xD5ED1CDBE312F10E, 0x75CB5FD46AFE94A1, 0x45313A582C270B1D,
493 0x5F8F686BBB5CE734, 0x1056238FC9BC759F, 0x07B7582B9B74EF2C, 0xE18CB8BDD0E4345C,
494 0xC697A695C4F53153, 0x8F16C2EE77A3D461, 0xA30ADACE67B7D06D, 0xD3B5334422A48697,
495 0x556719D7E59B7E82, 0xEB64C9018E23ADEA, 0xA1C934BBD32EFD1A, 0x2EDFF655A48D297B,
496 0xCD90A09DC0F03050, 0x88A19AC5ECD73B4D, 0x30FA658C46D99FBC, 0x86D22A93C73FF815,
497 0x2968AE7E3FF9C657, 0xAD796A984C5F1335, 0x3A121430181E060A, 0x271B1E281411050F,
498 0x3461A46633F6C552, 0xBB77668844551133, 0x06582F9FC1B67799, 0x436915C7ED917C84,
499 0x797B01F7F58F7A8E, 0x6F750DE7FD857888, 0xF782B4ADD8EE365A, 0xC45448E0706C1C24,
500 0x9EAF96D5E4DD394B, 0x1992CBF2792059EB, 0xE84850C060781828, 0x70BFE98A451356FA,
501 0x393E8DF1F645B3C8, 0x243787E9FA4AB0CD, 0x51FCD83D90B4246C, 0x7DE0C01D80A02060,
502 0x32398BF9F240B2CB, 0x4FD94BE472E092AB, 0x894EED71B615A3F8, 0x137ABA4E27E7C05D,
503 0xD6C1851A0D4944CC, 0x9133513795F762A6, 0xB070608040501030, 0x082B9FC9EA5EB4C1,
504 0xC5BB3F542AAE8491, 0xE7D49722115243C5, 0x44DE4DEC76E593A8, 0x0574B65E2FEDC25B,
505 0xB4EBA16A357F4ADE, 0x5B14A981CE73BDDA, 0x808A050C06898F8C, 0x02C3EE75B4992D77,
506 0x5013AF89CA76BCD9, 0x2DF36F944AD69CB9, 0xC90B6177B5DF6ABE, 0xFADD9D3A1D5D40C0,
507 0x7A5798361BD4CF4C, 0x8249EB79B210A2FB, 0xE9A727743ABA809D, 0x93F0BF42216E4FD1,
508 0xD95D42F87C631F21, 0x5D4C861E0FC5CA43, 0xDA71DB399238AAE3, 0xECD3912A155742C6
511 static const uint64_t t7[256] =
513 0x016AB9BB68D2D3BA, 0xB1669AE5194DFC54, 0xCD1465E293BC712F, 0x511B8725B9CD9C74,
514 0xA457A2F70251F553, 0x03BED6D0B86B68D3, 0x04B5DED6BD6F6BD2, 0xFE8552B36429D74D,
515 0xAD4ABAFD0D5DF050, 0x63E009CF268AE9AC, 0x84961C09830E8A8D, 0x1A4D91A579C6DCBF,
516 0x4D37A73DADDD9070, 0xA35CAAF10755F652, 0xE117A47BC852B39A, 0xF98E5AB5612DD44C,
517 0xAC200346658F23EA, 0x1184E6C4A67362D5, 0xC268CC55F166A497, 0x0DA8C6DCB2636ED1,
518 0x99D085AAFFCC5533, 0xAA41B2FB0859F351, 0x9C0FE2C72A71ED5B, 0x55AE59F304A2F7A6,
519 0x20C1BEFE815F7FDE, 0xE5A27AAD753DD848, 0x7FCC29D7329AE5A8, 0xE80ABC71C75EB699,
520 0x3BE696E0904B70DB, 0x9EDB8DACFAC85632, 0x2215D19551E6C4B7, 0xCEAAB3322BD719FC,
521 0x93734B7048AB38E3, 0xFD3B8463DC42BF9E, 0xD052FC41EF7EAE91, 0xE61CAC7DCD56B09B,
522 0x947843764DAF3BE2, 0x0661B1BD6DD6D0BB, 0xDAF1329B5819C341, 0x17E55779CBA5B26E,
523 0x5CB341F90BAEF2A5, 0x4B561680C00B40CB, 0x0CC27F67DAB1BD6B, 0xCC7EDC59FB6EA295,
524 0x409F61E11FBEFEA1, 0xE3C3CB1018EB08F3, 0x302FE1814FFECEB1, 0x0E16100C0A080602,
525 0x5E672E92DB1749CC, 0x663F6EA2F33751C4, 0x53CFE84E6974271D, 0x6C9CA07844503C14,
526 0x730E56B0E82B58C3, 0x349A3F57F291A563, 0x3CED9EE6954F73DA, 0x8E35D2D33469E75D,
527 0x8023C2DF3E61E15F, 0x2ED7AEF28B5779DC, 0x6E48CF1394E9877D, 0x596C2694DE134ACD,
528 0x605EDF1F9EE1817F, 0x9B04EAC12F75EE5A, 0x19F34775C1ADB46C, 0x893EDAD5316DE45C,
529 0xFFEFEB080CFB04F7, 0xF2472DD4BE986A26, 0xC7B7AB3824DB1CFF, 0xB9113B547E932AED,
530 0xA236134A6F8725E8, 0xF4269C69D34EBA9D, 0x10EE5F7FCEA1B16F, 0x8D8B04038C028F8E,
531 0x4FE3C8567D642B19, 0x479469E71ABAFDA0, 0xEADED31A17E70DF0, 0x98BA3C11971E8689,
532 0x2D697822333C110F, 0x153138121B1C0907, 0x6AFD11C52986ECAF, 0xDB9B8B2030CB10FB,
533 0x3858403028201808, 0x6B97A87E41543F15, 0x237F682E3934170D, 0x1C2C201814100C04,
534 0x070B080605040301, 0x21AB0745E98DAC64, 0x27CAB6F8845B7CDF, 0x5F0D9729B3C59A76,
535 0x7264EF0B80F98B79, 0x29DCA6F48E537ADD, 0xB3B2F58EC9F4473D, 0x628AB0744E583A16,
536 0xBDA4E582C3FC413F, 0x85FCA5B2EBDC5937, 0x1EF84F73C4A9B76D, 0xA895DD90D8E04838,
537 0x0877A1B167DED6B9, 0x442ABF37A2D19573, 0xA53D1B4C6A8326E9, 0x8BEAB5BEE1D45F35,
538 0xB66D92E31C49FF55, 0x4A3CAF3BA8D99371, 0x7C72FF078AF18D7B, 0x839D140F860A898C,
539 0x4321B731A7D59672, 0x9FB13417921A8588, 0xF8E4E30E09FF07F6, 0xD6334DFC82A87E2A,
540 0xBAAFED84C6F8423E, 0x8728CAD93B65E25E, 0xF54C25D2BB9C6927, 0xCFC00A894305CA46,
541 0x247460283C30140C, 0x26A00F43EC89AF65, 0x05DF676DD5BDB868, 0x3A8C2F5BF899A361,
542 0x091D180A0F0C0503, 0x7D1846BCE2235EC1, 0xB87B82EF1641F957, 0x1899FECEA97F67D6,
543 0x35F086EC9A4376D9, 0x9512FACD257DE858, 0x32FB8EEA9F4775D8, 0x2FBD1749E385AA66,
544 0x1F92F6C8AC7B64D7, 0xA683CD9CD2E84E3A, 0x424B0E8ACF0745C8, 0xB4B9FD88CCF0443C,
545 0xDC90832635CF13FA, 0xC563C453F462A796, 0x52A551F501A6F4A7, 0xEF01B477C25AB598,
546 0xBE1A33527B9729EC, 0x0F7CA9B762DAD5B8, 0x6F2276A8FC3B54C7, 0x6DF619C32C82EFAE,
547 0x02D46F6BD0B9BB69, 0xECBF62A77A31DD4B, 0x76D131DD3D96E0AB, 0x78C721D1379EE6A9,
548 0x28B61F4FE681A967, 0x364E503C22281E0A, 0xC8CB028F4601C947, 0xE4C8C3161DEF0BF2,
549 0x2C03C1995BEEC2B5, 0xEE6B0DCCAA886622, 0x81497B6456B332E5, 0xB00C235E719F2FEE,
550 0x1D4699A37CC2DFBE, 0xD13845FA87AC7D2B, 0xA0E27C21BF3E9E81, 0x7EA6906C5A483612,
551 0xAEF46C2DB5369883, 0x41F5D85A776C2D1B, 0x2A6270243638120E, 0xE96005CAAF8C6523,
552 0xF1F9FB0406F302F5, 0xC6DD12834C09CF45, 0xE77615C6A5846321, 0x50713E9ED11F4FCE,
553 0xE2A972AB7039DB49, 0xC4097DE89CB0742C, 0xD58D9B2C3AC316F9, 0x8854636E59BF37E6,
554 0x251ED99354E2C7B6, 0xD8255DF088A07828, 0x6581B8724B5C3917, 0xA9FF642BB0329B82,
555 0x46FED05C72682E1A, 0x96AC2C1D9D16808B, 0xC0BCA33E21DF1FFE, 0x91A7241B9812838A,
556 0x3F5348362D241B09, 0x4540068CCA0346C9, 0xB2D84C35A1269487, 0xF7984AB96B25D24E,
557 0x9D655B7C42A33EE1, 0xCA1F6DE496B8722E, 0x8642736253B731E4, 0x9A6E537A47A73DE0,
558 0xAB2B0B40608B20EB, 0xD759F447EA7AAD90, 0x5BB849FF0EAAF1A4, 0x5AD2F0446678221E,
559 0xBCCE5C39AB2E9285, 0x3D87275DFD9DA060, 0x0000000000000000, 0xFB5A35DEB1946F25,
560 0xF6F2F30203F701F4, 0xEDD5DB1C12E30EF1, 0xCB75D45FFE6AA194, 0x3145583A272C1D0B,
561 0x8F5F6B685CBB34E7, 0x56108F23BCC99F75, 0xB7072B58749B2CEF, 0x8CE1BDB8E4D05C34,
562 0x97C695A6F5C45331, 0x168FEEC2A37761D4, 0x0AA3CEDAB7676DD0, 0xB5D34433A4229786,
563 0x6755D7199BE5827E, 0x64EB01C9238EEAAD, 0xC9A1BB342ED31AFD, 0xDF2E55F68DA47B29,
564 0x90CD9DA0F0C05030, 0xA188C59AD7EC4D3B, 0xFA308C65D946BC9F, 0xD286932A3FC715F8,
565 0x68297EAEF93F57C6, 0x79AD986A5F4C3513, 0x123A30141E180A06, 0x1B27281E11140F05,
566 0x613466A4F63352C5, 0x77BB886655443311, 0x58069F2FB6C19977, 0x6943C71591ED847C,
567 0x7B79F7018FF58E7A, 0x756FE70D85FD8878, 0x82F7ADB4EED85A36, 0x54C4E0486C70241C,
568 0xAF9ED596DDE44B39, 0x9219F2CB2079EB59, 0x48E8C05078602818, 0xBF708AE91345FA56,
569 0x3E39F18D45F6C8B3, 0x3724E9874AFACDB0, 0xFC513DD8B4906C24, 0xE07D1DC0A0806020,
570 0x3932F98B40F2CBB2, 0xD94FE44BE072AB92, 0x4E8971ED15B6F8A3, 0x7A134EBAE7275DC0,
571 0xC1D61A85490DCC44, 0x33913751F795A662, 0x70B0806050403010, 0x2B08C99F5EEAC1B4,
572 0xBBC5543FAE2A9184, 0xD4E722975211C543, 0xDE44EC4DE576A893, 0x74055EB6ED2F5BC2,
573 0xEBB46AA17F35DE4A, 0x145B81A973CEDABD, 0x8A800C0589068C8F, 0xC30275EE99B4772D,
574 0x135089AF76CAD9BC, 0xF32D946FD64AB99C, 0x0BC97761DFB5BE6A, 0xDDFA3A9D5D1DC040,
575 0x577A3698D41B4CCF, 0x498279EB10B2FBA2, 0xA7E97427BA3A9D80, 0xF09342BF6E21D14F,
576 0x5DD9F842637C211F, 0x4C5D1E86C50F43CA, 0x71DA39DB3892E3AA, 0xD3EC2A915715C642
579 #define T0(X) t0[(uint8_t)(X)]
580 #define T1(X) t1[(uint8_t)(X)]
581 #define T2(X) t2[(uint8_t)(X)]
582 #define T3(X) t3[(uint8_t)(X)]
583 #define T4(X) t4[(uint8_t)(X)]
584 #define T5(X) t5[(uint8_t)(X)]
585 #define T6(X) t6[(uint8_t)(X)]
586 #define T7(X) t7[(uint8_t)(X)]
588 static const uint64_t rc[9] =
590 0xBA542F7453D3D24D, 0x50AC8DBF70529A4C,
591 0xEAD597D133515BA6, 0xDE48A899DB32B7FC,
592 0xE39E919BE2BB416E, 0xA5CB6B95A1F3B102,
593 0xCCC41D14C363DA5D, 0x5FDC7DCD7F5A6C5C,
594 0xF726FFEDE89D6F8E
597 static void khazad_crypt
599 const uint64_t *k,
600 unsigned int r,
601 const void *in,
602 void *out
605 uint64_t x;
606 unsigned int i;
608 x = LOAD64B(CU8(in)) ^ k[0];
610 /* r - 1 full rounds */
611 for(i = 1; i < r; i++)
613 x = T0(x >> 56) ^
614 T1(x >> 48) ^
615 T2(x >> 40) ^
616 T3(x >> 32) ^
617 T4(x >> 24) ^
618 T5(x >> 16) ^
619 T6(x >> 8) ^
620 T7(x ) ^
621 k[i];
624 /* last round */
625 x = (T0(x >> 56) & 0xFF00000000000000) ^
626 (T1(x >> 48) & 0x00FF000000000000) ^
627 (T2(x >> 40) & 0x0000FF0000000000) ^
628 (T3(x >> 32) & 0x000000FF00000000) ^
629 (T4(x >> 24) & 0x00000000FF000000) ^
630 (T5(x >> 16) & 0x0000000000FF0000) ^
631 (T6(x >> 8) & 0x000000000000FF00) ^
632 (T7(x ) & 0x00000000000000FF) ^
633 k[r];
635 STORE64B(x, U8(out));
638 static void khazad_setup
640 kripto_block *s,
641 const uint8_t *key,
642 unsigned int key_len
645 uint64_t k[2] = {0, 0};
646 unsigned int i;
648 for(i = 0; i < key_len; i++)
649 k[1 - (i >> 3)] |= (uint64_t)key[i] << (56 - ((i & 3) << 3));
651 /* generate rounds + 1 round keys */
652 for(i = 0; i <= s->r; i++)
654 s->k[i] =
655 T0(*k >> 56) ^
656 T1(*k >> 48) ^
657 T2(*k >> 40) ^
658 T3(*k >> 32) ^
659 T4(*k >> 24) ^
660 T5(*k >> 16) ^
661 T6(*k >> 8) ^
662 T7(*k ) ^
663 rc[i] ^ k[1];
665 k[1] = k[0]; k[0] = s->k[i];
668 /* inverse key */
669 s->dk[0] = s->k[s->r];
670 for(i = 1; i < s->r; i++)
672 *k = s->k[s->r - i];
673 s->dk[i] =
674 T0(T7(*k >> 56)) ^
675 T1(T7(*k >> 48)) ^
676 T2(T7(*k >> 40)) ^
677 T3(T7(*k >> 32)) ^
678 T4(T7(*k >> 24)) ^
679 T5(T7(*k >> 16)) ^
680 T6(T7(*k >> 8)) ^
681 T7(T7(*k ));
683 s->dk[s->r] = s->k[0];
685 kripto_memwipe(k, 16);
688 static void khazad_encrypt
690 const kripto_block *s,
691 const void *pt,
692 void *ct
695 khazad_crypt(s->k, s->r, pt, ct);
698 static void khazad_decrypt
700 const kripto_block *s,
701 const void *ct,
702 void *pt
705 khazad_crypt(s->dk, s->r, ct, pt);
708 static kripto_block *khazad_create
710 unsigned int r,
711 const void *key,
712 unsigned int key_len
715 kripto_block *s;
717 if(!r) r = 8;
719 s = malloc(sizeof(kripto_block) + ((r + 1) << 4));
720 if(!s) return 0;
722 s->obj.desc = kripto_block_khazad;
723 s->size = sizeof(kripto_block) + ((r + 1) << 4);
724 s->r = r;
725 s->k = (uint64_t *)((uint8_t *)s + sizeof(kripto_block));
726 s->dk = s->k + r + 1;
728 khazad_setup(s, key, key_len);
730 return s;
733 static void khazad_destroy(kripto_block *s)
735 kripto_memwipe(s, s->size);
736 free(s);
739 static kripto_block *khazad_recreate
741 kripto_block *s,
742 unsigned int r,
743 const void *key,
744 unsigned int key_len
747 if(!r) r = 8;
749 if(sizeof(kripto_block) + ((r + 1) << 4) > s->size)
751 khazad_destroy(s);
752 s = khazad_create(r, key, key_len);
754 else
756 s->r = r;
757 khazad_setup(s, key, key_len);
760 return s;
763 static const kripto_block_desc khazad =
765 &khazad_create,
766 &khazad_recreate,
768 &khazad_encrypt,
769 &khazad_decrypt,
770 &khazad_destroy,
771 8, /* block size */
772 16 /* max key */
775 const kripto_block_desc *const kripto_block_khazad = &khazad;