6 * The Khazad algorithm was developed by Paulo S. L. M. Barreto and
7 * Vincent Rijmen. It was a finalist in the NESSIE encryption contest.
9 * The original authors have disclaimed all copyright interest in this
10 * code and thus put it in the public domain. The subsequent authors
11 * have put this under the GNU General Public License.
13 * By Aaron Grothe ajgrothe@yahoo.com, August 1, 2004
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
22 #include <linux/init.h>
23 #include <linux/module.h>
25 #include <asm/byteorder.h>
26 #include <linux/crypto.h>
27 #include <linux/types.h>
29 #define KHAZAD_KEY_SIZE 16
30 #define KHAZAD_BLOCK_SIZE 8
31 #define KHAZAD_ROUNDS 8
34 u64 E
[KHAZAD_ROUNDS
+ 1];
35 u64 D
[KHAZAD_ROUNDS
+ 1];
38 static const u64 T0
[256] = {
39 0xbad3d268bbb96a01ULL
, 0x54fc4d19e59a66b1ULL
, 0x2f71bc93e26514cdULL
,
40 0x749ccdb925871b51ULL
, 0x53f55102f7a257a4ULL
, 0xd3686bb8d0d6be03ULL
,
41 0xd26b6fbdd6deb504ULL
, 0x4dd72964b35285feULL
, 0x50f05d0dfdba4aadULL
,
42 0xace98a26cf09e063ULL
, 0x8d8a0e83091c9684ULL
, 0xbfdcc679a5914d1aULL
,
43 0x7090ddad3da7374dULL
, 0x52f65507f1aa5ca3ULL
, 0x9ab352c87ba417e1ULL
,
44 0x4cd42d61b55a8ef9ULL
, 0xea238f65460320acULL
, 0xd56273a6c4e68411ULL
,
45 0x97a466f155cc68c2ULL
, 0xd16e63b2dcc6a80dULL
, 0x3355ccffaa85d099ULL
,
46 0x51f35908fbb241aaULL
, 0x5bed712ac7e20f9cULL
, 0xa6f7a204f359ae55ULL
,
47 0xde7f5f81febec120ULL
, 0x48d83d75ad7aa2e5ULL
, 0xa8e59a32d729cc7fULL
,
48 0x99b65ec771bc0ae8ULL
, 0xdb704b90e096e63bULL
, 0x3256c8faac8ddb9eULL
,
49 0xb7c4e65195d11522ULL
, 0xfc19d72b32b3aaceULL
, 0xe338ab48704b7393ULL
,
50 0x9ebf42dc63843bfdULL
, 0x91ae7eef41fc52d0ULL
, 0x9bb056cd7dac1ce6ULL
,
51 0xe23baf4d76437894ULL
, 0xbbd0d66dbdb16106ULL
, 0x41c319589b32f1daULL
,
52 0x6eb2a5cb7957e517ULL
, 0xa5f2ae0bf941b35cULL
, 0xcb400bc08016564bULL
,
53 0x6bbdb1da677fc20cULL
, 0x95a26efb59dc7eccULL
, 0xa1febe1fe1619f40ULL
,
54 0xf308eb1810cbc3e3ULL
, 0xb1cefe4f81e12f30ULL
, 0x0206080a0c10160eULL
,
55 0xcc4917db922e675eULL
, 0xc45137f3a26e3f66ULL
, 0x1d2774694ee8cf53ULL
,
56 0x143c504478a09c6cULL
, 0xc3582be8b0560e73ULL
, 0x63a591f2573f9a34ULL
,
57 0xda734f95e69eed3cULL
, 0x5de76934d3d2358eULL
, 0x5fe1613edfc22380ULL
,
58 0xdc79578bf2aed72eULL
, 0x7d87e99413cf486eULL
, 0xcd4a13de94266c59ULL
,
59 0x7f81e19e1fdf5e60ULL
, 0x5aee752fc1ea049bULL
, 0x6cb4adc17547f319ULL
,
60 0x5ce46d31d5da3e89ULL
, 0xf704fb0c08ebefffULL
, 0x266a98bed42d47f2ULL
,
61 0xff1cdb2438abb7c7ULL
, 0xed2a937e543b11b9ULL
, 0xe825876f4a1336a2ULL
,
62 0x9dba4ed3699c26f4ULL
, 0x6fb1a1ce7f5fee10ULL
, 0x8e8f028c03048b8dULL
,
63 0x192b647d56c8e34fULL
, 0xa0fdba1ae7699447ULL
, 0xf00de7171ad3deeaULL
,
64 0x89861e97113cba98ULL
, 0x0f113c332278692dULL
, 0x07091c1b12383115ULL
,
65 0xafec8629c511fd6aULL
, 0xfb10cb30208b9bdbULL
, 0x0818202830405838ULL
,
66 0x153f54417ea8976bULL
, 0x0d1734392e687f23ULL
, 0x040c101418202c1cULL
,
67 0x0103040506080b07ULL
, 0x64ac8de94507ab21ULL
, 0xdf7c5b84f8b6ca27ULL
,
68 0x769ac5b329970d5fULL
, 0x798bf9800bef6472ULL
, 0xdd7a538ef4a6dc29ULL
,
69 0x3d47f4c98ef5b2b3ULL
, 0x163a584e74b08a62ULL
, 0x3f41fcc382e5a4bdULL
,
70 0x3759dcebb2a5fc85ULL
, 0x6db7a9c4734ff81eULL
, 0x3848e0d890dd95a8ULL
,
71 0xb9d6de67b1a17708ULL
, 0x7395d1a237bf2a44ULL
, 0xe926836a4c1b3da5ULL
,
72 0x355fd4e1beb5ea8bULL
, 0x55ff491ce3926db6ULL
, 0x7193d9a83baf3c4aULL
,
73 0x7b8df18a07ff727cULL
, 0x8c890a860f149d83ULL
, 0x7296d5a731b72143ULL
,
74 0x88851a921734b19fULL
, 0xf607ff090ee3e4f8ULL
, 0x2a7ea882fc4d33d6ULL
,
75 0x3e42f8c684edafbaULL
, 0x5ee2653bd9ca2887ULL
, 0x27699cbbd2254cf5ULL
,
76 0x46ca0543890ac0cfULL
, 0x0c14303c28607424ULL
, 0x65af89ec430fa026ULL
,
77 0x68b8bdd56d67df05ULL
, 0x61a399f85b2f8c3aULL
, 0x03050c0f0a181d09ULL
,
78 0xc15e23e2bc46187dULL
, 0x57f94116ef827bb8ULL
, 0xd6677fa9cefe9918ULL
,
79 0xd976439aec86f035ULL
, 0x58e87d25cdfa1295ULL
, 0xd875479fea8efb32ULL
,
80 0x66aa85e34917bd2fULL
, 0xd7647bacc8f6921fULL
, 0x3a4ee8d29ccd83a6ULL
,
81 0xc84507cf8a0e4b42ULL
, 0x3c44f0cc88fdb9b4ULL
, 0xfa13cf35268390dcULL
,
82 0x96a762f453c463c5ULL
, 0xa7f4a601f551a552ULL
, 0x98b55ac277b401efULL
,
83 0xec29977b52331abeULL
, 0xb8d5da62b7a97c0fULL
, 0xc7543bfca876226fULL
,
84 0xaeef822cc319f66dULL
, 0x69bbb9d06b6fd402ULL
, 0x4bdd317aa762bfecULL
,
85 0xabe0963ddd31d176ULL
, 0xa9e69e37d121c778ULL
, 0x67a981e64f1fb628ULL
,
86 0x0a1e28223c504e36ULL
, 0x47c901468f02cbc8ULL
, 0xf20bef1d16c3c8e4ULL
,
87 0xb5c2ee5b99c1032cULL
, 0x226688aacc0d6beeULL
, 0xe532b356647b4981ULL
,
88 0xee2f9f715e230cb0ULL
, 0xbedfc27ca399461dULL
, 0x2b7dac87fa4538d1ULL
,
89 0x819e3ebf217ce2a0ULL
, 0x1236485a6c90a67eULL
, 0x839836b52d6cf4aeULL
,
90 0x1b2d6c775ad8f541ULL
, 0x0e1238362470622aULL
, 0x23658cafca0560e9ULL
,
91 0xf502f30604fbf9f1ULL
, 0x45cf094c8312ddc6ULL
, 0x216384a5c61576e7ULL
,
92 0xce4f1fd19e3e7150ULL
, 0x49db3970ab72a9e2ULL
, 0x2c74b09ce87d09c4ULL
,
93 0xf916c33a2c9b8dd5ULL
, 0xe637bf596e635488ULL
, 0xb6c7e25493d91e25ULL
,
94 0x2878a088f05d25d8ULL
, 0x17395c4b72b88165ULL
, 0x829b32b02b64ffa9ULL
,
95 0x1a2e68725cd0fe46ULL
, 0x8b80169d1d2cac96ULL
, 0xfe1fdf213ea3bcc0ULL
,
96 0x8a8312981b24a791ULL
, 0x091b242d3648533fULL
, 0xc94603ca8c064045ULL
,
97 0x879426a1354cd8b2ULL
, 0x4ed2256bb94a98f7ULL
, 0xe13ea3427c5b659dULL
,
98 0x2e72b896e46d1fcaULL
, 0xe431b75362734286ULL
, 0xe03da7477a536e9aULL
,
99 0xeb208b60400b2babULL
, 0x90ad7aea47f459d7ULL
, 0xa4f1aa0eff49b85bULL
,
100 0x1e22786644f0d25aULL
, 0x85922eab395ccebcULL
, 0x60a09dfd5d27873dULL
,
101 0x0000000000000000ULL
, 0x256f94b1de355afbULL
, 0xf401f70302f3f2f6ULL
,
102 0xf10ee3121cdbd5edULL
, 0x94a16afe5fd475cbULL
, 0x0b1d2c273a584531ULL
,
103 0xe734bb5c686b5f8fULL
, 0x759fc9bc238f1056ULL
, 0xef2c9b74582b07b7ULL
,
104 0x345cd0e4b8bde18cULL
, 0x3153c4f5a695c697ULL
, 0xd46177a3c2ee8f16ULL
,
105 0xd06d67b7dacea30aULL
, 0x869722a43344d3b5ULL
, 0x7e82e59b19d75567ULL
,
106 0xadea8e23c901eb64ULL
, 0xfd1ad32e34bba1c9ULL
, 0x297ba48df6552edfULL
,
107 0x3050c0f0a09dcd90ULL
, 0x3b4decd79ac588a1ULL
, 0x9fbc46d9658c30faULL
,
108 0xf815c73f2a9386d2ULL
, 0xc6573ff9ae7e2968ULL
, 0x13354c5f6a98ad79ULL
,
109 0x060a181e14303a12ULL
, 0x050f14111e28271bULL
, 0xc55233f6a4663461ULL
,
110 0x113344556688bb77ULL
, 0x7799c1b62f9f0658ULL
, 0x7c84ed9115c74369ULL
,
111 0x7a8ef58f01f7797bULL
, 0x7888fd850de76f75ULL
, 0x365ad8eeb4adf782ULL
,
112 0x1c24706c48e0c454ULL
, 0x394be4dd96d59eafULL
, 0x59eb7920cbf21992ULL
,
113 0x1828607850c0e848ULL
, 0x56fa4513e98a70bfULL
, 0xb3c8f6458df1393eULL
,
114 0xb0cdfa4a87e92437ULL
, 0x246c90b4d83d51fcULL
, 0x206080a0c01d7de0ULL
,
115 0xb2cbf2408bf93239ULL
, 0x92ab72e04be44fd9ULL
, 0xa3f8b615ed71894eULL
,
116 0xc05d27e7ba4e137aULL
, 0x44cc0d49851ad6c1ULL
, 0x62a695f751379133ULL
,
117 0x103040506080b070ULL
, 0xb4c1ea5e9fc9082bULL
, 0x84912aae3f54c5bbULL
,
118 0x43c511529722e7d4ULL
, 0x93a876e54dec44deULL
, 0xc25b2fedb65e0574ULL
,
119 0x4ade357fa16ab4ebULL
, 0xbddace73a9815b14ULL
, 0x8f8c0689050c808aULL
,
120 0x2d77b499ee7502c3ULL
, 0xbcd9ca76af895013ULL
, 0x9cb94ad66f942df3ULL
,
121 0x6abeb5df6177c90bULL
, 0x40c01d5d9d3afaddULL
, 0xcf4c1bd498367a57ULL
,
122 0xa2fbb210eb798249ULL
, 0x809d3aba2774e9a7ULL
, 0x4fd1216ebf4293f0ULL
,
123 0x1f217c6342f8d95dULL
, 0xca430fc5861e5d4cULL
, 0xaae39238db39da71ULL
,
124 0x42c61557912aecd3ULL
127 static const u64 T1
[256] = {
128 0xd3ba68d2b9bb016aULL
, 0xfc54194d9ae5b166ULL
, 0x712f93bc65e2cd14ULL
,
129 0x9c74b9cd8725511bULL
, 0xf5530251a2f7a457ULL
, 0x68d3b86bd6d003beULL
,
130 0x6bd2bd6fded604b5ULL
, 0xd74d642952b3fe85ULL
, 0xf0500d5dbafdad4aULL
,
131 0xe9ac268a09cf63e0ULL
, 0x8a8d830e1c098496ULL
, 0xdcbf79c691a51a4dULL
,
132 0x9070addda73d4d37ULL
, 0xf6520755aaf1a35cULL
, 0xb39ac852a47be117ULL
,
133 0xd44c612d5ab5f98eULL
, 0x23ea658f0346ac20ULL
, 0x62d5a673e6c41184ULL
,
134 0xa497f166cc55c268ULL
, 0x6ed1b263c6dc0da8ULL
, 0x5533ffcc85aa99d0ULL
,
135 0xf3510859b2fbaa41ULL
, 0xed5b2a71e2c79c0fULL
, 0xf7a604a259f355aeULL
,
136 0x7fde815fbefe20c1ULL
, 0xd848753d7aade5a2ULL
, 0xe5a8329a29d77fccULL
,
137 0xb699c75ebc71e80aULL
, 0x70db904b96e03be6ULL
, 0x5632fac88dac9edbULL
,
138 0xc4b751e6d1952215ULL
, 0x19fc2bd7b332ceaaULL
, 0x38e348ab4b709373ULL
,
139 0xbf9edc428463fd3bULL
, 0xae91ef7efc41d052ULL
, 0xb09bcd56ac7de61cULL
,
140 0x3be24daf43769478ULL
, 0xd0bb6dd6b1bd0661ULL
, 0xc3415819329bdaf1ULL
,
141 0xb26ecba5577917e5ULL
, 0xf2a50bae41f95cb3ULL
, 0x40cbc00b16804b56ULL
,
142 0xbd6bdab17f670cc2ULL
, 0xa295fb6edc59cc7eULL
, 0xfea11fbe61e1409fULL
,
143 0x08f318ebcb10e3c3ULL
, 0xceb14ffee181302fULL
, 0x06020a08100c0e16ULL
,
144 0x49ccdb172e925e67ULL
, 0x51c4f3376ea2663fULL
, 0x271d6974e84e53cfULL
,
145 0x3c144450a0786c9cULL
, 0x58c3e82b56b0730eULL
, 0xa563f2913f57349aULL
,
146 0x73da954f9ee63cedULL
, 0xe75d3469d2d38e35ULL
, 0xe15f3e61c2df8023ULL
,
147 0x79dc8b57aef22ed7ULL
, 0x877d94e9cf136e48ULL
, 0x4acdde132694596cULL
,
148 0x817f9ee1df1f605eULL
, 0xee5a2f75eac19b04ULL
, 0xb46cc1ad477519f3ULL
,
149 0xe45c316ddad5893eULL
, 0x04f70cfbeb08ffefULL
, 0x6a26be982dd4f247ULL
,
150 0x1cff24dbab38c7b7ULL
, 0x2aed7e933b54b911ULL
, 0x25e86f87134aa236ULL
,
151 0xba9dd34e9c69f426ULL
, 0xb16fcea15f7f10eeULL
, 0x8f8e8c0204038d8bULL
,
152 0x2b197d64c8564fe3ULL
, 0xfda01aba69e74794ULL
, 0x0df017e7d31aeadeULL
,
153 0x8689971e3c1198baULL
, 0x110f333c78222d69ULL
, 0x09071b1c38121531ULL
,
154 0xecaf298611c56afdULL
, 0x10fb30cb8b20db9bULL
, 0x1808282040303858ULL
,
155 0x3f154154a87e6b97ULL
, 0x170d3934682e237fULL
, 0x0c04141020181c2cULL
,
156 0x030105040806070bULL
, 0xac64e98d074521abULL
, 0x7cdf845bb6f827caULL
,
157 0x9a76b3c597295f0dULL
, 0x8b7980f9ef0b7264ULL
, 0x7add8e53a6f429dcULL
,
158 0x473dc9f4f58eb3b2ULL
, 0x3a164e58b074628aULL
, 0x413fc3fce582bda4ULL
,
159 0x5937ebdca5b285fcULL
, 0xb76dc4a94f731ef8ULL
, 0x4838d8e0dd90a895ULL
,
160 0xd6b967dea1b10877ULL
, 0x9573a2d1bf37442aULL
, 0x26e96a831b4ca53dULL
,
161 0x5f35e1d4b5be8beaULL
, 0xff551c4992e3b66dULL
, 0x9371a8d9af3b4a3cULL
,
162 0x8d7b8af1ff077c72ULL
, 0x898c860a140f839dULL
, 0x9672a7d5b7314321ULL
,
163 0x8588921a34179fb1ULL
, 0x07f609ffe30ef8e4ULL
, 0x7e2a82a84dfcd633ULL
,
164 0x423ec6f8ed84baafULL
, 0xe25e3b65cad98728ULL
, 0x6927bb9c25d2f54cULL
,
165 0xca4643050a89cfc0ULL
, 0x140c3c3060282474ULL
, 0xaf65ec890f4326a0ULL
,
166 0xb868d5bd676d05dfULL
, 0xa361f8992f5b3a8cULL
, 0x05030f0c180a091dULL
,
167 0x5ec1e22346bc7d18ULL
, 0xf957164182efb87bULL
, 0x67d6a97ffece1899ULL
,
168 0x76d99a4386ec35f0ULL
, 0xe858257dfacd9512ULL
, 0x75d89f478eea32fbULL
,
169 0xaa66e38517492fbdULL
, 0x64d7ac7bf6c81f92ULL
, 0x4e3ad2e8cd9ca683ULL
,
170 0x45c8cf070e8a424bULL
, 0x443cccf0fd88b4b9ULL
, 0x13fa35cf8326dc90ULL
,
171 0xa796f462c453c563ULL
, 0xf4a701a651f552a5ULL
, 0xb598c25ab477ef01ULL
,
172 0x29ec7b973352be1aULL
, 0xd5b862daa9b70f7cULL
, 0x54c7fc3b76a86f22ULL
,
173 0xefae2c8219c36df6ULL
, 0xbb69d0b96f6b02d4ULL
, 0xdd4b7a3162a7ecbfULL
,
174 0xe0ab3d9631dd76d1ULL
, 0xe6a9379e21d178c7ULL
, 0xa967e6811f4f28b6ULL
,
175 0x1e0a2228503c364eULL
, 0xc9474601028fc8cbULL
, 0x0bf21defc316e4c8ULL
,
176 0xc2b55beec1992c03ULL
, 0x6622aa880dccee6bULL
, 0x32e556b37b648149ULL
,
177 0x2fee719f235eb00cULL
, 0xdfbe7cc299a31d46ULL
, 0x7d2b87ac45fad138ULL
,
178 0x9e81bf3e7c21a0e2ULL
, 0x36125a48906c7ea6ULL
, 0x9883b5366c2daef4ULL
,
179 0x2d1b776cd85a41f5ULL
, 0x120e363870242a62ULL
, 0x6523af8c05cae960ULL
,
180 0x02f506f3fb04f1f9ULL
, 0xcf454c091283c6ddULL
, 0x6321a58415c6e776ULL
,
181 0x4fced11f3e9e5071ULL
, 0xdb49703972abe2a9ULL
, 0x742c9cb07de8c409ULL
,
182 0x16f93ac39b2cd58dULL
, 0x37e659bf636e8854ULL
, 0xc7b654e2d993251eULL
,
183 0x782888a05df0d825ULL
, 0x39174b5cb8726581ULL
, 0x9b82b032642ba9ffULL
,
184 0x2e1a7268d05c46feULL
, 0x808b9d162c1d96acULL
, 0x1ffe21dfa33ec0bcULL
,
185 0x838a9812241b91a7ULL
, 0x1b092d2448363f53ULL
, 0x46c9ca03068c4540ULL
,
186 0x9487a1264c35b2d8ULL
, 0xd24e6b254ab9f798ULL
, 0x3ee142a35b7c9d65ULL
,
187 0x722e96b86de4ca1fULL
, 0x31e453b773628642ULL
, 0x3de047a7537a9a6eULL
,
188 0x20eb608b0b40ab2bULL
, 0xad90ea7af447d759ULL
, 0xf1a40eaa49ff5bb8ULL
,
189 0x221e6678f0445ad2ULL
, 0x9285ab2e5c39bcceULL
, 0xa060fd9d275d3d87ULL
,
190 0x0000000000000000ULL
, 0x6f25b19435defb5aULL
, 0x01f403f7f302f6f2ULL
,
191 0x0ef112e3db1cedd5ULL
, 0xa194fe6ad45fcb75ULL
, 0x1d0b272c583a3145ULL
,
192 0x34e75cbb6b688f5fULL
, 0x9f75bcc98f235610ULL
, 0x2cef749b2b58b707ULL
,
193 0x5c34e4d0bdb88ce1ULL
, 0x5331f5c495a697c6ULL
, 0x61d4a377eec2168fULL
,
194 0x6dd0b767ceda0aa3ULL
, 0x9786a4224433b5d3ULL
, 0x827e9be5d7196755ULL
,
195 0xeaad238e01c964ebULL
, 0x1afd2ed3bb34c9a1ULL
, 0x7b298da455f6df2eULL
,
196 0x5030f0c09da090cdULL
, 0x4d3bd7ecc59aa188ULL
, 0xbc9fd9468c65fa30ULL
,
197 0x15f83fc7932ad286ULL
, 0x57c6f93f7eae6829ULL
, 0x35135f4c986a79adULL
,
198 0x0a061e183014123aULL
, 0x0f051114281e1b27ULL
, 0x52c5f63366a46134ULL
,
199 0x33115544886677bbULL
, 0x9977b6c19f2f5806ULL
, 0x847c91edc7156943ULL
,
200 0x8e7a8ff5f7017b79ULL
, 0x887885fde70d756fULL
, 0x5a36eed8adb482f7ULL
,
201 0x241c6c70e04854c4ULL
, 0x4b39dde4d596af9eULL
, 0xeb592079f2cb9219ULL
,
202 0x28187860c05048e8ULL
, 0xfa5613458ae9bf70ULL
, 0xc8b345f6f18d3e39ULL
,
203 0xcdb04afae9873724ULL
, 0x6c24b4903dd8fc51ULL
, 0x6020a0801dc0e07dULL
,
204 0xcbb240f2f98b3932ULL
, 0xab92e072e44bd94fULL
, 0xf8a315b671ed4e89ULL
,
205 0x5dc0e7274eba7a13ULL
, 0xcc44490d1a85c1d6ULL
, 0xa662f79537513391ULL
,
206 0x30105040806070b0ULL
, 0xc1b45eeac99f2b08ULL
, 0x9184ae2a543fbbc5ULL
,
207 0xc54352112297d4e7ULL
, 0xa893e576ec4dde44ULL
, 0x5bc2ed2f5eb67405ULL
,
208 0xde4a7f356aa1ebb4ULL
, 0xdabd73ce81a9145bULL
, 0x8c8f89060c058a80ULL
,
209 0x772d99b475eec302ULL
, 0xd9bc76ca89af1350ULL
, 0xb99cd64a946ff32dULL
,
210 0xbe6adfb577610bc9ULL
, 0xc0405d1d3a9dddfaULL
, 0x4ccfd41b3698577aULL
,
211 0xfba210b279eb4982ULL
, 0x9d80ba3a7427a7e9ULL
, 0xd14f6e2142bff093ULL
,
212 0x211f637cf8425dd9ULL
, 0x43cac50f1e864c5dULL
, 0xe3aa389239db71daULL
,
213 0xc64257152a91d3ecULL
216 static const u64 T2
[256] = {
217 0xd268bad36a01bbb9ULL
, 0x4d1954fc66b1e59aULL
, 0xbc932f7114cde265ULL
,
218 0xcdb9749c1b512587ULL
, 0x510253f557a4f7a2ULL
, 0x6bb8d368be03d0d6ULL
,
219 0x6fbdd26bb504d6deULL
, 0x29644dd785feb352ULL
, 0x5d0d50f04aadfdbaULL
,
220 0x8a26ace9e063cf09ULL
, 0x0e838d8a9684091cULL
, 0xc679bfdc4d1aa591ULL
,
221 0xddad7090374d3da7ULL
, 0x550752f65ca3f1aaULL
, 0x52c89ab317e17ba4ULL
,
222 0x2d614cd48ef9b55aULL
, 0x8f65ea2320ac4603ULL
, 0x73a6d5628411c4e6ULL
,
223 0x66f197a468c255ccULL
, 0x63b2d16ea80ddcc6ULL
, 0xccff3355d099aa85ULL
,
224 0x590851f341aafbb2ULL
, 0x712a5bed0f9cc7e2ULL
, 0xa204a6f7ae55f359ULL
,
225 0x5f81de7fc120febeULL
, 0x3d7548d8a2e5ad7aULL
, 0x9a32a8e5cc7fd729ULL
,
226 0x5ec799b60ae871bcULL
, 0x4b90db70e63be096ULL
, 0xc8fa3256db9eac8dULL
,
227 0xe651b7c4152295d1ULL
, 0xd72bfc19aace32b3ULL
, 0xab48e3387393704bULL
,
228 0x42dc9ebf3bfd6384ULL
, 0x7eef91ae52d041fcULL
, 0x56cd9bb01ce67dacULL
,
229 0xaf4de23b78947643ULL
, 0xd66dbbd06106bdb1ULL
, 0x195841c3f1da9b32ULL
,
230 0xa5cb6eb2e5177957ULL
, 0xae0ba5f2b35cf941ULL
, 0x0bc0cb40564b8016ULL
,
231 0xb1da6bbdc20c677fULL
, 0x6efb95a27ecc59dcULL
, 0xbe1fa1fe9f40e161ULL
,
232 0xeb18f308c3e310cbULL
, 0xfe4fb1ce2f3081e1ULL
, 0x080a0206160e0c10ULL
,
233 0x17dbcc49675e922eULL
, 0x37f3c4513f66a26eULL
, 0x74691d27cf534ee8ULL
,
234 0x5044143c9c6c78a0ULL
, 0x2be8c3580e73b056ULL
, 0x91f263a59a34573fULL
,
235 0x4f95da73ed3ce69eULL
, 0x69345de7358ed3d2ULL
, 0x613e5fe12380dfc2ULL
,
236 0x578bdc79d72ef2aeULL
, 0xe9947d87486e13cfULL
, 0x13decd4a6c599426ULL
,
237 0xe19e7f815e601fdfULL
, 0x752f5aee049bc1eaULL
, 0xadc16cb4f3197547ULL
,
238 0x6d315ce43e89d5daULL
, 0xfb0cf704efff08ebULL
, 0x98be266a47f2d42dULL
,
239 0xdb24ff1cb7c738abULL
, 0x937eed2a11b9543bULL
, 0x876fe82536a24a13ULL
,
240 0x4ed39dba26f4699cULL
, 0xa1ce6fb1ee107f5fULL
, 0x028c8e8f8b8d0304ULL
,
241 0x647d192be34f56c8ULL
, 0xba1aa0fd9447e769ULL
, 0xe717f00ddeea1ad3ULL
,
242 0x1e978986ba98113cULL
, 0x3c330f11692d2278ULL
, 0x1c1b070931151238ULL
,
243 0x8629afecfd6ac511ULL
, 0xcb30fb109bdb208bULL
, 0x2028081858383040ULL
,
244 0x5441153f976b7ea8ULL
, 0x34390d177f232e68ULL
, 0x1014040c2c1c1820ULL
,
245 0x040501030b070608ULL
, 0x8de964acab214507ULL
, 0x5b84df7cca27f8b6ULL
,
246 0xc5b3769a0d5f2997ULL
, 0xf980798b64720befULL
, 0x538edd7adc29f4a6ULL
,
247 0xf4c93d47b2b38ef5ULL
, 0x584e163a8a6274b0ULL
, 0xfcc33f41a4bd82e5ULL
,
248 0xdceb3759fc85b2a5ULL
, 0xa9c46db7f81e734fULL
, 0xe0d8384895a890ddULL
,
249 0xde67b9d67708b1a1ULL
, 0xd1a273952a4437bfULL
, 0x836ae9263da54c1bULL
,
250 0xd4e1355fea8bbeb5ULL
, 0x491c55ff6db6e392ULL
, 0xd9a871933c4a3bafULL
,
251 0xf18a7b8d727c07ffULL
, 0x0a868c899d830f14ULL
, 0xd5a77296214331b7ULL
,
252 0x1a928885b19f1734ULL
, 0xff09f607e4f80ee3ULL
, 0xa8822a7e33d6fc4dULL
,
253 0xf8c63e42afba84edULL
, 0x653b5ee22887d9caULL
, 0x9cbb27694cf5d225ULL
,
254 0x054346cac0cf890aULL
, 0x303c0c1474242860ULL
, 0x89ec65afa026430fULL
,
255 0xbdd568b8df056d67ULL
, 0x99f861a38c3a5b2fULL
, 0x0c0f03051d090a18ULL
,
256 0x23e2c15e187dbc46ULL
, 0x411657f97bb8ef82ULL
, 0x7fa9d6679918cefeULL
,
257 0x439ad976f035ec86ULL
, 0x7d2558e81295cdfaULL
, 0x479fd875fb32ea8eULL
,
258 0x85e366aabd2f4917ULL
, 0x7bacd764921fc8f6ULL
, 0xe8d23a4e83a69ccdULL
,
259 0x07cfc8454b428a0eULL
, 0xf0cc3c44b9b488fdULL
, 0xcf35fa1390dc2683ULL
,
260 0x62f496a763c553c4ULL
, 0xa601a7f4a552f551ULL
, 0x5ac298b501ef77b4ULL
,
261 0x977bec291abe5233ULL
, 0xda62b8d57c0fb7a9ULL
, 0x3bfcc754226fa876ULL
,
262 0x822caeeff66dc319ULL
, 0xb9d069bbd4026b6fULL
, 0x317a4bddbfeca762ULL
,
263 0x963dabe0d176dd31ULL
, 0x9e37a9e6c778d121ULL
, 0x81e667a9b6284f1fULL
,
264 0x28220a1e4e363c50ULL
, 0x014647c9cbc88f02ULL
, 0xef1df20bc8e416c3ULL
,
265 0xee5bb5c2032c99c1ULL
, 0x88aa22666beecc0dULL
, 0xb356e5324981647bULL
,
266 0x9f71ee2f0cb05e23ULL
, 0xc27cbedf461da399ULL
, 0xac872b7d38d1fa45ULL
,
267 0x3ebf819ee2a0217cULL
, 0x485a1236a67e6c90ULL
, 0x36b58398f4ae2d6cULL
,
268 0x6c771b2df5415ad8ULL
, 0x38360e12622a2470ULL
, 0x8caf236560e9ca05ULL
,
269 0xf306f502f9f104fbULL
, 0x094c45cfddc68312ULL
, 0x84a5216376e7c615ULL
,
270 0x1fd1ce4f71509e3eULL
, 0x397049dba9e2ab72ULL
, 0xb09c2c7409c4e87dULL
,
271 0xc33af9168dd52c9bULL
, 0xbf59e63754886e63ULL
, 0xe254b6c71e2593d9ULL
,
272 0xa088287825d8f05dULL
, 0x5c4b1739816572b8ULL
, 0x32b0829bffa92b64ULL
,
273 0x68721a2efe465cd0ULL
, 0x169d8b80ac961d2cULL
, 0xdf21fe1fbcc03ea3ULL
,
274 0x12988a83a7911b24ULL
, 0x242d091b533f3648ULL
, 0x03cac94640458c06ULL
,
275 0x26a18794d8b2354cULL
, 0x256b4ed298f7b94aULL
, 0xa342e13e659d7c5bULL
,
276 0xb8962e721fcae46dULL
, 0xb753e43142866273ULL
, 0xa747e03d6e9a7a53ULL
,
277 0x8b60eb202bab400bULL
, 0x7aea90ad59d747f4ULL
, 0xaa0ea4f1b85bff49ULL
,
278 0x78661e22d25a44f0ULL
, 0x2eab8592cebc395cULL
, 0x9dfd60a0873d5d27ULL
,
279 0x0000000000000000ULL
, 0x94b1256f5afbde35ULL
, 0xf703f401f2f602f3ULL
,
280 0xe312f10ed5ed1cdbULL
, 0x6afe94a175cb5fd4ULL
, 0x2c270b1d45313a58ULL
,
281 0xbb5ce7345f8f686bULL
, 0xc9bc759f1056238fULL
, 0x9b74ef2c07b7582bULL
,
282 0xd0e4345ce18cb8bdULL
, 0xc4f53153c697a695ULL
, 0x77a3d4618f16c2eeULL
,
283 0x67b7d06da30adaceULL
, 0x22a48697d3b53344ULL
, 0xe59b7e82556719d7ULL
,
284 0x8e23adeaeb64c901ULL
, 0xd32efd1aa1c934bbULL
, 0xa48d297b2edff655ULL
,
285 0xc0f03050cd90a09dULL
, 0xecd73b4d88a19ac5ULL
, 0x46d99fbc30fa658cULL
,
286 0xc73ff81586d22a93ULL
, 0x3ff9c6572968ae7eULL
, 0x4c5f1335ad796a98ULL
,
287 0x181e060a3a121430ULL
, 0x1411050f271b1e28ULL
, 0x33f6c5523461a466ULL
,
288 0x44551133bb776688ULL
, 0xc1b6779906582f9fULL
, 0xed917c84436915c7ULL
,
289 0xf58f7a8e797b01f7ULL
, 0xfd8578886f750de7ULL
, 0xd8ee365af782b4adULL
,
290 0x706c1c24c45448e0ULL
, 0xe4dd394b9eaf96d5ULL
, 0x792059eb1992cbf2ULL
,
291 0x60781828e84850c0ULL
, 0x451356fa70bfe98aULL
, 0xf645b3c8393e8df1ULL
,
292 0xfa4ab0cd243787e9ULL
, 0x90b4246c51fcd83dULL
, 0x80a020607de0c01dULL
,
293 0xf240b2cb32398bf9ULL
, 0x72e092ab4fd94be4ULL
, 0xb615a3f8894eed71ULL
,
294 0x27e7c05d137aba4eULL
, 0x0d4944ccd6c1851aULL
, 0x95f762a691335137ULL
,
295 0x40501030b0706080ULL
, 0xea5eb4c1082b9fc9ULL
, 0x2aae8491c5bb3f54ULL
,
296 0x115243c5e7d49722ULL
, 0x76e593a844de4decULL
, 0x2fedc25b0574b65eULL
,
297 0x357f4adeb4eba16aULL
, 0xce73bdda5b14a981ULL
, 0x06898f8c808a050cULL
,
298 0xb4992d7702c3ee75ULL
, 0xca76bcd95013af89ULL
, 0x4ad69cb92df36f94ULL
,
299 0xb5df6abec90b6177ULL
, 0x1d5d40c0fadd9d3aULL
, 0x1bd4cf4c7a579836ULL
,
300 0xb210a2fb8249eb79ULL
, 0x3aba809de9a72774ULL
, 0x216e4fd193f0bf42ULL
,
301 0x7c631f21d95d42f8ULL
, 0x0fc5ca435d4c861eULL
, 0x9238aae3da71db39ULL
,
302 0x155742c6ecd3912aULL
305 static const u64 T3
[256] = {
306 0x68d2d3ba016ab9bbULL
, 0x194dfc54b1669ae5ULL
, 0x93bc712fcd1465e2ULL
,
307 0xb9cd9c74511b8725ULL
, 0x0251f553a457a2f7ULL
, 0xb86b68d303bed6d0ULL
,
308 0xbd6f6bd204b5ded6ULL
, 0x6429d74dfe8552b3ULL
, 0x0d5df050ad4abafdULL
,
309 0x268ae9ac63e009cfULL
, 0x830e8a8d84961c09ULL
, 0x79c6dcbf1a4d91a5ULL
,
310 0xaddd90704d37a73dULL
, 0x0755f652a35caaf1ULL
, 0xc852b39ae117a47bULL
,
311 0x612dd44cf98e5ab5ULL
, 0x658f23eaac200346ULL
, 0xa67362d51184e6c4ULL
,
312 0xf166a497c268cc55ULL
, 0xb2636ed10da8c6dcULL
, 0xffcc553399d085aaULL
,
313 0x0859f351aa41b2fbULL
, 0x2a71ed5b9c0fe2c7ULL
, 0x04a2f7a655ae59f3ULL
,
314 0x815f7fde20c1befeULL
, 0x753dd848e5a27aadULL
, 0x329ae5a87fcc29d7ULL
,
315 0xc75eb699e80abc71ULL
, 0x904b70db3be696e0ULL
, 0xfac856329edb8dacULL
,
316 0x51e6c4b72215d195ULL
, 0x2bd719fcceaab332ULL
, 0x48ab38e393734b70ULL
,
317 0xdc42bf9efd3b8463ULL
, 0xef7eae91d052fc41ULL
, 0xcd56b09be61cac7dULL
,
318 0x4daf3be294784376ULL
, 0x6dd6d0bb0661b1bdULL
, 0x5819c341daf1329bULL
,
319 0xcba5b26e17e55779ULL
, 0x0baef2a55cb341f9ULL
, 0xc00b40cb4b561680ULL
,
320 0xdab1bd6b0cc27f67ULL
, 0xfb6ea295cc7edc59ULL
, 0x1fbefea1409f61e1ULL
,
321 0x18eb08f3e3c3cb10ULL
, 0x4ffeceb1302fe181ULL
, 0x0a0806020e16100cULL
,
322 0xdb1749cc5e672e92ULL
, 0xf33751c4663f6ea2ULL
, 0x6974271d53cfe84eULL
,
323 0x44503c146c9ca078ULL
, 0xe82b58c3730e56b0ULL
, 0xf291a563349a3f57ULL
,
324 0x954f73da3ced9ee6ULL
, 0x3469e75d8e35d2d3ULL
, 0x3e61e15f8023c2dfULL
,
325 0x8b5779dc2ed7aef2ULL
, 0x94e9877d6e48cf13ULL
, 0xde134acd596c2694ULL
,
326 0x9ee1817f605edf1fULL
, 0x2f75ee5a9b04eac1ULL
, 0xc1adb46c19f34775ULL
,
327 0x316de45c893edad5ULL
, 0x0cfb04f7ffefeb08ULL
, 0xbe986a26f2472dd4ULL
,
328 0x24db1cffc7b7ab38ULL
, 0x7e932aedb9113b54ULL
, 0x6f8725e8a236134aULL
,
329 0xd34eba9df4269c69ULL
, 0xcea1b16f10ee5f7fULL
, 0x8c028f8e8d8b0403ULL
,
330 0x7d642b194fe3c856ULL
, 0x1abafda0479469e7ULL
, 0x17e70df0eaded31aULL
,
331 0x971e868998ba3c11ULL
, 0x333c110f2d697822ULL
, 0x1b1c090715313812ULL
,
332 0x2986ecaf6afd11c5ULL
, 0x30cb10fbdb9b8b20ULL
, 0x2820180838584030ULL
,
333 0x41543f156b97a87eULL
, 0x3934170d237f682eULL
, 0x14100c041c2c2018ULL
,
334 0x05040301070b0806ULL
, 0xe98dac6421ab0745ULL
, 0x845b7cdf27cab6f8ULL
,
335 0xb3c59a765f0d9729ULL
, 0x80f98b797264ef0bULL
, 0x8e537add29dca6f4ULL
,
336 0xc9f4473db3b2f58eULL
, 0x4e583a16628ab074ULL
, 0xc3fc413fbda4e582ULL
,
337 0xebdc593785fca5b2ULL
, 0xc4a9b76d1ef84f73ULL
, 0xd8e04838a895dd90ULL
,
338 0x67ded6b90877a1b1ULL
, 0xa2d19573442abf37ULL
, 0x6a8326e9a53d1b4cULL
,
339 0xe1d45f358beab5beULL
, 0x1c49ff55b66d92e3ULL
, 0xa8d993714a3caf3bULL
,
340 0x8af18d7b7c72ff07ULL
, 0x860a898c839d140fULL
, 0xa7d596724321b731ULL
,
341 0x921a85889fb13417ULL
, 0x09ff07f6f8e4e30eULL
, 0x82a87e2ad6334dfcULL
,
342 0xc6f8423ebaafed84ULL
, 0x3b65e25e8728cad9ULL
, 0xbb9c6927f54c25d2ULL
,
343 0x4305ca46cfc00a89ULL
, 0x3c30140c24746028ULL
, 0xec89af6526a00f43ULL
,
344 0xd5bdb86805df676dULL
, 0xf899a3613a8c2f5bULL
, 0x0f0c0503091d180aULL
,
345 0xe2235ec17d1846bcULL
, 0x1641f957b87b82efULL
, 0xa97f67d61899feceULL
,
346 0x9a4376d935f086ecULL
, 0x257de8589512facdULL
, 0x9f4775d832fb8eeaULL
,
347 0xe385aa662fbd1749ULL
, 0xac7b64d71f92f6c8ULL
, 0xd2e84e3aa683cd9cULL
,
348 0xcf0745c8424b0e8aULL
, 0xccf0443cb4b9fd88ULL
, 0x35cf13fadc908326ULL
,
349 0xf462a796c563c453ULL
, 0x01a6f4a752a551f5ULL
, 0xc25ab598ef01b477ULL
,
350 0x7b9729ecbe1a3352ULL
, 0x62dad5b80f7ca9b7ULL
, 0xfc3b54c76f2276a8ULL
,
351 0x2c82efae6df619c3ULL
, 0xd0b9bb6902d46f6bULL
, 0x7a31dd4becbf62a7ULL
,
352 0x3d96e0ab76d131ddULL
, 0x379ee6a978c721d1ULL
, 0xe681a96728b61f4fULL
,
353 0x22281e0a364e503cULL
, 0x4601c947c8cb028fULL
, 0x1def0bf2e4c8c316ULL
,
354 0x5beec2b52c03c199ULL
, 0xaa886622ee6b0dccULL
, 0x56b332e581497b64ULL
,
355 0x719f2feeb00c235eULL
, 0x7cc2dfbe1d4699a3ULL
, 0x87ac7d2bd13845faULL
,
356 0xbf3e9e81a0e27c21ULL
, 0x5a4836127ea6906cULL
, 0xb5369883aef46c2dULL
,
357 0x776c2d1b41f5d85aULL
, 0x3638120e2a627024ULL
, 0xaf8c6523e96005caULL
,
358 0x06f302f5f1f9fb04ULL
, 0x4c09cf45c6dd1283ULL
, 0xa5846321e77615c6ULL
,
359 0xd11f4fce50713e9eULL
, 0x7039db49e2a972abULL
, 0x9cb0742cc4097de8ULL
,
360 0x3ac316f9d58d9b2cULL
, 0x59bf37e68854636eULL
, 0x54e2c7b6251ed993ULL
,
361 0x88a07828d8255df0ULL
, 0x4b5c39176581b872ULL
, 0xb0329b82a9ff642bULL
,
362 0x72682e1a46fed05cULL
, 0x9d16808b96ac2c1dULL
, 0x21df1ffec0bca33eULL
,
363 0x9812838a91a7241bULL
, 0x2d241b093f534836ULL
, 0xca0346c94540068cULL
,
364 0xa1269487b2d84c35ULL
, 0x6b25d24ef7984ab9ULL
, 0x42a33ee19d655b7cULL
,
365 0x96b8722eca1f6de4ULL
, 0x53b731e486427362ULL
, 0x47a73de09a6e537aULL
,
366 0x608b20ebab2b0b40ULL
, 0xea7aad90d759f447ULL
, 0x0eaaf1a45bb849ffULL
,
367 0x6678221e5ad2f044ULL
, 0xab2e9285bcce5c39ULL
, 0xfd9da0603d87275dULL
,
368 0x0000000000000000ULL
, 0xb1946f25fb5a35deULL
, 0x03f701f4f6f2f302ULL
,
369 0x12e30ef1edd5db1cULL
, 0xfe6aa194cb75d45fULL
, 0x272c1d0b3145583aULL
,
370 0x5cbb34e78f5f6b68ULL
, 0xbcc99f7556108f23ULL
, 0x749b2cefb7072b58ULL
,
371 0xe4d05c348ce1bdb8ULL
, 0xf5c4533197c695a6ULL
, 0xa37761d4168feec2ULL
,
372 0xb7676dd00aa3cedaULL
, 0xa4229786b5d34433ULL
, 0x9be5827e6755d719ULL
,
373 0x238eeaad64eb01c9ULL
, 0x2ed31afdc9a1bb34ULL
, 0x8da47b29df2e55f6ULL
,
374 0xf0c0503090cd9da0ULL
, 0xd7ec4d3ba188c59aULL
, 0xd946bc9ffa308c65ULL
,
375 0x3fc715f8d286932aULL
, 0xf93f57c668297eaeULL
, 0x5f4c351379ad986aULL
,
376 0x1e180a06123a3014ULL
, 0x11140f051b27281eULL
, 0xf63352c5613466a4ULL
,
377 0x5544331177bb8866ULL
, 0xb6c1997758069f2fULL
, 0x91ed847c6943c715ULL
,
378 0x8ff58e7a7b79f701ULL
, 0x85fd8878756fe70dULL
, 0xeed85a3682f7adb4ULL
,
379 0x6c70241c54c4e048ULL
, 0xdde44b39af9ed596ULL
, 0x2079eb599219f2cbULL
,
380 0x7860281848e8c050ULL
, 0x1345fa56bf708ae9ULL
, 0x45f6c8b33e39f18dULL
,
381 0x4afacdb03724e987ULL
, 0xb4906c24fc513dd8ULL
, 0xa0806020e07d1dc0ULL
,
382 0x40f2cbb23932f98bULL
, 0xe072ab92d94fe44bULL
, 0x15b6f8a34e8971edULL
,
383 0xe7275dc07a134ebaULL
, 0x490dcc44c1d61a85ULL
, 0xf795a66233913751ULL
,
384 0x5040301070b08060ULL
, 0x5eeac1b42b08c99fULL
, 0xae2a9184bbc5543fULL
,
385 0x5211c543d4e72297ULL
, 0xe576a893de44ec4dULL
, 0xed2f5bc274055eb6ULL
,
386 0x7f35de4aebb46aa1ULL
, 0x73cedabd145b81a9ULL
, 0x89068c8f8a800c05ULL
,
387 0x99b4772dc30275eeULL
, 0x76cad9bc135089afULL
, 0xd64ab99cf32d946fULL
,
388 0xdfb5be6a0bc97761ULL
, 0x5d1dc040ddfa3a9dULL
, 0xd41b4ccf577a3698ULL
,
389 0x10b2fba2498279ebULL
, 0xba3a9d80a7e97427ULL
, 0x6e21d14ff09342bfULL
,
390 0x637c211f5dd9f842ULL
, 0xc50f43ca4c5d1e86ULL
, 0x3892e3aa71da39dbULL
,
391 0x5715c642d3ec2a91ULL
394 static const u64 T4
[256] = {
395 0xbbb96a01bad3d268ULL
, 0xe59a66b154fc4d19ULL
, 0xe26514cd2f71bc93ULL
,
396 0x25871b51749ccdb9ULL
, 0xf7a257a453f55102ULL
, 0xd0d6be03d3686bb8ULL
,
397 0xd6deb504d26b6fbdULL
, 0xb35285fe4dd72964ULL
, 0xfdba4aad50f05d0dULL
,
398 0xcf09e063ace98a26ULL
, 0x091c96848d8a0e83ULL
, 0xa5914d1abfdcc679ULL
,
399 0x3da7374d7090ddadULL
, 0xf1aa5ca352f65507ULL
, 0x7ba417e19ab352c8ULL
,
400 0xb55a8ef94cd42d61ULL
, 0x460320acea238f65ULL
, 0xc4e68411d56273a6ULL
,
401 0x55cc68c297a466f1ULL
, 0xdcc6a80dd16e63b2ULL
, 0xaa85d0993355ccffULL
,
402 0xfbb241aa51f35908ULL
, 0xc7e20f9c5bed712aULL
, 0xf359ae55a6f7a204ULL
,
403 0xfebec120de7f5f81ULL
, 0xad7aa2e548d83d75ULL
, 0xd729cc7fa8e59a32ULL
,
404 0x71bc0ae899b65ec7ULL
, 0xe096e63bdb704b90ULL
, 0xac8ddb9e3256c8faULL
,
405 0x95d11522b7c4e651ULL
, 0x32b3aacefc19d72bULL
, 0x704b7393e338ab48ULL
,
406 0x63843bfd9ebf42dcULL
, 0x41fc52d091ae7eefULL
, 0x7dac1ce69bb056cdULL
,
407 0x76437894e23baf4dULL
, 0xbdb16106bbd0d66dULL
, 0x9b32f1da41c31958ULL
,
408 0x7957e5176eb2a5cbULL
, 0xf941b35ca5f2ae0bULL
, 0x8016564bcb400bc0ULL
,
409 0x677fc20c6bbdb1daULL
, 0x59dc7ecc95a26efbULL
, 0xe1619f40a1febe1fULL
,
410 0x10cbc3e3f308eb18ULL
, 0x81e12f30b1cefe4fULL
, 0x0c10160e0206080aULL
,
411 0x922e675ecc4917dbULL
, 0xa26e3f66c45137f3ULL
, 0x4ee8cf531d277469ULL
,
412 0x78a09c6c143c5044ULL
, 0xb0560e73c3582be8ULL
, 0x573f9a3463a591f2ULL
,
413 0xe69eed3cda734f95ULL
, 0xd3d2358e5de76934ULL
, 0xdfc223805fe1613eULL
,
414 0xf2aed72edc79578bULL
, 0x13cf486e7d87e994ULL
, 0x94266c59cd4a13deULL
,
415 0x1fdf5e607f81e19eULL
, 0xc1ea049b5aee752fULL
, 0x7547f3196cb4adc1ULL
,
416 0xd5da3e895ce46d31ULL
, 0x08ebeffff704fb0cULL
, 0xd42d47f2266a98beULL
,
417 0x38abb7c7ff1cdb24ULL
, 0x543b11b9ed2a937eULL
, 0x4a1336a2e825876fULL
,
418 0x699c26f49dba4ed3ULL
, 0x7f5fee106fb1a1ceULL
, 0x03048b8d8e8f028cULL
,
419 0x56c8e34f192b647dULL
, 0xe7699447a0fdba1aULL
, 0x1ad3deeaf00de717ULL
,
420 0x113cba9889861e97ULL
, 0x2278692d0f113c33ULL
, 0x1238311507091c1bULL
,
421 0xc511fd6aafec8629ULL
, 0x208b9bdbfb10cb30ULL
, 0x3040583808182028ULL
,
422 0x7ea8976b153f5441ULL
, 0x2e687f230d173439ULL
, 0x18202c1c040c1014ULL
,
423 0x06080b0701030405ULL
, 0x4507ab2164ac8de9ULL
, 0xf8b6ca27df7c5b84ULL
,
424 0x29970d5f769ac5b3ULL
, 0x0bef6472798bf980ULL
, 0xf4a6dc29dd7a538eULL
,
425 0x8ef5b2b33d47f4c9ULL
, 0x74b08a62163a584eULL
, 0x82e5a4bd3f41fcc3ULL
,
426 0xb2a5fc853759dcebULL
, 0x734ff81e6db7a9c4ULL
, 0x90dd95a83848e0d8ULL
,
427 0xb1a17708b9d6de67ULL
, 0x37bf2a447395d1a2ULL
, 0x4c1b3da5e926836aULL
,
428 0xbeb5ea8b355fd4e1ULL
, 0xe3926db655ff491cULL
, 0x3baf3c4a7193d9a8ULL
,
429 0x07ff727c7b8df18aULL
, 0x0f149d838c890a86ULL
, 0x31b721437296d5a7ULL
,
430 0x1734b19f88851a92ULL
, 0x0ee3e4f8f607ff09ULL
, 0xfc4d33d62a7ea882ULL
,
431 0x84edafba3e42f8c6ULL
, 0xd9ca28875ee2653bULL
, 0xd2254cf527699cbbULL
,
432 0x890ac0cf46ca0543ULL
, 0x286074240c14303cULL
, 0x430fa02665af89ecULL
,
433 0x6d67df0568b8bdd5ULL
, 0x5b2f8c3a61a399f8ULL
, 0x0a181d0903050c0fULL
,
434 0xbc46187dc15e23e2ULL
, 0xef827bb857f94116ULL
, 0xcefe9918d6677fa9ULL
,
435 0xec86f035d976439aULL
, 0xcdfa129558e87d25ULL
, 0xea8efb32d875479fULL
,
436 0x4917bd2f66aa85e3ULL
, 0xc8f6921fd7647bacULL
, 0x9ccd83a63a4ee8d2ULL
,
437 0x8a0e4b42c84507cfULL
, 0x88fdb9b43c44f0ccULL
, 0x268390dcfa13cf35ULL
,
438 0x53c463c596a762f4ULL
, 0xf551a552a7f4a601ULL
, 0x77b401ef98b55ac2ULL
,
439 0x52331abeec29977bULL
, 0xb7a97c0fb8d5da62ULL
, 0xa876226fc7543bfcULL
,
440 0xc319f66daeef822cULL
, 0x6b6fd40269bbb9d0ULL
, 0xa762bfec4bdd317aULL
,
441 0xdd31d176abe0963dULL
, 0xd121c778a9e69e37ULL
, 0x4f1fb62867a981e6ULL
,
442 0x3c504e360a1e2822ULL
, 0x8f02cbc847c90146ULL
, 0x16c3c8e4f20bef1dULL
,
443 0x99c1032cb5c2ee5bULL
, 0xcc0d6bee226688aaULL
, 0x647b4981e532b356ULL
,
444 0x5e230cb0ee2f9f71ULL
, 0xa399461dbedfc27cULL
, 0xfa4538d12b7dac87ULL
,
445 0x217ce2a0819e3ebfULL
, 0x6c90a67e1236485aULL
, 0x2d6cf4ae839836b5ULL
,
446 0x5ad8f5411b2d6c77ULL
, 0x2470622a0e123836ULL
, 0xca0560e923658cafULL
,
447 0x04fbf9f1f502f306ULL
, 0x8312ddc645cf094cULL
, 0xc61576e7216384a5ULL
,
448 0x9e3e7150ce4f1fd1ULL
, 0xab72a9e249db3970ULL
, 0xe87d09c42c74b09cULL
,
449 0x2c9b8dd5f916c33aULL
, 0x6e635488e637bf59ULL
, 0x93d91e25b6c7e254ULL
,
450 0xf05d25d82878a088ULL
, 0x72b8816517395c4bULL
, 0x2b64ffa9829b32b0ULL
,
451 0x5cd0fe461a2e6872ULL
, 0x1d2cac968b80169dULL
, 0x3ea3bcc0fe1fdf21ULL
,
452 0x1b24a7918a831298ULL
, 0x3648533f091b242dULL
, 0x8c064045c94603caULL
,
453 0x354cd8b2879426a1ULL
, 0xb94a98f74ed2256bULL
, 0x7c5b659de13ea342ULL
,
454 0xe46d1fca2e72b896ULL
, 0x62734286e431b753ULL
, 0x7a536e9ae03da747ULL
,
455 0x400b2babeb208b60ULL
, 0x47f459d790ad7aeaULL
, 0xff49b85ba4f1aa0eULL
,
456 0x44f0d25a1e227866ULL
, 0x395ccebc85922eabULL
, 0x5d27873d60a09dfdULL
,
457 0x0000000000000000ULL
, 0xde355afb256f94b1ULL
, 0x02f3f2f6f401f703ULL
,
458 0x1cdbd5edf10ee312ULL
, 0x5fd475cb94a16afeULL
, 0x3a5845310b1d2c27ULL
,
459 0x686b5f8fe734bb5cULL
, 0x238f1056759fc9bcULL
, 0x582b07b7ef2c9b74ULL
,
460 0xb8bde18c345cd0e4ULL
, 0xa695c6973153c4f5ULL
, 0xc2ee8f16d46177a3ULL
,
461 0xdacea30ad06d67b7ULL
, 0x3344d3b5869722a4ULL
, 0x19d755677e82e59bULL
,
462 0xc901eb64adea8e23ULL
, 0x34bba1c9fd1ad32eULL
, 0xf6552edf297ba48dULL
,
463 0xa09dcd903050c0f0ULL
, 0x9ac588a13b4decd7ULL
, 0x658c30fa9fbc46d9ULL
,
464 0x2a9386d2f815c73fULL
, 0xae7e2968c6573ff9ULL
, 0x6a98ad7913354c5fULL
,
465 0x14303a12060a181eULL
, 0x1e28271b050f1411ULL
, 0xa4663461c55233f6ULL
,
466 0x6688bb7711334455ULL
, 0x2f9f06587799c1b6ULL
, 0x15c743697c84ed91ULL
,
467 0x01f7797b7a8ef58fULL
, 0x0de76f757888fd85ULL
, 0xb4adf782365ad8eeULL
,
468 0x48e0c4541c24706cULL
, 0x96d59eaf394be4ddULL
, 0xcbf2199259eb7920ULL
,
469 0x50c0e84818286078ULL
, 0xe98a70bf56fa4513ULL
, 0x8df1393eb3c8f645ULL
,
470 0x87e92437b0cdfa4aULL
, 0xd83d51fc246c90b4ULL
, 0xc01d7de0206080a0ULL
,
471 0x8bf93239b2cbf240ULL
, 0x4be44fd992ab72e0ULL
, 0xed71894ea3f8b615ULL
,
472 0xba4e137ac05d27e7ULL
, 0x851ad6c144cc0d49ULL
, 0x5137913362a695f7ULL
,
473 0x6080b07010304050ULL
, 0x9fc9082bb4c1ea5eULL
, 0x3f54c5bb84912aaeULL
,
474 0x9722e7d443c51152ULL
, 0x4dec44de93a876e5ULL
, 0xb65e0574c25b2fedULL
,
475 0xa16ab4eb4ade357fULL
, 0xa9815b14bddace73ULL
, 0x050c808a8f8c0689ULL
,
476 0xee7502c32d77b499ULL
, 0xaf895013bcd9ca76ULL
, 0x6f942df39cb94ad6ULL
,
477 0x6177c90b6abeb5dfULL
, 0x9d3afadd40c01d5dULL
, 0x98367a57cf4c1bd4ULL
,
478 0xeb798249a2fbb210ULL
, 0x2774e9a7809d3abaULL
, 0xbf4293f04fd1216eULL
,
479 0x42f8d95d1f217c63ULL
, 0x861e5d4cca430fc5ULL
, 0xdb39da71aae39238ULL
,
480 0x912aecd342c61557ULL
483 static const u64 T5
[256] = {
484 0xb9bb016ad3ba68d2ULL
, 0x9ae5b166fc54194dULL
, 0x65e2cd14712f93bcULL
,
485 0x8725511b9c74b9cdULL
, 0xa2f7a457f5530251ULL
, 0xd6d003be68d3b86bULL
,
486 0xded604b56bd2bd6fULL
, 0x52b3fe85d74d6429ULL
, 0xbafdad4af0500d5dULL
,
487 0x09cf63e0e9ac268aULL
, 0x1c0984968a8d830eULL
, 0x91a51a4ddcbf79c6ULL
,
488 0xa73d4d379070adddULL
, 0xaaf1a35cf6520755ULL
, 0xa47be117b39ac852ULL
,
489 0x5ab5f98ed44c612dULL
, 0x0346ac2023ea658fULL
, 0xe6c4118462d5a673ULL
,
490 0xcc55c268a497f166ULL
, 0xc6dc0da86ed1b263ULL
, 0x85aa99d05533ffccULL
,
491 0xb2fbaa41f3510859ULL
, 0xe2c79c0fed5b2a71ULL
, 0x59f355aef7a604a2ULL
,
492 0xbefe20c17fde815fULL
, 0x7aade5a2d848753dULL
, 0x29d77fcce5a8329aULL
,
493 0xbc71e80ab699c75eULL
, 0x96e03be670db904bULL
, 0x8dac9edb5632fac8ULL
,
494 0xd1952215c4b751e6ULL
, 0xb332ceaa19fc2bd7ULL
, 0x4b70937338e348abULL
,
495 0x8463fd3bbf9edc42ULL
, 0xfc41d052ae91ef7eULL
, 0xac7de61cb09bcd56ULL
,
496 0x437694783be24dafULL
, 0xb1bd0661d0bb6dd6ULL
, 0x329bdaf1c3415819ULL
,
497 0x577917e5b26ecba5ULL
, 0x41f95cb3f2a50baeULL
, 0x16804b5640cbc00bULL
,
498 0x7f670cc2bd6bdab1ULL
, 0xdc59cc7ea295fb6eULL
, 0x61e1409ffea11fbeULL
,
499 0xcb10e3c308f318ebULL
, 0xe181302fceb14ffeULL
, 0x100c0e1606020a08ULL
,
500 0x2e925e6749ccdb17ULL
, 0x6ea2663f51c4f337ULL
, 0xe84e53cf271d6974ULL
,
501 0xa0786c9c3c144450ULL
, 0x56b0730e58c3e82bULL
, 0x3f57349aa563f291ULL
,
502 0x9ee63ced73da954fULL
, 0xd2d38e35e75d3469ULL
, 0xc2df8023e15f3e61ULL
,
503 0xaef22ed779dc8b57ULL
, 0xcf136e48877d94e9ULL
, 0x2694596c4acdde13ULL
,
504 0xdf1f605e817f9ee1ULL
, 0xeac19b04ee5a2f75ULL
, 0x477519f3b46cc1adULL
,
505 0xdad5893ee45c316dULL
, 0xeb08ffef04f70cfbULL
, 0x2dd4f2476a26be98ULL
,
506 0xab38c7b71cff24dbULL
, 0x3b54b9112aed7e93ULL
, 0x134aa23625e86f87ULL
,
507 0x9c69f426ba9dd34eULL
, 0x5f7f10eeb16fcea1ULL
, 0x04038d8b8f8e8c02ULL
,
508 0xc8564fe32b197d64ULL
, 0x69e74794fda01abaULL
, 0xd31aeade0df017e7ULL
,
509 0x3c1198ba8689971eULL
, 0x78222d69110f333cULL
, 0x3812153109071b1cULL
,
510 0x11c56afdecaf2986ULL
, 0x8b20db9b10fb30cbULL
, 0x4030385818082820ULL
,
511 0xa87e6b973f154154ULL
, 0x682e237f170d3934ULL
, 0x20181c2c0c041410ULL
,
512 0x0806070b03010504ULL
, 0x074521abac64e98dULL
, 0xb6f827ca7cdf845bULL
,
513 0x97295f0d9a76b3c5ULL
, 0xef0b72648b7980f9ULL
, 0xa6f429dc7add8e53ULL
,
514 0xf58eb3b2473dc9f4ULL
, 0xb074628a3a164e58ULL
, 0xe582bda4413fc3fcULL
,
515 0xa5b285fc5937ebdcULL
, 0x4f731ef8b76dc4a9ULL
, 0xdd90a8954838d8e0ULL
,
516 0xa1b10877d6b967deULL
, 0xbf37442a9573a2d1ULL
, 0x1b4ca53d26e96a83ULL
,
517 0xb5be8bea5f35e1d4ULL
, 0x92e3b66dff551c49ULL
, 0xaf3b4a3c9371a8d9ULL
,
518 0xff077c728d7b8af1ULL
, 0x140f839d898c860aULL
, 0xb73143219672a7d5ULL
,
519 0x34179fb18588921aULL
, 0xe30ef8e407f609ffULL
, 0x4dfcd6337e2a82a8ULL
,
520 0xed84baaf423ec6f8ULL
, 0xcad98728e25e3b65ULL
, 0x25d2f54c6927bb9cULL
,
521 0x0a89cfc0ca464305ULL
, 0x60282474140c3c30ULL
, 0x0f4326a0af65ec89ULL
,
522 0x676d05dfb868d5bdULL
, 0x2f5b3a8ca361f899ULL
, 0x180a091d05030f0cULL
,
523 0x46bc7d185ec1e223ULL
, 0x82efb87bf9571641ULL
, 0xfece189967d6a97fULL
,
524 0x86ec35f076d99a43ULL
, 0xfacd9512e858257dULL
, 0x8eea32fb75d89f47ULL
,
525 0x17492fbdaa66e385ULL
, 0xf6c81f9264d7ac7bULL
, 0xcd9ca6834e3ad2e8ULL
,
526 0x0e8a424b45c8cf07ULL
, 0xfd88b4b9443cccf0ULL
, 0x8326dc9013fa35cfULL
,
527 0xc453c563a796f462ULL
, 0x51f552a5f4a701a6ULL
, 0xb477ef01b598c25aULL
,
528 0x3352be1a29ec7b97ULL
, 0xa9b70f7cd5b862daULL
, 0x76a86f2254c7fc3bULL
,
529 0x19c36df6efae2c82ULL
, 0x6f6b02d4bb69d0b9ULL
, 0x62a7ecbfdd4b7a31ULL
,
530 0x31dd76d1e0ab3d96ULL
, 0x21d178c7e6a9379eULL
, 0x1f4f28b6a967e681ULL
,
531 0x503c364e1e0a2228ULL
, 0x028fc8cbc9474601ULL
, 0xc316e4c80bf21defULL
,
532 0xc1992c03c2b55beeULL
, 0x0dccee6b6622aa88ULL
, 0x7b64814932e556b3ULL
,
533 0x235eb00c2fee719fULL
, 0x99a31d46dfbe7cc2ULL
, 0x45fad1387d2b87acULL
,
534 0x7c21a0e29e81bf3eULL
, 0x906c7ea636125a48ULL
, 0x6c2daef49883b536ULL
,
535 0xd85a41f52d1b776cULL
, 0x70242a62120e3638ULL
, 0x05cae9606523af8cULL
,
536 0xfb04f1f902f506f3ULL
, 0x1283c6ddcf454c09ULL
, 0x15c6e7766321a584ULL
,
537 0x3e9e50714fced11fULL
, 0x72abe2a9db497039ULL
, 0x7de8c409742c9cb0ULL
,
538 0x9b2cd58d16f93ac3ULL
, 0x636e885437e659bfULL
, 0xd993251ec7b654e2ULL
,
539 0x5df0d825782888a0ULL
, 0xb872658139174b5cULL
, 0x642ba9ff9b82b032ULL
,
540 0xd05c46fe2e1a7268ULL
, 0x2c1d96ac808b9d16ULL
, 0xa33ec0bc1ffe21dfULL
,
541 0x241b91a7838a9812ULL
, 0x48363f531b092d24ULL
, 0x068c454046c9ca03ULL
,
542 0x4c35b2d89487a126ULL
, 0x4ab9f798d24e6b25ULL
, 0x5b7c9d653ee142a3ULL
,
543 0x6de4ca1f722e96b8ULL
, 0x7362864231e453b7ULL
, 0x537a9a6e3de047a7ULL
,
544 0x0b40ab2b20eb608bULL
, 0xf447d759ad90ea7aULL
, 0x49ff5bb8f1a40eaaULL
,
545 0xf0445ad2221e6678ULL
, 0x5c39bcce9285ab2eULL
, 0x275d3d87a060fd9dULL
,
546 0x0000000000000000ULL
, 0x35defb5a6f25b194ULL
, 0xf302f6f201f403f7ULL
,
547 0xdb1cedd50ef112e3ULL
, 0xd45fcb75a194fe6aULL
, 0x583a31451d0b272cULL
,
548 0x6b688f5f34e75cbbULL
, 0x8f2356109f75bcc9ULL
, 0x2b58b7072cef749bULL
,
549 0xbdb88ce15c34e4d0ULL
, 0x95a697c65331f5c4ULL
, 0xeec2168f61d4a377ULL
,
550 0xceda0aa36dd0b767ULL
, 0x4433b5d39786a422ULL
, 0xd7196755827e9be5ULL
,
551 0x01c964ebeaad238eULL
, 0xbb34c9a11afd2ed3ULL
, 0x55f6df2e7b298da4ULL
,
552 0x9da090cd5030f0c0ULL
, 0xc59aa1884d3bd7ecULL
, 0x8c65fa30bc9fd946ULL
,
553 0x932ad28615f83fc7ULL
, 0x7eae682957c6f93fULL
, 0x986a79ad35135f4cULL
,
554 0x3014123a0a061e18ULL
, 0x281e1b270f051114ULL
, 0x66a4613452c5f633ULL
,
555 0x886677bb33115544ULL
, 0x9f2f58069977b6c1ULL
, 0xc7156943847c91edULL
,
556 0xf7017b798e7a8ff5ULL
, 0xe70d756f887885fdULL
, 0xadb482f75a36eed8ULL
,
557 0xe04854c4241c6c70ULL
, 0xd596af9e4b39dde4ULL
, 0xf2cb9219eb592079ULL
,
558 0xc05048e828187860ULL
, 0x8ae9bf70fa561345ULL
, 0xf18d3e39c8b345f6ULL
,
559 0xe9873724cdb04afaULL
, 0x3dd8fc516c24b490ULL
, 0x1dc0e07d6020a080ULL
,
560 0xf98b3932cbb240f2ULL
, 0xe44bd94fab92e072ULL
, 0x71ed4e89f8a315b6ULL
,
561 0x4eba7a135dc0e727ULL
, 0x1a85c1d6cc44490dULL
, 0x37513391a662f795ULL
,
562 0x806070b030105040ULL
, 0xc99f2b08c1b45eeaULL
, 0x543fbbc59184ae2aULL
,
563 0x2297d4e7c5435211ULL
, 0xec4dde44a893e576ULL
, 0x5eb674055bc2ed2fULL
,
564 0x6aa1ebb4de4a7f35ULL
, 0x81a9145bdabd73ceULL
, 0x0c058a808c8f8906ULL
,
565 0x75eec302772d99b4ULL
, 0x89af1350d9bc76caULL
, 0x946ff32db99cd64aULL
,
566 0x77610bc9be6adfb5ULL
, 0x3a9dddfac0405d1dULL
, 0x3698577a4ccfd41bULL
,
567 0x79eb4982fba210b2ULL
, 0x7427a7e99d80ba3aULL
, 0x42bff093d14f6e21ULL
,
568 0xf8425dd9211f637cULL
, 0x1e864c5d43cac50fULL
, 0x39db71dae3aa3892ULL
,
569 0x2a91d3ecc6425715ULL
572 static const u64 T6
[256] = {
573 0x6a01bbb9d268bad3ULL
, 0x66b1e59a4d1954fcULL
, 0x14cde265bc932f71ULL
,
574 0x1b512587cdb9749cULL
, 0x57a4f7a2510253f5ULL
, 0xbe03d0d66bb8d368ULL
,
575 0xb504d6de6fbdd26bULL
, 0x85feb35229644dd7ULL
, 0x4aadfdba5d0d50f0ULL
,
576 0xe063cf098a26ace9ULL
, 0x9684091c0e838d8aULL
, 0x4d1aa591c679bfdcULL
,
577 0x374d3da7ddad7090ULL
, 0x5ca3f1aa550752f6ULL
, 0x17e17ba452c89ab3ULL
,
578 0x8ef9b55a2d614cd4ULL
, 0x20ac46038f65ea23ULL
, 0x8411c4e673a6d562ULL
,
579 0x68c255cc66f197a4ULL
, 0xa80ddcc663b2d16eULL
, 0xd099aa85ccff3355ULL
,
580 0x41aafbb2590851f3ULL
, 0x0f9cc7e2712a5bedULL
, 0xae55f359a204a6f7ULL
,
581 0xc120febe5f81de7fULL
, 0xa2e5ad7a3d7548d8ULL
, 0xcc7fd7299a32a8e5ULL
,
582 0x0ae871bc5ec799b6ULL
, 0xe63be0964b90db70ULL
, 0xdb9eac8dc8fa3256ULL
,
583 0x152295d1e651b7c4ULL
, 0xaace32b3d72bfc19ULL
, 0x7393704bab48e338ULL
,
584 0x3bfd638442dc9ebfULL
, 0x52d041fc7eef91aeULL
, 0x1ce67dac56cd9bb0ULL
,
585 0x78947643af4de23bULL
, 0x6106bdb1d66dbbd0ULL
, 0xf1da9b32195841c3ULL
,
586 0xe5177957a5cb6eb2ULL
, 0xb35cf941ae0ba5f2ULL
, 0x564b80160bc0cb40ULL
,
587 0xc20c677fb1da6bbdULL
, 0x7ecc59dc6efb95a2ULL
, 0x9f40e161be1fa1feULL
,
588 0xc3e310cbeb18f308ULL
, 0x2f3081e1fe4fb1ceULL
, 0x160e0c10080a0206ULL
,
589 0x675e922e17dbcc49ULL
, 0x3f66a26e37f3c451ULL
, 0xcf534ee874691d27ULL
,
590 0x9c6c78a05044143cULL
, 0x0e73b0562be8c358ULL
, 0x9a34573f91f263a5ULL
,
591 0xed3ce69e4f95da73ULL
, 0x358ed3d269345de7ULL
, 0x2380dfc2613e5fe1ULL
,
592 0xd72ef2ae578bdc79ULL
, 0x486e13cfe9947d87ULL
, 0x6c59942613decd4aULL
,
593 0x5e601fdfe19e7f81ULL
, 0x049bc1ea752f5aeeULL
, 0xf3197547adc16cb4ULL
,
594 0x3e89d5da6d315ce4ULL
, 0xefff08ebfb0cf704ULL
, 0x47f2d42d98be266aULL
,
595 0xb7c738abdb24ff1cULL
, 0x11b9543b937eed2aULL
, 0x36a24a13876fe825ULL
,
596 0x26f4699c4ed39dbaULL
, 0xee107f5fa1ce6fb1ULL
, 0x8b8d0304028c8e8fULL
,
597 0xe34f56c8647d192bULL
, 0x9447e769ba1aa0fdULL
, 0xdeea1ad3e717f00dULL
,
598 0xba98113c1e978986ULL
, 0x692d22783c330f11ULL
, 0x311512381c1b0709ULL
,
599 0xfd6ac5118629afecULL
, 0x9bdb208bcb30fb10ULL
, 0x5838304020280818ULL
,
600 0x976b7ea85441153fULL
, 0x7f232e6834390d17ULL
, 0x2c1c18201014040cULL
,
601 0x0b07060804050103ULL
, 0xab2145078de964acULL
, 0xca27f8b65b84df7cULL
,
602 0x0d5f2997c5b3769aULL
, 0x64720beff980798bULL
, 0xdc29f4a6538edd7aULL
,
603 0xb2b38ef5f4c93d47ULL
, 0x8a6274b0584e163aULL
, 0xa4bd82e5fcc33f41ULL
,
604 0xfc85b2a5dceb3759ULL
, 0xf81e734fa9c46db7ULL
, 0x95a890dde0d83848ULL
,
605 0x7708b1a1de67b9d6ULL
, 0x2a4437bfd1a27395ULL
, 0x3da54c1b836ae926ULL
,
606 0xea8bbeb5d4e1355fULL
, 0x6db6e392491c55ffULL
, 0x3c4a3bafd9a87193ULL
,
607 0x727c07fff18a7b8dULL
, 0x9d830f140a868c89ULL
, 0x214331b7d5a77296ULL
,
608 0xb19f17341a928885ULL
, 0xe4f80ee3ff09f607ULL
, 0x33d6fc4da8822a7eULL
,
609 0xafba84edf8c63e42ULL
, 0x2887d9ca653b5ee2ULL
, 0x4cf5d2259cbb2769ULL
,
610 0xc0cf890a054346caULL
, 0x74242860303c0c14ULL
, 0xa026430f89ec65afULL
,
611 0xdf056d67bdd568b8ULL
, 0x8c3a5b2f99f861a3ULL
, 0x1d090a180c0f0305ULL
,
612 0x187dbc4623e2c15eULL
, 0x7bb8ef82411657f9ULL
, 0x9918cefe7fa9d667ULL
,
613 0xf035ec86439ad976ULL
, 0x1295cdfa7d2558e8ULL
, 0xfb32ea8e479fd875ULL
,
614 0xbd2f491785e366aaULL
, 0x921fc8f67bacd764ULL
, 0x83a69ccde8d23a4eULL
,
615 0x4b428a0e07cfc845ULL
, 0xb9b488fdf0cc3c44ULL
, 0x90dc2683cf35fa13ULL
,
616 0x63c553c462f496a7ULL
, 0xa552f551a601a7f4ULL
, 0x01ef77b45ac298b5ULL
,
617 0x1abe5233977bec29ULL
, 0x7c0fb7a9da62b8d5ULL
, 0x226fa8763bfcc754ULL
,
618 0xf66dc319822caeefULL
, 0xd4026b6fb9d069bbULL
, 0xbfeca762317a4bddULL
,
619 0xd176dd31963dabe0ULL
, 0xc778d1219e37a9e6ULL
, 0xb6284f1f81e667a9ULL
,
620 0x4e363c5028220a1eULL
, 0xcbc88f02014647c9ULL
, 0xc8e416c3ef1df20bULL
,
621 0x032c99c1ee5bb5c2ULL
, 0x6beecc0d88aa2266ULL
, 0x4981647bb356e532ULL
,
622 0x0cb05e239f71ee2fULL
, 0x461da399c27cbedfULL
, 0x38d1fa45ac872b7dULL
,
623 0xe2a0217c3ebf819eULL
, 0xa67e6c90485a1236ULL
, 0xf4ae2d6c36b58398ULL
,
624 0xf5415ad86c771b2dULL
, 0x622a247038360e12ULL
, 0x60e9ca058caf2365ULL
,
625 0xf9f104fbf306f502ULL
, 0xddc68312094c45cfULL
, 0x76e7c61584a52163ULL
,
626 0x71509e3e1fd1ce4fULL
, 0xa9e2ab72397049dbULL
, 0x09c4e87db09c2c74ULL
,
627 0x8dd52c9bc33af916ULL
, 0x54886e63bf59e637ULL
, 0x1e2593d9e254b6c7ULL
,
628 0x25d8f05da0882878ULL
, 0x816572b85c4b1739ULL
, 0xffa92b6432b0829bULL
,
629 0xfe465cd068721a2eULL
, 0xac961d2c169d8b80ULL
, 0xbcc03ea3df21fe1fULL
,
630 0xa7911b2412988a83ULL
, 0x533f3648242d091bULL
, 0x40458c0603cac946ULL
,
631 0xd8b2354c26a18794ULL
, 0x98f7b94a256b4ed2ULL
, 0x659d7c5ba342e13eULL
,
632 0x1fcae46db8962e72ULL
, 0x42866273b753e431ULL
, 0x6e9a7a53a747e03dULL
,
633 0x2bab400b8b60eb20ULL
, 0x59d747f47aea90adULL
, 0xb85bff49aa0ea4f1ULL
,
634 0xd25a44f078661e22ULL
, 0xcebc395c2eab8592ULL
, 0x873d5d279dfd60a0ULL
,
635 0x0000000000000000ULL
, 0x5afbde3594b1256fULL
, 0xf2f602f3f703f401ULL
,
636 0xd5ed1cdbe312f10eULL
, 0x75cb5fd46afe94a1ULL
, 0x45313a582c270b1dULL
,
637 0x5f8f686bbb5ce734ULL
, 0x1056238fc9bc759fULL
, 0x07b7582b9b74ef2cULL
,
638 0xe18cb8bdd0e4345cULL
, 0xc697a695c4f53153ULL
, 0x8f16c2ee77a3d461ULL
,
639 0xa30adace67b7d06dULL
, 0xd3b5334422a48697ULL
, 0x556719d7e59b7e82ULL
,
640 0xeb64c9018e23adeaULL
, 0xa1c934bbd32efd1aULL
, 0x2edff655a48d297bULL
,
641 0xcd90a09dc0f03050ULL
, 0x88a19ac5ecd73b4dULL
, 0x30fa658c46d99fbcULL
,
642 0x86d22a93c73ff815ULL
, 0x2968ae7e3ff9c657ULL
, 0xad796a984c5f1335ULL
,
643 0x3a121430181e060aULL
, 0x271b1e281411050fULL
, 0x3461a46633f6c552ULL
,
644 0xbb77668844551133ULL
, 0x06582f9fc1b67799ULL
, 0x436915c7ed917c84ULL
,
645 0x797b01f7f58f7a8eULL
, 0x6f750de7fd857888ULL
, 0xf782b4add8ee365aULL
,
646 0xc45448e0706c1c24ULL
, 0x9eaf96d5e4dd394bULL
, 0x1992cbf2792059ebULL
,
647 0xe84850c060781828ULL
, 0x70bfe98a451356faULL
, 0x393e8df1f645b3c8ULL
,
648 0x243787e9fa4ab0cdULL
, 0x51fcd83d90b4246cULL
, 0x7de0c01d80a02060ULL
,
649 0x32398bf9f240b2cbULL
, 0x4fd94be472e092abULL
, 0x894eed71b615a3f8ULL
,
650 0x137aba4e27e7c05dULL
, 0xd6c1851a0d4944ccULL
, 0x9133513795f762a6ULL
,
651 0xb070608040501030ULL
, 0x082b9fc9ea5eb4c1ULL
, 0xc5bb3f542aae8491ULL
,
652 0xe7d49722115243c5ULL
, 0x44de4dec76e593a8ULL
, 0x0574b65e2fedc25bULL
,
653 0xb4eba16a357f4adeULL
, 0x5b14a981ce73bddaULL
, 0x808a050c06898f8cULL
,
654 0x02c3ee75b4992d77ULL
, 0x5013af89ca76bcd9ULL
, 0x2df36f944ad69cb9ULL
,
655 0xc90b6177b5df6abeULL
, 0xfadd9d3a1d5d40c0ULL
, 0x7a5798361bd4cf4cULL
,
656 0x8249eb79b210a2fbULL
, 0xe9a727743aba809dULL
, 0x93f0bf42216e4fd1ULL
,
657 0xd95d42f87c631f21ULL
, 0x5d4c861e0fc5ca43ULL
, 0xda71db399238aae3ULL
,
658 0xecd3912a155742c6ULL
661 static const u64 T7
[256] = {
662 0x016ab9bb68d2d3baULL
, 0xb1669ae5194dfc54ULL
, 0xcd1465e293bc712fULL
,
663 0x511b8725b9cd9c74ULL
, 0xa457a2f70251f553ULL
, 0x03bed6d0b86b68d3ULL
,
664 0x04b5ded6bd6f6bd2ULL
, 0xfe8552b36429d74dULL
, 0xad4abafd0d5df050ULL
,
665 0x63e009cf268ae9acULL
, 0x84961c09830e8a8dULL
, 0x1a4d91a579c6dcbfULL
,
666 0x4d37a73daddd9070ULL
, 0xa35caaf10755f652ULL
, 0xe117a47bc852b39aULL
,
667 0xf98e5ab5612dd44cULL
, 0xac200346658f23eaULL
, 0x1184e6c4a67362d5ULL
,
668 0xc268cc55f166a497ULL
, 0x0da8c6dcb2636ed1ULL
, 0x99d085aaffcc5533ULL
,
669 0xaa41b2fb0859f351ULL
, 0x9c0fe2c72a71ed5bULL
, 0x55ae59f304a2f7a6ULL
,
670 0x20c1befe815f7fdeULL
, 0xe5a27aad753dd848ULL
, 0x7fcc29d7329ae5a8ULL
,
671 0xe80abc71c75eb699ULL
, 0x3be696e0904b70dbULL
, 0x9edb8dacfac85632ULL
,
672 0x2215d19551e6c4b7ULL
, 0xceaab3322bd719fcULL
, 0x93734b7048ab38e3ULL
,
673 0xfd3b8463dc42bf9eULL
, 0xd052fc41ef7eae91ULL
, 0xe61cac7dcd56b09bULL
,
674 0x947843764daf3be2ULL
, 0x0661b1bd6dd6d0bbULL
, 0xdaf1329b5819c341ULL
,
675 0x17e55779cba5b26eULL
, 0x5cb341f90baef2a5ULL
, 0x4b561680c00b40cbULL
,
676 0x0cc27f67dab1bd6bULL
, 0xcc7edc59fb6ea295ULL
, 0x409f61e11fbefea1ULL
,
677 0xe3c3cb1018eb08f3ULL
, 0x302fe1814ffeceb1ULL
, 0x0e16100c0a080602ULL
,
678 0x5e672e92db1749ccULL
, 0x663f6ea2f33751c4ULL
, 0x53cfe84e6974271dULL
,
679 0x6c9ca07844503c14ULL
, 0x730e56b0e82b58c3ULL
, 0x349a3f57f291a563ULL
,
680 0x3ced9ee6954f73daULL
, 0x8e35d2d33469e75dULL
, 0x8023c2df3e61e15fULL
,
681 0x2ed7aef28b5779dcULL
, 0x6e48cf1394e9877dULL
, 0x596c2694de134acdULL
,
682 0x605edf1f9ee1817fULL
, 0x9b04eac12f75ee5aULL
, 0x19f34775c1adb46cULL
,
683 0x893edad5316de45cULL
, 0xffefeb080cfb04f7ULL
, 0xf2472dd4be986a26ULL
,
684 0xc7b7ab3824db1cffULL
, 0xb9113b547e932aedULL
, 0xa236134a6f8725e8ULL
,
685 0xf4269c69d34eba9dULL
, 0x10ee5f7fcea1b16fULL
, 0x8d8b04038c028f8eULL
,
686 0x4fe3c8567d642b19ULL
, 0x479469e71abafda0ULL
, 0xeaded31a17e70df0ULL
,
687 0x98ba3c11971e8689ULL
, 0x2d697822333c110fULL
, 0x153138121b1c0907ULL
,
688 0x6afd11c52986ecafULL
, 0xdb9b8b2030cb10fbULL
, 0x3858403028201808ULL
,
689 0x6b97a87e41543f15ULL
, 0x237f682e3934170dULL
, 0x1c2c201814100c04ULL
,
690 0x070b080605040301ULL
, 0x21ab0745e98dac64ULL
, 0x27cab6f8845b7cdfULL
,
691 0x5f0d9729b3c59a76ULL
, 0x7264ef0b80f98b79ULL
, 0x29dca6f48e537addULL
,
692 0xb3b2f58ec9f4473dULL
, 0x628ab0744e583a16ULL
, 0xbda4e582c3fc413fULL
,
693 0x85fca5b2ebdc5937ULL
, 0x1ef84f73c4a9b76dULL
, 0xa895dd90d8e04838ULL
,
694 0x0877a1b167ded6b9ULL
, 0x442abf37a2d19573ULL
, 0xa53d1b4c6a8326e9ULL
,
695 0x8beab5bee1d45f35ULL
, 0xb66d92e31c49ff55ULL
, 0x4a3caf3ba8d99371ULL
,
696 0x7c72ff078af18d7bULL
, 0x839d140f860a898cULL
, 0x4321b731a7d59672ULL
,
697 0x9fb13417921a8588ULL
, 0xf8e4e30e09ff07f6ULL
, 0xd6334dfc82a87e2aULL
,
698 0xbaafed84c6f8423eULL
, 0x8728cad93b65e25eULL
, 0xf54c25d2bb9c6927ULL
,
699 0xcfc00a894305ca46ULL
, 0x247460283c30140cULL
, 0x26a00f43ec89af65ULL
,
700 0x05df676dd5bdb868ULL
, 0x3a8c2f5bf899a361ULL
, 0x091d180a0f0c0503ULL
,
701 0x7d1846bce2235ec1ULL
, 0xb87b82ef1641f957ULL
, 0x1899fecea97f67d6ULL
,
702 0x35f086ec9a4376d9ULL
, 0x9512facd257de858ULL
, 0x32fb8eea9f4775d8ULL
,
703 0x2fbd1749e385aa66ULL
, 0x1f92f6c8ac7b64d7ULL
, 0xa683cd9cd2e84e3aULL
,
704 0x424b0e8acf0745c8ULL
, 0xb4b9fd88ccf0443cULL
, 0xdc90832635cf13faULL
,
705 0xc563c453f462a796ULL
, 0x52a551f501a6f4a7ULL
, 0xef01b477c25ab598ULL
,
706 0xbe1a33527b9729ecULL
, 0x0f7ca9b762dad5b8ULL
, 0x6f2276a8fc3b54c7ULL
,
707 0x6df619c32c82efaeULL
, 0x02d46f6bd0b9bb69ULL
, 0xecbf62a77a31dd4bULL
,
708 0x76d131dd3d96e0abULL
, 0x78c721d1379ee6a9ULL
, 0x28b61f4fe681a967ULL
,
709 0x364e503c22281e0aULL
, 0xc8cb028f4601c947ULL
, 0xe4c8c3161def0bf2ULL
,
710 0x2c03c1995beec2b5ULL
, 0xee6b0dccaa886622ULL
, 0x81497b6456b332e5ULL
,
711 0xb00c235e719f2feeULL
, 0x1d4699a37cc2dfbeULL
, 0xd13845fa87ac7d2bULL
,
712 0xa0e27c21bf3e9e81ULL
, 0x7ea6906c5a483612ULL
, 0xaef46c2db5369883ULL
,
713 0x41f5d85a776c2d1bULL
, 0x2a6270243638120eULL
, 0xe96005caaf8c6523ULL
,
714 0xf1f9fb0406f302f5ULL
, 0xc6dd12834c09cf45ULL
, 0xe77615c6a5846321ULL
,
715 0x50713e9ed11f4fceULL
, 0xe2a972ab7039db49ULL
, 0xc4097de89cb0742cULL
,
716 0xd58d9b2c3ac316f9ULL
, 0x8854636e59bf37e6ULL
, 0x251ed99354e2c7b6ULL
,
717 0xd8255df088a07828ULL
, 0x6581b8724b5c3917ULL
, 0xa9ff642bb0329b82ULL
,
718 0x46fed05c72682e1aULL
, 0x96ac2c1d9d16808bULL
, 0xc0bca33e21df1ffeULL
,
719 0x91a7241b9812838aULL
, 0x3f5348362d241b09ULL
, 0x4540068cca0346c9ULL
,
720 0xb2d84c35a1269487ULL
, 0xf7984ab96b25d24eULL
, 0x9d655b7c42a33ee1ULL
,
721 0xca1f6de496b8722eULL
, 0x8642736253b731e4ULL
, 0x9a6e537a47a73de0ULL
,
722 0xab2b0b40608b20ebULL
, 0xd759f447ea7aad90ULL
, 0x5bb849ff0eaaf1a4ULL
,
723 0x5ad2f0446678221eULL
, 0xbcce5c39ab2e9285ULL
, 0x3d87275dfd9da060ULL
,
724 0x0000000000000000ULL
, 0xfb5a35deb1946f25ULL
, 0xf6f2f30203f701f4ULL
,
725 0xedd5db1c12e30ef1ULL
, 0xcb75d45ffe6aa194ULL
, 0x3145583a272c1d0bULL
,
726 0x8f5f6b685cbb34e7ULL
, 0x56108f23bcc99f75ULL
, 0xb7072b58749b2cefULL
,
727 0x8ce1bdb8e4d05c34ULL
, 0x97c695a6f5c45331ULL
, 0x168feec2a37761d4ULL
,
728 0x0aa3cedab7676dd0ULL
, 0xb5d34433a4229786ULL
, 0x6755d7199be5827eULL
,
729 0x64eb01c9238eeaadULL
, 0xc9a1bb342ed31afdULL
, 0xdf2e55f68da47b29ULL
,
730 0x90cd9da0f0c05030ULL
, 0xa188c59ad7ec4d3bULL
, 0xfa308c65d946bc9fULL
,
731 0xd286932a3fc715f8ULL
, 0x68297eaef93f57c6ULL
, 0x79ad986a5f4c3513ULL
,
732 0x123a30141e180a06ULL
, 0x1b27281e11140f05ULL
, 0x613466a4f63352c5ULL
,
733 0x77bb886655443311ULL
, 0x58069f2fb6c19977ULL
, 0x6943c71591ed847cULL
,
734 0x7b79f7018ff58e7aULL
, 0x756fe70d85fd8878ULL
, 0x82f7adb4eed85a36ULL
,
735 0x54c4e0486c70241cULL
, 0xaf9ed596dde44b39ULL
, 0x9219f2cb2079eb59ULL
,
736 0x48e8c05078602818ULL
, 0xbf708ae91345fa56ULL
, 0x3e39f18d45f6c8b3ULL
,
737 0x3724e9874afacdb0ULL
, 0xfc513dd8b4906c24ULL
, 0xe07d1dc0a0806020ULL
,
738 0x3932f98b40f2cbb2ULL
, 0xd94fe44be072ab92ULL
, 0x4e8971ed15b6f8a3ULL
,
739 0x7a134ebae7275dc0ULL
, 0xc1d61a85490dcc44ULL
, 0x33913751f795a662ULL
,
740 0x70b0806050403010ULL
, 0x2b08c99f5eeac1b4ULL
, 0xbbc5543fae2a9184ULL
,
741 0xd4e722975211c543ULL
, 0xde44ec4de576a893ULL
, 0x74055eb6ed2f5bc2ULL
,
742 0xebb46aa17f35de4aULL
, 0x145b81a973cedabdULL
, 0x8a800c0589068c8fULL
,
743 0xc30275ee99b4772dULL
, 0x135089af76cad9bcULL
, 0xf32d946fd64ab99cULL
,
744 0x0bc97761dfb5be6aULL
, 0xddfa3a9d5d1dc040ULL
, 0x577a3698d41b4ccfULL
,
745 0x498279eb10b2fba2ULL
, 0xa7e97427ba3a9d80ULL
, 0xf09342bf6e21d14fULL
,
746 0x5dd9f842637c211fULL
, 0x4c5d1e86c50f43caULL
, 0x71da39db3892e3aaULL
,
747 0xd3ec2a915715c642ULL
750 static const u64 c
[KHAZAD_ROUNDS
+ 1] = {
751 0xba542f7453d3d24dULL
, 0x50ac8dbf70529a4cULL
, 0xead597d133515ba6ULL
,
752 0xde48a899db32b7fcULL
, 0xe39e919be2bb416eULL
, 0xa5cb6b95a1f3b102ULL
,
753 0xccc41d14c363da5dULL
, 0x5fdc7dcd7f5a6c5cULL
, 0xf726ffede89d6f8eULL
756 static int khazad_setkey(struct crypto_tfm
*tfm
, const u8
*in_key
,
757 unsigned int key_len
)
759 struct khazad_ctx
*ctx
= crypto_tfm_ctx(tfm
);
760 const __be32
*key
= (const __be32
*)in_key
;
765 /* key is supposed to be 32-bit aligned */
766 K2
= ((u64
)be32_to_cpu(key
[0]) << 32) | be32_to_cpu(key
[1]);
767 K1
= ((u64
)be32_to_cpu(key
[2]) << 32) | be32_to_cpu(key
[3]);
769 /* setup the encrypt key */
770 for (r
= 0; r
<= KHAZAD_ROUNDS
; r
++) {
771 ctx
->E
[r
] = T0
[(int)(K1
>> 56) ] ^
772 T1
[(int)(K1
>> 48) & 0xff] ^
773 T2
[(int)(K1
>> 40) & 0xff] ^
774 T3
[(int)(K1
>> 32) & 0xff] ^
775 T4
[(int)(K1
>> 24) & 0xff] ^
776 T5
[(int)(K1
>> 16) & 0xff] ^
777 T6
[(int)(K1
>> 8) & 0xff] ^
778 T7
[(int)(K1
) & 0xff] ^
783 /* Setup the decrypt key */
784 ctx
->D
[0] = ctx
->E
[KHAZAD_ROUNDS
];
785 for (r
= 1; r
< KHAZAD_ROUNDS
; r
++) {
786 K1
= ctx
->E
[KHAZAD_ROUNDS
- r
];
787 ctx
->D
[r
] = T0
[(int)S
[(int)(K1
>> 56) ] & 0xff] ^
788 T1
[(int)S
[(int)(K1
>> 48) & 0xff] & 0xff] ^
789 T2
[(int)S
[(int)(K1
>> 40) & 0xff] & 0xff] ^
790 T3
[(int)S
[(int)(K1
>> 32) & 0xff] & 0xff] ^
791 T4
[(int)S
[(int)(K1
>> 24) & 0xff] & 0xff] ^
792 T5
[(int)S
[(int)(K1
>> 16) & 0xff] & 0xff] ^
793 T6
[(int)S
[(int)(K1
>> 8) & 0xff] & 0xff] ^
794 T7
[(int)S
[(int)(K1
) & 0xff] & 0xff];
796 ctx
->D
[KHAZAD_ROUNDS
] = ctx
->E
[0];
802 static void khazad_crypt(const u64 roundKey
[KHAZAD_ROUNDS
+ 1],
803 u8
*ciphertext
, const u8
*plaintext
)
805 const __be64
*src
= (const __be64
*)plaintext
;
806 __be64
*dst
= (__be64
*)ciphertext
;
810 state
= be64_to_cpu(*src
) ^ roundKey
[0];
812 for (r
= 1; r
< KHAZAD_ROUNDS
; r
++) {
813 state
= T0
[(int)(state
>> 56) ] ^
814 T1
[(int)(state
>> 48) & 0xff] ^
815 T2
[(int)(state
>> 40) & 0xff] ^
816 T3
[(int)(state
>> 32) & 0xff] ^
817 T4
[(int)(state
>> 24) & 0xff] ^
818 T5
[(int)(state
>> 16) & 0xff] ^
819 T6
[(int)(state
>> 8) & 0xff] ^
820 T7
[(int)(state
) & 0xff] ^
824 state
= (T0
[(int)(state
>> 56) ] & 0xff00000000000000ULL
) ^
825 (T1
[(int)(state
>> 48) & 0xff] & 0x00ff000000000000ULL
) ^
826 (T2
[(int)(state
>> 40) & 0xff] & 0x0000ff0000000000ULL
) ^
827 (T3
[(int)(state
>> 32) & 0xff] & 0x000000ff00000000ULL
) ^
828 (T4
[(int)(state
>> 24) & 0xff] & 0x00000000ff000000ULL
) ^
829 (T5
[(int)(state
>> 16) & 0xff] & 0x0000000000ff0000ULL
) ^
830 (T6
[(int)(state
>> 8) & 0xff] & 0x000000000000ff00ULL
) ^
831 (T7
[(int)(state
) & 0xff] & 0x00000000000000ffULL
) ^
832 roundKey
[KHAZAD_ROUNDS
];
834 *dst
= cpu_to_be64(state
);
837 static void khazad_encrypt(struct crypto_tfm
*tfm
, u8
*dst
, const u8
*src
)
839 struct khazad_ctx
*ctx
= crypto_tfm_ctx(tfm
);
840 khazad_crypt(ctx
->E
, dst
, src
);
843 static void khazad_decrypt(struct crypto_tfm
*tfm
, u8
*dst
, const u8
*src
)
845 struct khazad_ctx
*ctx
= crypto_tfm_ctx(tfm
);
846 khazad_crypt(ctx
->D
, dst
, src
);
849 static struct crypto_alg khazad_alg
= {
850 .cra_name
= "khazad",
851 .cra_driver_name
= "khazad-generic",
852 .cra_flags
= CRYPTO_ALG_TYPE_CIPHER
,
853 .cra_blocksize
= KHAZAD_BLOCK_SIZE
,
854 .cra_ctxsize
= sizeof (struct khazad_ctx
),
856 .cra_module
= THIS_MODULE
,
857 .cra_u
= { .cipher
= {
858 .cia_min_keysize
= KHAZAD_KEY_SIZE
,
859 .cia_max_keysize
= KHAZAD_KEY_SIZE
,
860 .cia_setkey
= khazad_setkey
,
861 .cia_encrypt
= khazad_encrypt
,
862 .cia_decrypt
= khazad_decrypt
} }
865 static int __init
khazad_mod_init(void)
869 ret
= crypto_register_alg(&khazad_alg
);
873 static void __exit
khazad_mod_fini(void)
875 crypto_unregister_alg(&khazad_alg
);
879 subsys_initcall(khazad_mod_init
);
880 module_exit(khazad_mod_fini
);
882 MODULE_LICENSE("GPL");
883 MODULE_DESCRIPTION("Khazad Cryptographic Algorithm");
884 MODULE_ALIAS_CRYPTO("khazad");