11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * Cryptographic API. 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Khazad Algorithm 51da177e4SLinus Torvalds * 61da177e4SLinus Torvalds * The Khazad algorithm was developed by Paulo S. L. M. Barreto and 71da177e4SLinus Torvalds * Vincent Rijmen. It was a finalist in the NESSIE encryption contest. 81da177e4SLinus Torvalds * 91da177e4SLinus Torvalds * The original authors have disclaimed all copyright interest in this 101da177e4SLinus Torvalds * code and thus put it in the public domain. The subsequent authors 111da177e4SLinus Torvalds * have put this under the GNU General Public License. 121da177e4SLinus Torvalds * 131da177e4SLinus Torvalds * By Aaron Grothe ajgrothe@yahoo.com, August 1, 2004 141da177e4SLinus Torvalds * 151da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify 161da177e4SLinus Torvalds * it under the terms of the GNU General Public License as published by 171da177e4SLinus Torvalds * the Free Software Foundation; either version 2 of the License, or 181da177e4SLinus Torvalds * (at your option) any later version. 191da177e4SLinus Torvalds * 201da177e4SLinus Torvalds */ 211da177e4SLinus Torvalds 221da177e4SLinus Torvalds #include <linux/init.h> 231da177e4SLinus Torvalds #include <linux/module.h> 241da177e4SLinus Torvalds #include <linux/mm.h> 2506ace7a9SHerbert Xu #include <asm/byteorder.h> 261da177e4SLinus Torvalds #include <linux/crypto.h> 2706ace7a9SHerbert Xu #include <linux/types.h> 281da177e4SLinus Torvalds 291da177e4SLinus Torvalds #define KHAZAD_KEY_SIZE 16 301da177e4SLinus Torvalds #define KHAZAD_BLOCK_SIZE 8 311da177e4SLinus Torvalds #define KHAZAD_ROUNDS 8 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds struct khazad_ctx { 341da177e4SLinus Torvalds u64 E[KHAZAD_ROUNDS + 1]; 351da177e4SLinus Torvalds u64 D[KHAZAD_ROUNDS + 1]; 361da177e4SLinus Torvalds }; 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds static const u64 T0[256] = { 391da177e4SLinus Torvalds 0xbad3d268bbb96a01ULL, 0x54fc4d19e59a66b1ULL, 0x2f71bc93e26514cdULL, 401da177e4SLinus Torvalds 0x749ccdb925871b51ULL, 0x53f55102f7a257a4ULL, 0xd3686bb8d0d6be03ULL, 411da177e4SLinus Torvalds 0xd26b6fbdd6deb504ULL, 0x4dd72964b35285feULL, 0x50f05d0dfdba4aadULL, 421da177e4SLinus Torvalds 0xace98a26cf09e063ULL, 0x8d8a0e83091c9684ULL, 0xbfdcc679a5914d1aULL, 431da177e4SLinus Torvalds 0x7090ddad3da7374dULL, 0x52f65507f1aa5ca3ULL, 0x9ab352c87ba417e1ULL, 441da177e4SLinus Torvalds 0x4cd42d61b55a8ef9ULL, 0xea238f65460320acULL, 0xd56273a6c4e68411ULL, 451da177e4SLinus Torvalds 0x97a466f155cc68c2ULL, 0xd16e63b2dcc6a80dULL, 0x3355ccffaa85d099ULL, 461da177e4SLinus Torvalds 0x51f35908fbb241aaULL, 0x5bed712ac7e20f9cULL, 0xa6f7a204f359ae55ULL, 471da177e4SLinus Torvalds 0xde7f5f81febec120ULL, 0x48d83d75ad7aa2e5ULL, 0xa8e59a32d729cc7fULL, 481da177e4SLinus Torvalds 0x99b65ec771bc0ae8ULL, 0xdb704b90e096e63bULL, 0x3256c8faac8ddb9eULL, 491da177e4SLinus Torvalds 0xb7c4e65195d11522ULL, 0xfc19d72b32b3aaceULL, 0xe338ab48704b7393ULL, 501da177e4SLinus Torvalds 0x9ebf42dc63843bfdULL, 0x91ae7eef41fc52d0ULL, 0x9bb056cd7dac1ce6ULL, 511da177e4SLinus Torvalds 0xe23baf4d76437894ULL, 0xbbd0d66dbdb16106ULL, 0x41c319589b32f1daULL, 521da177e4SLinus Torvalds 0x6eb2a5cb7957e517ULL, 0xa5f2ae0bf941b35cULL, 0xcb400bc08016564bULL, 531da177e4SLinus Torvalds 0x6bbdb1da677fc20cULL, 0x95a26efb59dc7eccULL, 0xa1febe1fe1619f40ULL, 541da177e4SLinus Torvalds 0xf308eb1810cbc3e3ULL, 0xb1cefe4f81e12f30ULL, 0x0206080a0c10160eULL, 551da177e4SLinus Torvalds 0xcc4917db922e675eULL, 0xc45137f3a26e3f66ULL, 0x1d2774694ee8cf53ULL, 561da177e4SLinus Torvalds 0x143c504478a09c6cULL, 0xc3582be8b0560e73ULL, 0x63a591f2573f9a34ULL, 571da177e4SLinus Torvalds 0xda734f95e69eed3cULL, 0x5de76934d3d2358eULL, 0x5fe1613edfc22380ULL, 581da177e4SLinus Torvalds 0xdc79578bf2aed72eULL, 0x7d87e99413cf486eULL, 0xcd4a13de94266c59ULL, 591da177e4SLinus Torvalds 0x7f81e19e1fdf5e60ULL, 0x5aee752fc1ea049bULL, 0x6cb4adc17547f319ULL, 601da177e4SLinus Torvalds 0x5ce46d31d5da3e89ULL, 0xf704fb0c08ebefffULL, 0x266a98bed42d47f2ULL, 611da177e4SLinus Torvalds 0xff1cdb2438abb7c7ULL, 0xed2a937e543b11b9ULL, 0xe825876f4a1336a2ULL, 621da177e4SLinus Torvalds 0x9dba4ed3699c26f4ULL, 0x6fb1a1ce7f5fee10ULL, 0x8e8f028c03048b8dULL, 631da177e4SLinus Torvalds 0x192b647d56c8e34fULL, 0xa0fdba1ae7699447ULL, 0xf00de7171ad3deeaULL, 641da177e4SLinus Torvalds 0x89861e97113cba98ULL, 0x0f113c332278692dULL, 0x07091c1b12383115ULL, 651da177e4SLinus Torvalds 0xafec8629c511fd6aULL, 0xfb10cb30208b9bdbULL, 0x0818202830405838ULL, 661da177e4SLinus Torvalds 0x153f54417ea8976bULL, 0x0d1734392e687f23ULL, 0x040c101418202c1cULL, 671da177e4SLinus Torvalds 0x0103040506080b07ULL, 0x64ac8de94507ab21ULL, 0xdf7c5b84f8b6ca27ULL, 681da177e4SLinus Torvalds 0x769ac5b329970d5fULL, 0x798bf9800bef6472ULL, 0xdd7a538ef4a6dc29ULL, 691da177e4SLinus Torvalds 0x3d47f4c98ef5b2b3ULL, 0x163a584e74b08a62ULL, 0x3f41fcc382e5a4bdULL, 701da177e4SLinus Torvalds 0x3759dcebb2a5fc85ULL, 0x6db7a9c4734ff81eULL, 0x3848e0d890dd95a8ULL, 711da177e4SLinus Torvalds 0xb9d6de67b1a17708ULL, 0x7395d1a237bf2a44ULL, 0xe926836a4c1b3da5ULL, 721da177e4SLinus Torvalds 0x355fd4e1beb5ea8bULL, 0x55ff491ce3926db6ULL, 0x7193d9a83baf3c4aULL, 731da177e4SLinus Torvalds 0x7b8df18a07ff727cULL, 0x8c890a860f149d83ULL, 0x7296d5a731b72143ULL, 741da177e4SLinus Torvalds 0x88851a921734b19fULL, 0xf607ff090ee3e4f8ULL, 0x2a7ea882fc4d33d6ULL, 751da177e4SLinus Torvalds 0x3e42f8c684edafbaULL, 0x5ee2653bd9ca2887ULL, 0x27699cbbd2254cf5ULL, 761da177e4SLinus Torvalds 0x46ca0543890ac0cfULL, 0x0c14303c28607424ULL, 0x65af89ec430fa026ULL, 771da177e4SLinus Torvalds 0x68b8bdd56d67df05ULL, 0x61a399f85b2f8c3aULL, 0x03050c0f0a181d09ULL, 781da177e4SLinus Torvalds 0xc15e23e2bc46187dULL, 0x57f94116ef827bb8ULL, 0xd6677fa9cefe9918ULL, 791da177e4SLinus Torvalds 0xd976439aec86f035ULL, 0x58e87d25cdfa1295ULL, 0xd875479fea8efb32ULL, 801da177e4SLinus Torvalds 0x66aa85e34917bd2fULL, 0xd7647bacc8f6921fULL, 0x3a4ee8d29ccd83a6ULL, 811da177e4SLinus Torvalds 0xc84507cf8a0e4b42ULL, 0x3c44f0cc88fdb9b4ULL, 0xfa13cf35268390dcULL, 821da177e4SLinus Torvalds 0x96a762f453c463c5ULL, 0xa7f4a601f551a552ULL, 0x98b55ac277b401efULL, 831da177e4SLinus Torvalds 0xec29977b52331abeULL, 0xb8d5da62b7a97c0fULL, 0xc7543bfca876226fULL, 841da177e4SLinus Torvalds 0xaeef822cc319f66dULL, 0x69bbb9d06b6fd402ULL, 0x4bdd317aa762bfecULL, 851da177e4SLinus Torvalds 0xabe0963ddd31d176ULL, 0xa9e69e37d121c778ULL, 0x67a981e64f1fb628ULL, 861da177e4SLinus Torvalds 0x0a1e28223c504e36ULL, 0x47c901468f02cbc8ULL, 0xf20bef1d16c3c8e4ULL, 871da177e4SLinus Torvalds 0xb5c2ee5b99c1032cULL, 0x226688aacc0d6beeULL, 0xe532b356647b4981ULL, 881da177e4SLinus Torvalds 0xee2f9f715e230cb0ULL, 0xbedfc27ca399461dULL, 0x2b7dac87fa4538d1ULL, 891da177e4SLinus Torvalds 0x819e3ebf217ce2a0ULL, 0x1236485a6c90a67eULL, 0x839836b52d6cf4aeULL, 901da177e4SLinus Torvalds 0x1b2d6c775ad8f541ULL, 0x0e1238362470622aULL, 0x23658cafca0560e9ULL, 911da177e4SLinus Torvalds 0xf502f30604fbf9f1ULL, 0x45cf094c8312ddc6ULL, 0x216384a5c61576e7ULL, 921da177e4SLinus Torvalds 0xce4f1fd19e3e7150ULL, 0x49db3970ab72a9e2ULL, 0x2c74b09ce87d09c4ULL, 931da177e4SLinus Torvalds 0xf916c33a2c9b8dd5ULL, 0xe637bf596e635488ULL, 0xb6c7e25493d91e25ULL, 941da177e4SLinus Torvalds 0x2878a088f05d25d8ULL, 0x17395c4b72b88165ULL, 0x829b32b02b64ffa9ULL, 951da177e4SLinus Torvalds 0x1a2e68725cd0fe46ULL, 0x8b80169d1d2cac96ULL, 0xfe1fdf213ea3bcc0ULL, 961da177e4SLinus Torvalds 0x8a8312981b24a791ULL, 0x091b242d3648533fULL, 0xc94603ca8c064045ULL, 971da177e4SLinus Torvalds 0x879426a1354cd8b2ULL, 0x4ed2256bb94a98f7ULL, 0xe13ea3427c5b659dULL, 981da177e4SLinus Torvalds 0x2e72b896e46d1fcaULL, 0xe431b75362734286ULL, 0xe03da7477a536e9aULL, 991da177e4SLinus Torvalds 0xeb208b60400b2babULL, 0x90ad7aea47f459d7ULL, 0xa4f1aa0eff49b85bULL, 1001da177e4SLinus Torvalds 0x1e22786644f0d25aULL, 0x85922eab395ccebcULL, 0x60a09dfd5d27873dULL, 1011da177e4SLinus Torvalds 0x0000000000000000ULL, 0x256f94b1de355afbULL, 0xf401f70302f3f2f6ULL, 1021da177e4SLinus Torvalds 0xf10ee3121cdbd5edULL, 0x94a16afe5fd475cbULL, 0x0b1d2c273a584531ULL, 1031da177e4SLinus Torvalds 0xe734bb5c686b5f8fULL, 0x759fc9bc238f1056ULL, 0xef2c9b74582b07b7ULL, 1041da177e4SLinus Torvalds 0x345cd0e4b8bde18cULL, 0x3153c4f5a695c697ULL, 0xd46177a3c2ee8f16ULL, 1051da177e4SLinus Torvalds 0xd06d67b7dacea30aULL, 0x869722a43344d3b5ULL, 0x7e82e59b19d75567ULL, 1061da177e4SLinus Torvalds 0xadea8e23c901eb64ULL, 0xfd1ad32e34bba1c9ULL, 0x297ba48df6552edfULL, 1071da177e4SLinus Torvalds 0x3050c0f0a09dcd90ULL, 0x3b4decd79ac588a1ULL, 0x9fbc46d9658c30faULL, 1081da177e4SLinus Torvalds 0xf815c73f2a9386d2ULL, 0xc6573ff9ae7e2968ULL, 0x13354c5f6a98ad79ULL, 1091da177e4SLinus Torvalds 0x060a181e14303a12ULL, 0x050f14111e28271bULL, 0xc55233f6a4663461ULL, 1101da177e4SLinus Torvalds 0x113344556688bb77ULL, 0x7799c1b62f9f0658ULL, 0x7c84ed9115c74369ULL, 1111da177e4SLinus Torvalds 0x7a8ef58f01f7797bULL, 0x7888fd850de76f75ULL, 0x365ad8eeb4adf782ULL, 1121da177e4SLinus Torvalds 0x1c24706c48e0c454ULL, 0x394be4dd96d59eafULL, 0x59eb7920cbf21992ULL, 1131da177e4SLinus Torvalds 0x1828607850c0e848ULL, 0x56fa4513e98a70bfULL, 0xb3c8f6458df1393eULL, 1141da177e4SLinus Torvalds 0xb0cdfa4a87e92437ULL, 0x246c90b4d83d51fcULL, 0x206080a0c01d7de0ULL, 1151da177e4SLinus Torvalds 0xb2cbf2408bf93239ULL, 0x92ab72e04be44fd9ULL, 0xa3f8b615ed71894eULL, 1161da177e4SLinus Torvalds 0xc05d27e7ba4e137aULL, 0x44cc0d49851ad6c1ULL, 0x62a695f751379133ULL, 1171da177e4SLinus Torvalds 0x103040506080b070ULL, 0xb4c1ea5e9fc9082bULL, 0x84912aae3f54c5bbULL, 1181da177e4SLinus Torvalds 0x43c511529722e7d4ULL, 0x93a876e54dec44deULL, 0xc25b2fedb65e0574ULL, 1191da177e4SLinus Torvalds 0x4ade357fa16ab4ebULL, 0xbddace73a9815b14ULL, 0x8f8c0689050c808aULL, 1201da177e4SLinus Torvalds 0x2d77b499ee7502c3ULL, 0xbcd9ca76af895013ULL, 0x9cb94ad66f942df3ULL, 1211da177e4SLinus Torvalds 0x6abeb5df6177c90bULL, 0x40c01d5d9d3afaddULL, 0xcf4c1bd498367a57ULL, 1221da177e4SLinus Torvalds 0xa2fbb210eb798249ULL, 0x809d3aba2774e9a7ULL, 0x4fd1216ebf4293f0ULL, 1231da177e4SLinus Torvalds 0x1f217c6342f8d95dULL, 0xca430fc5861e5d4cULL, 0xaae39238db39da71ULL, 1241da177e4SLinus Torvalds 0x42c61557912aecd3ULL 1251da177e4SLinus Torvalds }; 1261da177e4SLinus Torvalds 1271da177e4SLinus Torvalds static const u64 T1[256] = { 1281da177e4SLinus Torvalds 0xd3ba68d2b9bb016aULL, 0xfc54194d9ae5b166ULL, 0x712f93bc65e2cd14ULL, 1291da177e4SLinus Torvalds 0x9c74b9cd8725511bULL, 0xf5530251a2f7a457ULL, 0x68d3b86bd6d003beULL, 1301da177e4SLinus Torvalds 0x6bd2bd6fded604b5ULL, 0xd74d642952b3fe85ULL, 0xf0500d5dbafdad4aULL, 1311da177e4SLinus Torvalds 0xe9ac268a09cf63e0ULL, 0x8a8d830e1c098496ULL, 0xdcbf79c691a51a4dULL, 1321da177e4SLinus Torvalds 0x9070addda73d4d37ULL, 0xf6520755aaf1a35cULL, 0xb39ac852a47be117ULL, 1331da177e4SLinus Torvalds 0xd44c612d5ab5f98eULL, 0x23ea658f0346ac20ULL, 0x62d5a673e6c41184ULL, 1341da177e4SLinus Torvalds 0xa497f166cc55c268ULL, 0x6ed1b263c6dc0da8ULL, 0x5533ffcc85aa99d0ULL, 1351da177e4SLinus Torvalds 0xf3510859b2fbaa41ULL, 0xed5b2a71e2c79c0fULL, 0xf7a604a259f355aeULL, 1361da177e4SLinus Torvalds 0x7fde815fbefe20c1ULL, 0xd848753d7aade5a2ULL, 0xe5a8329a29d77fccULL, 1371da177e4SLinus Torvalds 0xb699c75ebc71e80aULL, 0x70db904b96e03be6ULL, 0x5632fac88dac9edbULL, 1381da177e4SLinus Torvalds 0xc4b751e6d1952215ULL, 0x19fc2bd7b332ceaaULL, 0x38e348ab4b709373ULL, 1391da177e4SLinus Torvalds 0xbf9edc428463fd3bULL, 0xae91ef7efc41d052ULL, 0xb09bcd56ac7de61cULL, 1401da177e4SLinus Torvalds 0x3be24daf43769478ULL, 0xd0bb6dd6b1bd0661ULL, 0xc3415819329bdaf1ULL, 1411da177e4SLinus Torvalds 0xb26ecba5577917e5ULL, 0xf2a50bae41f95cb3ULL, 0x40cbc00b16804b56ULL, 1421da177e4SLinus Torvalds 0xbd6bdab17f670cc2ULL, 0xa295fb6edc59cc7eULL, 0xfea11fbe61e1409fULL, 1431da177e4SLinus Torvalds 0x08f318ebcb10e3c3ULL, 0xceb14ffee181302fULL, 0x06020a08100c0e16ULL, 1441da177e4SLinus Torvalds 0x49ccdb172e925e67ULL, 0x51c4f3376ea2663fULL, 0x271d6974e84e53cfULL, 1451da177e4SLinus Torvalds 0x3c144450a0786c9cULL, 0x58c3e82b56b0730eULL, 0xa563f2913f57349aULL, 1461da177e4SLinus Torvalds 0x73da954f9ee63cedULL, 0xe75d3469d2d38e35ULL, 0xe15f3e61c2df8023ULL, 1471da177e4SLinus Torvalds 0x79dc8b57aef22ed7ULL, 0x877d94e9cf136e48ULL, 0x4acdde132694596cULL, 1481da177e4SLinus Torvalds 0x817f9ee1df1f605eULL, 0xee5a2f75eac19b04ULL, 0xb46cc1ad477519f3ULL, 1491da177e4SLinus Torvalds 0xe45c316ddad5893eULL, 0x04f70cfbeb08ffefULL, 0x6a26be982dd4f247ULL, 1501da177e4SLinus Torvalds 0x1cff24dbab38c7b7ULL, 0x2aed7e933b54b911ULL, 0x25e86f87134aa236ULL, 1511da177e4SLinus Torvalds 0xba9dd34e9c69f426ULL, 0xb16fcea15f7f10eeULL, 0x8f8e8c0204038d8bULL, 1521da177e4SLinus Torvalds 0x2b197d64c8564fe3ULL, 0xfda01aba69e74794ULL, 0x0df017e7d31aeadeULL, 1531da177e4SLinus Torvalds 0x8689971e3c1198baULL, 0x110f333c78222d69ULL, 0x09071b1c38121531ULL, 1541da177e4SLinus Torvalds 0xecaf298611c56afdULL, 0x10fb30cb8b20db9bULL, 0x1808282040303858ULL, 1551da177e4SLinus Torvalds 0x3f154154a87e6b97ULL, 0x170d3934682e237fULL, 0x0c04141020181c2cULL, 1561da177e4SLinus Torvalds 0x030105040806070bULL, 0xac64e98d074521abULL, 0x7cdf845bb6f827caULL, 1571da177e4SLinus Torvalds 0x9a76b3c597295f0dULL, 0x8b7980f9ef0b7264ULL, 0x7add8e53a6f429dcULL, 1581da177e4SLinus Torvalds 0x473dc9f4f58eb3b2ULL, 0x3a164e58b074628aULL, 0x413fc3fce582bda4ULL, 1591da177e4SLinus Torvalds 0x5937ebdca5b285fcULL, 0xb76dc4a94f731ef8ULL, 0x4838d8e0dd90a895ULL, 1601da177e4SLinus Torvalds 0xd6b967dea1b10877ULL, 0x9573a2d1bf37442aULL, 0x26e96a831b4ca53dULL, 1611da177e4SLinus Torvalds 0x5f35e1d4b5be8beaULL, 0xff551c4992e3b66dULL, 0x9371a8d9af3b4a3cULL, 1621da177e4SLinus Torvalds 0x8d7b8af1ff077c72ULL, 0x898c860a140f839dULL, 0x9672a7d5b7314321ULL, 1631da177e4SLinus Torvalds 0x8588921a34179fb1ULL, 0x07f609ffe30ef8e4ULL, 0x7e2a82a84dfcd633ULL, 1641da177e4SLinus Torvalds 0x423ec6f8ed84baafULL, 0xe25e3b65cad98728ULL, 0x6927bb9c25d2f54cULL, 1651da177e4SLinus Torvalds 0xca4643050a89cfc0ULL, 0x140c3c3060282474ULL, 0xaf65ec890f4326a0ULL, 1661da177e4SLinus Torvalds 0xb868d5bd676d05dfULL, 0xa361f8992f5b3a8cULL, 0x05030f0c180a091dULL, 1671da177e4SLinus Torvalds 0x5ec1e22346bc7d18ULL, 0xf957164182efb87bULL, 0x67d6a97ffece1899ULL, 1681da177e4SLinus Torvalds 0x76d99a4386ec35f0ULL, 0xe858257dfacd9512ULL, 0x75d89f478eea32fbULL, 1691da177e4SLinus Torvalds 0xaa66e38517492fbdULL, 0x64d7ac7bf6c81f92ULL, 0x4e3ad2e8cd9ca683ULL, 1701da177e4SLinus Torvalds 0x45c8cf070e8a424bULL, 0x443cccf0fd88b4b9ULL, 0x13fa35cf8326dc90ULL, 1711da177e4SLinus Torvalds 0xa796f462c453c563ULL, 0xf4a701a651f552a5ULL, 0xb598c25ab477ef01ULL, 1721da177e4SLinus Torvalds 0x29ec7b973352be1aULL, 0xd5b862daa9b70f7cULL, 0x54c7fc3b76a86f22ULL, 1731da177e4SLinus Torvalds 0xefae2c8219c36df6ULL, 0xbb69d0b96f6b02d4ULL, 0xdd4b7a3162a7ecbfULL, 1741da177e4SLinus Torvalds 0xe0ab3d9631dd76d1ULL, 0xe6a9379e21d178c7ULL, 0xa967e6811f4f28b6ULL, 1751da177e4SLinus Torvalds 0x1e0a2228503c364eULL, 0xc9474601028fc8cbULL, 0x0bf21defc316e4c8ULL, 1761da177e4SLinus Torvalds 0xc2b55beec1992c03ULL, 0x6622aa880dccee6bULL, 0x32e556b37b648149ULL, 1771da177e4SLinus Torvalds 0x2fee719f235eb00cULL, 0xdfbe7cc299a31d46ULL, 0x7d2b87ac45fad138ULL, 1781da177e4SLinus Torvalds 0x9e81bf3e7c21a0e2ULL, 0x36125a48906c7ea6ULL, 0x9883b5366c2daef4ULL, 1791da177e4SLinus Torvalds 0x2d1b776cd85a41f5ULL, 0x120e363870242a62ULL, 0x6523af8c05cae960ULL, 1801da177e4SLinus Torvalds 0x02f506f3fb04f1f9ULL, 0xcf454c091283c6ddULL, 0x6321a58415c6e776ULL, 1811da177e4SLinus Torvalds 0x4fced11f3e9e5071ULL, 0xdb49703972abe2a9ULL, 0x742c9cb07de8c409ULL, 1821da177e4SLinus Torvalds 0x16f93ac39b2cd58dULL, 0x37e659bf636e8854ULL, 0xc7b654e2d993251eULL, 1831da177e4SLinus Torvalds 0x782888a05df0d825ULL, 0x39174b5cb8726581ULL, 0x9b82b032642ba9ffULL, 1841da177e4SLinus Torvalds 0x2e1a7268d05c46feULL, 0x808b9d162c1d96acULL, 0x1ffe21dfa33ec0bcULL, 1851da177e4SLinus Torvalds 0x838a9812241b91a7ULL, 0x1b092d2448363f53ULL, 0x46c9ca03068c4540ULL, 1861da177e4SLinus Torvalds 0x9487a1264c35b2d8ULL, 0xd24e6b254ab9f798ULL, 0x3ee142a35b7c9d65ULL, 1871da177e4SLinus Torvalds 0x722e96b86de4ca1fULL, 0x31e453b773628642ULL, 0x3de047a7537a9a6eULL, 1881da177e4SLinus Torvalds 0x20eb608b0b40ab2bULL, 0xad90ea7af447d759ULL, 0xf1a40eaa49ff5bb8ULL, 1891da177e4SLinus Torvalds 0x221e6678f0445ad2ULL, 0x9285ab2e5c39bcceULL, 0xa060fd9d275d3d87ULL, 1901da177e4SLinus Torvalds 0x0000000000000000ULL, 0x6f25b19435defb5aULL, 0x01f403f7f302f6f2ULL, 1911da177e4SLinus Torvalds 0x0ef112e3db1cedd5ULL, 0xa194fe6ad45fcb75ULL, 0x1d0b272c583a3145ULL, 1921da177e4SLinus Torvalds 0x34e75cbb6b688f5fULL, 0x9f75bcc98f235610ULL, 0x2cef749b2b58b707ULL, 1931da177e4SLinus Torvalds 0x5c34e4d0bdb88ce1ULL, 0x5331f5c495a697c6ULL, 0x61d4a377eec2168fULL, 1941da177e4SLinus Torvalds 0x6dd0b767ceda0aa3ULL, 0x9786a4224433b5d3ULL, 0x827e9be5d7196755ULL, 1951da177e4SLinus Torvalds 0xeaad238e01c964ebULL, 0x1afd2ed3bb34c9a1ULL, 0x7b298da455f6df2eULL, 1961da177e4SLinus Torvalds 0x5030f0c09da090cdULL, 0x4d3bd7ecc59aa188ULL, 0xbc9fd9468c65fa30ULL, 1971da177e4SLinus Torvalds 0x15f83fc7932ad286ULL, 0x57c6f93f7eae6829ULL, 0x35135f4c986a79adULL, 1981da177e4SLinus Torvalds 0x0a061e183014123aULL, 0x0f051114281e1b27ULL, 0x52c5f63366a46134ULL, 1991da177e4SLinus Torvalds 0x33115544886677bbULL, 0x9977b6c19f2f5806ULL, 0x847c91edc7156943ULL, 2001da177e4SLinus Torvalds 0x8e7a8ff5f7017b79ULL, 0x887885fde70d756fULL, 0x5a36eed8adb482f7ULL, 2011da177e4SLinus Torvalds 0x241c6c70e04854c4ULL, 0x4b39dde4d596af9eULL, 0xeb592079f2cb9219ULL, 2021da177e4SLinus Torvalds 0x28187860c05048e8ULL, 0xfa5613458ae9bf70ULL, 0xc8b345f6f18d3e39ULL, 2031da177e4SLinus Torvalds 0xcdb04afae9873724ULL, 0x6c24b4903dd8fc51ULL, 0x6020a0801dc0e07dULL, 2041da177e4SLinus Torvalds 0xcbb240f2f98b3932ULL, 0xab92e072e44bd94fULL, 0xf8a315b671ed4e89ULL, 2051da177e4SLinus Torvalds 0x5dc0e7274eba7a13ULL, 0xcc44490d1a85c1d6ULL, 0xa662f79537513391ULL, 2061da177e4SLinus Torvalds 0x30105040806070b0ULL, 0xc1b45eeac99f2b08ULL, 0x9184ae2a543fbbc5ULL, 2071da177e4SLinus Torvalds 0xc54352112297d4e7ULL, 0xa893e576ec4dde44ULL, 0x5bc2ed2f5eb67405ULL, 2081da177e4SLinus Torvalds 0xde4a7f356aa1ebb4ULL, 0xdabd73ce81a9145bULL, 0x8c8f89060c058a80ULL, 2091da177e4SLinus Torvalds 0x772d99b475eec302ULL, 0xd9bc76ca89af1350ULL, 0xb99cd64a946ff32dULL, 2101da177e4SLinus Torvalds 0xbe6adfb577610bc9ULL, 0xc0405d1d3a9dddfaULL, 0x4ccfd41b3698577aULL, 2111da177e4SLinus Torvalds 0xfba210b279eb4982ULL, 0x9d80ba3a7427a7e9ULL, 0xd14f6e2142bff093ULL, 2121da177e4SLinus Torvalds 0x211f637cf8425dd9ULL, 0x43cac50f1e864c5dULL, 0xe3aa389239db71daULL, 2131da177e4SLinus Torvalds 0xc64257152a91d3ecULL 2141da177e4SLinus Torvalds }; 2151da177e4SLinus Torvalds 2161da177e4SLinus Torvalds static const u64 T2[256] = { 2171da177e4SLinus Torvalds 0xd268bad36a01bbb9ULL, 0x4d1954fc66b1e59aULL, 0xbc932f7114cde265ULL, 2181da177e4SLinus Torvalds 0xcdb9749c1b512587ULL, 0x510253f557a4f7a2ULL, 0x6bb8d368be03d0d6ULL, 2191da177e4SLinus Torvalds 0x6fbdd26bb504d6deULL, 0x29644dd785feb352ULL, 0x5d0d50f04aadfdbaULL, 2201da177e4SLinus Torvalds 0x8a26ace9e063cf09ULL, 0x0e838d8a9684091cULL, 0xc679bfdc4d1aa591ULL, 2211da177e4SLinus Torvalds 0xddad7090374d3da7ULL, 0x550752f65ca3f1aaULL, 0x52c89ab317e17ba4ULL, 2221da177e4SLinus Torvalds 0x2d614cd48ef9b55aULL, 0x8f65ea2320ac4603ULL, 0x73a6d5628411c4e6ULL, 2231da177e4SLinus Torvalds 0x66f197a468c255ccULL, 0x63b2d16ea80ddcc6ULL, 0xccff3355d099aa85ULL, 2241da177e4SLinus Torvalds 0x590851f341aafbb2ULL, 0x712a5bed0f9cc7e2ULL, 0xa204a6f7ae55f359ULL, 2251da177e4SLinus Torvalds 0x5f81de7fc120febeULL, 0x3d7548d8a2e5ad7aULL, 0x9a32a8e5cc7fd729ULL, 2261da177e4SLinus Torvalds 0x5ec799b60ae871bcULL, 0x4b90db70e63be096ULL, 0xc8fa3256db9eac8dULL, 2271da177e4SLinus Torvalds 0xe651b7c4152295d1ULL, 0xd72bfc19aace32b3ULL, 0xab48e3387393704bULL, 2281da177e4SLinus Torvalds 0x42dc9ebf3bfd6384ULL, 0x7eef91ae52d041fcULL, 0x56cd9bb01ce67dacULL, 2291da177e4SLinus Torvalds 0xaf4de23b78947643ULL, 0xd66dbbd06106bdb1ULL, 0x195841c3f1da9b32ULL, 2301da177e4SLinus Torvalds 0xa5cb6eb2e5177957ULL, 0xae0ba5f2b35cf941ULL, 0x0bc0cb40564b8016ULL, 2311da177e4SLinus Torvalds 0xb1da6bbdc20c677fULL, 0x6efb95a27ecc59dcULL, 0xbe1fa1fe9f40e161ULL, 2321da177e4SLinus Torvalds 0xeb18f308c3e310cbULL, 0xfe4fb1ce2f3081e1ULL, 0x080a0206160e0c10ULL, 2331da177e4SLinus Torvalds 0x17dbcc49675e922eULL, 0x37f3c4513f66a26eULL, 0x74691d27cf534ee8ULL, 2341da177e4SLinus Torvalds 0x5044143c9c6c78a0ULL, 0x2be8c3580e73b056ULL, 0x91f263a59a34573fULL, 2351da177e4SLinus Torvalds 0x4f95da73ed3ce69eULL, 0x69345de7358ed3d2ULL, 0x613e5fe12380dfc2ULL, 2361da177e4SLinus Torvalds 0x578bdc79d72ef2aeULL, 0xe9947d87486e13cfULL, 0x13decd4a6c599426ULL, 2371da177e4SLinus Torvalds 0xe19e7f815e601fdfULL, 0x752f5aee049bc1eaULL, 0xadc16cb4f3197547ULL, 2381da177e4SLinus Torvalds 0x6d315ce43e89d5daULL, 0xfb0cf704efff08ebULL, 0x98be266a47f2d42dULL, 2391da177e4SLinus Torvalds 0xdb24ff1cb7c738abULL, 0x937eed2a11b9543bULL, 0x876fe82536a24a13ULL, 2401da177e4SLinus Torvalds 0x4ed39dba26f4699cULL, 0xa1ce6fb1ee107f5fULL, 0x028c8e8f8b8d0304ULL, 2411da177e4SLinus Torvalds 0x647d192be34f56c8ULL, 0xba1aa0fd9447e769ULL, 0xe717f00ddeea1ad3ULL, 2421da177e4SLinus Torvalds 0x1e978986ba98113cULL, 0x3c330f11692d2278ULL, 0x1c1b070931151238ULL, 2431da177e4SLinus Torvalds 0x8629afecfd6ac511ULL, 0xcb30fb109bdb208bULL, 0x2028081858383040ULL, 2441da177e4SLinus Torvalds 0x5441153f976b7ea8ULL, 0x34390d177f232e68ULL, 0x1014040c2c1c1820ULL, 2451da177e4SLinus Torvalds 0x040501030b070608ULL, 0x8de964acab214507ULL, 0x5b84df7cca27f8b6ULL, 2461da177e4SLinus Torvalds 0xc5b3769a0d5f2997ULL, 0xf980798b64720befULL, 0x538edd7adc29f4a6ULL, 2471da177e4SLinus Torvalds 0xf4c93d47b2b38ef5ULL, 0x584e163a8a6274b0ULL, 0xfcc33f41a4bd82e5ULL, 2481da177e4SLinus Torvalds 0xdceb3759fc85b2a5ULL, 0xa9c46db7f81e734fULL, 0xe0d8384895a890ddULL, 2491da177e4SLinus Torvalds 0xde67b9d67708b1a1ULL, 0xd1a273952a4437bfULL, 0x836ae9263da54c1bULL, 2501da177e4SLinus Torvalds 0xd4e1355fea8bbeb5ULL, 0x491c55ff6db6e392ULL, 0xd9a871933c4a3bafULL, 2511da177e4SLinus Torvalds 0xf18a7b8d727c07ffULL, 0x0a868c899d830f14ULL, 0xd5a77296214331b7ULL, 2521da177e4SLinus Torvalds 0x1a928885b19f1734ULL, 0xff09f607e4f80ee3ULL, 0xa8822a7e33d6fc4dULL, 2531da177e4SLinus Torvalds 0xf8c63e42afba84edULL, 0x653b5ee22887d9caULL, 0x9cbb27694cf5d225ULL, 2541da177e4SLinus Torvalds 0x054346cac0cf890aULL, 0x303c0c1474242860ULL, 0x89ec65afa026430fULL, 2551da177e4SLinus Torvalds 0xbdd568b8df056d67ULL, 0x99f861a38c3a5b2fULL, 0x0c0f03051d090a18ULL, 2561da177e4SLinus Torvalds 0x23e2c15e187dbc46ULL, 0x411657f97bb8ef82ULL, 0x7fa9d6679918cefeULL, 2571da177e4SLinus Torvalds 0x439ad976f035ec86ULL, 0x7d2558e81295cdfaULL, 0x479fd875fb32ea8eULL, 2581da177e4SLinus Torvalds 0x85e366aabd2f4917ULL, 0x7bacd764921fc8f6ULL, 0xe8d23a4e83a69ccdULL, 2591da177e4SLinus Torvalds 0x07cfc8454b428a0eULL, 0xf0cc3c44b9b488fdULL, 0xcf35fa1390dc2683ULL, 2601da177e4SLinus Torvalds 0x62f496a763c553c4ULL, 0xa601a7f4a552f551ULL, 0x5ac298b501ef77b4ULL, 2611da177e4SLinus Torvalds 0x977bec291abe5233ULL, 0xda62b8d57c0fb7a9ULL, 0x3bfcc754226fa876ULL, 2621da177e4SLinus Torvalds 0x822caeeff66dc319ULL, 0xb9d069bbd4026b6fULL, 0x317a4bddbfeca762ULL, 2631da177e4SLinus Torvalds 0x963dabe0d176dd31ULL, 0x9e37a9e6c778d121ULL, 0x81e667a9b6284f1fULL, 2641da177e4SLinus Torvalds 0x28220a1e4e363c50ULL, 0x014647c9cbc88f02ULL, 0xef1df20bc8e416c3ULL, 2651da177e4SLinus Torvalds 0xee5bb5c2032c99c1ULL, 0x88aa22666beecc0dULL, 0xb356e5324981647bULL, 2661da177e4SLinus Torvalds 0x9f71ee2f0cb05e23ULL, 0xc27cbedf461da399ULL, 0xac872b7d38d1fa45ULL, 2671da177e4SLinus Torvalds 0x3ebf819ee2a0217cULL, 0x485a1236a67e6c90ULL, 0x36b58398f4ae2d6cULL, 2681da177e4SLinus Torvalds 0x6c771b2df5415ad8ULL, 0x38360e12622a2470ULL, 0x8caf236560e9ca05ULL, 2691da177e4SLinus Torvalds 0xf306f502f9f104fbULL, 0x094c45cfddc68312ULL, 0x84a5216376e7c615ULL, 2701da177e4SLinus Torvalds 0x1fd1ce4f71509e3eULL, 0x397049dba9e2ab72ULL, 0xb09c2c7409c4e87dULL, 2711da177e4SLinus Torvalds 0xc33af9168dd52c9bULL, 0xbf59e63754886e63ULL, 0xe254b6c71e2593d9ULL, 2721da177e4SLinus Torvalds 0xa088287825d8f05dULL, 0x5c4b1739816572b8ULL, 0x32b0829bffa92b64ULL, 2731da177e4SLinus Torvalds 0x68721a2efe465cd0ULL, 0x169d8b80ac961d2cULL, 0xdf21fe1fbcc03ea3ULL, 2741da177e4SLinus Torvalds 0x12988a83a7911b24ULL, 0x242d091b533f3648ULL, 0x03cac94640458c06ULL, 2751da177e4SLinus Torvalds 0x26a18794d8b2354cULL, 0x256b4ed298f7b94aULL, 0xa342e13e659d7c5bULL, 2761da177e4SLinus Torvalds 0xb8962e721fcae46dULL, 0xb753e43142866273ULL, 0xa747e03d6e9a7a53ULL, 2771da177e4SLinus Torvalds 0x8b60eb202bab400bULL, 0x7aea90ad59d747f4ULL, 0xaa0ea4f1b85bff49ULL, 2781da177e4SLinus Torvalds 0x78661e22d25a44f0ULL, 0x2eab8592cebc395cULL, 0x9dfd60a0873d5d27ULL, 2791da177e4SLinus Torvalds 0x0000000000000000ULL, 0x94b1256f5afbde35ULL, 0xf703f401f2f602f3ULL, 2801da177e4SLinus Torvalds 0xe312f10ed5ed1cdbULL, 0x6afe94a175cb5fd4ULL, 0x2c270b1d45313a58ULL, 2811da177e4SLinus Torvalds 0xbb5ce7345f8f686bULL, 0xc9bc759f1056238fULL, 0x9b74ef2c07b7582bULL, 2821da177e4SLinus Torvalds 0xd0e4345ce18cb8bdULL, 0xc4f53153c697a695ULL, 0x77a3d4618f16c2eeULL, 2831da177e4SLinus Torvalds 0x67b7d06da30adaceULL, 0x22a48697d3b53344ULL, 0xe59b7e82556719d7ULL, 2841da177e4SLinus Torvalds 0x8e23adeaeb64c901ULL, 0xd32efd1aa1c934bbULL, 0xa48d297b2edff655ULL, 2851da177e4SLinus Torvalds 0xc0f03050cd90a09dULL, 0xecd73b4d88a19ac5ULL, 0x46d99fbc30fa658cULL, 2861da177e4SLinus Torvalds 0xc73ff81586d22a93ULL, 0x3ff9c6572968ae7eULL, 0x4c5f1335ad796a98ULL, 2871da177e4SLinus Torvalds 0x181e060a3a121430ULL, 0x1411050f271b1e28ULL, 0x33f6c5523461a466ULL, 2881da177e4SLinus Torvalds 0x44551133bb776688ULL, 0xc1b6779906582f9fULL, 0xed917c84436915c7ULL, 2891da177e4SLinus Torvalds 0xf58f7a8e797b01f7ULL, 0xfd8578886f750de7ULL, 0xd8ee365af782b4adULL, 2901da177e4SLinus Torvalds 0x706c1c24c45448e0ULL, 0xe4dd394b9eaf96d5ULL, 0x792059eb1992cbf2ULL, 2911da177e4SLinus Torvalds 0x60781828e84850c0ULL, 0x451356fa70bfe98aULL, 0xf645b3c8393e8df1ULL, 2921da177e4SLinus Torvalds 0xfa4ab0cd243787e9ULL, 0x90b4246c51fcd83dULL, 0x80a020607de0c01dULL, 2931da177e4SLinus Torvalds 0xf240b2cb32398bf9ULL, 0x72e092ab4fd94be4ULL, 0xb615a3f8894eed71ULL, 2941da177e4SLinus Torvalds 0x27e7c05d137aba4eULL, 0x0d4944ccd6c1851aULL, 0x95f762a691335137ULL, 2951da177e4SLinus Torvalds 0x40501030b0706080ULL, 0xea5eb4c1082b9fc9ULL, 0x2aae8491c5bb3f54ULL, 2961da177e4SLinus Torvalds 0x115243c5e7d49722ULL, 0x76e593a844de4decULL, 0x2fedc25b0574b65eULL, 2971da177e4SLinus Torvalds 0x357f4adeb4eba16aULL, 0xce73bdda5b14a981ULL, 0x06898f8c808a050cULL, 2981da177e4SLinus Torvalds 0xb4992d7702c3ee75ULL, 0xca76bcd95013af89ULL, 0x4ad69cb92df36f94ULL, 2991da177e4SLinus Torvalds 0xb5df6abec90b6177ULL, 0x1d5d40c0fadd9d3aULL, 0x1bd4cf4c7a579836ULL, 3001da177e4SLinus Torvalds 0xb210a2fb8249eb79ULL, 0x3aba809de9a72774ULL, 0x216e4fd193f0bf42ULL, 3011da177e4SLinus Torvalds 0x7c631f21d95d42f8ULL, 0x0fc5ca435d4c861eULL, 0x9238aae3da71db39ULL, 3021da177e4SLinus Torvalds 0x155742c6ecd3912aULL 3031da177e4SLinus Torvalds }; 3041da177e4SLinus Torvalds 3051da177e4SLinus Torvalds static const u64 T3[256] = { 3061da177e4SLinus Torvalds 0x68d2d3ba016ab9bbULL, 0x194dfc54b1669ae5ULL, 0x93bc712fcd1465e2ULL, 3071da177e4SLinus Torvalds 0xb9cd9c74511b8725ULL, 0x0251f553a457a2f7ULL, 0xb86b68d303bed6d0ULL, 3081da177e4SLinus Torvalds 0xbd6f6bd204b5ded6ULL, 0x6429d74dfe8552b3ULL, 0x0d5df050ad4abafdULL, 3091da177e4SLinus Torvalds 0x268ae9ac63e009cfULL, 0x830e8a8d84961c09ULL, 0x79c6dcbf1a4d91a5ULL, 3101da177e4SLinus Torvalds 0xaddd90704d37a73dULL, 0x0755f652a35caaf1ULL, 0xc852b39ae117a47bULL, 3111da177e4SLinus Torvalds 0x612dd44cf98e5ab5ULL, 0x658f23eaac200346ULL, 0xa67362d51184e6c4ULL, 3121da177e4SLinus Torvalds 0xf166a497c268cc55ULL, 0xb2636ed10da8c6dcULL, 0xffcc553399d085aaULL, 3131da177e4SLinus Torvalds 0x0859f351aa41b2fbULL, 0x2a71ed5b9c0fe2c7ULL, 0x04a2f7a655ae59f3ULL, 3141da177e4SLinus Torvalds 0x815f7fde20c1befeULL, 0x753dd848e5a27aadULL, 0x329ae5a87fcc29d7ULL, 3151da177e4SLinus Torvalds 0xc75eb699e80abc71ULL, 0x904b70db3be696e0ULL, 0xfac856329edb8dacULL, 3161da177e4SLinus Torvalds 0x51e6c4b72215d195ULL, 0x2bd719fcceaab332ULL, 0x48ab38e393734b70ULL, 3171da177e4SLinus Torvalds 0xdc42bf9efd3b8463ULL, 0xef7eae91d052fc41ULL, 0xcd56b09be61cac7dULL, 3181da177e4SLinus Torvalds 0x4daf3be294784376ULL, 0x6dd6d0bb0661b1bdULL, 0x5819c341daf1329bULL, 3191da177e4SLinus Torvalds 0xcba5b26e17e55779ULL, 0x0baef2a55cb341f9ULL, 0xc00b40cb4b561680ULL, 3201da177e4SLinus Torvalds 0xdab1bd6b0cc27f67ULL, 0xfb6ea295cc7edc59ULL, 0x1fbefea1409f61e1ULL, 3211da177e4SLinus Torvalds 0x18eb08f3e3c3cb10ULL, 0x4ffeceb1302fe181ULL, 0x0a0806020e16100cULL, 3221da177e4SLinus Torvalds 0xdb1749cc5e672e92ULL, 0xf33751c4663f6ea2ULL, 0x6974271d53cfe84eULL, 3231da177e4SLinus Torvalds 0x44503c146c9ca078ULL, 0xe82b58c3730e56b0ULL, 0xf291a563349a3f57ULL, 3241da177e4SLinus Torvalds 0x954f73da3ced9ee6ULL, 0x3469e75d8e35d2d3ULL, 0x3e61e15f8023c2dfULL, 3251da177e4SLinus Torvalds 0x8b5779dc2ed7aef2ULL, 0x94e9877d6e48cf13ULL, 0xde134acd596c2694ULL, 3261da177e4SLinus Torvalds 0x9ee1817f605edf1fULL, 0x2f75ee5a9b04eac1ULL, 0xc1adb46c19f34775ULL, 3271da177e4SLinus Torvalds 0x316de45c893edad5ULL, 0x0cfb04f7ffefeb08ULL, 0xbe986a26f2472dd4ULL, 3281da177e4SLinus Torvalds 0x24db1cffc7b7ab38ULL, 0x7e932aedb9113b54ULL, 0x6f8725e8a236134aULL, 3291da177e4SLinus Torvalds 0xd34eba9df4269c69ULL, 0xcea1b16f10ee5f7fULL, 0x8c028f8e8d8b0403ULL, 3301da177e4SLinus Torvalds 0x7d642b194fe3c856ULL, 0x1abafda0479469e7ULL, 0x17e70df0eaded31aULL, 3311da177e4SLinus Torvalds 0x971e868998ba3c11ULL, 0x333c110f2d697822ULL, 0x1b1c090715313812ULL, 3321da177e4SLinus Torvalds 0x2986ecaf6afd11c5ULL, 0x30cb10fbdb9b8b20ULL, 0x2820180838584030ULL, 3331da177e4SLinus Torvalds 0x41543f156b97a87eULL, 0x3934170d237f682eULL, 0x14100c041c2c2018ULL, 3341da177e4SLinus Torvalds 0x05040301070b0806ULL, 0xe98dac6421ab0745ULL, 0x845b7cdf27cab6f8ULL, 3351da177e4SLinus Torvalds 0xb3c59a765f0d9729ULL, 0x80f98b797264ef0bULL, 0x8e537add29dca6f4ULL, 3361da177e4SLinus Torvalds 0xc9f4473db3b2f58eULL, 0x4e583a16628ab074ULL, 0xc3fc413fbda4e582ULL, 3371da177e4SLinus Torvalds 0xebdc593785fca5b2ULL, 0xc4a9b76d1ef84f73ULL, 0xd8e04838a895dd90ULL, 3381da177e4SLinus Torvalds 0x67ded6b90877a1b1ULL, 0xa2d19573442abf37ULL, 0x6a8326e9a53d1b4cULL, 3391da177e4SLinus Torvalds 0xe1d45f358beab5beULL, 0x1c49ff55b66d92e3ULL, 0xa8d993714a3caf3bULL, 3401da177e4SLinus Torvalds 0x8af18d7b7c72ff07ULL, 0x860a898c839d140fULL, 0xa7d596724321b731ULL, 3411da177e4SLinus Torvalds 0x921a85889fb13417ULL, 0x09ff07f6f8e4e30eULL, 0x82a87e2ad6334dfcULL, 3421da177e4SLinus Torvalds 0xc6f8423ebaafed84ULL, 0x3b65e25e8728cad9ULL, 0xbb9c6927f54c25d2ULL, 3431da177e4SLinus Torvalds 0x4305ca46cfc00a89ULL, 0x3c30140c24746028ULL, 0xec89af6526a00f43ULL, 3441da177e4SLinus Torvalds 0xd5bdb86805df676dULL, 0xf899a3613a8c2f5bULL, 0x0f0c0503091d180aULL, 3451da177e4SLinus Torvalds 0xe2235ec17d1846bcULL, 0x1641f957b87b82efULL, 0xa97f67d61899feceULL, 3461da177e4SLinus Torvalds 0x9a4376d935f086ecULL, 0x257de8589512facdULL, 0x9f4775d832fb8eeaULL, 3471da177e4SLinus Torvalds 0xe385aa662fbd1749ULL, 0xac7b64d71f92f6c8ULL, 0xd2e84e3aa683cd9cULL, 3481da177e4SLinus Torvalds 0xcf0745c8424b0e8aULL, 0xccf0443cb4b9fd88ULL, 0x35cf13fadc908326ULL, 3491da177e4SLinus Torvalds 0xf462a796c563c453ULL, 0x01a6f4a752a551f5ULL, 0xc25ab598ef01b477ULL, 3501da177e4SLinus Torvalds 0x7b9729ecbe1a3352ULL, 0x62dad5b80f7ca9b7ULL, 0xfc3b54c76f2276a8ULL, 3511da177e4SLinus Torvalds 0x2c82efae6df619c3ULL, 0xd0b9bb6902d46f6bULL, 0x7a31dd4becbf62a7ULL, 3521da177e4SLinus Torvalds 0x3d96e0ab76d131ddULL, 0x379ee6a978c721d1ULL, 0xe681a96728b61f4fULL, 3531da177e4SLinus Torvalds 0x22281e0a364e503cULL, 0x4601c947c8cb028fULL, 0x1def0bf2e4c8c316ULL, 3541da177e4SLinus Torvalds 0x5beec2b52c03c199ULL, 0xaa886622ee6b0dccULL, 0x56b332e581497b64ULL, 3551da177e4SLinus Torvalds 0x719f2feeb00c235eULL, 0x7cc2dfbe1d4699a3ULL, 0x87ac7d2bd13845faULL, 3561da177e4SLinus Torvalds 0xbf3e9e81a0e27c21ULL, 0x5a4836127ea6906cULL, 0xb5369883aef46c2dULL, 3571da177e4SLinus Torvalds 0x776c2d1b41f5d85aULL, 0x3638120e2a627024ULL, 0xaf8c6523e96005caULL, 3581da177e4SLinus Torvalds 0x06f302f5f1f9fb04ULL, 0x4c09cf45c6dd1283ULL, 0xa5846321e77615c6ULL, 3591da177e4SLinus Torvalds 0xd11f4fce50713e9eULL, 0x7039db49e2a972abULL, 0x9cb0742cc4097de8ULL, 3601da177e4SLinus Torvalds 0x3ac316f9d58d9b2cULL, 0x59bf37e68854636eULL, 0x54e2c7b6251ed993ULL, 3611da177e4SLinus Torvalds 0x88a07828d8255df0ULL, 0x4b5c39176581b872ULL, 0xb0329b82a9ff642bULL, 3621da177e4SLinus Torvalds 0x72682e1a46fed05cULL, 0x9d16808b96ac2c1dULL, 0x21df1ffec0bca33eULL, 3631da177e4SLinus Torvalds 0x9812838a91a7241bULL, 0x2d241b093f534836ULL, 0xca0346c94540068cULL, 3641da177e4SLinus Torvalds 0xa1269487b2d84c35ULL, 0x6b25d24ef7984ab9ULL, 0x42a33ee19d655b7cULL, 3651da177e4SLinus Torvalds 0x96b8722eca1f6de4ULL, 0x53b731e486427362ULL, 0x47a73de09a6e537aULL, 3661da177e4SLinus Torvalds 0x608b20ebab2b0b40ULL, 0xea7aad90d759f447ULL, 0x0eaaf1a45bb849ffULL, 3671da177e4SLinus Torvalds 0x6678221e5ad2f044ULL, 0xab2e9285bcce5c39ULL, 0xfd9da0603d87275dULL, 3681da177e4SLinus Torvalds 0x0000000000000000ULL, 0xb1946f25fb5a35deULL, 0x03f701f4f6f2f302ULL, 3691da177e4SLinus Torvalds 0x12e30ef1edd5db1cULL, 0xfe6aa194cb75d45fULL, 0x272c1d0b3145583aULL, 3701da177e4SLinus Torvalds 0x5cbb34e78f5f6b68ULL, 0xbcc99f7556108f23ULL, 0x749b2cefb7072b58ULL, 3711da177e4SLinus Torvalds 0xe4d05c348ce1bdb8ULL, 0xf5c4533197c695a6ULL, 0xa37761d4168feec2ULL, 3721da177e4SLinus Torvalds 0xb7676dd00aa3cedaULL, 0xa4229786b5d34433ULL, 0x9be5827e6755d719ULL, 3731da177e4SLinus Torvalds 0x238eeaad64eb01c9ULL, 0x2ed31afdc9a1bb34ULL, 0x8da47b29df2e55f6ULL, 3741da177e4SLinus Torvalds 0xf0c0503090cd9da0ULL, 0xd7ec4d3ba188c59aULL, 0xd946bc9ffa308c65ULL, 3751da177e4SLinus Torvalds 0x3fc715f8d286932aULL, 0xf93f57c668297eaeULL, 0x5f4c351379ad986aULL, 3761da177e4SLinus Torvalds 0x1e180a06123a3014ULL, 0x11140f051b27281eULL, 0xf63352c5613466a4ULL, 3771da177e4SLinus Torvalds 0x5544331177bb8866ULL, 0xb6c1997758069f2fULL, 0x91ed847c6943c715ULL, 3781da177e4SLinus Torvalds 0x8ff58e7a7b79f701ULL, 0x85fd8878756fe70dULL, 0xeed85a3682f7adb4ULL, 3791da177e4SLinus Torvalds 0x6c70241c54c4e048ULL, 0xdde44b39af9ed596ULL, 0x2079eb599219f2cbULL, 3801da177e4SLinus Torvalds 0x7860281848e8c050ULL, 0x1345fa56bf708ae9ULL, 0x45f6c8b33e39f18dULL, 3811da177e4SLinus Torvalds 0x4afacdb03724e987ULL, 0xb4906c24fc513dd8ULL, 0xa0806020e07d1dc0ULL, 3821da177e4SLinus Torvalds 0x40f2cbb23932f98bULL, 0xe072ab92d94fe44bULL, 0x15b6f8a34e8971edULL, 3831da177e4SLinus Torvalds 0xe7275dc07a134ebaULL, 0x490dcc44c1d61a85ULL, 0xf795a66233913751ULL, 3841da177e4SLinus Torvalds 0x5040301070b08060ULL, 0x5eeac1b42b08c99fULL, 0xae2a9184bbc5543fULL, 3851da177e4SLinus Torvalds 0x5211c543d4e72297ULL, 0xe576a893de44ec4dULL, 0xed2f5bc274055eb6ULL, 3861da177e4SLinus Torvalds 0x7f35de4aebb46aa1ULL, 0x73cedabd145b81a9ULL, 0x89068c8f8a800c05ULL, 3871da177e4SLinus Torvalds 0x99b4772dc30275eeULL, 0x76cad9bc135089afULL, 0xd64ab99cf32d946fULL, 3881da177e4SLinus Torvalds 0xdfb5be6a0bc97761ULL, 0x5d1dc040ddfa3a9dULL, 0xd41b4ccf577a3698ULL, 3891da177e4SLinus Torvalds 0x10b2fba2498279ebULL, 0xba3a9d80a7e97427ULL, 0x6e21d14ff09342bfULL, 3901da177e4SLinus Torvalds 0x637c211f5dd9f842ULL, 0xc50f43ca4c5d1e86ULL, 0x3892e3aa71da39dbULL, 3911da177e4SLinus Torvalds 0x5715c642d3ec2a91ULL 3921da177e4SLinus Torvalds }; 3931da177e4SLinus Torvalds 3941da177e4SLinus Torvalds static const u64 T4[256] = { 3951da177e4SLinus Torvalds 0xbbb96a01bad3d268ULL, 0xe59a66b154fc4d19ULL, 0xe26514cd2f71bc93ULL, 3961da177e4SLinus Torvalds 0x25871b51749ccdb9ULL, 0xf7a257a453f55102ULL, 0xd0d6be03d3686bb8ULL, 3971da177e4SLinus Torvalds 0xd6deb504d26b6fbdULL, 0xb35285fe4dd72964ULL, 0xfdba4aad50f05d0dULL, 3981da177e4SLinus Torvalds 0xcf09e063ace98a26ULL, 0x091c96848d8a0e83ULL, 0xa5914d1abfdcc679ULL, 3991da177e4SLinus Torvalds 0x3da7374d7090ddadULL, 0xf1aa5ca352f65507ULL, 0x7ba417e19ab352c8ULL, 4001da177e4SLinus Torvalds 0xb55a8ef94cd42d61ULL, 0x460320acea238f65ULL, 0xc4e68411d56273a6ULL, 4011da177e4SLinus Torvalds 0x55cc68c297a466f1ULL, 0xdcc6a80dd16e63b2ULL, 0xaa85d0993355ccffULL, 4021da177e4SLinus Torvalds 0xfbb241aa51f35908ULL, 0xc7e20f9c5bed712aULL, 0xf359ae55a6f7a204ULL, 4031da177e4SLinus Torvalds 0xfebec120de7f5f81ULL, 0xad7aa2e548d83d75ULL, 0xd729cc7fa8e59a32ULL, 4041da177e4SLinus Torvalds 0x71bc0ae899b65ec7ULL, 0xe096e63bdb704b90ULL, 0xac8ddb9e3256c8faULL, 4051da177e4SLinus Torvalds 0x95d11522b7c4e651ULL, 0x32b3aacefc19d72bULL, 0x704b7393e338ab48ULL, 4061da177e4SLinus Torvalds 0x63843bfd9ebf42dcULL, 0x41fc52d091ae7eefULL, 0x7dac1ce69bb056cdULL, 4071da177e4SLinus Torvalds 0x76437894e23baf4dULL, 0xbdb16106bbd0d66dULL, 0x9b32f1da41c31958ULL, 4081da177e4SLinus Torvalds 0x7957e5176eb2a5cbULL, 0xf941b35ca5f2ae0bULL, 0x8016564bcb400bc0ULL, 4091da177e4SLinus Torvalds 0x677fc20c6bbdb1daULL, 0x59dc7ecc95a26efbULL, 0xe1619f40a1febe1fULL, 4101da177e4SLinus Torvalds 0x10cbc3e3f308eb18ULL, 0x81e12f30b1cefe4fULL, 0x0c10160e0206080aULL, 4111da177e4SLinus Torvalds 0x922e675ecc4917dbULL, 0xa26e3f66c45137f3ULL, 0x4ee8cf531d277469ULL, 4121da177e4SLinus Torvalds 0x78a09c6c143c5044ULL, 0xb0560e73c3582be8ULL, 0x573f9a3463a591f2ULL, 4131da177e4SLinus Torvalds 0xe69eed3cda734f95ULL, 0xd3d2358e5de76934ULL, 0xdfc223805fe1613eULL, 4141da177e4SLinus Torvalds 0xf2aed72edc79578bULL, 0x13cf486e7d87e994ULL, 0x94266c59cd4a13deULL, 4151da177e4SLinus Torvalds 0x1fdf5e607f81e19eULL, 0xc1ea049b5aee752fULL, 0x7547f3196cb4adc1ULL, 4161da177e4SLinus Torvalds 0xd5da3e895ce46d31ULL, 0x08ebeffff704fb0cULL, 0xd42d47f2266a98beULL, 4171da177e4SLinus Torvalds 0x38abb7c7ff1cdb24ULL, 0x543b11b9ed2a937eULL, 0x4a1336a2e825876fULL, 4181da177e4SLinus Torvalds 0x699c26f49dba4ed3ULL, 0x7f5fee106fb1a1ceULL, 0x03048b8d8e8f028cULL, 4191da177e4SLinus Torvalds 0x56c8e34f192b647dULL, 0xe7699447a0fdba1aULL, 0x1ad3deeaf00de717ULL, 4201da177e4SLinus Torvalds 0x113cba9889861e97ULL, 0x2278692d0f113c33ULL, 0x1238311507091c1bULL, 4211da177e4SLinus Torvalds 0xc511fd6aafec8629ULL, 0x208b9bdbfb10cb30ULL, 0x3040583808182028ULL, 4221da177e4SLinus Torvalds 0x7ea8976b153f5441ULL, 0x2e687f230d173439ULL, 0x18202c1c040c1014ULL, 4231da177e4SLinus Torvalds 0x06080b0701030405ULL, 0x4507ab2164ac8de9ULL, 0xf8b6ca27df7c5b84ULL, 4241da177e4SLinus Torvalds 0x29970d5f769ac5b3ULL, 0x0bef6472798bf980ULL, 0xf4a6dc29dd7a538eULL, 4251da177e4SLinus Torvalds 0x8ef5b2b33d47f4c9ULL, 0x74b08a62163a584eULL, 0x82e5a4bd3f41fcc3ULL, 4261da177e4SLinus Torvalds 0xb2a5fc853759dcebULL, 0x734ff81e6db7a9c4ULL, 0x90dd95a83848e0d8ULL, 4271da177e4SLinus Torvalds 0xb1a17708b9d6de67ULL, 0x37bf2a447395d1a2ULL, 0x4c1b3da5e926836aULL, 4281da177e4SLinus Torvalds 0xbeb5ea8b355fd4e1ULL, 0xe3926db655ff491cULL, 0x3baf3c4a7193d9a8ULL, 4291da177e4SLinus Torvalds 0x07ff727c7b8df18aULL, 0x0f149d838c890a86ULL, 0x31b721437296d5a7ULL, 4301da177e4SLinus Torvalds 0x1734b19f88851a92ULL, 0x0ee3e4f8f607ff09ULL, 0xfc4d33d62a7ea882ULL, 4311da177e4SLinus Torvalds 0x84edafba3e42f8c6ULL, 0xd9ca28875ee2653bULL, 0xd2254cf527699cbbULL, 4321da177e4SLinus Torvalds 0x890ac0cf46ca0543ULL, 0x286074240c14303cULL, 0x430fa02665af89ecULL, 4331da177e4SLinus Torvalds 0x6d67df0568b8bdd5ULL, 0x5b2f8c3a61a399f8ULL, 0x0a181d0903050c0fULL, 4341da177e4SLinus Torvalds 0xbc46187dc15e23e2ULL, 0xef827bb857f94116ULL, 0xcefe9918d6677fa9ULL, 4351da177e4SLinus Torvalds 0xec86f035d976439aULL, 0xcdfa129558e87d25ULL, 0xea8efb32d875479fULL, 4361da177e4SLinus Torvalds 0x4917bd2f66aa85e3ULL, 0xc8f6921fd7647bacULL, 0x9ccd83a63a4ee8d2ULL, 4371da177e4SLinus Torvalds 0x8a0e4b42c84507cfULL, 0x88fdb9b43c44f0ccULL, 0x268390dcfa13cf35ULL, 4381da177e4SLinus Torvalds 0x53c463c596a762f4ULL, 0xf551a552a7f4a601ULL, 0x77b401ef98b55ac2ULL, 4391da177e4SLinus Torvalds 0x52331abeec29977bULL, 0xb7a97c0fb8d5da62ULL, 0xa876226fc7543bfcULL, 4401da177e4SLinus Torvalds 0xc319f66daeef822cULL, 0x6b6fd40269bbb9d0ULL, 0xa762bfec4bdd317aULL, 4411da177e4SLinus Torvalds 0xdd31d176abe0963dULL, 0xd121c778a9e69e37ULL, 0x4f1fb62867a981e6ULL, 4421da177e4SLinus Torvalds 0x3c504e360a1e2822ULL, 0x8f02cbc847c90146ULL, 0x16c3c8e4f20bef1dULL, 4431da177e4SLinus Torvalds 0x99c1032cb5c2ee5bULL, 0xcc0d6bee226688aaULL, 0x647b4981e532b356ULL, 4441da177e4SLinus Torvalds 0x5e230cb0ee2f9f71ULL, 0xa399461dbedfc27cULL, 0xfa4538d12b7dac87ULL, 4451da177e4SLinus Torvalds 0x217ce2a0819e3ebfULL, 0x6c90a67e1236485aULL, 0x2d6cf4ae839836b5ULL, 4461da177e4SLinus Torvalds 0x5ad8f5411b2d6c77ULL, 0x2470622a0e123836ULL, 0xca0560e923658cafULL, 4471da177e4SLinus Torvalds 0x04fbf9f1f502f306ULL, 0x8312ddc645cf094cULL, 0xc61576e7216384a5ULL, 4481da177e4SLinus Torvalds 0x9e3e7150ce4f1fd1ULL, 0xab72a9e249db3970ULL, 0xe87d09c42c74b09cULL, 4491da177e4SLinus Torvalds 0x2c9b8dd5f916c33aULL, 0x6e635488e637bf59ULL, 0x93d91e25b6c7e254ULL, 4501da177e4SLinus Torvalds 0xf05d25d82878a088ULL, 0x72b8816517395c4bULL, 0x2b64ffa9829b32b0ULL, 4511da177e4SLinus Torvalds 0x5cd0fe461a2e6872ULL, 0x1d2cac968b80169dULL, 0x3ea3bcc0fe1fdf21ULL, 4521da177e4SLinus Torvalds 0x1b24a7918a831298ULL, 0x3648533f091b242dULL, 0x8c064045c94603caULL, 4531da177e4SLinus Torvalds 0x354cd8b2879426a1ULL, 0xb94a98f74ed2256bULL, 0x7c5b659de13ea342ULL, 4541da177e4SLinus Torvalds 0xe46d1fca2e72b896ULL, 0x62734286e431b753ULL, 0x7a536e9ae03da747ULL, 4551da177e4SLinus Torvalds 0x400b2babeb208b60ULL, 0x47f459d790ad7aeaULL, 0xff49b85ba4f1aa0eULL, 4561da177e4SLinus Torvalds 0x44f0d25a1e227866ULL, 0x395ccebc85922eabULL, 0x5d27873d60a09dfdULL, 4571da177e4SLinus Torvalds 0x0000000000000000ULL, 0xde355afb256f94b1ULL, 0x02f3f2f6f401f703ULL, 4581da177e4SLinus Torvalds 0x1cdbd5edf10ee312ULL, 0x5fd475cb94a16afeULL, 0x3a5845310b1d2c27ULL, 4591da177e4SLinus Torvalds 0x686b5f8fe734bb5cULL, 0x238f1056759fc9bcULL, 0x582b07b7ef2c9b74ULL, 4601da177e4SLinus Torvalds 0xb8bde18c345cd0e4ULL, 0xa695c6973153c4f5ULL, 0xc2ee8f16d46177a3ULL, 4611da177e4SLinus Torvalds 0xdacea30ad06d67b7ULL, 0x3344d3b5869722a4ULL, 0x19d755677e82e59bULL, 4621da177e4SLinus Torvalds 0xc901eb64adea8e23ULL, 0x34bba1c9fd1ad32eULL, 0xf6552edf297ba48dULL, 4631da177e4SLinus Torvalds 0xa09dcd903050c0f0ULL, 0x9ac588a13b4decd7ULL, 0x658c30fa9fbc46d9ULL, 4641da177e4SLinus Torvalds 0x2a9386d2f815c73fULL, 0xae7e2968c6573ff9ULL, 0x6a98ad7913354c5fULL, 4651da177e4SLinus Torvalds 0x14303a12060a181eULL, 0x1e28271b050f1411ULL, 0xa4663461c55233f6ULL, 4661da177e4SLinus Torvalds 0x6688bb7711334455ULL, 0x2f9f06587799c1b6ULL, 0x15c743697c84ed91ULL, 4671da177e4SLinus Torvalds 0x01f7797b7a8ef58fULL, 0x0de76f757888fd85ULL, 0xb4adf782365ad8eeULL, 4681da177e4SLinus Torvalds 0x48e0c4541c24706cULL, 0x96d59eaf394be4ddULL, 0xcbf2199259eb7920ULL, 4691da177e4SLinus Torvalds 0x50c0e84818286078ULL, 0xe98a70bf56fa4513ULL, 0x8df1393eb3c8f645ULL, 4701da177e4SLinus Torvalds 0x87e92437b0cdfa4aULL, 0xd83d51fc246c90b4ULL, 0xc01d7de0206080a0ULL, 4711da177e4SLinus Torvalds 0x8bf93239b2cbf240ULL, 0x4be44fd992ab72e0ULL, 0xed71894ea3f8b615ULL, 4721da177e4SLinus Torvalds 0xba4e137ac05d27e7ULL, 0x851ad6c144cc0d49ULL, 0x5137913362a695f7ULL, 4731da177e4SLinus Torvalds 0x6080b07010304050ULL, 0x9fc9082bb4c1ea5eULL, 0x3f54c5bb84912aaeULL, 4741da177e4SLinus Torvalds 0x9722e7d443c51152ULL, 0x4dec44de93a876e5ULL, 0xb65e0574c25b2fedULL, 4751da177e4SLinus Torvalds 0xa16ab4eb4ade357fULL, 0xa9815b14bddace73ULL, 0x050c808a8f8c0689ULL, 4761da177e4SLinus Torvalds 0xee7502c32d77b499ULL, 0xaf895013bcd9ca76ULL, 0x6f942df39cb94ad6ULL, 4771da177e4SLinus Torvalds 0x6177c90b6abeb5dfULL, 0x9d3afadd40c01d5dULL, 0x98367a57cf4c1bd4ULL, 4781da177e4SLinus Torvalds 0xeb798249a2fbb210ULL, 0x2774e9a7809d3abaULL, 0xbf4293f04fd1216eULL, 4791da177e4SLinus Torvalds 0x42f8d95d1f217c63ULL, 0x861e5d4cca430fc5ULL, 0xdb39da71aae39238ULL, 4801da177e4SLinus Torvalds 0x912aecd342c61557ULL 4811da177e4SLinus Torvalds }; 4821da177e4SLinus Torvalds 4831da177e4SLinus Torvalds static const u64 T5[256] = { 4841da177e4SLinus Torvalds 0xb9bb016ad3ba68d2ULL, 0x9ae5b166fc54194dULL, 0x65e2cd14712f93bcULL, 4851da177e4SLinus Torvalds 0x8725511b9c74b9cdULL, 0xa2f7a457f5530251ULL, 0xd6d003be68d3b86bULL, 4861da177e4SLinus Torvalds 0xded604b56bd2bd6fULL, 0x52b3fe85d74d6429ULL, 0xbafdad4af0500d5dULL, 4871da177e4SLinus Torvalds 0x09cf63e0e9ac268aULL, 0x1c0984968a8d830eULL, 0x91a51a4ddcbf79c6ULL, 4881da177e4SLinus Torvalds 0xa73d4d379070adddULL, 0xaaf1a35cf6520755ULL, 0xa47be117b39ac852ULL, 4891da177e4SLinus Torvalds 0x5ab5f98ed44c612dULL, 0x0346ac2023ea658fULL, 0xe6c4118462d5a673ULL, 4901da177e4SLinus Torvalds 0xcc55c268a497f166ULL, 0xc6dc0da86ed1b263ULL, 0x85aa99d05533ffccULL, 4911da177e4SLinus Torvalds 0xb2fbaa41f3510859ULL, 0xe2c79c0fed5b2a71ULL, 0x59f355aef7a604a2ULL, 4921da177e4SLinus Torvalds 0xbefe20c17fde815fULL, 0x7aade5a2d848753dULL, 0x29d77fcce5a8329aULL, 4931da177e4SLinus Torvalds 0xbc71e80ab699c75eULL, 0x96e03be670db904bULL, 0x8dac9edb5632fac8ULL, 4941da177e4SLinus Torvalds 0xd1952215c4b751e6ULL, 0xb332ceaa19fc2bd7ULL, 0x4b70937338e348abULL, 4951da177e4SLinus Torvalds 0x8463fd3bbf9edc42ULL, 0xfc41d052ae91ef7eULL, 0xac7de61cb09bcd56ULL, 4961da177e4SLinus Torvalds 0x437694783be24dafULL, 0xb1bd0661d0bb6dd6ULL, 0x329bdaf1c3415819ULL, 4971da177e4SLinus Torvalds 0x577917e5b26ecba5ULL, 0x41f95cb3f2a50baeULL, 0x16804b5640cbc00bULL, 4981da177e4SLinus Torvalds 0x7f670cc2bd6bdab1ULL, 0xdc59cc7ea295fb6eULL, 0x61e1409ffea11fbeULL, 4991da177e4SLinus Torvalds 0xcb10e3c308f318ebULL, 0xe181302fceb14ffeULL, 0x100c0e1606020a08ULL, 5001da177e4SLinus Torvalds 0x2e925e6749ccdb17ULL, 0x6ea2663f51c4f337ULL, 0xe84e53cf271d6974ULL, 5011da177e4SLinus Torvalds 0xa0786c9c3c144450ULL, 0x56b0730e58c3e82bULL, 0x3f57349aa563f291ULL, 5021da177e4SLinus Torvalds 0x9ee63ced73da954fULL, 0xd2d38e35e75d3469ULL, 0xc2df8023e15f3e61ULL, 5031da177e4SLinus Torvalds 0xaef22ed779dc8b57ULL, 0xcf136e48877d94e9ULL, 0x2694596c4acdde13ULL, 5041da177e4SLinus Torvalds 0xdf1f605e817f9ee1ULL, 0xeac19b04ee5a2f75ULL, 0x477519f3b46cc1adULL, 5051da177e4SLinus Torvalds 0xdad5893ee45c316dULL, 0xeb08ffef04f70cfbULL, 0x2dd4f2476a26be98ULL, 5061da177e4SLinus Torvalds 0xab38c7b71cff24dbULL, 0x3b54b9112aed7e93ULL, 0x134aa23625e86f87ULL, 5071da177e4SLinus Torvalds 0x9c69f426ba9dd34eULL, 0x5f7f10eeb16fcea1ULL, 0x04038d8b8f8e8c02ULL, 5081da177e4SLinus Torvalds 0xc8564fe32b197d64ULL, 0x69e74794fda01abaULL, 0xd31aeade0df017e7ULL, 5091da177e4SLinus Torvalds 0x3c1198ba8689971eULL, 0x78222d69110f333cULL, 0x3812153109071b1cULL, 5101da177e4SLinus Torvalds 0x11c56afdecaf2986ULL, 0x8b20db9b10fb30cbULL, 0x4030385818082820ULL, 5111da177e4SLinus Torvalds 0xa87e6b973f154154ULL, 0x682e237f170d3934ULL, 0x20181c2c0c041410ULL, 5121da177e4SLinus Torvalds 0x0806070b03010504ULL, 0x074521abac64e98dULL, 0xb6f827ca7cdf845bULL, 5131da177e4SLinus Torvalds 0x97295f0d9a76b3c5ULL, 0xef0b72648b7980f9ULL, 0xa6f429dc7add8e53ULL, 5141da177e4SLinus Torvalds 0xf58eb3b2473dc9f4ULL, 0xb074628a3a164e58ULL, 0xe582bda4413fc3fcULL, 5151da177e4SLinus Torvalds 0xa5b285fc5937ebdcULL, 0x4f731ef8b76dc4a9ULL, 0xdd90a8954838d8e0ULL, 5161da177e4SLinus Torvalds 0xa1b10877d6b967deULL, 0xbf37442a9573a2d1ULL, 0x1b4ca53d26e96a83ULL, 5171da177e4SLinus Torvalds 0xb5be8bea5f35e1d4ULL, 0x92e3b66dff551c49ULL, 0xaf3b4a3c9371a8d9ULL, 5181da177e4SLinus Torvalds 0xff077c728d7b8af1ULL, 0x140f839d898c860aULL, 0xb73143219672a7d5ULL, 5191da177e4SLinus Torvalds 0x34179fb18588921aULL, 0xe30ef8e407f609ffULL, 0x4dfcd6337e2a82a8ULL, 5201da177e4SLinus Torvalds 0xed84baaf423ec6f8ULL, 0xcad98728e25e3b65ULL, 0x25d2f54c6927bb9cULL, 5211da177e4SLinus Torvalds 0x0a89cfc0ca464305ULL, 0x60282474140c3c30ULL, 0x0f4326a0af65ec89ULL, 5221da177e4SLinus Torvalds 0x676d05dfb868d5bdULL, 0x2f5b3a8ca361f899ULL, 0x180a091d05030f0cULL, 5231da177e4SLinus Torvalds 0x46bc7d185ec1e223ULL, 0x82efb87bf9571641ULL, 0xfece189967d6a97fULL, 5241da177e4SLinus Torvalds 0x86ec35f076d99a43ULL, 0xfacd9512e858257dULL, 0x8eea32fb75d89f47ULL, 5251da177e4SLinus Torvalds 0x17492fbdaa66e385ULL, 0xf6c81f9264d7ac7bULL, 0xcd9ca6834e3ad2e8ULL, 5261da177e4SLinus Torvalds 0x0e8a424b45c8cf07ULL, 0xfd88b4b9443cccf0ULL, 0x8326dc9013fa35cfULL, 5271da177e4SLinus Torvalds 0xc453c563a796f462ULL, 0x51f552a5f4a701a6ULL, 0xb477ef01b598c25aULL, 5281da177e4SLinus Torvalds 0x3352be1a29ec7b97ULL, 0xa9b70f7cd5b862daULL, 0x76a86f2254c7fc3bULL, 5291da177e4SLinus Torvalds 0x19c36df6efae2c82ULL, 0x6f6b02d4bb69d0b9ULL, 0x62a7ecbfdd4b7a31ULL, 5301da177e4SLinus Torvalds 0x31dd76d1e0ab3d96ULL, 0x21d178c7e6a9379eULL, 0x1f4f28b6a967e681ULL, 5311da177e4SLinus Torvalds 0x503c364e1e0a2228ULL, 0x028fc8cbc9474601ULL, 0xc316e4c80bf21defULL, 5321da177e4SLinus Torvalds 0xc1992c03c2b55beeULL, 0x0dccee6b6622aa88ULL, 0x7b64814932e556b3ULL, 5331da177e4SLinus Torvalds 0x235eb00c2fee719fULL, 0x99a31d46dfbe7cc2ULL, 0x45fad1387d2b87acULL, 5341da177e4SLinus Torvalds 0x7c21a0e29e81bf3eULL, 0x906c7ea636125a48ULL, 0x6c2daef49883b536ULL, 5351da177e4SLinus Torvalds 0xd85a41f52d1b776cULL, 0x70242a62120e3638ULL, 0x05cae9606523af8cULL, 5361da177e4SLinus Torvalds 0xfb04f1f902f506f3ULL, 0x1283c6ddcf454c09ULL, 0x15c6e7766321a584ULL, 5371da177e4SLinus Torvalds 0x3e9e50714fced11fULL, 0x72abe2a9db497039ULL, 0x7de8c409742c9cb0ULL, 5381da177e4SLinus Torvalds 0x9b2cd58d16f93ac3ULL, 0x636e885437e659bfULL, 0xd993251ec7b654e2ULL, 5391da177e4SLinus Torvalds 0x5df0d825782888a0ULL, 0xb872658139174b5cULL, 0x642ba9ff9b82b032ULL, 5401da177e4SLinus Torvalds 0xd05c46fe2e1a7268ULL, 0x2c1d96ac808b9d16ULL, 0xa33ec0bc1ffe21dfULL, 5411da177e4SLinus Torvalds 0x241b91a7838a9812ULL, 0x48363f531b092d24ULL, 0x068c454046c9ca03ULL, 5421da177e4SLinus Torvalds 0x4c35b2d89487a126ULL, 0x4ab9f798d24e6b25ULL, 0x5b7c9d653ee142a3ULL, 5431da177e4SLinus Torvalds 0x6de4ca1f722e96b8ULL, 0x7362864231e453b7ULL, 0x537a9a6e3de047a7ULL, 5441da177e4SLinus Torvalds 0x0b40ab2b20eb608bULL, 0xf447d759ad90ea7aULL, 0x49ff5bb8f1a40eaaULL, 5451da177e4SLinus Torvalds 0xf0445ad2221e6678ULL, 0x5c39bcce9285ab2eULL, 0x275d3d87a060fd9dULL, 5461da177e4SLinus Torvalds 0x0000000000000000ULL, 0x35defb5a6f25b194ULL, 0xf302f6f201f403f7ULL, 5471da177e4SLinus Torvalds 0xdb1cedd50ef112e3ULL, 0xd45fcb75a194fe6aULL, 0x583a31451d0b272cULL, 5481da177e4SLinus Torvalds 0x6b688f5f34e75cbbULL, 0x8f2356109f75bcc9ULL, 0x2b58b7072cef749bULL, 5491da177e4SLinus Torvalds 0xbdb88ce15c34e4d0ULL, 0x95a697c65331f5c4ULL, 0xeec2168f61d4a377ULL, 5501da177e4SLinus Torvalds 0xceda0aa36dd0b767ULL, 0x4433b5d39786a422ULL, 0xd7196755827e9be5ULL, 5511da177e4SLinus Torvalds 0x01c964ebeaad238eULL, 0xbb34c9a11afd2ed3ULL, 0x55f6df2e7b298da4ULL, 5521da177e4SLinus Torvalds 0x9da090cd5030f0c0ULL, 0xc59aa1884d3bd7ecULL, 0x8c65fa30bc9fd946ULL, 5531da177e4SLinus Torvalds 0x932ad28615f83fc7ULL, 0x7eae682957c6f93fULL, 0x986a79ad35135f4cULL, 5541da177e4SLinus Torvalds 0x3014123a0a061e18ULL, 0x281e1b270f051114ULL, 0x66a4613452c5f633ULL, 5551da177e4SLinus Torvalds 0x886677bb33115544ULL, 0x9f2f58069977b6c1ULL, 0xc7156943847c91edULL, 5561da177e4SLinus Torvalds 0xf7017b798e7a8ff5ULL, 0xe70d756f887885fdULL, 0xadb482f75a36eed8ULL, 5571da177e4SLinus Torvalds 0xe04854c4241c6c70ULL, 0xd596af9e4b39dde4ULL, 0xf2cb9219eb592079ULL, 5581da177e4SLinus Torvalds 0xc05048e828187860ULL, 0x8ae9bf70fa561345ULL, 0xf18d3e39c8b345f6ULL, 5591da177e4SLinus Torvalds 0xe9873724cdb04afaULL, 0x3dd8fc516c24b490ULL, 0x1dc0e07d6020a080ULL, 5601da177e4SLinus Torvalds 0xf98b3932cbb240f2ULL, 0xe44bd94fab92e072ULL, 0x71ed4e89f8a315b6ULL, 5611da177e4SLinus Torvalds 0x4eba7a135dc0e727ULL, 0x1a85c1d6cc44490dULL, 0x37513391a662f795ULL, 5621da177e4SLinus Torvalds 0x806070b030105040ULL, 0xc99f2b08c1b45eeaULL, 0x543fbbc59184ae2aULL, 5631da177e4SLinus Torvalds 0x2297d4e7c5435211ULL, 0xec4dde44a893e576ULL, 0x5eb674055bc2ed2fULL, 5641da177e4SLinus Torvalds 0x6aa1ebb4de4a7f35ULL, 0x81a9145bdabd73ceULL, 0x0c058a808c8f8906ULL, 5651da177e4SLinus Torvalds 0x75eec302772d99b4ULL, 0x89af1350d9bc76caULL, 0x946ff32db99cd64aULL, 5661da177e4SLinus Torvalds 0x77610bc9be6adfb5ULL, 0x3a9dddfac0405d1dULL, 0x3698577a4ccfd41bULL, 5671da177e4SLinus Torvalds 0x79eb4982fba210b2ULL, 0x7427a7e99d80ba3aULL, 0x42bff093d14f6e21ULL, 5681da177e4SLinus Torvalds 0xf8425dd9211f637cULL, 0x1e864c5d43cac50fULL, 0x39db71dae3aa3892ULL, 5691da177e4SLinus Torvalds 0x2a91d3ecc6425715ULL 5701da177e4SLinus Torvalds }; 5711da177e4SLinus Torvalds 5721da177e4SLinus Torvalds static const u64 T6[256] = { 5731da177e4SLinus Torvalds 0x6a01bbb9d268bad3ULL, 0x66b1e59a4d1954fcULL, 0x14cde265bc932f71ULL, 5741da177e4SLinus Torvalds 0x1b512587cdb9749cULL, 0x57a4f7a2510253f5ULL, 0xbe03d0d66bb8d368ULL, 5751da177e4SLinus Torvalds 0xb504d6de6fbdd26bULL, 0x85feb35229644dd7ULL, 0x4aadfdba5d0d50f0ULL, 5761da177e4SLinus Torvalds 0xe063cf098a26ace9ULL, 0x9684091c0e838d8aULL, 0x4d1aa591c679bfdcULL, 5771da177e4SLinus Torvalds 0x374d3da7ddad7090ULL, 0x5ca3f1aa550752f6ULL, 0x17e17ba452c89ab3ULL, 5781da177e4SLinus Torvalds 0x8ef9b55a2d614cd4ULL, 0x20ac46038f65ea23ULL, 0x8411c4e673a6d562ULL, 5791da177e4SLinus Torvalds 0x68c255cc66f197a4ULL, 0xa80ddcc663b2d16eULL, 0xd099aa85ccff3355ULL, 5801da177e4SLinus Torvalds 0x41aafbb2590851f3ULL, 0x0f9cc7e2712a5bedULL, 0xae55f359a204a6f7ULL, 5811da177e4SLinus Torvalds 0xc120febe5f81de7fULL, 0xa2e5ad7a3d7548d8ULL, 0xcc7fd7299a32a8e5ULL, 5821da177e4SLinus Torvalds 0x0ae871bc5ec799b6ULL, 0xe63be0964b90db70ULL, 0xdb9eac8dc8fa3256ULL, 5831da177e4SLinus Torvalds 0x152295d1e651b7c4ULL, 0xaace32b3d72bfc19ULL, 0x7393704bab48e338ULL, 5841da177e4SLinus Torvalds 0x3bfd638442dc9ebfULL, 0x52d041fc7eef91aeULL, 0x1ce67dac56cd9bb0ULL, 5851da177e4SLinus Torvalds 0x78947643af4de23bULL, 0x6106bdb1d66dbbd0ULL, 0xf1da9b32195841c3ULL, 5861da177e4SLinus Torvalds 0xe5177957a5cb6eb2ULL, 0xb35cf941ae0ba5f2ULL, 0x564b80160bc0cb40ULL, 5871da177e4SLinus Torvalds 0xc20c677fb1da6bbdULL, 0x7ecc59dc6efb95a2ULL, 0x9f40e161be1fa1feULL, 5881da177e4SLinus Torvalds 0xc3e310cbeb18f308ULL, 0x2f3081e1fe4fb1ceULL, 0x160e0c10080a0206ULL, 5891da177e4SLinus Torvalds 0x675e922e17dbcc49ULL, 0x3f66a26e37f3c451ULL, 0xcf534ee874691d27ULL, 5901da177e4SLinus Torvalds 0x9c6c78a05044143cULL, 0x0e73b0562be8c358ULL, 0x9a34573f91f263a5ULL, 5911da177e4SLinus Torvalds 0xed3ce69e4f95da73ULL, 0x358ed3d269345de7ULL, 0x2380dfc2613e5fe1ULL, 5921da177e4SLinus Torvalds 0xd72ef2ae578bdc79ULL, 0x486e13cfe9947d87ULL, 0x6c59942613decd4aULL, 5931da177e4SLinus Torvalds 0x5e601fdfe19e7f81ULL, 0x049bc1ea752f5aeeULL, 0xf3197547adc16cb4ULL, 5941da177e4SLinus Torvalds 0x3e89d5da6d315ce4ULL, 0xefff08ebfb0cf704ULL, 0x47f2d42d98be266aULL, 5951da177e4SLinus Torvalds 0xb7c738abdb24ff1cULL, 0x11b9543b937eed2aULL, 0x36a24a13876fe825ULL, 5961da177e4SLinus Torvalds 0x26f4699c4ed39dbaULL, 0xee107f5fa1ce6fb1ULL, 0x8b8d0304028c8e8fULL, 5971da177e4SLinus Torvalds 0xe34f56c8647d192bULL, 0x9447e769ba1aa0fdULL, 0xdeea1ad3e717f00dULL, 5981da177e4SLinus Torvalds 0xba98113c1e978986ULL, 0x692d22783c330f11ULL, 0x311512381c1b0709ULL, 5991da177e4SLinus Torvalds 0xfd6ac5118629afecULL, 0x9bdb208bcb30fb10ULL, 0x5838304020280818ULL, 6001da177e4SLinus Torvalds 0x976b7ea85441153fULL, 0x7f232e6834390d17ULL, 0x2c1c18201014040cULL, 6011da177e4SLinus Torvalds 0x0b07060804050103ULL, 0xab2145078de964acULL, 0xca27f8b65b84df7cULL, 6021da177e4SLinus Torvalds 0x0d5f2997c5b3769aULL, 0x64720beff980798bULL, 0xdc29f4a6538edd7aULL, 6031da177e4SLinus Torvalds 0xb2b38ef5f4c93d47ULL, 0x8a6274b0584e163aULL, 0xa4bd82e5fcc33f41ULL, 6041da177e4SLinus Torvalds 0xfc85b2a5dceb3759ULL, 0xf81e734fa9c46db7ULL, 0x95a890dde0d83848ULL, 6051da177e4SLinus Torvalds 0x7708b1a1de67b9d6ULL, 0x2a4437bfd1a27395ULL, 0x3da54c1b836ae926ULL, 6061da177e4SLinus Torvalds 0xea8bbeb5d4e1355fULL, 0x6db6e392491c55ffULL, 0x3c4a3bafd9a87193ULL, 6071da177e4SLinus Torvalds 0x727c07fff18a7b8dULL, 0x9d830f140a868c89ULL, 0x214331b7d5a77296ULL, 6081da177e4SLinus Torvalds 0xb19f17341a928885ULL, 0xe4f80ee3ff09f607ULL, 0x33d6fc4da8822a7eULL, 6091da177e4SLinus Torvalds 0xafba84edf8c63e42ULL, 0x2887d9ca653b5ee2ULL, 0x4cf5d2259cbb2769ULL, 6101da177e4SLinus Torvalds 0xc0cf890a054346caULL, 0x74242860303c0c14ULL, 0xa026430f89ec65afULL, 6111da177e4SLinus Torvalds 0xdf056d67bdd568b8ULL, 0x8c3a5b2f99f861a3ULL, 0x1d090a180c0f0305ULL, 6121da177e4SLinus Torvalds 0x187dbc4623e2c15eULL, 0x7bb8ef82411657f9ULL, 0x9918cefe7fa9d667ULL, 6131da177e4SLinus Torvalds 0xf035ec86439ad976ULL, 0x1295cdfa7d2558e8ULL, 0xfb32ea8e479fd875ULL, 6141da177e4SLinus Torvalds 0xbd2f491785e366aaULL, 0x921fc8f67bacd764ULL, 0x83a69ccde8d23a4eULL, 6151da177e4SLinus Torvalds 0x4b428a0e07cfc845ULL, 0xb9b488fdf0cc3c44ULL, 0x90dc2683cf35fa13ULL, 6161da177e4SLinus Torvalds 0x63c553c462f496a7ULL, 0xa552f551a601a7f4ULL, 0x01ef77b45ac298b5ULL, 6171da177e4SLinus Torvalds 0x1abe5233977bec29ULL, 0x7c0fb7a9da62b8d5ULL, 0x226fa8763bfcc754ULL, 6181da177e4SLinus Torvalds 0xf66dc319822caeefULL, 0xd4026b6fb9d069bbULL, 0xbfeca762317a4bddULL, 6191da177e4SLinus Torvalds 0xd176dd31963dabe0ULL, 0xc778d1219e37a9e6ULL, 0xb6284f1f81e667a9ULL, 6201da177e4SLinus Torvalds 0x4e363c5028220a1eULL, 0xcbc88f02014647c9ULL, 0xc8e416c3ef1df20bULL, 6211da177e4SLinus Torvalds 0x032c99c1ee5bb5c2ULL, 0x6beecc0d88aa2266ULL, 0x4981647bb356e532ULL, 6221da177e4SLinus Torvalds 0x0cb05e239f71ee2fULL, 0x461da399c27cbedfULL, 0x38d1fa45ac872b7dULL, 6231da177e4SLinus Torvalds 0xe2a0217c3ebf819eULL, 0xa67e6c90485a1236ULL, 0xf4ae2d6c36b58398ULL, 6241da177e4SLinus Torvalds 0xf5415ad86c771b2dULL, 0x622a247038360e12ULL, 0x60e9ca058caf2365ULL, 6251da177e4SLinus Torvalds 0xf9f104fbf306f502ULL, 0xddc68312094c45cfULL, 0x76e7c61584a52163ULL, 6261da177e4SLinus Torvalds 0x71509e3e1fd1ce4fULL, 0xa9e2ab72397049dbULL, 0x09c4e87db09c2c74ULL, 6271da177e4SLinus Torvalds 0x8dd52c9bc33af916ULL, 0x54886e63bf59e637ULL, 0x1e2593d9e254b6c7ULL, 6281da177e4SLinus Torvalds 0x25d8f05da0882878ULL, 0x816572b85c4b1739ULL, 0xffa92b6432b0829bULL, 6291da177e4SLinus Torvalds 0xfe465cd068721a2eULL, 0xac961d2c169d8b80ULL, 0xbcc03ea3df21fe1fULL, 6301da177e4SLinus Torvalds 0xa7911b2412988a83ULL, 0x533f3648242d091bULL, 0x40458c0603cac946ULL, 6311da177e4SLinus Torvalds 0xd8b2354c26a18794ULL, 0x98f7b94a256b4ed2ULL, 0x659d7c5ba342e13eULL, 6321da177e4SLinus Torvalds 0x1fcae46db8962e72ULL, 0x42866273b753e431ULL, 0x6e9a7a53a747e03dULL, 6331da177e4SLinus Torvalds 0x2bab400b8b60eb20ULL, 0x59d747f47aea90adULL, 0xb85bff49aa0ea4f1ULL, 6341da177e4SLinus Torvalds 0xd25a44f078661e22ULL, 0xcebc395c2eab8592ULL, 0x873d5d279dfd60a0ULL, 6351da177e4SLinus Torvalds 0x0000000000000000ULL, 0x5afbde3594b1256fULL, 0xf2f602f3f703f401ULL, 6361da177e4SLinus Torvalds 0xd5ed1cdbe312f10eULL, 0x75cb5fd46afe94a1ULL, 0x45313a582c270b1dULL, 6371da177e4SLinus Torvalds 0x5f8f686bbb5ce734ULL, 0x1056238fc9bc759fULL, 0x07b7582b9b74ef2cULL, 6381da177e4SLinus Torvalds 0xe18cb8bdd0e4345cULL, 0xc697a695c4f53153ULL, 0x8f16c2ee77a3d461ULL, 6391da177e4SLinus Torvalds 0xa30adace67b7d06dULL, 0xd3b5334422a48697ULL, 0x556719d7e59b7e82ULL, 6401da177e4SLinus Torvalds 0xeb64c9018e23adeaULL, 0xa1c934bbd32efd1aULL, 0x2edff655a48d297bULL, 6411da177e4SLinus Torvalds 0xcd90a09dc0f03050ULL, 0x88a19ac5ecd73b4dULL, 0x30fa658c46d99fbcULL, 6421da177e4SLinus Torvalds 0x86d22a93c73ff815ULL, 0x2968ae7e3ff9c657ULL, 0xad796a984c5f1335ULL, 6431da177e4SLinus Torvalds 0x3a121430181e060aULL, 0x271b1e281411050fULL, 0x3461a46633f6c552ULL, 6441da177e4SLinus Torvalds 0xbb77668844551133ULL, 0x06582f9fc1b67799ULL, 0x436915c7ed917c84ULL, 6451da177e4SLinus Torvalds 0x797b01f7f58f7a8eULL, 0x6f750de7fd857888ULL, 0xf782b4add8ee365aULL, 6461da177e4SLinus Torvalds 0xc45448e0706c1c24ULL, 0x9eaf96d5e4dd394bULL, 0x1992cbf2792059ebULL, 6471da177e4SLinus Torvalds 0xe84850c060781828ULL, 0x70bfe98a451356faULL, 0x393e8df1f645b3c8ULL, 6481da177e4SLinus Torvalds 0x243787e9fa4ab0cdULL, 0x51fcd83d90b4246cULL, 0x7de0c01d80a02060ULL, 6491da177e4SLinus Torvalds 0x32398bf9f240b2cbULL, 0x4fd94be472e092abULL, 0x894eed71b615a3f8ULL, 6501da177e4SLinus Torvalds 0x137aba4e27e7c05dULL, 0xd6c1851a0d4944ccULL, 0x9133513795f762a6ULL, 6511da177e4SLinus Torvalds 0xb070608040501030ULL, 0x082b9fc9ea5eb4c1ULL, 0xc5bb3f542aae8491ULL, 6521da177e4SLinus Torvalds 0xe7d49722115243c5ULL, 0x44de4dec76e593a8ULL, 0x0574b65e2fedc25bULL, 6531da177e4SLinus Torvalds 0xb4eba16a357f4adeULL, 0x5b14a981ce73bddaULL, 0x808a050c06898f8cULL, 6541da177e4SLinus Torvalds 0x02c3ee75b4992d77ULL, 0x5013af89ca76bcd9ULL, 0x2df36f944ad69cb9ULL, 6551da177e4SLinus Torvalds 0xc90b6177b5df6abeULL, 0xfadd9d3a1d5d40c0ULL, 0x7a5798361bd4cf4cULL, 6561da177e4SLinus Torvalds 0x8249eb79b210a2fbULL, 0xe9a727743aba809dULL, 0x93f0bf42216e4fd1ULL, 6571da177e4SLinus Torvalds 0xd95d42f87c631f21ULL, 0x5d4c861e0fc5ca43ULL, 0xda71db399238aae3ULL, 6581da177e4SLinus Torvalds 0xecd3912a155742c6ULL 6591da177e4SLinus Torvalds }; 6601da177e4SLinus Torvalds 6611da177e4SLinus Torvalds static const u64 T7[256] = { 6621da177e4SLinus Torvalds 0x016ab9bb68d2d3baULL, 0xb1669ae5194dfc54ULL, 0xcd1465e293bc712fULL, 6631da177e4SLinus Torvalds 0x511b8725b9cd9c74ULL, 0xa457a2f70251f553ULL, 0x03bed6d0b86b68d3ULL, 6641da177e4SLinus Torvalds 0x04b5ded6bd6f6bd2ULL, 0xfe8552b36429d74dULL, 0xad4abafd0d5df050ULL, 6651da177e4SLinus Torvalds 0x63e009cf268ae9acULL, 0x84961c09830e8a8dULL, 0x1a4d91a579c6dcbfULL, 6661da177e4SLinus Torvalds 0x4d37a73daddd9070ULL, 0xa35caaf10755f652ULL, 0xe117a47bc852b39aULL, 6671da177e4SLinus Torvalds 0xf98e5ab5612dd44cULL, 0xac200346658f23eaULL, 0x1184e6c4a67362d5ULL, 6681da177e4SLinus Torvalds 0xc268cc55f166a497ULL, 0x0da8c6dcb2636ed1ULL, 0x99d085aaffcc5533ULL, 6691da177e4SLinus Torvalds 0xaa41b2fb0859f351ULL, 0x9c0fe2c72a71ed5bULL, 0x55ae59f304a2f7a6ULL, 6701da177e4SLinus Torvalds 0x20c1befe815f7fdeULL, 0xe5a27aad753dd848ULL, 0x7fcc29d7329ae5a8ULL, 6711da177e4SLinus Torvalds 0xe80abc71c75eb699ULL, 0x3be696e0904b70dbULL, 0x9edb8dacfac85632ULL, 6721da177e4SLinus Torvalds 0x2215d19551e6c4b7ULL, 0xceaab3322bd719fcULL, 0x93734b7048ab38e3ULL, 6731da177e4SLinus Torvalds 0xfd3b8463dc42bf9eULL, 0xd052fc41ef7eae91ULL, 0xe61cac7dcd56b09bULL, 6741da177e4SLinus Torvalds 0x947843764daf3be2ULL, 0x0661b1bd6dd6d0bbULL, 0xdaf1329b5819c341ULL, 6751da177e4SLinus Torvalds 0x17e55779cba5b26eULL, 0x5cb341f90baef2a5ULL, 0x4b561680c00b40cbULL, 6761da177e4SLinus Torvalds 0x0cc27f67dab1bd6bULL, 0xcc7edc59fb6ea295ULL, 0x409f61e11fbefea1ULL, 6771da177e4SLinus Torvalds 0xe3c3cb1018eb08f3ULL, 0x302fe1814ffeceb1ULL, 0x0e16100c0a080602ULL, 6781da177e4SLinus Torvalds 0x5e672e92db1749ccULL, 0x663f6ea2f33751c4ULL, 0x53cfe84e6974271dULL, 6791da177e4SLinus Torvalds 0x6c9ca07844503c14ULL, 0x730e56b0e82b58c3ULL, 0x349a3f57f291a563ULL, 6801da177e4SLinus Torvalds 0x3ced9ee6954f73daULL, 0x8e35d2d33469e75dULL, 0x8023c2df3e61e15fULL, 6811da177e4SLinus Torvalds 0x2ed7aef28b5779dcULL, 0x6e48cf1394e9877dULL, 0x596c2694de134acdULL, 6821da177e4SLinus Torvalds 0x605edf1f9ee1817fULL, 0x9b04eac12f75ee5aULL, 0x19f34775c1adb46cULL, 6831da177e4SLinus Torvalds 0x893edad5316de45cULL, 0xffefeb080cfb04f7ULL, 0xf2472dd4be986a26ULL, 6841da177e4SLinus Torvalds 0xc7b7ab3824db1cffULL, 0xb9113b547e932aedULL, 0xa236134a6f8725e8ULL, 6851da177e4SLinus Torvalds 0xf4269c69d34eba9dULL, 0x10ee5f7fcea1b16fULL, 0x8d8b04038c028f8eULL, 6861da177e4SLinus Torvalds 0x4fe3c8567d642b19ULL, 0x479469e71abafda0ULL, 0xeaded31a17e70df0ULL, 6871da177e4SLinus Torvalds 0x98ba3c11971e8689ULL, 0x2d697822333c110fULL, 0x153138121b1c0907ULL, 6881da177e4SLinus Torvalds 0x6afd11c52986ecafULL, 0xdb9b8b2030cb10fbULL, 0x3858403028201808ULL, 6891da177e4SLinus Torvalds 0x6b97a87e41543f15ULL, 0x237f682e3934170dULL, 0x1c2c201814100c04ULL, 6901da177e4SLinus Torvalds 0x070b080605040301ULL, 0x21ab0745e98dac64ULL, 0x27cab6f8845b7cdfULL, 6911da177e4SLinus Torvalds 0x5f0d9729b3c59a76ULL, 0x7264ef0b80f98b79ULL, 0x29dca6f48e537addULL, 6921da177e4SLinus Torvalds 0xb3b2f58ec9f4473dULL, 0x628ab0744e583a16ULL, 0xbda4e582c3fc413fULL, 6931da177e4SLinus Torvalds 0x85fca5b2ebdc5937ULL, 0x1ef84f73c4a9b76dULL, 0xa895dd90d8e04838ULL, 6941da177e4SLinus Torvalds 0x0877a1b167ded6b9ULL, 0x442abf37a2d19573ULL, 0xa53d1b4c6a8326e9ULL, 6951da177e4SLinus Torvalds 0x8beab5bee1d45f35ULL, 0xb66d92e31c49ff55ULL, 0x4a3caf3ba8d99371ULL, 6961da177e4SLinus Torvalds 0x7c72ff078af18d7bULL, 0x839d140f860a898cULL, 0x4321b731a7d59672ULL, 6971da177e4SLinus Torvalds 0x9fb13417921a8588ULL, 0xf8e4e30e09ff07f6ULL, 0xd6334dfc82a87e2aULL, 6981da177e4SLinus Torvalds 0xbaafed84c6f8423eULL, 0x8728cad93b65e25eULL, 0xf54c25d2bb9c6927ULL, 6991da177e4SLinus Torvalds 0xcfc00a894305ca46ULL, 0x247460283c30140cULL, 0x26a00f43ec89af65ULL, 7001da177e4SLinus Torvalds 0x05df676dd5bdb868ULL, 0x3a8c2f5bf899a361ULL, 0x091d180a0f0c0503ULL, 7011da177e4SLinus Torvalds 0x7d1846bce2235ec1ULL, 0xb87b82ef1641f957ULL, 0x1899fecea97f67d6ULL, 7021da177e4SLinus Torvalds 0x35f086ec9a4376d9ULL, 0x9512facd257de858ULL, 0x32fb8eea9f4775d8ULL, 7031da177e4SLinus Torvalds 0x2fbd1749e385aa66ULL, 0x1f92f6c8ac7b64d7ULL, 0xa683cd9cd2e84e3aULL, 7041da177e4SLinus Torvalds 0x424b0e8acf0745c8ULL, 0xb4b9fd88ccf0443cULL, 0xdc90832635cf13faULL, 7051da177e4SLinus Torvalds 0xc563c453f462a796ULL, 0x52a551f501a6f4a7ULL, 0xef01b477c25ab598ULL, 7061da177e4SLinus Torvalds 0xbe1a33527b9729ecULL, 0x0f7ca9b762dad5b8ULL, 0x6f2276a8fc3b54c7ULL, 7071da177e4SLinus Torvalds 0x6df619c32c82efaeULL, 0x02d46f6bd0b9bb69ULL, 0xecbf62a77a31dd4bULL, 7081da177e4SLinus Torvalds 0x76d131dd3d96e0abULL, 0x78c721d1379ee6a9ULL, 0x28b61f4fe681a967ULL, 7091da177e4SLinus Torvalds 0x364e503c22281e0aULL, 0xc8cb028f4601c947ULL, 0xe4c8c3161def0bf2ULL, 7101da177e4SLinus Torvalds 0x2c03c1995beec2b5ULL, 0xee6b0dccaa886622ULL, 0x81497b6456b332e5ULL, 7111da177e4SLinus Torvalds 0xb00c235e719f2feeULL, 0x1d4699a37cc2dfbeULL, 0xd13845fa87ac7d2bULL, 7121da177e4SLinus Torvalds 0xa0e27c21bf3e9e81ULL, 0x7ea6906c5a483612ULL, 0xaef46c2db5369883ULL, 7131da177e4SLinus Torvalds 0x41f5d85a776c2d1bULL, 0x2a6270243638120eULL, 0xe96005caaf8c6523ULL, 7141da177e4SLinus Torvalds 0xf1f9fb0406f302f5ULL, 0xc6dd12834c09cf45ULL, 0xe77615c6a5846321ULL, 7151da177e4SLinus Torvalds 0x50713e9ed11f4fceULL, 0xe2a972ab7039db49ULL, 0xc4097de89cb0742cULL, 7161da177e4SLinus Torvalds 0xd58d9b2c3ac316f9ULL, 0x8854636e59bf37e6ULL, 0x251ed99354e2c7b6ULL, 7171da177e4SLinus Torvalds 0xd8255df088a07828ULL, 0x6581b8724b5c3917ULL, 0xa9ff642bb0329b82ULL, 7181da177e4SLinus Torvalds 0x46fed05c72682e1aULL, 0x96ac2c1d9d16808bULL, 0xc0bca33e21df1ffeULL, 7191da177e4SLinus Torvalds 0x91a7241b9812838aULL, 0x3f5348362d241b09ULL, 0x4540068cca0346c9ULL, 7201da177e4SLinus Torvalds 0xb2d84c35a1269487ULL, 0xf7984ab96b25d24eULL, 0x9d655b7c42a33ee1ULL, 7211da177e4SLinus Torvalds 0xca1f6de496b8722eULL, 0x8642736253b731e4ULL, 0x9a6e537a47a73de0ULL, 7221da177e4SLinus Torvalds 0xab2b0b40608b20ebULL, 0xd759f447ea7aad90ULL, 0x5bb849ff0eaaf1a4ULL, 7231da177e4SLinus Torvalds 0x5ad2f0446678221eULL, 0xbcce5c39ab2e9285ULL, 0x3d87275dfd9da060ULL, 7241da177e4SLinus Torvalds 0x0000000000000000ULL, 0xfb5a35deb1946f25ULL, 0xf6f2f30203f701f4ULL, 7251da177e4SLinus Torvalds 0xedd5db1c12e30ef1ULL, 0xcb75d45ffe6aa194ULL, 0x3145583a272c1d0bULL, 7261da177e4SLinus Torvalds 0x8f5f6b685cbb34e7ULL, 0x56108f23bcc99f75ULL, 0xb7072b58749b2cefULL, 7271da177e4SLinus Torvalds 0x8ce1bdb8e4d05c34ULL, 0x97c695a6f5c45331ULL, 0x168feec2a37761d4ULL, 7281da177e4SLinus Torvalds 0x0aa3cedab7676dd0ULL, 0xb5d34433a4229786ULL, 0x6755d7199be5827eULL, 7291da177e4SLinus Torvalds 0x64eb01c9238eeaadULL, 0xc9a1bb342ed31afdULL, 0xdf2e55f68da47b29ULL, 7301da177e4SLinus Torvalds 0x90cd9da0f0c05030ULL, 0xa188c59ad7ec4d3bULL, 0xfa308c65d946bc9fULL, 7311da177e4SLinus Torvalds 0xd286932a3fc715f8ULL, 0x68297eaef93f57c6ULL, 0x79ad986a5f4c3513ULL, 7321da177e4SLinus Torvalds 0x123a30141e180a06ULL, 0x1b27281e11140f05ULL, 0x613466a4f63352c5ULL, 7331da177e4SLinus Torvalds 0x77bb886655443311ULL, 0x58069f2fb6c19977ULL, 0x6943c71591ed847cULL, 7341da177e4SLinus Torvalds 0x7b79f7018ff58e7aULL, 0x756fe70d85fd8878ULL, 0x82f7adb4eed85a36ULL, 7351da177e4SLinus Torvalds 0x54c4e0486c70241cULL, 0xaf9ed596dde44b39ULL, 0x9219f2cb2079eb59ULL, 7361da177e4SLinus Torvalds 0x48e8c05078602818ULL, 0xbf708ae91345fa56ULL, 0x3e39f18d45f6c8b3ULL, 7371da177e4SLinus Torvalds 0x3724e9874afacdb0ULL, 0xfc513dd8b4906c24ULL, 0xe07d1dc0a0806020ULL, 7381da177e4SLinus Torvalds 0x3932f98b40f2cbb2ULL, 0xd94fe44be072ab92ULL, 0x4e8971ed15b6f8a3ULL, 7391da177e4SLinus Torvalds 0x7a134ebae7275dc0ULL, 0xc1d61a85490dcc44ULL, 0x33913751f795a662ULL, 7401da177e4SLinus Torvalds 0x70b0806050403010ULL, 0x2b08c99f5eeac1b4ULL, 0xbbc5543fae2a9184ULL, 7411da177e4SLinus Torvalds 0xd4e722975211c543ULL, 0xde44ec4de576a893ULL, 0x74055eb6ed2f5bc2ULL, 7421da177e4SLinus Torvalds 0xebb46aa17f35de4aULL, 0x145b81a973cedabdULL, 0x8a800c0589068c8fULL, 7431da177e4SLinus Torvalds 0xc30275ee99b4772dULL, 0x135089af76cad9bcULL, 0xf32d946fd64ab99cULL, 7441da177e4SLinus Torvalds 0x0bc97761dfb5be6aULL, 0xddfa3a9d5d1dc040ULL, 0x577a3698d41b4ccfULL, 7451da177e4SLinus Torvalds 0x498279eb10b2fba2ULL, 0xa7e97427ba3a9d80ULL, 0xf09342bf6e21d14fULL, 7461da177e4SLinus Torvalds 0x5dd9f842637c211fULL, 0x4c5d1e86c50f43caULL, 0x71da39db3892e3aaULL, 7471da177e4SLinus Torvalds 0xd3ec2a915715c642ULL 7481da177e4SLinus Torvalds }; 7491da177e4SLinus Torvalds 7501da177e4SLinus Torvalds static const u64 c[KHAZAD_ROUNDS + 1] = { 7511da177e4SLinus Torvalds 0xba542f7453d3d24dULL, 0x50ac8dbf70529a4cULL, 0xead597d133515ba6ULL, 7521da177e4SLinus Torvalds 0xde48a899db32b7fcULL, 0xe39e919be2bb416eULL, 0xa5cb6b95a1f3b102ULL, 7531da177e4SLinus Torvalds 0xccc41d14c363da5dULL, 0x5fdc7dcd7f5a6c5cULL, 0xf726ffede89d6f8eULL 7541da177e4SLinus Torvalds }; 7551da177e4SLinus Torvalds 7566c2bb98bSHerbert Xu static int khazad_setkey(struct crypto_tfm *tfm, const u8 *in_key, 757560c06aeSHerbert Xu unsigned int key_len) 7581da177e4SLinus Torvalds { 7596c2bb98bSHerbert Xu struct khazad_ctx *ctx = crypto_tfm_ctx(tfm); 760d00e708cSAtsushi Nemoto const __be32 *key = (const __be32 *)in_key; 7611da177e4SLinus Torvalds int r; 7621da177e4SLinus Torvalds const u64 *S = T7; 7631da177e4SLinus Torvalds u64 K2, K1; 7641da177e4SLinus Torvalds 765d00e708cSAtsushi Nemoto /* key is supposed to be 32-bit aligned */ 766d00e708cSAtsushi Nemoto K2 = ((u64)be32_to_cpu(key[0]) << 32) | be32_to_cpu(key[1]); 767d00e708cSAtsushi Nemoto K1 = ((u64)be32_to_cpu(key[2]) << 32) | be32_to_cpu(key[3]); 7681da177e4SLinus Torvalds 7691da177e4SLinus Torvalds /* setup the encrypt key */ 7701da177e4SLinus Torvalds for (r = 0; r <= KHAZAD_ROUNDS; r++) { 7711da177e4SLinus Torvalds ctx->E[r] = T0[(int)(K1 >> 56) ] ^ 7721da177e4SLinus Torvalds T1[(int)(K1 >> 48) & 0xff] ^ 7731da177e4SLinus Torvalds T2[(int)(K1 >> 40) & 0xff] ^ 7741da177e4SLinus Torvalds T3[(int)(K1 >> 32) & 0xff] ^ 7751da177e4SLinus Torvalds T4[(int)(K1 >> 24) & 0xff] ^ 7761da177e4SLinus Torvalds T5[(int)(K1 >> 16) & 0xff] ^ 7771da177e4SLinus Torvalds T6[(int)(K1 >> 8) & 0xff] ^ 7781da177e4SLinus Torvalds T7[(int)(K1 ) & 0xff] ^ 7791da177e4SLinus Torvalds c[r] ^ K2; 7801da177e4SLinus Torvalds K2 = K1; 7811da177e4SLinus Torvalds K1 = ctx->E[r]; 7821da177e4SLinus Torvalds } 7831da177e4SLinus Torvalds /* Setup the decrypt key */ 7841da177e4SLinus Torvalds ctx->D[0] = ctx->E[KHAZAD_ROUNDS]; 7851da177e4SLinus Torvalds for (r = 1; r < KHAZAD_ROUNDS; r++) { 7861da177e4SLinus Torvalds K1 = ctx->E[KHAZAD_ROUNDS - r]; 7871da177e4SLinus Torvalds ctx->D[r] = T0[(int)S[(int)(K1 >> 56) ] & 0xff] ^ 7881da177e4SLinus Torvalds T1[(int)S[(int)(K1 >> 48) & 0xff] & 0xff] ^ 7891da177e4SLinus Torvalds T2[(int)S[(int)(K1 >> 40) & 0xff] & 0xff] ^ 7901da177e4SLinus Torvalds T3[(int)S[(int)(K1 >> 32) & 0xff] & 0xff] ^ 7911da177e4SLinus Torvalds T4[(int)S[(int)(K1 >> 24) & 0xff] & 0xff] ^ 7921da177e4SLinus Torvalds T5[(int)S[(int)(K1 >> 16) & 0xff] & 0xff] ^ 7931da177e4SLinus Torvalds T6[(int)S[(int)(K1 >> 8) & 0xff] & 0xff] ^ 7941da177e4SLinus Torvalds T7[(int)S[(int)(K1 ) & 0xff] & 0xff]; 7951da177e4SLinus Torvalds } 7961da177e4SLinus Torvalds ctx->D[KHAZAD_ROUNDS] = ctx->E[0]; 7971da177e4SLinus Torvalds 7981da177e4SLinus Torvalds return 0; 7991da177e4SLinus Torvalds 8001da177e4SLinus Torvalds } 8011da177e4SLinus Torvalds 8021da177e4SLinus Torvalds static void khazad_crypt(const u64 roundKey[KHAZAD_ROUNDS + 1], 8031da177e4SLinus Torvalds u8 *ciphertext, const u8 *plaintext) 8041da177e4SLinus Torvalds { 80506ace7a9SHerbert Xu const __be64 *src = (const __be64 *)plaintext; 80606ace7a9SHerbert Xu __be64 *dst = (__be64 *)ciphertext; 8071da177e4SLinus Torvalds int r; 8081da177e4SLinus Torvalds u64 state; 8091da177e4SLinus Torvalds 81006ace7a9SHerbert Xu state = be64_to_cpu(*src) ^ roundKey[0]; 8111da177e4SLinus Torvalds 8121da177e4SLinus Torvalds for (r = 1; r < KHAZAD_ROUNDS; r++) { 8131da177e4SLinus Torvalds state = T0[(int)(state >> 56) ] ^ 8141da177e4SLinus Torvalds T1[(int)(state >> 48) & 0xff] ^ 8151da177e4SLinus Torvalds T2[(int)(state >> 40) & 0xff] ^ 8161da177e4SLinus Torvalds T3[(int)(state >> 32) & 0xff] ^ 8171da177e4SLinus Torvalds T4[(int)(state >> 24) & 0xff] ^ 8181da177e4SLinus Torvalds T5[(int)(state >> 16) & 0xff] ^ 8191da177e4SLinus Torvalds T6[(int)(state >> 8) & 0xff] ^ 8201da177e4SLinus Torvalds T7[(int)(state ) & 0xff] ^ 8211da177e4SLinus Torvalds roundKey[r]; 8221da177e4SLinus Torvalds } 8231da177e4SLinus Torvalds 8241da177e4SLinus Torvalds state = (T0[(int)(state >> 56) ] & 0xff00000000000000ULL) ^ 8251da177e4SLinus Torvalds (T1[(int)(state >> 48) & 0xff] & 0x00ff000000000000ULL) ^ 8261da177e4SLinus Torvalds (T2[(int)(state >> 40) & 0xff] & 0x0000ff0000000000ULL) ^ 8271da177e4SLinus Torvalds (T3[(int)(state >> 32) & 0xff] & 0x000000ff00000000ULL) ^ 8281da177e4SLinus Torvalds (T4[(int)(state >> 24) & 0xff] & 0x00000000ff000000ULL) ^ 8291da177e4SLinus Torvalds (T5[(int)(state >> 16) & 0xff] & 0x0000000000ff0000ULL) ^ 8301da177e4SLinus Torvalds (T6[(int)(state >> 8) & 0xff] & 0x000000000000ff00ULL) ^ 8311da177e4SLinus Torvalds (T7[(int)(state ) & 0xff] & 0x00000000000000ffULL) ^ 8321da177e4SLinus Torvalds roundKey[KHAZAD_ROUNDS]; 8331da177e4SLinus Torvalds 83406ace7a9SHerbert Xu *dst = cpu_to_be64(state); 8351da177e4SLinus Torvalds } 8361da177e4SLinus Torvalds 8376c2bb98bSHerbert Xu static void khazad_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) 8381da177e4SLinus Torvalds { 8396c2bb98bSHerbert Xu struct khazad_ctx *ctx = crypto_tfm_ctx(tfm); 8401da177e4SLinus Torvalds khazad_crypt(ctx->E, dst, src); 8411da177e4SLinus Torvalds } 8421da177e4SLinus Torvalds 8436c2bb98bSHerbert Xu static void khazad_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) 8441da177e4SLinus Torvalds { 8456c2bb98bSHerbert Xu struct khazad_ctx *ctx = crypto_tfm_ctx(tfm); 8461da177e4SLinus Torvalds khazad_crypt(ctx->D, dst, src); 8471da177e4SLinus Torvalds } 8481da177e4SLinus Torvalds 8491da177e4SLinus Torvalds static struct crypto_alg khazad_alg = { 8501da177e4SLinus Torvalds .cra_name = "khazad", 8511da177e4SLinus Torvalds .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 8521da177e4SLinus Torvalds .cra_blocksize = KHAZAD_BLOCK_SIZE, 8531da177e4SLinus Torvalds .cra_ctxsize = sizeof (struct khazad_ctx), 854a429d260SHerbert Xu .cra_alignmask = 7, 8551da177e4SLinus Torvalds .cra_module = THIS_MODULE, 8561da177e4SLinus Torvalds .cra_u = { .cipher = { 8571da177e4SLinus Torvalds .cia_min_keysize = KHAZAD_KEY_SIZE, 8581da177e4SLinus Torvalds .cia_max_keysize = KHAZAD_KEY_SIZE, 8591da177e4SLinus Torvalds .cia_setkey = khazad_setkey, 8601da177e4SLinus Torvalds .cia_encrypt = khazad_encrypt, 8611da177e4SLinus Torvalds .cia_decrypt = khazad_decrypt } } 8621da177e4SLinus Torvalds }; 8631da177e4SLinus Torvalds 8643af5b90bSKamalesh Babulal static int __init khazad_mod_init(void) 8651da177e4SLinus Torvalds { 8661da177e4SLinus Torvalds int ret = 0; 8671da177e4SLinus Torvalds 8681da177e4SLinus Torvalds ret = crypto_register_alg(&khazad_alg); 8691da177e4SLinus Torvalds return ret; 8701da177e4SLinus Torvalds } 8711da177e4SLinus Torvalds 8723af5b90bSKamalesh Babulal static void __exit khazad_mod_fini(void) 8731da177e4SLinus Torvalds { 8741da177e4SLinus Torvalds crypto_unregister_alg(&khazad_alg); 8751da177e4SLinus Torvalds } 8761da177e4SLinus Torvalds 8771da177e4SLinus Torvalds 8783af5b90bSKamalesh Babulal module_init(khazad_mod_init); 8793af5b90bSKamalesh Babulal module_exit(khazad_mod_fini); 8801da177e4SLinus Torvalds 8811da177e4SLinus Torvalds MODULE_LICENSE("GPL"); 8821da177e4SLinus Torvalds MODULE_DESCRIPTION("Khazad Cryptographic Algorithm"); 883*5d26a105SKees Cook MODULE_ALIAS_CRYPTO("khazad"); 884