~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/crypto/khazad.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /crypto/khazad.c (Version linux-6.12-rc7) and /crypto/khazad.c (Version linux-6.8.12)


  1 /*                                                  1 /*
  2  * Cryptographic API.                               2  * Cryptographic API.
  3  *                                                  3  *
  4  * Khazad Algorithm                                 4  * Khazad Algorithm
  5  *                                                  5  *
  6  * The Khazad algorithm was developed by Paulo      6  * The Khazad algorithm was developed by Paulo S. L. M. Barreto and
  7  * Vincent Rijmen.  It was a finalist in the N      7  * Vincent Rijmen.  It was a finalist in the NESSIE encryption contest.
  8  *                                                  8  *
  9  * The original authors have disclaimed all co      9  * The original authors have disclaimed all copyright interest in this
 10  * code and thus put it in the public domain.      10  * code and thus put it in the public domain. The subsequent authors
 11  * have put this under the GNU General Public      11  * have put this under the GNU General Public License.
 12  *                                                 12  *
 13  * By Aaron Grothe ajgrothe@yahoo.com, August      13  * By Aaron Grothe ajgrothe@yahoo.com, August 1, 2004
 14  *                                                 14  *
 15  * This program is free software; you can redi     15  * This program is free software; you can redistribute it and/or modify
 16  * it under the terms of the GNU General Publi     16  * it under the terms of the GNU General Public License as published by
 17  * the Free Software Foundation; either versio     17  * the Free Software Foundation; either version 2 of the License, or
 18  * (at your option) any later version.             18  * (at your option) any later version.
 19  *                                                 19  *
 20  */                                                20  */
 21                                                    21 
 22 #include <crypto/algapi.h>                         22 #include <crypto/algapi.h>
 23 #include <linux/init.h>                            23 #include <linux/init.h>
 24 #include <linux/module.h>                          24 #include <linux/module.h>
 25 #include <linux/mm.h>                              25 #include <linux/mm.h>
 26 #include <asm/byteorder.h>                         26 #include <asm/byteorder.h>
 27 #include <linux/types.h>                           27 #include <linux/types.h>
 28                                                    28 
 29 #define KHAZAD_KEY_SIZE         16                 29 #define KHAZAD_KEY_SIZE         16
 30 #define KHAZAD_BLOCK_SIZE       8                  30 #define KHAZAD_BLOCK_SIZE       8
 31 #define KHAZAD_ROUNDS           8                  31 #define KHAZAD_ROUNDS           8
 32                                                    32 
 33 struct khazad_ctx {                                33 struct khazad_ctx {
 34         u64 E[KHAZAD_ROUNDS + 1];                  34         u64 E[KHAZAD_ROUNDS + 1];
 35         u64 D[KHAZAD_ROUNDS + 1];                  35         u64 D[KHAZAD_ROUNDS + 1];
 36 };                                                 36 };
 37                                                    37 
 38 static const u64 T0[256] = {                       38 static const u64 T0[256] = {
 39         0xbad3d268bbb96a01ULL, 0x54fc4d19e59a6     39         0xbad3d268bbb96a01ULL, 0x54fc4d19e59a66b1ULL, 0x2f71bc93e26514cdULL,
 40         0x749ccdb925871b51ULL, 0x53f55102f7a25     40         0x749ccdb925871b51ULL, 0x53f55102f7a257a4ULL, 0xd3686bb8d0d6be03ULL,
 41         0xd26b6fbdd6deb504ULL, 0x4dd72964b3528     41         0xd26b6fbdd6deb504ULL, 0x4dd72964b35285feULL, 0x50f05d0dfdba4aadULL,
 42         0xace98a26cf09e063ULL, 0x8d8a0e83091c9     42         0xace98a26cf09e063ULL, 0x8d8a0e83091c9684ULL, 0xbfdcc679a5914d1aULL,
 43         0x7090ddad3da7374dULL, 0x52f65507f1aa5     43         0x7090ddad3da7374dULL, 0x52f65507f1aa5ca3ULL, 0x9ab352c87ba417e1ULL,
 44         0x4cd42d61b55a8ef9ULL, 0xea238f6546032     44         0x4cd42d61b55a8ef9ULL, 0xea238f65460320acULL, 0xd56273a6c4e68411ULL,
 45         0x97a466f155cc68c2ULL, 0xd16e63b2dcc6a     45         0x97a466f155cc68c2ULL, 0xd16e63b2dcc6a80dULL, 0x3355ccffaa85d099ULL,
 46         0x51f35908fbb241aaULL, 0x5bed712ac7e20     46         0x51f35908fbb241aaULL, 0x5bed712ac7e20f9cULL, 0xa6f7a204f359ae55ULL,
 47         0xde7f5f81febec120ULL, 0x48d83d75ad7aa     47         0xde7f5f81febec120ULL, 0x48d83d75ad7aa2e5ULL, 0xa8e59a32d729cc7fULL,
 48         0x99b65ec771bc0ae8ULL, 0xdb704b90e096e     48         0x99b65ec771bc0ae8ULL, 0xdb704b90e096e63bULL, 0x3256c8faac8ddb9eULL,
 49         0xb7c4e65195d11522ULL, 0xfc19d72b32b3a     49         0xb7c4e65195d11522ULL, 0xfc19d72b32b3aaceULL, 0xe338ab48704b7393ULL,
 50         0x9ebf42dc63843bfdULL, 0x91ae7eef41fc5     50         0x9ebf42dc63843bfdULL, 0x91ae7eef41fc52d0ULL, 0x9bb056cd7dac1ce6ULL,
 51         0xe23baf4d76437894ULL, 0xbbd0d66dbdb16     51         0xe23baf4d76437894ULL, 0xbbd0d66dbdb16106ULL, 0x41c319589b32f1daULL,
 52         0x6eb2a5cb7957e517ULL, 0xa5f2ae0bf941b     52         0x6eb2a5cb7957e517ULL, 0xa5f2ae0bf941b35cULL, 0xcb400bc08016564bULL,
 53         0x6bbdb1da677fc20cULL, 0x95a26efb59dc7     53         0x6bbdb1da677fc20cULL, 0x95a26efb59dc7eccULL, 0xa1febe1fe1619f40ULL,
 54         0xf308eb1810cbc3e3ULL, 0xb1cefe4f81e12     54         0xf308eb1810cbc3e3ULL, 0xb1cefe4f81e12f30ULL, 0x0206080a0c10160eULL,
 55         0xcc4917db922e675eULL, 0xc45137f3a26e3     55         0xcc4917db922e675eULL, 0xc45137f3a26e3f66ULL, 0x1d2774694ee8cf53ULL,
 56         0x143c504478a09c6cULL, 0xc3582be8b0560     56         0x143c504478a09c6cULL, 0xc3582be8b0560e73ULL, 0x63a591f2573f9a34ULL,
 57         0xda734f95e69eed3cULL, 0x5de76934d3d23     57         0xda734f95e69eed3cULL, 0x5de76934d3d2358eULL, 0x5fe1613edfc22380ULL,
 58         0xdc79578bf2aed72eULL, 0x7d87e99413cf4     58         0xdc79578bf2aed72eULL, 0x7d87e99413cf486eULL, 0xcd4a13de94266c59ULL,
 59         0x7f81e19e1fdf5e60ULL, 0x5aee752fc1ea0     59         0x7f81e19e1fdf5e60ULL, 0x5aee752fc1ea049bULL, 0x6cb4adc17547f319ULL,
 60         0x5ce46d31d5da3e89ULL, 0xf704fb0c08ebe     60         0x5ce46d31d5da3e89ULL, 0xf704fb0c08ebefffULL, 0x266a98bed42d47f2ULL,
 61         0xff1cdb2438abb7c7ULL, 0xed2a937e543b1     61         0xff1cdb2438abb7c7ULL, 0xed2a937e543b11b9ULL, 0xe825876f4a1336a2ULL,
 62         0x9dba4ed3699c26f4ULL, 0x6fb1a1ce7f5fe     62         0x9dba4ed3699c26f4ULL, 0x6fb1a1ce7f5fee10ULL, 0x8e8f028c03048b8dULL,
 63         0x192b647d56c8e34fULL, 0xa0fdba1ae7699     63         0x192b647d56c8e34fULL, 0xa0fdba1ae7699447ULL, 0xf00de7171ad3deeaULL,
 64         0x89861e97113cba98ULL, 0x0f113c3322786     64         0x89861e97113cba98ULL, 0x0f113c332278692dULL, 0x07091c1b12383115ULL,
 65         0xafec8629c511fd6aULL, 0xfb10cb30208b9     65         0xafec8629c511fd6aULL, 0xfb10cb30208b9bdbULL, 0x0818202830405838ULL,
 66         0x153f54417ea8976bULL, 0x0d1734392e687     66         0x153f54417ea8976bULL, 0x0d1734392e687f23ULL, 0x040c101418202c1cULL,
 67         0x0103040506080b07ULL, 0x64ac8de94507a     67         0x0103040506080b07ULL, 0x64ac8de94507ab21ULL, 0xdf7c5b84f8b6ca27ULL,
 68         0x769ac5b329970d5fULL, 0x798bf9800bef6     68         0x769ac5b329970d5fULL, 0x798bf9800bef6472ULL, 0xdd7a538ef4a6dc29ULL,
 69         0x3d47f4c98ef5b2b3ULL, 0x163a584e74b08     69         0x3d47f4c98ef5b2b3ULL, 0x163a584e74b08a62ULL, 0x3f41fcc382e5a4bdULL,
 70         0x3759dcebb2a5fc85ULL, 0x6db7a9c4734ff     70         0x3759dcebb2a5fc85ULL, 0x6db7a9c4734ff81eULL, 0x3848e0d890dd95a8ULL,
 71         0xb9d6de67b1a17708ULL, 0x7395d1a237bf2     71         0xb9d6de67b1a17708ULL, 0x7395d1a237bf2a44ULL, 0xe926836a4c1b3da5ULL,
 72         0x355fd4e1beb5ea8bULL, 0x55ff491ce3926     72         0x355fd4e1beb5ea8bULL, 0x55ff491ce3926db6ULL, 0x7193d9a83baf3c4aULL,
 73         0x7b8df18a07ff727cULL, 0x8c890a860f149     73         0x7b8df18a07ff727cULL, 0x8c890a860f149d83ULL, 0x7296d5a731b72143ULL,
 74         0x88851a921734b19fULL, 0xf607ff090ee3e     74         0x88851a921734b19fULL, 0xf607ff090ee3e4f8ULL, 0x2a7ea882fc4d33d6ULL,
 75         0x3e42f8c684edafbaULL, 0x5ee2653bd9ca2     75         0x3e42f8c684edafbaULL, 0x5ee2653bd9ca2887ULL, 0x27699cbbd2254cf5ULL,
 76         0x46ca0543890ac0cfULL, 0x0c14303c28607     76         0x46ca0543890ac0cfULL, 0x0c14303c28607424ULL, 0x65af89ec430fa026ULL,
 77         0x68b8bdd56d67df05ULL, 0x61a399f85b2f8     77         0x68b8bdd56d67df05ULL, 0x61a399f85b2f8c3aULL, 0x03050c0f0a181d09ULL,
 78         0xc15e23e2bc46187dULL, 0x57f94116ef827     78         0xc15e23e2bc46187dULL, 0x57f94116ef827bb8ULL, 0xd6677fa9cefe9918ULL,
 79         0xd976439aec86f035ULL, 0x58e87d25cdfa1     79         0xd976439aec86f035ULL, 0x58e87d25cdfa1295ULL, 0xd875479fea8efb32ULL,
 80         0x66aa85e34917bd2fULL, 0xd7647bacc8f69     80         0x66aa85e34917bd2fULL, 0xd7647bacc8f6921fULL, 0x3a4ee8d29ccd83a6ULL,
 81         0xc84507cf8a0e4b42ULL, 0x3c44f0cc88fdb     81         0xc84507cf8a0e4b42ULL, 0x3c44f0cc88fdb9b4ULL, 0xfa13cf35268390dcULL,
 82         0x96a762f453c463c5ULL, 0xa7f4a601f551a     82         0x96a762f453c463c5ULL, 0xa7f4a601f551a552ULL, 0x98b55ac277b401efULL,
 83         0xec29977b52331abeULL, 0xb8d5da62b7a97     83         0xec29977b52331abeULL, 0xb8d5da62b7a97c0fULL, 0xc7543bfca876226fULL,
 84         0xaeef822cc319f66dULL, 0x69bbb9d06b6fd     84         0xaeef822cc319f66dULL, 0x69bbb9d06b6fd402ULL, 0x4bdd317aa762bfecULL,
 85         0xabe0963ddd31d176ULL, 0xa9e69e37d121c     85         0xabe0963ddd31d176ULL, 0xa9e69e37d121c778ULL, 0x67a981e64f1fb628ULL,
 86         0x0a1e28223c504e36ULL, 0x47c901468f02c     86         0x0a1e28223c504e36ULL, 0x47c901468f02cbc8ULL, 0xf20bef1d16c3c8e4ULL,
 87         0xb5c2ee5b99c1032cULL, 0x226688aacc0d6     87         0xb5c2ee5b99c1032cULL, 0x226688aacc0d6beeULL, 0xe532b356647b4981ULL,
 88         0xee2f9f715e230cb0ULL, 0xbedfc27ca3994     88         0xee2f9f715e230cb0ULL, 0xbedfc27ca399461dULL, 0x2b7dac87fa4538d1ULL,
 89         0x819e3ebf217ce2a0ULL, 0x1236485a6c90a     89         0x819e3ebf217ce2a0ULL, 0x1236485a6c90a67eULL, 0x839836b52d6cf4aeULL,
 90         0x1b2d6c775ad8f541ULL, 0x0e12383624706     90         0x1b2d6c775ad8f541ULL, 0x0e1238362470622aULL, 0x23658cafca0560e9ULL,
 91         0xf502f30604fbf9f1ULL, 0x45cf094c8312d     91         0xf502f30604fbf9f1ULL, 0x45cf094c8312ddc6ULL, 0x216384a5c61576e7ULL,
 92         0xce4f1fd19e3e7150ULL, 0x49db3970ab72a     92         0xce4f1fd19e3e7150ULL, 0x49db3970ab72a9e2ULL, 0x2c74b09ce87d09c4ULL,
 93         0xf916c33a2c9b8dd5ULL, 0xe637bf596e635     93         0xf916c33a2c9b8dd5ULL, 0xe637bf596e635488ULL, 0xb6c7e25493d91e25ULL,
 94         0x2878a088f05d25d8ULL, 0x17395c4b72b88     94         0x2878a088f05d25d8ULL, 0x17395c4b72b88165ULL, 0x829b32b02b64ffa9ULL,
 95         0x1a2e68725cd0fe46ULL, 0x8b80169d1d2ca     95         0x1a2e68725cd0fe46ULL, 0x8b80169d1d2cac96ULL, 0xfe1fdf213ea3bcc0ULL,
 96         0x8a8312981b24a791ULL, 0x091b242d36485     96         0x8a8312981b24a791ULL, 0x091b242d3648533fULL, 0xc94603ca8c064045ULL,
 97         0x879426a1354cd8b2ULL, 0x4ed2256bb94a9     97         0x879426a1354cd8b2ULL, 0x4ed2256bb94a98f7ULL, 0xe13ea3427c5b659dULL,
 98         0x2e72b896e46d1fcaULL, 0xe431b75362734     98         0x2e72b896e46d1fcaULL, 0xe431b75362734286ULL, 0xe03da7477a536e9aULL,
 99         0xeb208b60400b2babULL, 0x90ad7aea47f45     99         0xeb208b60400b2babULL, 0x90ad7aea47f459d7ULL, 0xa4f1aa0eff49b85bULL,
100         0x1e22786644f0d25aULL, 0x85922eab395cc    100         0x1e22786644f0d25aULL, 0x85922eab395ccebcULL, 0x60a09dfd5d27873dULL,
101         0x0000000000000000ULL, 0x256f94b1de355    101         0x0000000000000000ULL, 0x256f94b1de355afbULL, 0xf401f70302f3f2f6ULL,
102         0xf10ee3121cdbd5edULL, 0x94a16afe5fd47    102         0xf10ee3121cdbd5edULL, 0x94a16afe5fd475cbULL, 0x0b1d2c273a584531ULL,
103         0xe734bb5c686b5f8fULL, 0x759fc9bc238f1    103         0xe734bb5c686b5f8fULL, 0x759fc9bc238f1056ULL, 0xef2c9b74582b07b7ULL,
104         0x345cd0e4b8bde18cULL, 0x3153c4f5a695c    104         0x345cd0e4b8bde18cULL, 0x3153c4f5a695c697ULL, 0xd46177a3c2ee8f16ULL,
105         0xd06d67b7dacea30aULL, 0x869722a43344d    105         0xd06d67b7dacea30aULL, 0x869722a43344d3b5ULL, 0x7e82e59b19d75567ULL,
106         0xadea8e23c901eb64ULL, 0xfd1ad32e34bba    106         0xadea8e23c901eb64ULL, 0xfd1ad32e34bba1c9ULL, 0x297ba48df6552edfULL,
107         0x3050c0f0a09dcd90ULL, 0x3b4decd79ac58    107         0x3050c0f0a09dcd90ULL, 0x3b4decd79ac588a1ULL, 0x9fbc46d9658c30faULL,
108         0xf815c73f2a9386d2ULL, 0xc6573ff9ae7e2    108         0xf815c73f2a9386d2ULL, 0xc6573ff9ae7e2968ULL, 0x13354c5f6a98ad79ULL,
109         0x060a181e14303a12ULL, 0x050f14111e282    109         0x060a181e14303a12ULL, 0x050f14111e28271bULL, 0xc55233f6a4663461ULL,
110         0x113344556688bb77ULL, 0x7799c1b62f9f0    110         0x113344556688bb77ULL, 0x7799c1b62f9f0658ULL, 0x7c84ed9115c74369ULL,
111         0x7a8ef58f01f7797bULL, 0x7888fd850de76    111         0x7a8ef58f01f7797bULL, 0x7888fd850de76f75ULL, 0x365ad8eeb4adf782ULL,
112         0x1c24706c48e0c454ULL, 0x394be4dd96d59    112         0x1c24706c48e0c454ULL, 0x394be4dd96d59eafULL, 0x59eb7920cbf21992ULL,
113         0x1828607850c0e848ULL, 0x56fa4513e98a7    113         0x1828607850c0e848ULL, 0x56fa4513e98a70bfULL, 0xb3c8f6458df1393eULL,
114         0xb0cdfa4a87e92437ULL, 0x246c90b4d83d5    114         0xb0cdfa4a87e92437ULL, 0x246c90b4d83d51fcULL, 0x206080a0c01d7de0ULL,
115         0xb2cbf2408bf93239ULL, 0x92ab72e04be44    115         0xb2cbf2408bf93239ULL, 0x92ab72e04be44fd9ULL, 0xa3f8b615ed71894eULL,
116         0xc05d27e7ba4e137aULL, 0x44cc0d49851ad    116         0xc05d27e7ba4e137aULL, 0x44cc0d49851ad6c1ULL, 0x62a695f751379133ULL,
117         0x103040506080b070ULL, 0xb4c1ea5e9fc90    117         0x103040506080b070ULL, 0xb4c1ea5e9fc9082bULL, 0x84912aae3f54c5bbULL,
118         0x43c511529722e7d4ULL, 0x93a876e54dec4    118         0x43c511529722e7d4ULL, 0x93a876e54dec44deULL, 0xc25b2fedb65e0574ULL,
119         0x4ade357fa16ab4ebULL, 0xbddace73a9815    119         0x4ade357fa16ab4ebULL, 0xbddace73a9815b14ULL, 0x8f8c0689050c808aULL,
120         0x2d77b499ee7502c3ULL, 0xbcd9ca76af895    120         0x2d77b499ee7502c3ULL, 0xbcd9ca76af895013ULL, 0x9cb94ad66f942df3ULL,
121         0x6abeb5df6177c90bULL, 0x40c01d5d9d3af    121         0x6abeb5df6177c90bULL, 0x40c01d5d9d3afaddULL, 0xcf4c1bd498367a57ULL,
122         0xa2fbb210eb798249ULL, 0x809d3aba2774e    122         0xa2fbb210eb798249ULL, 0x809d3aba2774e9a7ULL, 0x4fd1216ebf4293f0ULL,
123         0x1f217c6342f8d95dULL, 0xca430fc5861e5    123         0x1f217c6342f8d95dULL, 0xca430fc5861e5d4cULL, 0xaae39238db39da71ULL,
124         0x42c61557912aecd3ULL                     124         0x42c61557912aecd3ULL
125 };                                                125 };
126                                                   126 
127 static const u64 T1[256] = {                      127 static const u64 T1[256] = {
128         0xd3ba68d2b9bb016aULL, 0xfc54194d9ae5b    128         0xd3ba68d2b9bb016aULL, 0xfc54194d9ae5b166ULL, 0x712f93bc65e2cd14ULL,
129         0x9c74b9cd8725511bULL, 0xf5530251a2f7a    129         0x9c74b9cd8725511bULL, 0xf5530251a2f7a457ULL, 0x68d3b86bd6d003beULL,
130         0x6bd2bd6fded604b5ULL, 0xd74d642952b3f    130         0x6bd2bd6fded604b5ULL, 0xd74d642952b3fe85ULL, 0xf0500d5dbafdad4aULL,
131         0xe9ac268a09cf63e0ULL, 0x8a8d830e1c098    131         0xe9ac268a09cf63e0ULL, 0x8a8d830e1c098496ULL, 0xdcbf79c691a51a4dULL,
132         0x9070addda73d4d37ULL, 0xf6520755aaf1a    132         0x9070addda73d4d37ULL, 0xf6520755aaf1a35cULL, 0xb39ac852a47be117ULL,
133         0xd44c612d5ab5f98eULL, 0x23ea658f0346a    133         0xd44c612d5ab5f98eULL, 0x23ea658f0346ac20ULL, 0x62d5a673e6c41184ULL,
134         0xa497f166cc55c268ULL, 0x6ed1b263c6dc0    134         0xa497f166cc55c268ULL, 0x6ed1b263c6dc0da8ULL, 0x5533ffcc85aa99d0ULL,
135         0xf3510859b2fbaa41ULL, 0xed5b2a71e2c79    135         0xf3510859b2fbaa41ULL, 0xed5b2a71e2c79c0fULL, 0xf7a604a259f355aeULL,
136         0x7fde815fbefe20c1ULL, 0xd848753d7aade    136         0x7fde815fbefe20c1ULL, 0xd848753d7aade5a2ULL, 0xe5a8329a29d77fccULL,
137         0xb699c75ebc71e80aULL, 0x70db904b96e03    137         0xb699c75ebc71e80aULL, 0x70db904b96e03be6ULL, 0x5632fac88dac9edbULL,
138         0xc4b751e6d1952215ULL, 0x19fc2bd7b332c    138         0xc4b751e6d1952215ULL, 0x19fc2bd7b332ceaaULL, 0x38e348ab4b709373ULL,
139         0xbf9edc428463fd3bULL, 0xae91ef7efc41d    139         0xbf9edc428463fd3bULL, 0xae91ef7efc41d052ULL, 0xb09bcd56ac7de61cULL,
140         0x3be24daf43769478ULL, 0xd0bb6dd6b1bd0    140         0x3be24daf43769478ULL, 0xd0bb6dd6b1bd0661ULL, 0xc3415819329bdaf1ULL,
141         0xb26ecba5577917e5ULL, 0xf2a50bae41f95    141         0xb26ecba5577917e5ULL, 0xf2a50bae41f95cb3ULL, 0x40cbc00b16804b56ULL,
142         0xbd6bdab17f670cc2ULL, 0xa295fb6edc59c    142         0xbd6bdab17f670cc2ULL, 0xa295fb6edc59cc7eULL, 0xfea11fbe61e1409fULL,
143         0x08f318ebcb10e3c3ULL, 0xceb14ffee1813    143         0x08f318ebcb10e3c3ULL, 0xceb14ffee181302fULL, 0x06020a08100c0e16ULL,
144         0x49ccdb172e925e67ULL, 0x51c4f3376ea26    144         0x49ccdb172e925e67ULL, 0x51c4f3376ea2663fULL, 0x271d6974e84e53cfULL,
145         0x3c144450a0786c9cULL, 0x58c3e82b56b07    145         0x3c144450a0786c9cULL, 0x58c3e82b56b0730eULL, 0xa563f2913f57349aULL,
146         0x73da954f9ee63cedULL, 0xe75d3469d2d38    146         0x73da954f9ee63cedULL, 0xe75d3469d2d38e35ULL, 0xe15f3e61c2df8023ULL,
147         0x79dc8b57aef22ed7ULL, 0x877d94e9cf136    147         0x79dc8b57aef22ed7ULL, 0x877d94e9cf136e48ULL, 0x4acdde132694596cULL,
148         0x817f9ee1df1f605eULL, 0xee5a2f75eac19    148         0x817f9ee1df1f605eULL, 0xee5a2f75eac19b04ULL, 0xb46cc1ad477519f3ULL,
149         0xe45c316ddad5893eULL, 0x04f70cfbeb08f    149         0xe45c316ddad5893eULL, 0x04f70cfbeb08ffefULL, 0x6a26be982dd4f247ULL,
150         0x1cff24dbab38c7b7ULL, 0x2aed7e933b54b    150         0x1cff24dbab38c7b7ULL, 0x2aed7e933b54b911ULL, 0x25e86f87134aa236ULL,
151         0xba9dd34e9c69f426ULL, 0xb16fcea15f7f1    151         0xba9dd34e9c69f426ULL, 0xb16fcea15f7f10eeULL, 0x8f8e8c0204038d8bULL,
152         0x2b197d64c8564fe3ULL, 0xfda01aba69e74    152         0x2b197d64c8564fe3ULL, 0xfda01aba69e74794ULL, 0x0df017e7d31aeadeULL,
153         0x8689971e3c1198baULL, 0x110f333c78222    153         0x8689971e3c1198baULL, 0x110f333c78222d69ULL, 0x09071b1c38121531ULL,
154         0xecaf298611c56afdULL, 0x10fb30cb8b20d    154         0xecaf298611c56afdULL, 0x10fb30cb8b20db9bULL, 0x1808282040303858ULL,
155         0x3f154154a87e6b97ULL, 0x170d3934682e2    155         0x3f154154a87e6b97ULL, 0x170d3934682e237fULL, 0x0c04141020181c2cULL,
156         0x030105040806070bULL, 0xac64e98d07452    156         0x030105040806070bULL, 0xac64e98d074521abULL, 0x7cdf845bb6f827caULL,
157         0x9a76b3c597295f0dULL, 0x8b7980f9ef0b7    157         0x9a76b3c597295f0dULL, 0x8b7980f9ef0b7264ULL, 0x7add8e53a6f429dcULL,
158         0x473dc9f4f58eb3b2ULL, 0x3a164e58b0746    158         0x473dc9f4f58eb3b2ULL, 0x3a164e58b074628aULL, 0x413fc3fce582bda4ULL,
159         0x5937ebdca5b285fcULL, 0xb76dc4a94f731    159         0x5937ebdca5b285fcULL, 0xb76dc4a94f731ef8ULL, 0x4838d8e0dd90a895ULL,
160         0xd6b967dea1b10877ULL, 0x9573a2d1bf374    160         0xd6b967dea1b10877ULL, 0x9573a2d1bf37442aULL, 0x26e96a831b4ca53dULL,
161         0x5f35e1d4b5be8beaULL, 0xff551c4992e3b    161         0x5f35e1d4b5be8beaULL, 0xff551c4992e3b66dULL, 0x9371a8d9af3b4a3cULL,
162         0x8d7b8af1ff077c72ULL, 0x898c860a140f8    162         0x8d7b8af1ff077c72ULL, 0x898c860a140f839dULL, 0x9672a7d5b7314321ULL,
163         0x8588921a34179fb1ULL, 0x07f609ffe30ef    163         0x8588921a34179fb1ULL, 0x07f609ffe30ef8e4ULL, 0x7e2a82a84dfcd633ULL,
164         0x423ec6f8ed84baafULL, 0xe25e3b65cad98    164         0x423ec6f8ed84baafULL, 0xe25e3b65cad98728ULL, 0x6927bb9c25d2f54cULL,
165         0xca4643050a89cfc0ULL, 0x140c3c3060282    165         0xca4643050a89cfc0ULL, 0x140c3c3060282474ULL, 0xaf65ec890f4326a0ULL,
166         0xb868d5bd676d05dfULL, 0xa361f8992f5b3    166         0xb868d5bd676d05dfULL, 0xa361f8992f5b3a8cULL, 0x05030f0c180a091dULL,
167         0x5ec1e22346bc7d18ULL, 0xf957164182efb    167         0x5ec1e22346bc7d18ULL, 0xf957164182efb87bULL, 0x67d6a97ffece1899ULL,
168         0x76d99a4386ec35f0ULL, 0xe858257dfacd9    168         0x76d99a4386ec35f0ULL, 0xe858257dfacd9512ULL, 0x75d89f478eea32fbULL,
169         0xaa66e38517492fbdULL, 0x64d7ac7bf6c81    169         0xaa66e38517492fbdULL, 0x64d7ac7bf6c81f92ULL, 0x4e3ad2e8cd9ca683ULL,
170         0x45c8cf070e8a424bULL, 0x443cccf0fd88b    170         0x45c8cf070e8a424bULL, 0x443cccf0fd88b4b9ULL, 0x13fa35cf8326dc90ULL,
171         0xa796f462c453c563ULL, 0xf4a701a651f55    171         0xa796f462c453c563ULL, 0xf4a701a651f552a5ULL, 0xb598c25ab477ef01ULL,
172         0x29ec7b973352be1aULL, 0xd5b862daa9b70    172         0x29ec7b973352be1aULL, 0xd5b862daa9b70f7cULL, 0x54c7fc3b76a86f22ULL,
173         0xefae2c8219c36df6ULL, 0xbb69d0b96f6b0    173         0xefae2c8219c36df6ULL, 0xbb69d0b96f6b02d4ULL, 0xdd4b7a3162a7ecbfULL,
174         0xe0ab3d9631dd76d1ULL, 0xe6a9379e21d17    174         0xe0ab3d9631dd76d1ULL, 0xe6a9379e21d178c7ULL, 0xa967e6811f4f28b6ULL,
175         0x1e0a2228503c364eULL, 0xc9474601028fc    175         0x1e0a2228503c364eULL, 0xc9474601028fc8cbULL, 0x0bf21defc316e4c8ULL,
176         0xc2b55beec1992c03ULL, 0x6622aa880dcce    176         0xc2b55beec1992c03ULL, 0x6622aa880dccee6bULL, 0x32e556b37b648149ULL,
177         0x2fee719f235eb00cULL, 0xdfbe7cc299a31    177         0x2fee719f235eb00cULL, 0xdfbe7cc299a31d46ULL, 0x7d2b87ac45fad138ULL,
178         0x9e81bf3e7c21a0e2ULL, 0x36125a48906c7    178         0x9e81bf3e7c21a0e2ULL, 0x36125a48906c7ea6ULL, 0x9883b5366c2daef4ULL,
179         0x2d1b776cd85a41f5ULL, 0x120e363870242    179         0x2d1b776cd85a41f5ULL, 0x120e363870242a62ULL, 0x6523af8c05cae960ULL,
180         0x02f506f3fb04f1f9ULL, 0xcf454c091283c    180         0x02f506f3fb04f1f9ULL, 0xcf454c091283c6ddULL, 0x6321a58415c6e776ULL,
181         0x4fced11f3e9e5071ULL, 0xdb49703972abe    181         0x4fced11f3e9e5071ULL, 0xdb49703972abe2a9ULL, 0x742c9cb07de8c409ULL,
182         0x16f93ac39b2cd58dULL, 0x37e659bf636e8    182         0x16f93ac39b2cd58dULL, 0x37e659bf636e8854ULL, 0xc7b654e2d993251eULL,
183         0x782888a05df0d825ULL, 0x39174b5cb8726    183         0x782888a05df0d825ULL, 0x39174b5cb8726581ULL, 0x9b82b032642ba9ffULL,
184         0x2e1a7268d05c46feULL, 0x808b9d162c1d9    184         0x2e1a7268d05c46feULL, 0x808b9d162c1d96acULL, 0x1ffe21dfa33ec0bcULL,
185         0x838a9812241b91a7ULL, 0x1b092d2448363    185         0x838a9812241b91a7ULL, 0x1b092d2448363f53ULL, 0x46c9ca03068c4540ULL,
186         0x9487a1264c35b2d8ULL, 0xd24e6b254ab9f    186         0x9487a1264c35b2d8ULL, 0xd24e6b254ab9f798ULL, 0x3ee142a35b7c9d65ULL,
187         0x722e96b86de4ca1fULL, 0x31e453b773628    187         0x722e96b86de4ca1fULL, 0x31e453b773628642ULL, 0x3de047a7537a9a6eULL,
188         0x20eb608b0b40ab2bULL, 0xad90ea7af447d    188         0x20eb608b0b40ab2bULL, 0xad90ea7af447d759ULL, 0xf1a40eaa49ff5bb8ULL,
189         0x221e6678f0445ad2ULL, 0x9285ab2e5c39b    189         0x221e6678f0445ad2ULL, 0x9285ab2e5c39bcceULL, 0xa060fd9d275d3d87ULL,
190         0x0000000000000000ULL, 0x6f25b19435def    190         0x0000000000000000ULL, 0x6f25b19435defb5aULL, 0x01f403f7f302f6f2ULL,
191         0x0ef112e3db1cedd5ULL, 0xa194fe6ad45fc    191         0x0ef112e3db1cedd5ULL, 0xa194fe6ad45fcb75ULL, 0x1d0b272c583a3145ULL,
192         0x34e75cbb6b688f5fULL, 0x9f75bcc98f235    192         0x34e75cbb6b688f5fULL, 0x9f75bcc98f235610ULL, 0x2cef749b2b58b707ULL,
193         0x5c34e4d0bdb88ce1ULL, 0x5331f5c495a69    193         0x5c34e4d0bdb88ce1ULL, 0x5331f5c495a697c6ULL, 0x61d4a377eec2168fULL,
194         0x6dd0b767ceda0aa3ULL, 0x9786a4224433b    194         0x6dd0b767ceda0aa3ULL, 0x9786a4224433b5d3ULL, 0x827e9be5d7196755ULL,
195         0xeaad238e01c964ebULL, 0x1afd2ed3bb34c    195         0xeaad238e01c964ebULL, 0x1afd2ed3bb34c9a1ULL, 0x7b298da455f6df2eULL,
196         0x5030f0c09da090cdULL, 0x4d3bd7ecc59aa    196         0x5030f0c09da090cdULL, 0x4d3bd7ecc59aa188ULL, 0xbc9fd9468c65fa30ULL,
197         0x15f83fc7932ad286ULL, 0x57c6f93f7eae6    197         0x15f83fc7932ad286ULL, 0x57c6f93f7eae6829ULL, 0x35135f4c986a79adULL,
198         0x0a061e183014123aULL, 0x0f051114281e1    198         0x0a061e183014123aULL, 0x0f051114281e1b27ULL, 0x52c5f63366a46134ULL,
199         0x33115544886677bbULL, 0x9977b6c19f2f5    199         0x33115544886677bbULL, 0x9977b6c19f2f5806ULL, 0x847c91edc7156943ULL,
200         0x8e7a8ff5f7017b79ULL, 0x887885fde70d7    200         0x8e7a8ff5f7017b79ULL, 0x887885fde70d756fULL, 0x5a36eed8adb482f7ULL,
201         0x241c6c70e04854c4ULL, 0x4b39dde4d596a    201         0x241c6c70e04854c4ULL, 0x4b39dde4d596af9eULL, 0xeb592079f2cb9219ULL,
202         0x28187860c05048e8ULL, 0xfa5613458ae9b    202         0x28187860c05048e8ULL, 0xfa5613458ae9bf70ULL, 0xc8b345f6f18d3e39ULL,
203         0xcdb04afae9873724ULL, 0x6c24b4903dd8f    203         0xcdb04afae9873724ULL, 0x6c24b4903dd8fc51ULL, 0x6020a0801dc0e07dULL,
204         0xcbb240f2f98b3932ULL, 0xab92e072e44bd    204         0xcbb240f2f98b3932ULL, 0xab92e072e44bd94fULL, 0xf8a315b671ed4e89ULL,
205         0x5dc0e7274eba7a13ULL, 0xcc44490d1a85c    205         0x5dc0e7274eba7a13ULL, 0xcc44490d1a85c1d6ULL, 0xa662f79537513391ULL,
206         0x30105040806070b0ULL, 0xc1b45eeac99f2    206         0x30105040806070b0ULL, 0xc1b45eeac99f2b08ULL, 0x9184ae2a543fbbc5ULL,
207         0xc54352112297d4e7ULL, 0xa893e576ec4dd    207         0xc54352112297d4e7ULL, 0xa893e576ec4dde44ULL, 0x5bc2ed2f5eb67405ULL,
208         0xde4a7f356aa1ebb4ULL, 0xdabd73ce81a91    208         0xde4a7f356aa1ebb4ULL, 0xdabd73ce81a9145bULL, 0x8c8f89060c058a80ULL,
209         0x772d99b475eec302ULL, 0xd9bc76ca89af1    209         0x772d99b475eec302ULL, 0xd9bc76ca89af1350ULL, 0xb99cd64a946ff32dULL,
210         0xbe6adfb577610bc9ULL, 0xc0405d1d3a9dd    210         0xbe6adfb577610bc9ULL, 0xc0405d1d3a9dddfaULL, 0x4ccfd41b3698577aULL,
211         0xfba210b279eb4982ULL, 0x9d80ba3a7427a    211         0xfba210b279eb4982ULL, 0x9d80ba3a7427a7e9ULL, 0xd14f6e2142bff093ULL,
212         0x211f637cf8425dd9ULL, 0x43cac50f1e864    212         0x211f637cf8425dd9ULL, 0x43cac50f1e864c5dULL, 0xe3aa389239db71daULL,
213         0xc64257152a91d3ecULL                     213         0xc64257152a91d3ecULL
214 };                                                214 };
215                                                   215 
216 static const u64 T2[256] = {                      216 static const u64 T2[256] = {
217         0xd268bad36a01bbb9ULL, 0x4d1954fc66b1e    217         0xd268bad36a01bbb9ULL, 0x4d1954fc66b1e59aULL, 0xbc932f7114cde265ULL,
218         0xcdb9749c1b512587ULL, 0x510253f557a4f    218         0xcdb9749c1b512587ULL, 0x510253f557a4f7a2ULL, 0x6bb8d368be03d0d6ULL,
219         0x6fbdd26bb504d6deULL, 0x29644dd785feb    219         0x6fbdd26bb504d6deULL, 0x29644dd785feb352ULL, 0x5d0d50f04aadfdbaULL,
220         0x8a26ace9e063cf09ULL, 0x0e838d8a96840    220         0x8a26ace9e063cf09ULL, 0x0e838d8a9684091cULL, 0xc679bfdc4d1aa591ULL,
221         0xddad7090374d3da7ULL, 0x550752f65ca3f    221         0xddad7090374d3da7ULL, 0x550752f65ca3f1aaULL, 0x52c89ab317e17ba4ULL,
222         0x2d614cd48ef9b55aULL, 0x8f65ea2320ac4    222         0x2d614cd48ef9b55aULL, 0x8f65ea2320ac4603ULL, 0x73a6d5628411c4e6ULL,
223         0x66f197a468c255ccULL, 0x63b2d16ea80dd    223         0x66f197a468c255ccULL, 0x63b2d16ea80ddcc6ULL, 0xccff3355d099aa85ULL,
224         0x590851f341aafbb2ULL, 0x712a5bed0f9cc    224         0x590851f341aafbb2ULL, 0x712a5bed0f9cc7e2ULL, 0xa204a6f7ae55f359ULL,
225         0x5f81de7fc120febeULL, 0x3d7548d8a2e5a    225         0x5f81de7fc120febeULL, 0x3d7548d8a2e5ad7aULL, 0x9a32a8e5cc7fd729ULL,
226         0x5ec799b60ae871bcULL, 0x4b90db70e63be    226         0x5ec799b60ae871bcULL, 0x4b90db70e63be096ULL, 0xc8fa3256db9eac8dULL,
227         0xe651b7c4152295d1ULL, 0xd72bfc19aace3    227         0xe651b7c4152295d1ULL, 0xd72bfc19aace32b3ULL, 0xab48e3387393704bULL,
228         0x42dc9ebf3bfd6384ULL, 0x7eef91ae52d04    228         0x42dc9ebf3bfd6384ULL, 0x7eef91ae52d041fcULL, 0x56cd9bb01ce67dacULL,
229         0xaf4de23b78947643ULL, 0xd66dbbd06106b    229         0xaf4de23b78947643ULL, 0xd66dbbd06106bdb1ULL, 0x195841c3f1da9b32ULL,
230         0xa5cb6eb2e5177957ULL, 0xae0ba5f2b35cf    230         0xa5cb6eb2e5177957ULL, 0xae0ba5f2b35cf941ULL, 0x0bc0cb40564b8016ULL,
231         0xb1da6bbdc20c677fULL, 0x6efb95a27ecc5    231         0xb1da6bbdc20c677fULL, 0x6efb95a27ecc59dcULL, 0xbe1fa1fe9f40e161ULL,
232         0xeb18f308c3e310cbULL, 0xfe4fb1ce2f308    232         0xeb18f308c3e310cbULL, 0xfe4fb1ce2f3081e1ULL, 0x080a0206160e0c10ULL,
233         0x17dbcc49675e922eULL, 0x37f3c4513f66a    233         0x17dbcc49675e922eULL, 0x37f3c4513f66a26eULL, 0x74691d27cf534ee8ULL,
234         0x5044143c9c6c78a0ULL, 0x2be8c3580e73b    234         0x5044143c9c6c78a0ULL, 0x2be8c3580e73b056ULL, 0x91f263a59a34573fULL,
235         0x4f95da73ed3ce69eULL, 0x69345de7358ed    235         0x4f95da73ed3ce69eULL, 0x69345de7358ed3d2ULL, 0x613e5fe12380dfc2ULL,
236         0x578bdc79d72ef2aeULL, 0xe9947d87486e1    236         0x578bdc79d72ef2aeULL, 0xe9947d87486e13cfULL, 0x13decd4a6c599426ULL,
237         0xe19e7f815e601fdfULL, 0x752f5aee049bc    237         0xe19e7f815e601fdfULL, 0x752f5aee049bc1eaULL, 0xadc16cb4f3197547ULL,
238         0x6d315ce43e89d5daULL, 0xfb0cf704efff0    238         0x6d315ce43e89d5daULL, 0xfb0cf704efff08ebULL, 0x98be266a47f2d42dULL,
239         0xdb24ff1cb7c738abULL, 0x937eed2a11b95    239         0xdb24ff1cb7c738abULL, 0x937eed2a11b9543bULL, 0x876fe82536a24a13ULL,
240         0x4ed39dba26f4699cULL, 0xa1ce6fb1ee107    240         0x4ed39dba26f4699cULL, 0xa1ce6fb1ee107f5fULL, 0x028c8e8f8b8d0304ULL,
241         0x647d192be34f56c8ULL, 0xba1aa0fd9447e    241         0x647d192be34f56c8ULL, 0xba1aa0fd9447e769ULL, 0xe717f00ddeea1ad3ULL,
242         0x1e978986ba98113cULL, 0x3c330f11692d2    242         0x1e978986ba98113cULL, 0x3c330f11692d2278ULL, 0x1c1b070931151238ULL,
243         0x8629afecfd6ac511ULL, 0xcb30fb109bdb2    243         0x8629afecfd6ac511ULL, 0xcb30fb109bdb208bULL, 0x2028081858383040ULL,
244         0x5441153f976b7ea8ULL, 0x34390d177f232    244         0x5441153f976b7ea8ULL, 0x34390d177f232e68ULL, 0x1014040c2c1c1820ULL,
245         0x040501030b070608ULL, 0x8de964acab214    245         0x040501030b070608ULL, 0x8de964acab214507ULL, 0x5b84df7cca27f8b6ULL,
246         0xc5b3769a0d5f2997ULL, 0xf980798b64720    246         0xc5b3769a0d5f2997ULL, 0xf980798b64720befULL, 0x538edd7adc29f4a6ULL,
247         0xf4c93d47b2b38ef5ULL, 0x584e163a8a627    247         0xf4c93d47b2b38ef5ULL, 0x584e163a8a6274b0ULL, 0xfcc33f41a4bd82e5ULL,
248         0xdceb3759fc85b2a5ULL, 0xa9c46db7f81e7    248         0xdceb3759fc85b2a5ULL, 0xa9c46db7f81e734fULL, 0xe0d8384895a890ddULL,
249         0xde67b9d67708b1a1ULL, 0xd1a273952a443    249         0xde67b9d67708b1a1ULL, 0xd1a273952a4437bfULL, 0x836ae9263da54c1bULL,
250         0xd4e1355fea8bbeb5ULL, 0x491c55ff6db6e    250         0xd4e1355fea8bbeb5ULL, 0x491c55ff6db6e392ULL, 0xd9a871933c4a3bafULL,
251         0xf18a7b8d727c07ffULL, 0x0a868c899d830    251         0xf18a7b8d727c07ffULL, 0x0a868c899d830f14ULL, 0xd5a77296214331b7ULL,
252         0x1a928885b19f1734ULL, 0xff09f607e4f80    252         0x1a928885b19f1734ULL, 0xff09f607e4f80ee3ULL, 0xa8822a7e33d6fc4dULL,
253         0xf8c63e42afba84edULL, 0x653b5ee22887d    253         0xf8c63e42afba84edULL, 0x653b5ee22887d9caULL, 0x9cbb27694cf5d225ULL,
254         0x054346cac0cf890aULL, 0x303c0c1474242    254         0x054346cac0cf890aULL, 0x303c0c1474242860ULL, 0x89ec65afa026430fULL,
255         0xbdd568b8df056d67ULL, 0x99f861a38c3a5    255         0xbdd568b8df056d67ULL, 0x99f861a38c3a5b2fULL, 0x0c0f03051d090a18ULL,
256         0x23e2c15e187dbc46ULL, 0x411657f97bb8e    256         0x23e2c15e187dbc46ULL, 0x411657f97bb8ef82ULL, 0x7fa9d6679918cefeULL,
257         0x439ad976f035ec86ULL, 0x7d2558e81295c    257         0x439ad976f035ec86ULL, 0x7d2558e81295cdfaULL, 0x479fd875fb32ea8eULL,
258         0x85e366aabd2f4917ULL, 0x7bacd764921fc    258         0x85e366aabd2f4917ULL, 0x7bacd764921fc8f6ULL, 0xe8d23a4e83a69ccdULL,
259         0x07cfc8454b428a0eULL, 0xf0cc3c44b9b48    259         0x07cfc8454b428a0eULL, 0xf0cc3c44b9b488fdULL, 0xcf35fa1390dc2683ULL,
260         0x62f496a763c553c4ULL, 0xa601a7f4a552f    260         0x62f496a763c553c4ULL, 0xa601a7f4a552f551ULL, 0x5ac298b501ef77b4ULL,
261         0x977bec291abe5233ULL, 0xda62b8d57c0fb    261         0x977bec291abe5233ULL, 0xda62b8d57c0fb7a9ULL, 0x3bfcc754226fa876ULL,
262         0x822caeeff66dc319ULL, 0xb9d069bbd4026    262         0x822caeeff66dc319ULL, 0xb9d069bbd4026b6fULL, 0x317a4bddbfeca762ULL,
263         0x963dabe0d176dd31ULL, 0x9e37a9e6c778d    263         0x963dabe0d176dd31ULL, 0x9e37a9e6c778d121ULL, 0x81e667a9b6284f1fULL,
264         0x28220a1e4e363c50ULL, 0x014647c9cbc88    264         0x28220a1e4e363c50ULL, 0x014647c9cbc88f02ULL, 0xef1df20bc8e416c3ULL,
265         0xee5bb5c2032c99c1ULL, 0x88aa22666beec    265         0xee5bb5c2032c99c1ULL, 0x88aa22666beecc0dULL, 0xb356e5324981647bULL,
266         0x9f71ee2f0cb05e23ULL, 0xc27cbedf461da    266         0x9f71ee2f0cb05e23ULL, 0xc27cbedf461da399ULL, 0xac872b7d38d1fa45ULL,
267         0x3ebf819ee2a0217cULL, 0x485a1236a67e6    267         0x3ebf819ee2a0217cULL, 0x485a1236a67e6c90ULL, 0x36b58398f4ae2d6cULL,
268         0x6c771b2df5415ad8ULL, 0x38360e12622a2    268         0x6c771b2df5415ad8ULL, 0x38360e12622a2470ULL, 0x8caf236560e9ca05ULL,
269         0xf306f502f9f104fbULL, 0x094c45cfddc68    269         0xf306f502f9f104fbULL, 0x094c45cfddc68312ULL, 0x84a5216376e7c615ULL,
270         0x1fd1ce4f71509e3eULL, 0x397049dba9e2a    270         0x1fd1ce4f71509e3eULL, 0x397049dba9e2ab72ULL, 0xb09c2c7409c4e87dULL,
271         0xc33af9168dd52c9bULL, 0xbf59e63754886    271         0xc33af9168dd52c9bULL, 0xbf59e63754886e63ULL, 0xe254b6c71e2593d9ULL,
272         0xa088287825d8f05dULL, 0x5c4b173981657    272         0xa088287825d8f05dULL, 0x5c4b1739816572b8ULL, 0x32b0829bffa92b64ULL,
273         0x68721a2efe465cd0ULL, 0x169d8b80ac961    273         0x68721a2efe465cd0ULL, 0x169d8b80ac961d2cULL, 0xdf21fe1fbcc03ea3ULL,
274         0x12988a83a7911b24ULL, 0x242d091b533f3    274         0x12988a83a7911b24ULL, 0x242d091b533f3648ULL, 0x03cac94640458c06ULL,
275         0x26a18794d8b2354cULL, 0x256b4ed298f7b    275         0x26a18794d8b2354cULL, 0x256b4ed298f7b94aULL, 0xa342e13e659d7c5bULL,
276         0xb8962e721fcae46dULL, 0xb753e43142866    276         0xb8962e721fcae46dULL, 0xb753e43142866273ULL, 0xa747e03d6e9a7a53ULL,
277         0x8b60eb202bab400bULL, 0x7aea90ad59d74    277         0x8b60eb202bab400bULL, 0x7aea90ad59d747f4ULL, 0xaa0ea4f1b85bff49ULL,
278         0x78661e22d25a44f0ULL, 0x2eab8592cebc3    278         0x78661e22d25a44f0ULL, 0x2eab8592cebc395cULL, 0x9dfd60a0873d5d27ULL,
279         0x0000000000000000ULL, 0x94b1256f5afbd    279         0x0000000000000000ULL, 0x94b1256f5afbde35ULL, 0xf703f401f2f602f3ULL,
280         0xe312f10ed5ed1cdbULL, 0x6afe94a175cb5    280         0xe312f10ed5ed1cdbULL, 0x6afe94a175cb5fd4ULL, 0x2c270b1d45313a58ULL,
281         0xbb5ce7345f8f686bULL, 0xc9bc759f10562    281         0xbb5ce7345f8f686bULL, 0xc9bc759f1056238fULL, 0x9b74ef2c07b7582bULL,
282         0xd0e4345ce18cb8bdULL, 0xc4f53153c697a    282         0xd0e4345ce18cb8bdULL, 0xc4f53153c697a695ULL, 0x77a3d4618f16c2eeULL,
283         0x67b7d06da30adaceULL, 0x22a48697d3b53    283         0x67b7d06da30adaceULL, 0x22a48697d3b53344ULL, 0xe59b7e82556719d7ULL,
284         0x8e23adeaeb64c901ULL, 0xd32efd1aa1c93    284         0x8e23adeaeb64c901ULL, 0xd32efd1aa1c934bbULL, 0xa48d297b2edff655ULL,
285         0xc0f03050cd90a09dULL, 0xecd73b4d88a19    285         0xc0f03050cd90a09dULL, 0xecd73b4d88a19ac5ULL, 0x46d99fbc30fa658cULL,
286         0xc73ff81586d22a93ULL, 0x3ff9c6572968a    286         0xc73ff81586d22a93ULL, 0x3ff9c6572968ae7eULL, 0x4c5f1335ad796a98ULL,
287         0x181e060a3a121430ULL, 0x1411050f271b1    287         0x181e060a3a121430ULL, 0x1411050f271b1e28ULL, 0x33f6c5523461a466ULL,
288         0x44551133bb776688ULL, 0xc1b6779906582    288         0x44551133bb776688ULL, 0xc1b6779906582f9fULL, 0xed917c84436915c7ULL,
289         0xf58f7a8e797b01f7ULL, 0xfd8578886f750    289         0xf58f7a8e797b01f7ULL, 0xfd8578886f750de7ULL, 0xd8ee365af782b4adULL,
290         0x706c1c24c45448e0ULL, 0xe4dd394b9eaf9    290         0x706c1c24c45448e0ULL, 0xe4dd394b9eaf96d5ULL, 0x792059eb1992cbf2ULL,
291         0x60781828e84850c0ULL, 0x451356fa70bfe    291         0x60781828e84850c0ULL, 0x451356fa70bfe98aULL, 0xf645b3c8393e8df1ULL,
292         0xfa4ab0cd243787e9ULL, 0x90b4246c51fcd    292         0xfa4ab0cd243787e9ULL, 0x90b4246c51fcd83dULL, 0x80a020607de0c01dULL,
293         0xf240b2cb32398bf9ULL, 0x72e092ab4fd94    293         0xf240b2cb32398bf9ULL, 0x72e092ab4fd94be4ULL, 0xb615a3f8894eed71ULL,
294         0x27e7c05d137aba4eULL, 0x0d4944ccd6c18    294         0x27e7c05d137aba4eULL, 0x0d4944ccd6c1851aULL, 0x95f762a691335137ULL,
295         0x40501030b0706080ULL, 0xea5eb4c1082b9    295         0x40501030b0706080ULL, 0xea5eb4c1082b9fc9ULL, 0x2aae8491c5bb3f54ULL,
296         0x115243c5e7d49722ULL, 0x76e593a844de4    296         0x115243c5e7d49722ULL, 0x76e593a844de4decULL, 0x2fedc25b0574b65eULL,
297         0x357f4adeb4eba16aULL, 0xce73bdda5b14a    297         0x357f4adeb4eba16aULL, 0xce73bdda5b14a981ULL, 0x06898f8c808a050cULL,
298         0xb4992d7702c3ee75ULL, 0xca76bcd95013a    298         0xb4992d7702c3ee75ULL, 0xca76bcd95013af89ULL, 0x4ad69cb92df36f94ULL,
299         0xb5df6abec90b6177ULL, 0x1d5d40c0fadd9    299         0xb5df6abec90b6177ULL, 0x1d5d40c0fadd9d3aULL, 0x1bd4cf4c7a579836ULL,
300         0xb210a2fb8249eb79ULL, 0x3aba809de9a72    300         0xb210a2fb8249eb79ULL, 0x3aba809de9a72774ULL, 0x216e4fd193f0bf42ULL,
301         0x7c631f21d95d42f8ULL, 0x0fc5ca435d4c8    301         0x7c631f21d95d42f8ULL, 0x0fc5ca435d4c861eULL, 0x9238aae3da71db39ULL,
302         0x155742c6ecd3912aULL                     302         0x155742c6ecd3912aULL
303 };                                                303 };
304                                                   304 
305 static const u64 T3[256] = {                      305 static const u64 T3[256] = {
306         0x68d2d3ba016ab9bbULL, 0x194dfc54b1669    306         0x68d2d3ba016ab9bbULL, 0x194dfc54b1669ae5ULL, 0x93bc712fcd1465e2ULL,
307         0xb9cd9c74511b8725ULL, 0x0251f553a457a    307         0xb9cd9c74511b8725ULL, 0x0251f553a457a2f7ULL, 0xb86b68d303bed6d0ULL,
308         0xbd6f6bd204b5ded6ULL, 0x6429d74dfe855    308         0xbd6f6bd204b5ded6ULL, 0x6429d74dfe8552b3ULL, 0x0d5df050ad4abafdULL,
309         0x268ae9ac63e009cfULL, 0x830e8a8d84961    309         0x268ae9ac63e009cfULL, 0x830e8a8d84961c09ULL, 0x79c6dcbf1a4d91a5ULL,
310         0xaddd90704d37a73dULL, 0x0755f652a35ca    310         0xaddd90704d37a73dULL, 0x0755f652a35caaf1ULL, 0xc852b39ae117a47bULL,
311         0x612dd44cf98e5ab5ULL, 0x658f23eaac200    311         0x612dd44cf98e5ab5ULL, 0x658f23eaac200346ULL, 0xa67362d51184e6c4ULL,
312         0xf166a497c268cc55ULL, 0xb2636ed10da8c    312         0xf166a497c268cc55ULL, 0xb2636ed10da8c6dcULL, 0xffcc553399d085aaULL,
313         0x0859f351aa41b2fbULL, 0x2a71ed5b9c0fe    313         0x0859f351aa41b2fbULL, 0x2a71ed5b9c0fe2c7ULL, 0x04a2f7a655ae59f3ULL,
314         0x815f7fde20c1befeULL, 0x753dd848e5a27    314         0x815f7fde20c1befeULL, 0x753dd848e5a27aadULL, 0x329ae5a87fcc29d7ULL,
315         0xc75eb699e80abc71ULL, 0x904b70db3be69    315         0xc75eb699e80abc71ULL, 0x904b70db3be696e0ULL, 0xfac856329edb8dacULL,
316         0x51e6c4b72215d195ULL, 0x2bd719fcceaab    316         0x51e6c4b72215d195ULL, 0x2bd719fcceaab332ULL, 0x48ab38e393734b70ULL,
317         0xdc42bf9efd3b8463ULL, 0xef7eae91d052f    317         0xdc42bf9efd3b8463ULL, 0xef7eae91d052fc41ULL, 0xcd56b09be61cac7dULL,
318         0x4daf3be294784376ULL, 0x6dd6d0bb0661b    318         0x4daf3be294784376ULL, 0x6dd6d0bb0661b1bdULL, 0x5819c341daf1329bULL,
319         0xcba5b26e17e55779ULL, 0x0baef2a55cb34    319         0xcba5b26e17e55779ULL, 0x0baef2a55cb341f9ULL, 0xc00b40cb4b561680ULL,
320         0xdab1bd6b0cc27f67ULL, 0xfb6ea295cc7ed    320         0xdab1bd6b0cc27f67ULL, 0xfb6ea295cc7edc59ULL, 0x1fbefea1409f61e1ULL,
321         0x18eb08f3e3c3cb10ULL, 0x4ffeceb1302fe    321         0x18eb08f3e3c3cb10ULL, 0x4ffeceb1302fe181ULL, 0x0a0806020e16100cULL,
322         0xdb1749cc5e672e92ULL, 0xf33751c4663f6    322         0xdb1749cc5e672e92ULL, 0xf33751c4663f6ea2ULL, 0x6974271d53cfe84eULL,
323         0x44503c146c9ca078ULL, 0xe82b58c3730e5    323         0x44503c146c9ca078ULL, 0xe82b58c3730e56b0ULL, 0xf291a563349a3f57ULL,
324         0x954f73da3ced9ee6ULL, 0x3469e75d8e35d    324         0x954f73da3ced9ee6ULL, 0x3469e75d8e35d2d3ULL, 0x3e61e15f8023c2dfULL,
325         0x8b5779dc2ed7aef2ULL, 0x94e9877d6e48c    325         0x8b5779dc2ed7aef2ULL, 0x94e9877d6e48cf13ULL, 0xde134acd596c2694ULL,
326         0x9ee1817f605edf1fULL, 0x2f75ee5a9b04e    326         0x9ee1817f605edf1fULL, 0x2f75ee5a9b04eac1ULL, 0xc1adb46c19f34775ULL,
327         0x316de45c893edad5ULL, 0x0cfb04f7ffefe    327         0x316de45c893edad5ULL, 0x0cfb04f7ffefeb08ULL, 0xbe986a26f2472dd4ULL,
328         0x24db1cffc7b7ab38ULL, 0x7e932aedb9113    328         0x24db1cffc7b7ab38ULL, 0x7e932aedb9113b54ULL, 0x6f8725e8a236134aULL,
329         0xd34eba9df4269c69ULL, 0xcea1b16f10ee5    329         0xd34eba9df4269c69ULL, 0xcea1b16f10ee5f7fULL, 0x8c028f8e8d8b0403ULL,
330         0x7d642b194fe3c856ULL, 0x1abafda047946    330         0x7d642b194fe3c856ULL, 0x1abafda0479469e7ULL, 0x17e70df0eaded31aULL,
331         0x971e868998ba3c11ULL, 0x333c110f2d697    331         0x971e868998ba3c11ULL, 0x333c110f2d697822ULL, 0x1b1c090715313812ULL,
332         0x2986ecaf6afd11c5ULL, 0x30cb10fbdb9b8    332         0x2986ecaf6afd11c5ULL, 0x30cb10fbdb9b8b20ULL, 0x2820180838584030ULL,
333         0x41543f156b97a87eULL, 0x3934170d237f6    333         0x41543f156b97a87eULL, 0x3934170d237f682eULL, 0x14100c041c2c2018ULL,
334         0x05040301070b0806ULL, 0xe98dac6421ab0    334         0x05040301070b0806ULL, 0xe98dac6421ab0745ULL, 0x845b7cdf27cab6f8ULL,
335         0xb3c59a765f0d9729ULL, 0x80f98b797264e    335         0xb3c59a765f0d9729ULL, 0x80f98b797264ef0bULL, 0x8e537add29dca6f4ULL,
336         0xc9f4473db3b2f58eULL, 0x4e583a16628ab    336         0xc9f4473db3b2f58eULL, 0x4e583a16628ab074ULL, 0xc3fc413fbda4e582ULL,
337         0xebdc593785fca5b2ULL, 0xc4a9b76d1ef84    337         0xebdc593785fca5b2ULL, 0xc4a9b76d1ef84f73ULL, 0xd8e04838a895dd90ULL,
338         0x67ded6b90877a1b1ULL, 0xa2d19573442ab    338         0x67ded6b90877a1b1ULL, 0xa2d19573442abf37ULL, 0x6a8326e9a53d1b4cULL,
339         0xe1d45f358beab5beULL, 0x1c49ff55b66d9    339         0xe1d45f358beab5beULL, 0x1c49ff55b66d92e3ULL, 0xa8d993714a3caf3bULL,
340         0x8af18d7b7c72ff07ULL, 0x860a898c839d1    340         0x8af18d7b7c72ff07ULL, 0x860a898c839d140fULL, 0xa7d596724321b731ULL,
341         0x921a85889fb13417ULL, 0x09ff07f6f8e4e    341         0x921a85889fb13417ULL, 0x09ff07f6f8e4e30eULL, 0x82a87e2ad6334dfcULL,
342         0xc6f8423ebaafed84ULL, 0x3b65e25e8728c    342         0xc6f8423ebaafed84ULL, 0x3b65e25e8728cad9ULL, 0xbb9c6927f54c25d2ULL,
343         0x4305ca46cfc00a89ULL, 0x3c30140c24746    343         0x4305ca46cfc00a89ULL, 0x3c30140c24746028ULL, 0xec89af6526a00f43ULL,
344         0xd5bdb86805df676dULL, 0xf899a3613a8c2    344         0xd5bdb86805df676dULL, 0xf899a3613a8c2f5bULL, 0x0f0c0503091d180aULL,
345         0xe2235ec17d1846bcULL, 0x1641f957b87b8    345         0xe2235ec17d1846bcULL, 0x1641f957b87b82efULL, 0xa97f67d61899feceULL,
346         0x9a4376d935f086ecULL, 0x257de8589512f    346         0x9a4376d935f086ecULL, 0x257de8589512facdULL, 0x9f4775d832fb8eeaULL,
347         0xe385aa662fbd1749ULL, 0xac7b64d71f92f    347         0xe385aa662fbd1749ULL, 0xac7b64d71f92f6c8ULL, 0xd2e84e3aa683cd9cULL,
348         0xcf0745c8424b0e8aULL, 0xccf0443cb4b9f    348         0xcf0745c8424b0e8aULL, 0xccf0443cb4b9fd88ULL, 0x35cf13fadc908326ULL,
349         0xf462a796c563c453ULL, 0x01a6f4a752a55    349         0xf462a796c563c453ULL, 0x01a6f4a752a551f5ULL, 0xc25ab598ef01b477ULL,
350         0x7b9729ecbe1a3352ULL, 0x62dad5b80f7ca    350         0x7b9729ecbe1a3352ULL, 0x62dad5b80f7ca9b7ULL, 0xfc3b54c76f2276a8ULL,
351         0x2c82efae6df619c3ULL, 0xd0b9bb6902d46    351         0x2c82efae6df619c3ULL, 0xd0b9bb6902d46f6bULL, 0x7a31dd4becbf62a7ULL,
352         0x3d96e0ab76d131ddULL, 0x379ee6a978c72    352         0x3d96e0ab76d131ddULL, 0x379ee6a978c721d1ULL, 0xe681a96728b61f4fULL,
353         0x22281e0a364e503cULL, 0x4601c947c8cb0    353         0x22281e0a364e503cULL, 0x4601c947c8cb028fULL, 0x1def0bf2e4c8c316ULL,
354         0x5beec2b52c03c199ULL, 0xaa886622ee6b0    354         0x5beec2b52c03c199ULL, 0xaa886622ee6b0dccULL, 0x56b332e581497b64ULL,
355         0x719f2feeb00c235eULL, 0x7cc2dfbe1d469    355         0x719f2feeb00c235eULL, 0x7cc2dfbe1d4699a3ULL, 0x87ac7d2bd13845faULL,
356         0xbf3e9e81a0e27c21ULL, 0x5a4836127ea69    356         0xbf3e9e81a0e27c21ULL, 0x5a4836127ea6906cULL, 0xb5369883aef46c2dULL,
357         0x776c2d1b41f5d85aULL, 0x3638120e2a627    357         0x776c2d1b41f5d85aULL, 0x3638120e2a627024ULL, 0xaf8c6523e96005caULL,
358         0x06f302f5f1f9fb04ULL, 0x4c09cf45c6dd1    358         0x06f302f5f1f9fb04ULL, 0x4c09cf45c6dd1283ULL, 0xa5846321e77615c6ULL,
359         0xd11f4fce50713e9eULL, 0x7039db49e2a97    359         0xd11f4fce50713e9eULL, 0x7039db49e2a972abULL, 0x9cb0742cc4097de8ULL,
360         0x3ac316f9d58d9b2cULL, 0x59bf37e688546    360         0x3ac316f9d58d9b2cULL, 0x59bf37e68854636eULL, 0x54e2c7b6251ed993ULL,
361         0x88a07828d8255df0ULL, 0x4b5c39176581b    361         0x88a07828d8255df0ULL, 0x4b5c39176581b872ULL, 0xb0329b82a9ff642bULL,
362         0x72682e1a46fed05cULL, 0x9d16808b96ac2    362         0x72682e1a46fed05cULL, 0x9d16808b96ac2c1dULL, 0x21df1ffec0bca33eULL,
363         0x9812838a91a7241bULL, 0x2d241b093f534    363         0x9812838a91a7241bULL, 0x2d241b093f534836ULL, 0xca0346c94540068cULL,
364         0xa1269487b2d84c35ULL, 0x6b25d24ef7984    364         0xa1269487b2d84c35ULL, 0x6b25d24ef7984ab9ULL, 0x42a33ee19d655b7cULL,
365         0x96b8722eca1f6de4ULL, 0x53b731e486427    365         0x96b8722eca1f6de4ULL, 0x53b731e486427362ULL, 0x47a73de09a6e537aULL,
366         0x608b20ebab2b0b40ULL, 0xea7aad90d759f    366         0x608b20ebab2b0b40ULL, 0xea7aad90d759f447ULL, 0x0eaaf1a45bb849ffULL,
367         0x6678221e5ad2f044ULL, 0xab2e9285bcce5    367         0x6678221e5ad2f044ULL, 0xab2e9285bcce5c39ULL, 0xfd9da0603d87275dULL,
368         0x0000000000000000ULL, 0xb1946f25fb5a3    368         0x0000000000000000ULL, 0xb1946f25fb5a35deULL, 0x03f701f4f6f2f302ULL,
369         0x12e30ef1edd5db1cULL, 0xfe6aa194cb75d    369         0x12e30ef1edd5db1cULL, 0xfe6aa194cb75d45fULL, 0x272c1d0b3145583aULL,
370         0x5cbb34e78f5f6b68ULL, 0xbcc99f7556108    370         0x5cbb34e78f5f6b68ULL, 0xbcc99f7556108f23ULL, 0x749b2cefb7072b58ULL,
371         0xe4d05c348ce1bdb8ULL, 0xf5c4533197c69    371         0xe4d05c348ce1bdb8ULL, 0xf5c4533197c695a6ULL, 0xa37761d4168feec2ULL,
372         0xb7676dd00aa3cedaULL, 0xa4229786b5d34    372         0xb7676dd00aa3cedaULL, 0xa4229786b5d34433ULL, 0x9be5827e6755d719ULL,
373         0x238eeaad64eb01c9ULL, 0x2ed31afdc9a1b    373         0x238eeaad64eb01c9ULL, 0x2ed31afdc9a1bb34ULL, 0x8da47b29df2e55f6ULL,
374         0xf0c0503090cd9da0ULL, 0xd7ec4d3ba188c    374         0xf0c0503090cd9da0ULL, 0xd7ec4d3ba188c59aULL, 0xd946bc9ffa308c65ULL,
375         0x3fc715f8d286932aULL, 0xf93f57c668297    375         0x3fc715f8d286932aULL, 0xf93f57c668297eaeULL, 0x5f4c351379ad986aULL,
376         0x1e180a06123a3014ULL, 0x11140f051b272    376         0x1e180a06123a3014ULL, 0x11140f051b27281eULL, 0xf63352c5613466a4ULL,
377         0x5544331177bb8866ULL, 0xb6c1997758069    377         0x5544331177bb8866ULL, 0xb6c1997758069f2fULL, 0x91ed847c6943c715ULL,
378         0x8ff58e7a7b79f701ULL, 0x85fd8878756fe    378         0x8ff58e7a7b79f701ULL, 0x85fd8878756fe70dULL, 0xeed85a3682f7adb4ULL,
379         0x6c70241c54c4e048ULL, 0xdde44b39af9ed    379         0x6c70241c54c4e048ULL, 0xdde44b39af9ed596ULL, 0x2079eb599219f2cbULL,
380         0x7860281848e8c050ULL, 0x1345fa56bf708    380         0x7860281848e8c050ULL, 0x1345fa56bf708ae9ULL, 0x45f6c8b33e39f18dULL,
381         0x4afacdb03724e987ULL, 0xb4906c24fc513    381         0x4afacdb03724e987ULL, 0xb4906c24fc513dd8ULL, 0xa0806020e07d1dc0ULL,
382         0x40f2cbb23932f98bULL, 0xe072ab92d94fe    382         0x40f2cbb23932f98bULL, 0xe072ab92d94fe44bULL, 0x15b6f8a34e8971edULL,
383         0xe7275dc07a134ebaULL, 0x490dcc44c1d61    383         0xe7275dc07a134ebaULL, 0x490dcc44c1d61a85ULL, 0xf795a66233913751ULL,
384         0x5040301070b08060ULL, 0x5eeac1b42b08c    384         0x5040301070b08060ULL, 0x5eeac1b42b08c99fULL, 0xae2a9184bbc5543fULL,
385         0x5211c543d4e72297ULL, 0xe576a893de44e    385         0x5211c543d4e72297ULL, 0xe576a893de44ec4dULL, 0xed2f5bc274055eb6ULL,
386         0x7f35de4aebb46aa1ULL, 0x73cedabd145b8    386         0x7f35de4aebb46aa1ULL, 0x73cedabd145b81a9ULL, 0x89068c8f8a800c05ULL,
387         0x99b4772dc30275eeULL, 0x76cad9bc13508    387         0x99b4772dc30275eeULL, 0x76cad9bc135089afULL, 0xd64ab99cf32d946fULL,
388         0xdfb5be6a0bc97761ULL, 0x5d1dc040ddfa3    388         0xdfb5be6a0bc97761ULL, 0x5d1dc040ddfa3a9dULL, 0xd41b4ccf577a3698ULL,
389         0x10b2fba2498279ebULL, 0xba3a9d80a7e97    389         0x10b2fba2498279ebULL, 0xba3a9d80a7e97427ULL, 0x6e21d14ff09342bfULL,
390         0x637c211f5dd9f842ULL, 0xc50f43ca4c5d1    390         0x637c211f5dd9f842ULL, 0xc50f43ca4c5d1e86ULL, 0x3892e3aa71da39dbULL,
391         0x5715c642d3ec2a91ULL                     391         0x5715c642d3ec2a91ULL
392 };                                                392 };
393                                                   393 
394 static const u64 T4[256] = {                      394 static const u64 T4[256] = {
395         0xbbb96a01bad3d268ULL, 0xe59a66b154fc4    395         0xbbb96a01bad3d268ULL, 0xe59a66b154fc4d19ULL, 0xe26514cd2f71bc93ULL,
396         0x25871b51749ccdb9ULL, 0xf7a257a453f55    396         0x25871b51749ccdb9ULL, 0xf7a257a453f55102ULL, 0xd0d6be03d3686bb8ULL,
397         0xd6deb504d26b6fbdULL, 0xb35285fe4dd72    397         0xd6deb504d26b6fbdULL, 0xb35285fe4dd72964ULL, 0xfdba4aad50f05d0dULL,
398         0xcf09e063ace98a26ULL, 0x091c96848d8a0    398         0xcf09e063ace98a26ULL, 0x091c96848d8a0e83ULL, 0xa5914d1abfdcc679ULL,
399         0x3da7374d7090ddadULL, 0xf1aa5ca352f65    399         0x3da7374d7090ddadULL, 0xf1aa5ca352f65507ULL, 0x7ba417e19ab352c8ULL,
400         0xb55a8ef94cd42d61ULL, 0x460320acea238    400         0xb55a8ef94cd42d61ULL, 0x460320acea238f65ULL, 0xc4e68411d56273a6ULL,
401         0x55cc68c297a466f1ULL, 0xdcc6a80dd16e6    401         0x55cc68c297a466f1ULL, 0xdcc6a80dd16e63b2ULL, 0xaa85d0993355ccffULL,
402         0xfbb241aa51f35908ULL, 0xc7e20f9c5bed7    402         0xfbb241aa51f35908ULL, 0xc7e20f9c5bed712aULL, 0xf359ae55a6f7a204ULL,
403         0xfebec120de7f5f81ULL, 0xad7aa2e548d83    403         0xfebec120de7f5f81ULL, 0xad7aa2e548d83d75ULL, 0xd729cc7fa8e59a32ULL,
404         0x71bc0ae899b65ec7ULL, 0xe096e63bdb704    404         0x71bc0ae899b65ec7ULL, 0xe096e63bdb704b90ULL, 0xac8ddb9e3256c8faULL,
405         0x95d11522b7c4e651ULL, 0x32b3aacefc19d    405         0x95d11522b7c4e651ULL, 0x32b3aacefc19d72bULL, 0x704b7393e338ab48ULL,
406         0x63843bfd9ebf42dcULL, 0x41fc52d091ae7    406         0x63843bfd9ebf42dcULL, 0x41fc52d091ae7eefULL, 0x7dac1ce69bb056cdULL,
407         0x76437894e23baf4dULL, 0xbdb16106bbd0d    407         0x76437894e23baf4dULL, 0xbdb16106bbd0d66dULL, 0x9b32f1da41c31958ULL,
408         0x7957e5176eb2a5cbULL, 0xf941b35ca5f2a    408         0x7957e5176eb2a5cbULL, 0xf941b35ca5f2ae0bULL, 0x8016564bcb400bc0ULL,
409         0x677fc20c6bbdb1daULL, 0x59dc7ecc95a26    409         0x677fc20c6bbdb1daULL, 0x59dc7ecc95a26efbULL, 0xe1619f40a1febe1fULL,
410         0x10cbc3e3f308eb18ULL, 0x81e12f30b1cef    410         0x10cbc3e3f308eb18ULL, 0x81e12f30b1cefe4fULL, 0x0c10160e0206080aULL,
411         0x922e675ecc4917dbULL, 0xa26e3f66c4513    411         0x922e675ecc4917dbULL, 0xa26e3f66c45137f3ULL, 0x4ee8cf531d277469ULL,
412         0x78a09c6c143c5044ULL, 0xb0560e73c3582    412         0x78a09c6c143c5044ULL, 0xb0560e73c3582be8ULL, 0x573f9a3463a591f2ULL,
413         0xe69eed3cda734f95ULL, 0xd3d2358e5de76    413         0xe69eed3cda734f95ULL, 0xd3d2358e5de76934ULL, 0xdfc223805fe1613eULL,
414         0xf2aed72edc79578bULL, 0x13cf486e7d87e    414         0xf2aed72edc79578bULL, 0x13cf486e7d87e994ULL, 0x94266c59cd4a13deULL,
415         0x1fdf5e607f81e19eULL, 0xc1ea049b5aee7    415         0x1fdf5e607f81e19eULL, 0xc1ea049b5aee752fULL, 0x7547f3196cb4adc1ULL,
416         0xd5da3e895ce46d31ULL, 0x08ebeffff704f    416         0xd5da3e895ce46d31ULL, 0x08ebeffff704fb0cULL, 0xd42d47f2266a98beULL,
417         0x38abb7c7ff1cdb24ULL, 0x543b11b9ed2a9    417         0x38abb7c7ff1cdb24ULL, 0x543b11b9ed2a937eULL, 0x4a1336a2e825876fULL,
418         0x699c26f49dba4ed3ULL, 0x7f5fee106fb1a    418         0x699c26f49dba4ed3ULL, 0x7f5fee106fb1a1ceULL, 0x03048b8d8e8f028cULL,
419         0x56c8e34f192b647dULL, 0xe7699447a0fdb    419         0x56c8e34f192b647dULL, 0xe7699447a0fdba1aULL, 0x1ad3deeaf00de717ULL,
420         0x113cba9889861e97ULL, 0x2278692d0f113    420         0x113cba9889861e97ULL, 0x2278692d0f113c33ULL, 0x1238311507091c1bULL,
421         0xc511fd6aafec8629ULL, 0x208b9bdbfb10c    421         0xc511fd6aafec8629ULL, 0x208b9bdbfb10cb30ULL, 0x3040583808182028ULL,
422         0x7ea8976b153f5441ULL, 0x2e687f230d173    422         0x7ea8976b153f5441ULL, 0x2e687f230d173439ULL, 0x18202c1c040c1014ULL,
423         0x06080b0701030405ULL, 0x4507ab2164ac8    423         0x06080b0701030405ULL, 0x4507ab2164ac8de9ULL, 0xf8b6ca27df7c5b84ULL,
424         0x29970d5f769ac5b3ULL, 0x0bef6472798bf    424         0x29970d5f769ac5b3ULL, 0x0bef6472798bf980ULL, 0xf4a6dc29dd7a538eULL,
425         0x8ef5b2b33d47f4c9ULL, 0x74b08a62163a5    425         0x8ef5b2b33d47f4c9ULL, 0x74b08a62163a584eULL, 0x82e5a4bd3f41fcc3ULL,
426         0xb2a5fc853759dcebULL, 0x734ff81e6db7a    426         0xb2a5fc853759dcebULL, 0x734ff81e6db7a9c4ULL, 0x90dd95a83848e0d8ULL,
427         0xb1a17708b9d6de67ULL, 0x37bf2a447395d    427         0xb1a17708b9d6de67ULL, 0x37bf2a447395d1a2ULL, 0x4c1b3da5e926836aULL,
428         0xbeb5ea8b355fd4e1ULL, 0xe3926db655ff4    428         0xbeb5ea8b355fd4e1ULL, 0xe3926db655ff491cULL, 0x3baf3c4a7193d9a8ULL,
429         0x07ff727c7b8df18aULL, 0x0f149d838c890    429         0x07ff727c7b8df18aULL, 0x0f149d838c890a86ULL, 0x31b721437296d5a7ULL,
430         0x1734b19f88851a92ULL, 0x0ee3e4f8f607f    430         0x1734b19f88851a92ULL, 0x0ee3e4f8f607ff09ULL, 0xfc4d33d62a7ea882ULL,
431         0x84edafba3e42f8c6ULL, 0xd9ca28875ee26    431         0x84edafba3e42f8c6ULL, 0xd9ca28875ee2653bULL, 0xd2254cf527699cbbULL,
432         0x890ac0cf46ca0543ULL, 0x286074240c143    432         0x890ac0cf46ca0543ULL, 0x286074240c14303cULL, 0x430fa02665af89ecULL,
433         0x6d67df0568b8bdd5ULL, 0x5b2f8c3a61a39    433         0x6d67df0568b8bdd5ULL, 0x5b2f8c3a61a399f8ULL, 0x0a181d0903050c0fULL,
434         0xbc46187dc15e23e2ULL, 0xef827bb857f94    434         0xbc46187dc15e23e2ULL, 0xef827bb857f94116ULL, 0xcefe9918d6677fa9ULL,
435         0xec86f035d976439aULL, 0xcdfa129558e87    435         0xec86f035d976439aULL, 0xcdfa129558e87d25ULL, 0xea8efb32d875479fULL,
436         0x4917bd2f66aa85e3ULL, 0xc8f6921fd7647    436         0x4917bd2f66aa85e3ULL, 0xc8f6921fd7647bacULL, 0x9ccd83a63a4ee8d2ULL,
437         0x8a0e4b42c84507cfULL, 0x88fdb9b43c44f    437         0x8a0e4b42c84507cfULL, 0x88fdb9b43c44f0ccULL, 0x268390dcfa13cf35ULL,
438         0x53c463c596a762f4ULL, 0xf551a552a7f4a    438         0x53c463c596a762f4ULL, 0xf551a552a7f4a601ULL, 0x77b401ef98b55ac2ULL,
439         0x52331abeec29977bULL, 0xb7a97c0fb8d5d    439         0x52331abeec29977bULL, 0xb7a97c0fb8d5da62ULL, 0xa876226fc7543bfcULL,
440         0xc319f66daeef822cULL, 0x6b6fd40269bbb    440         0xc319f66daeef822cULL, 0x6b6fd40269bbb9d0ULL, 0xa762bfec4bdd317aULL,
441         0xdd31d176abe0963dULL, 0xd121c778a9e69    441         0xdd31d176abe0963dULL, 0xd121c778a9e69e37ULL, 0x4f1fb62867a981e6ULL,
442         0x3c504e360a1e2822ULL, 0x8f02cbc847c90    442         0x3c504e360a1e2822ULL, 0x8f02cbc847c90146ULL, 0x16c3c8e4f20bef1dULL,
443         0x99c1032cb5c2ee5bULL, 0xcc0d6bee22668    443         0x99c1032cb5c2ee5bULL, 0xcc0d6bee226688aaULL, 0x647b4981e532b356ULL,
444         0x5e230cb0ee2f9f71ULL, 0xa399461dbedfc    444         0x5e230cb0ee2f9f71ULL, 0xa399461dbedfc27cULL, 0xfa4538d12b7dac87ULL,
445         0x217ce2a0819e3ebfULL, 0x6c90a67e12364    445         0x217ce2a0819e3ebfULL, 0x6c90a67e1236485aULL, 0x2d6cf4ae839836b5ULL,
446         0x5ad8f5411b2d6c77ULL, 0x2470622a0e123    446         0x5ad8f5411b2d6c77ULL, 0x2470622a0e123836ULL, 0xca0560e923658cafULL,
447         0x04fbf9f1f502f306ULL, 0x8312ddc645cf0    447         0x04fbf9f1f502f306ULL, 0x8312ddc645cf094cULL, 0xc61576e7216384a5ULL,
448         0x9e3e7150ce4f1fd1ULL, 0xab72a9e249db3    448         0x9e3e7150ce4f1fd1ULL, 0xab72a9e249db3970ULL, 0xe87d09c42c74b09cULL,
449         0x2c9b8dd5f916c33aULL, 0x6e635488e637b    449         0x2c9b8dd5f916c33aULL, 0x6e635488e637bf59ULL, 0x93d91e25b6c7e254ULL,
450         0xf05d25d82878a088ULL, 0x72b8816517395    450         0xf05d25d82878a088ULL, 0x72b8816517395c4bULL, 0x2b64ffa9829b32b0ULL,
451         0x5cd0fe461a2e6872ULL, 0x1d2cac968b801    451         0x5cd0fe461a2e6872ULL, 0x1d2cac968b80169dULL, 0x3ea3bcc0fe1fdf21ULL,
452         0x1b24a7918a831298ULL, 0x3648533f091b2    452         0x1b24a7918a831298ULL, 0x3648533f091b242dULL, 0x8c064045c94603caULL,
453         0x354cd8b2879426a1ULL, 0xb94a98f74ed22    453         0x354cd8b2879426a1ULL, 0xb94a98f74ed2256bULL, 0x7c5b659de13ea342ULL,
454         0xe46d1fca2e72b896ULL, 0x62734286e431b    454         0xe46d1fca2e72b896ULL, 0x62734286e431b753ULL, 0x7a536e9ae03da747ULL,
455         0x400b2babeb208b60ULL, 0x47f459d790ad7    455         0x400b2babeb208b60ULL, 0x47f459d790ad7aeaULL, 0xff49b85ba4f1aa0eULL,
456         0x44f0d25a1e227866ULL, 0x395ccebc85922    456         0x44f0d25a1e227866ULL, 0x395ccebc85922eabULL, 0x5d27873d60a09dfdULL,
457         0x0000000000000000ULL, 0xde355afb256f9    457         0x0000000000000000ULL, 0xde355afb256f94b1ULL, 0x02f3f2f6f401f703ULL,
458         0x1cdbd5edf10ee312ULL, 0x5fd475cb94a16    458         0x1cdbd5edf10ee312ULL, 0x5fd475cb94a16afeULL, 0x3a5845310b1d2c27ULL,
459         0x686b5f8fe734bb5cULL, 0x238f1056759fc    459         0x686b5f8fe734bb5cULL, 0x238f1056759fc9bcULL, 0x582b07b7ef2c9b74ULL,
460         0xb8bde18c345cd0e4ULL, 0xa695c6973153c    460         0xb8bde18c345cd0e4ULL, 0xa695c6973153c4f5ULL, 0xc2ee8f16d46177a3ULL,
461         0xdacea30ad06d67b7ULL, 0x3344d3b586972    461         0xdacea30ad06d67b7ULL, 0x3344d3b5869722a4ULL, 0x19d755677e82e59bULL,
462         0xc901eb64adea8e23ULL, 0x34bba1c9fd1ad    462         0xc901eb64adea8e23ULL, 0x34bba1c9fd1ad32eULL, 0xf6552edf297ba48dULL,
463         0xa09dcd903050c0f0ULL, 0x9ac588a13b4de    463         0xa09dcd903050c0f0ULL, 0x9ac588a13b4decd7ULL, 0x658c30fa9fbc46d9ULL,
464         0x2a9386d2f815c73fULL, 0xae7e2968c6573    464         0x2a9386d2f815c73fULL, 0xae7e2968c6573ff9ULL, 0x6a98ad7913354c5fULL,
465         0x14303a12060a181eULL, 0x1e28271b050f1    465         0x14303a12060a181eULL, 0x1e28271b050f1411ULL, 0xa4663461c55233f6ULL,
466         0x6688bb7711334455ULL, 0x2f9f06587799c    466         0x6688bb7711334455ULL, 0x2f9f06587799c1b6ULL, 0x15c743697c84ed91ULL,
467         0x01f7797b7a8ef58fULL, 0x0de76f757888f    467         0x01f7797b7a8ef58fULL, 0x0de76f757888fd85ULL, 0xb4adf782365ad8eeULL,
468         0x48e0c4541c24706cULL, 0x96d59eaf394be    468         0x48e0c4541c24706cULL, 0x96d59eaf394be4ddULL, 0xcbf2199259eb7920ULL,
469         0x50c0e84818286078ULL, 0xe98a70bf56fa4    469         0x50c0e84818286078ULL, 0xe98a70bf56fa4513ULL, 0x8df1393eb3c8f645ULL,
470         0x87e92437b0cdfa4aULL, 0xd83d51fc246c9    470         0x87e92437b0cdfa4aULL, 0xd83d51fc246c90b4ULL, 0xc01d7de0206080a0ULL,
471         0x8bf93239b2cbf240ULL, 0x4be44fd992ab7    471         0x8bf93239b2cbf240ULL, 0x4be44fd992ab72e0ULL, 0xed71894ea3f8b615ULL,
472         0xba4e137ac05d27e7ULL, 0x851ad6c144cc0    472         0xba4e137ac05d27e7ULL, 0x851ad6c144cc0d49ULL, 0x5137913362a695f7ULL,
473         0x6080b07010304050ULL, 0x9fc9082bb4c1e    473         0x6080b07010304050ULL, 0x9fc9082bb4c1ea5eULL, 0x3f54c5bb84912aaeULL,
474         0x9722e7d443c51152ULL, 0x4dec44de93a87    474         0x9722e7d443c51152ULL, 0x4dec44de93a876e5ULL, 0xb65e0574c25b2fedULL,
475         0xa16ab4eb4ade357fULL, 0xa9815b14bddac    475         0xa16ab4eb4ade357fULL, 0xa9815b14bddace73ULL, 0x050c808a8f8c0689ULL,
476         0xee7502c32d77b499ULL, 0xaf895013bcd9c    476         0xee7502c32d77b499ULL, 0xaf895013bcd9ca76ULL, 0x6f942df39cb94ad6ULL,
477         0x6177c90b6abeb5dfULL, 0x9d3afadd40c01    477         0x6177c90b6abeb5dfULL, 0x9d3afadd40c01d5dULL, 0x98367a57cf4c1bd4ULL,
478         0xeb798249a2fbb210ULL, 0x2774e9a7809d3    478         0xeb798249a2fbb210ULL, 0x2774e9a7809d3abaULL, 0xbf4293f04fd1216eULL,
479         0x42f8d95d1f217c63ULL, 0x861e5d4cca430    479         0x42f8d95d1f217c63ULL, 0x861e5d4cca430fc5ULL, 0xdb39da71aae39238ULL,
480         0x912aecd342c61557ULL                     480         0x912aecd342c61557ULL
481 };                                                481 };
482                                                   482 
483 static const u64 T5[256] = {                      483 static const u64 T5[256] = {
484         0xb9bb016ad3ba68d2ULL, 0x9ae5b166fc541    484         0xb9bb016ad3ba68d2ULL, 0x9ae5b166fc54194dULL, 0x65e2cd14712f93bcULL,
485         0x8725511b9c74b9cdULL, 0xa2f7a457f5530    485         0x8725511b9c74b9cdULL, 0xa2f7a457f5530251ULL, 0xd6d003be68d3b86bULL,
486         0xded604b56bd2bd6fULL, 0x52b3fe85d74d6    486         0xded604b56bd2bd6fULL, 0x52b3fe85d74d6429ULL, 0xbafdad4af0500d5dULL,
487         0x09cf63e0e9ac268aULL, 0x1c0984968a8d8    487         0x09cf63e0e9ac268aULL, 0x1c0984968a8d830eULL, 0x91a51a4ddcbf79c6ULL,
488         0xa73d4d379070adddULL, 0xaaf1a35cf6520    488         0xa73d4d379070adddULL, 0xaaf1a35cf6520755ULL, 0xa47be117b39ac852ULL,
489         0x5ab5f98ed44c612dULL, 0x0346ac2023ea6    489         0x5ab5f98ed44c612dULL, 0x0346ac2023ea658fULL, 0xe6c4118462d5a673ULL,
490         0xcc55c268a497f166ULL, 0xc6dc0da86ed1b    490         0xcc55c268a497f166ULL, 0xc6dc0da86ed1b263ULL, 0x85aa99d05533ffccULL,
491         0xb2fbaa41f3510859ULL, 0xe2c79c0fed5b2    491         0xb2fbaa41f3510859ULL, 0xe2c79c0fed5b2a71ULL, 0x59f355aef7a604a2ULL,
492         0xbefe20c17fde815fULL, 0x7aade5a2d8487    492         0xbefe20c17fde815fULL, 0x7aade5a2d848753dULL, 0x29d77fcce5a8329aULL,
493         0xbc71e80ab699c75eULL, 0x96e03be670db9    493         0xbc71e80ab699c75eULL, 0x96e03be670db904bULL, 0x8dac9edb5632fac8ULL,
494         0xd1952215c4b751e6ULL, 0xb332ceaa19fc2    494         0xd1952215c4b751e6ULL, 0xb332ceaa19fc2bd7ULL, 0x4b70937338e348abULL,
495         0x8463fd3bbf9edc42ULL, 0xfc41d052ae91e    495         0x8463fd3bbf9edc42ULL, 0xfc41d052ae91ef7eULL, 0xac7de61cb09bcd56ULL,
496         0x437694783be24dafULL, 0xb1bd0661d0bb6    496         0x437694783be24dafULL, 0xb1bd0661d0bb6dd6ULL, 0x329bdaf1c3415819ULL,
497         0x577917e5b26ecba5ULL, 0x41f95cb3f2a50    497         0x577917e5b26ecba5ULL, 0x41f95cb3f2a50baeULL, 0x16804b5640cbc00bULL,
498         0x7f670cc2bd6bdab1ULL, 0xdc59cc7ea295f    498         0x7f670cc2bd6bdab1ULL, 0xdc59cc7ea295fb6eULL, 0x61e1409ffea11fbeULL,
499         0xcb10e3c308f318ebULL, 0xe181302fceb14    499         0xcb10e3c308f318ebULL, 0xe181302fceb14ffeULL, 0x100c0e1606020a08ULL,
500         0x2e925e6749ccdb17ULL, 0x6ea2663f51c4f    500         0x2e925e6749ccdb17ULL, 0x6ea2663f51c4f337ULL, 0xe84e53cf271d6974ULL,
501         0xa0786c9c3c144450ULL, 0x56b0730e58c3e    501         0xa0786c9c3c144450ULL, 0x56b0730e58c3e82bULL, 0x3f57349aa563f291ULL,
502         0x9ee63ced73da954fULL, 0xd2d38e35e75d3    502         0x9ee63ced73da954fULL, 0xd2d38e35e75d3469ULL, 0xc2df8023e15f3e61ULL,
503         0xaef22ed779dc8b57ULL, 0xcf136e48877d9    503         0xaef22ed779dc8b57ULL, 0xcf136e48877d94e9ULL, 0x2694596c4acdde13ULL,
504         0xdf1f605e817f9ee1ULL, 0xeac19b04ee5a2    504         0xdf1f605e817f9ee1ULL, 0xeac19b04ee5a2f75ULL, 0x477519f3b46cc1adULL,
505         0xdad5893ee45c316dULL, 0xeb08ffef04f70    505         0xdad5893ee45c316dULL, 0xeb08ffef04f70cfbULL, 0x2dd4f2476a26be98ULL,
506         0xab38c7b71cff24dbULL, 0x3b54b9112aed7    506         0xab38c7b71cff24dbULL, 0x3b54b9112aed7e93ULL, 0x134aa23625e86f87ULL,
507         0x9c69f426ba9dd34eULL, 0x5f7f10eeb16fc    507         0x9c69f426ba9dd34eULL, 0x5f7f10eeb16fcea1ULL, 0x04038d8b8f8e8c02ULL,
508         0xc8564fe32b197d64ULL, 0x69e74794fda01    508         0xc8564fe32b197d64ULL, 0x69e74794fda01abaULL, 0xd31aeade0df017e7ULL,
509         0x3c1198ba8689971eULL, 0x78222d69110f3    509         0x3c1198ba8689971eULL, 0x78222d69110f333cULL, 0x3812153109071b1cULL,
510         0x11c56afdecaf2986ULL, 0x8b20db9b10fb3    510         0x11c56afdecaf2986ULL, 0x8b20db9b10fb30cbULL, 0x4030385818082820ULL,
511         0xa87e6b973f154154ULL, 0x682e237f170d3    511         0xa87e6b973f154154ULL, 0x682e237f170d3934ULL, 0x20181c2c0c041410ULL,
512         0x0806070b03010504ULL, 0x074521abac64e    512         0x0806070b03010504ULL, 0x074521abac64e98dULL, 0xb6f827ca7cdf845bULL,
513         0x97295f0d9a76b3c5ULL, 0xef0b72648b798    513         0x97295f0d9a76b3c5ULL, 0xef0b72648b7980f9ULL, 0xa6f429dc7add8e53ULL,
514         0xf58eb3b2473dc9f4ULL, 0xb074628a3a164    514         0xf58eb3b2473dc9f4ULL, 0xb074628a3a164e58ULL, 0xe582bda4413fc3fcULL,
515         0xa5b285fc5937ebdcULL, 0x4f731ef8b76dc    515         0xa5b285fc5937ebdcULL, 0x4f731ef8b76dc4a9ULL, 0xdd90a8954838d8e0ULL,
516         0xa1b10877d6b967deULL, 0xbf37442a9573a    516         0xa1b10877d6b967deULL, 0xbf37442a9573a2d1ULL, 0x1b4ca53d26e96a83ULL,
517         0xb5be8bea5f35e1d4ULL, 0x92e3b66dff551    517         0xb5be8bea5f35e1d4ULL, 0x92e3b66dff551c49ULL, 0xaf3b4a3c9371a8d9ULL,
518         0xff077c728d7b8af1ULL, 0x140f839d898c8    518         0xff077c728d7b8af1ULL, 0x140f839d898c860aULL, 0xb73143219672a7d5ULL,
519         0x34179fb18588921aULL, 0xe30ef8e407f60    519         0x34179fb18588921aULL, 0xe30ef8e407f609ffULL, 0x4dfcd6337e2a82a8ULL,
520         0xed84baaf423ec6f8ULL, 0xcad98728e25e3    520         0xed84baaf423ec6f8ULL, 0xcad98728e25e3b65ULL, 0x25d2f54c6927bb9cULL,
521         0x0a89cfc0ca464305ULL, 0x60282474140c3    521         0x0a89cfc0ca464305ULL, 0x60282474140c3c30ULL, 0x0f4326a0af65ec89ULL,
522         0x676d05dfb868d5bdULL, 0x2f5b3a8ca361f    522         0x676d05dfb868d5bdULL, 0x2f5b3a8ca361f899ULL, 0x180a091d05030f0cULL,
523         0x46bc7d185ec1e223ULL, 0x82efb87bf9571    523         0x46bc7d185ec1e223ULL, 0x82efb87bf9571641ULL, 0xfece189967d6a97fULL,
524         0x86ec35f076d99a43ULL, 0xfacd9512e8582    524         0x86ec35f076d99a43ULL, 0xfacd9512e858257dULL, 0x8eea32fb75d89f47ULL,
525         0x17492fbdaa66e385ULL, 0xf6c81f9264d7a    525         0x17492fbdaa66e385ULL, 0xf6c81f9264d7ac7bULL, 0xcd9ca6834e3ad2e8ULL,
526         0x0e8a424b45c8cf07ULL, 0xfd88b4b9443cc    526         0x0e8a424b45c8cf07ULL, 0xfd88b4b9443cccf0ULL, 0x8326dc9013fa35cfULL,
527         0xc453c563a796f462ULL, 0x51f552a5f4a70    527         0xc453c563a796f462ULL, 0x51f552a5f4a701a6ULL, 0xb477ef01b598c25aULL,
528         0x3352be1a29ec7b97ULL, 0xa9b70f7cd5b86    528         0x3352be1a29ec7b97ULL, 0xa9b70f7cd5b862daULL, 0x76a86f2254c7fc3bULL,
529         0x19c36df6efae2c82ULL, 0x6f6b02d4bb69d    529         0x19c36df6efae2c82ULL, 0x6f6b02d4bb69d0b9ULL, 0x62a7ecbfdd4b7a31ULL,
530         0x31dd76d1e0ab3d96ULL, 0x21d178c7e6a93    530         0x31dd76d1e0ab3d96ULL, 0x21d178c7e6a9379eULL, 0x1f4f28b6a967e681ULL,
531         0x503c364e1e0a2228ULL, 0x028fc8cbc9474    531         0x503c364e1e0a2228ULL, 0x028fc8cbc9474601ULL, 0xc316e4c80bf21defULL,
532         0xc1992c03c2b55beeULL, 0x0dccee6b6622a    532         0xc1992c03c2b55beeULL, 0x0dccee6b6622aa88ULL, 0x7b64814932e556b3ULL,
533         0x235eb00c2fee719fULL, 0x99a31d46dfbe7    533         0x235eb00c2fee719fULL, 0x99a31d46dfbe7cc2ULL, 0x45fad1387d2b87acULL,
534         0x7c21a0e29e81bf3eULL, 0x906c7ea636125    534         0x7c21a0e29e81bf3eULL, 0x906c7ea636125a48ULL, 0x6c2daef49883b536ULL,
535         0xd85a41f52d1b776cULL, 0x70242a62120e3    535         0xd85a41f52d1b776cULL, 0x70242a62120e3638ULL, 0x05cae9606523af8cULL,
536         0xfb04f1f902f506f3ULL, 0x1283c6ddcf454    536         0xfb04f1f902f506f3ULL, 0x1283c6ddcf454c09ULL, 0x15c6e7766321a584ULL,
537         0x3e9e50714fced11fULL, 0x72abe2a9db497    537         0x3e9e50714fced11fULL, 0x72abe2a9db497039ULL, 0x7de8c409742c9cb0ULL,
538         0x9b2cd58d16f93ac3ULL, 0x636e885437e65    538         0x9b2cd58d16f93ac3ULL, 0x636e885437e659bfULL, 0xd993251ec7b654e2ULL,
539         0x5df0d825782888a0ULL, 0xb872658139174    539         0x5df0d825782888a0ULL, 0xb872658139174b5cULL, 0x642ba9ff9b82b032ULL,
540         0xd05c46fe2e1a7268ULL, 0x2c1d96ac808b9    540         0xd05c46fe2e1a7268ULL, 0x2c1d96ac808b9d16ULL, 0xa33ec0bc1ffe21dfULL,
541         0x241b91a7838a9812ULL, 0x48363f531b092    541         0x241b91a7838a9812ULL, 0x48363f531b092d24ULL, 0x068c454046c9ca03ULL,
542         0x4c35b2d89487a126ULL, 0x4ab9f798d24e6    542         0x4c35b2d89487a126ULL, 0x4ab9f798d24e6b25ULL, 0x5b7c9d653ee142a3ULL,
543         0x6de4ca1f722e96b8ULL, 0x7362864231e45    543         0x6de4ca1f722e96b8ULL, 0x7362864231e453b7ULL, 0x537a9a6e3de047a7ULL,
544         0x0b40ab2b20eb608bULL, 0xf447d759ad90e    544         0x0b40ab2b20eb608bULL, 0xf447d759ad90ea7aULL, 0x49ff5bb8f1a40eaaULL,
545         0xf0445ad2221e6678ULL, 0x5c39bcce9285a    545         0xf0445ad2221e6678ULL, 0x5c39bcce9285ab2eULL, 0x275d3d87a060fd9dULL,
546         0x0000000000000000ULL, 0x35defb5a6f25b    546         0x0000000000000000ULL, 0x35defb5a6f25b194ULL, 0xf302f6f201f403f7ULL,
547         0xdb1cedd50ef112e3ULL, 0xd45fcb75a194f    547         0xdb1cedd50ef112e3ULL, 0xd45fcb75a194fe6aULL, 0x583a31451d0b272cULL,
548         0x6b688f5f34e75cbbULL, 0x8f2356109f75b    548         0x6b688f5f34e75cbbULL, 0x8f2356109f75bcc9ULL, 0x2b58b7072cef749bULL,
549         0xbdb88ce15c34e4d0ULL, 0x95a697c65331f    549         0xbdb88ce15c34e4d0ULL, 0x95a697c65331f5c4ULL, 0xeec2168f61d4a377ULL,
550         0xceda0aa36dd0b767ULL, 0x4433b5d39786a    550         0xceda0aa36dd0b767ULL, 0x4433b5d39786a422ULL, 0xd7196755827e9be5ULL,
551         0x01c964ebeaad238eULL, 0xbb34c9a11afd2    551         0x01c964ebeaad238eULL, 0xbb34c9a11afd2ed3ULL, 0x55f6df2e7b298da4ULL,
552         0x9da090cd5030f0c0ULL, 0xc59aa1884d3bd    552         0x9da090cd5030f0c0ULL, 0xc59aa1884d3bd7ecULL, 0x8c65fa30bc9fd946ULL,
553         0x932ad28615f83fc7ULL, 0x7eae682957c6f    553         0x932ad28615f83fc7ULL, 0x7eae682957c6f93fULL, 0x986a79ad35135f4cULL,
554         0x3014123a0a061e18ULL, 0x281e1b270f051    554         0x3014123a0a061e18ULL, 0x281e1b270f051114ULL, 0x66a4613452c5f633ULL,
555         0x886677bb33115544ULL, 0x9f2f58069977b    555         0x886677bb33115544ULL, 0x9f2f58069977b6c1ULL, 0xc7156943847c91edULL,
556         0xf7017b798e7a8ff5ULL, 0xe70d756f88788    556         0xf7017b798e7a8ff5ULL, 0xe70d756f887885fdULL, 0xadb482f75a36eed8ULL,
557         0xe04854c4241c6c70ULL, 0xd596af9e4b39d    557         0xe04854c4241c6c70ULL, 0xd596af9e4b39dde4ULL, 0xf2cb9219eb592079ULL,
558         0xc05048e828187860ULL, 0x8ae9bf70fa561    558         0xc05048e828187860ULL, 0x8ae9bf70fa561345ULL, 0xf18d3e39c8b345f6ULL,
559         0xe9873724cdb04afaULL, 0x3dd8fc516c24b    559         0xe9873724cdb04afaULL, 0x3dd8fc516c24b490ULL, 0x1dc0e07d6020a080ULL,
560         0xf98b3932cbb240f2ULL, 0xe44bd94fab92e    560         0xf98b3932cbb240f2ULL, 0xe44bd94fab92e072ULL, 0x71ed4e89f8a315b6ULL,
561         0x4eba7a135dc0e727ULL, 0x1a85c1d6cc444    561         0x4eba7a135dc0e727ULL, 0x1a85c1d6cc44490dULL, 0x37513391a662f795ULL,
562         0x806070b030105040ULL, 0xc99f2b08c1b45    562         0x806070b030105040ULL, 0xc99f2b08c1b45eeaULL, 0x543fbbc59184ae2aULL,
563         0x2297d4e7c5435211ULL, 0xec4dde44a893e    563         0x2297d4e7c5435211ULL, 0xec4dde44a893e576ULL, 0x5eb674055bc2ed2fULL,
564         0x6aa1ebb4de4a7f35ULL, 0x81a9145bdabd7    564         0x6aa1ebb4de4a7f35ULL, 0x81a9145bdabd73ceULL, 0x0c058a808c8f8906ULL,
565         0x75eec302772d99b4ULL, 0x89af1350d9bc7    565         0x75eec302772d99b4ULL, 0x89af1350d9bc76caULL, 0x946ff32db99cd64aULL,
566         0x77610bc9be6adfb5ULL, 0x3a9dddfac0405    566         0x77610bc9be6adfb5ULL, 0x3a9dddfac0405d1dULL, 0x3698577a4ccfd41bULL,
567         0x79eb4982fba210b2ULL, 0x7427a7e99d80b    567         0x79eb4982fba210b2ULL, 0x7427a7e99d80ba3aULL, 0x42bff093d14f6e21ULL,
568         0xf8425dd9211f637cULL, 0x1e864c5d43cac    568         0xf8425dd9211f637cULL, 0x1e864c5d43cac50fULL, 0x39db71dae3aa3892ULL,
569         0x2a91d3ecc6425715ULL                     569         0x2a91d3ecc6425715ULL
570 };                                                570 };
571                                                   571 
572 static const u64 T6[256] = {                      572 static const u64 T6[256] = {
573         0x6a01bbb9d268bad3ULL, 0x66b1e59a4d195    573         0x6a01bbb9d268bad3ULL, 0x66b1e59a4d1954fcULL, 0x14cde265bc932f71ULL,
574         0x1b512587cdb9749cULL, 0x57a4f7a251025    574         0x1b512587cdb9749cULL, 0x57a4f7a2510253f5ULL, 0xbe03d0d66bb8d368ULL,
575         0xb504d6de6fbdd26bULL, 0x85feb35229644    575         0xb504d6de6fbdd26bULL, 0x85feb35229644dd7ULL, 0x4aadfdba5d0d50f0ULL,
576         0xe063cf098a26ace9ULL, 0x9684091c0e838    576         0xe063cf098a26ace9ULL, 0x9684091c0e838d8aULL, 0x4d1aa591c679bfdcULL,
577         0x374d3da7ddad7090ULL, 0x5ca3f1aa55075    577         0x374d3da7ddad7090ULL, 0x5ca3f1aa550752f6ULL, 0x17e17ba452c89ab3ULL,
578         0x8ef9b55a2d614cd4ULL, 0x20ac46038f65e    578         0x8ef9b55a2d614cd4ULL, 0x20ac46038f65ea23ULL, 0x8411c4e673a6d562ULL,
579         0x68c255cc66f197a4ULL, 0xa80ddcc663b2d    579         0x68c255cc66f197a4ULL, 0xa80ddcc663b2d16eULL, 0xd099aa85ccff3355ULL,
580         0x41aafbb2590851f3ULL, 0x0f9cc7e2712a5    580         0x41aafbb2590851f3ULL, 0x0f9cc7e2712a5bedULL, 0xae55f359a204a6f7ULL,
581         0xc120febe5f81de7fULL, 0xa2e5ad7a3d754    581         0xc120febe5f81de7fULL, 0xa2e5ad7a3d7548d8ULL, 0xcc7fd7299a32a8e5ULL,
582         0x0ae871bc5ec799b6ULL, 0xe63be0964b90d    582         0x0ae871bc5ec799b6ULL, 0xe63be0964b90db70ULL, 0xdb9eac8dc8fa3256ULL,
583         0x152295d1e651b7c4ULL, 0xaace32b3d72bf    583         0x152295d1e651b7c4ULL, 0xaace32b3d72bfc19ULL, 0x7393704bab48e338ULL,
584         0x3bfd638442dc9ebfULL, 0x52d041fc7eef9    584         0x3bfd638442dc9ebfULL, 0x52d041fc7eef91aeULL, 0x1ce67dac56cd9bb0ULL,
585         0x78947643af4de23bULL, 0x6106bdb1d66db    585         0x78947643af4de23bULL, 0x6106bdb1d66dbbd0ULL, 0xf1da9b32195841c3ULL,
586         0xe5177957a5cb6eb2ULL, 0xb35cf941ae0ba    586         0xe5177957a5cb6eb2ULL, 0xb35cf941ae0ba5f2ULL, 0x564b80160bc0cb40ULL,
587         0xc20c677fb1da6bbdULL, 0x7ecc59dc6efb9    587         0xc20c677fb1da6bbdULL, 0x7ecc59dc6efb95a2ULL, 0x9f40e161be1fa1feULL,
588         0xc3e310cbeb18f308ULL, 0x2f3081e1fe4fb    588         0xc3e310cbeb18f308ULL, 0x2f3081e1fe4fb1ceULL, 0x160e0c10080a0206ULL,
589         0x675e922e17dbcc49ULL, 0x3f66a26e37f3c    589         0x675e922e17dbcc49ULL, 0x3f66a26e37f3c451ULL, 0xcf534ee874691d27ULL,
590         0x9c6c78a05044143cULL, 0x0e73b0562be8c    590         0x9c6c78a05044143cULL, 0x0e73b0562be8c358ULL, 0x9a34573f91f263a5ULL,
591         0xed3ce69e4f95da73ULL, 0x358ed3d269345    591         0xed3ce69e4f95da73ULL, 0x358ed3d269345de7ULL, 0x2380dfc2613e5fe1ULL,
592         0xd72ef2ae578bdc79ULL, 0x486e13cfe9947    592         0xd72ef2ae578bdc79ULL, 0x486e13cfe9947d87ULL, 0x6c59942613decd4aULL,
593         0x5e601fdfe19e7f81ULL, 0x049bc1ea752f5    593         0x5e601fdfe19e7f81ULL, 0x049bc1ea752f5aeeULL, 0xf3197547adc16cb4ULL,
594         0x3e89d5da6d315ce4ULL, 0xefff08ebfb0cf    594         0x3e89d5da6d315ce4ULL, 0xefff08ebfb0cf704ULL, 0x47f2d42d98be266aULL,
595         0xb7c738abdb24ff1cULL, 0x11b9543b937ee    595         0xb7c738abdb24ff1cULL, 0x11b9543b937eed2aULL, 0x36a24a13876fe825ULL,
596         0x26f4699c4ed39dbaULL, 0xee107f5fa1ce6    596         0x26f4699c4ed39dbaULL, 0xee107f5fa1ce6fb1ULL, 0x8b8d0304028c8e8fULL,
597         0xe34f56c8647d192bULL, 0x9447e769ba1aa    597         0xe34f56c8647d192bULL, 0x9447e769ba1aa0fdULL, 0xdeea1ad3e717f00dULL,
598         0xba98113c1e978986ULL, 0x692d22783c330    598         0xba98113c1e978986ULL, 0x692d22783c330f11ULL, 0x311512381c1b0709ULL,
599         0xfd6ac5118629afecULL, 0x9bdb208bcb30f    599         0xfd6ac5118629afecULL, 0x9bdb208bcb30fb10ULL, 0x5838304020280818ULL,
600         0x976b7ea85441153fULL, 0x7f232e6834390    600         0x976b7ea85441153fULL, 0x7f232e6834390d17ULL, 0x2c1c18201014040cULL,
601         0x0b07060804050103ULL, 0xab2145078de96    601         0x0b07060804050103ULL, 0xab2145078de964acULL, 0xca27f8b65b84df7cULL,
602         0x0d5f2997c5b3769aULL, 0x64720beff9807    602         0x0d5f2997c5b3769aULL, 0x64720beff980798bULL, 0xdc29f4a6538edd7aULL,
603         0xb2b38ef5f4c93d47ULL, 0x8a6274b0584e1    603         0xb2b38ef5f4c93d47ULL, 0x8a6274b0584e163aULL, 0xa4bd82e5fcc33f41ULL,
604         0xfc85b2a5dceb3759ULL, 0xf81e734fa9c46    604         0xfc85b2a5dceb3759ULL, 0xf81e734fa9c46db7ULL, 0x95a890dde0d83848ULL,
605         0x7708b1a1de67b9d6ULL, 0x2a4437bfd1a27    605         0x7708b1a1de67b9d6ULL, 0x2a4437bfd1a27395ULL, 0x3da54c1b836ae926ULL,
606         0xea8bbeb5d4e1355fULL, 0x6db6e392491c5    606         0xea8bbeb5d4e1355fULL, 0x6db6e392491c55ffULL, 0x3c4a3bafd9a87193ULL,
607         0x727c07fff18a7b8dULL, 0x9d830f140a868    607         0x727c07fff18a7b8dULL, 0x9d830f140a868c89ULL, 0x214331b7d5a77296ULL,
608         0xb19f17341a928885ULL, 0xe4f80ee3ff09f    608         0xb19f17341a928885ULL, 0xe4f80ee3ff09f607ULL, 0x33d6fc4da8822a7eULL,
609         0xafba84edf8c63e42ULL, 0x2887d9ca653b5    609         0xafba84edf8c63e42ULL, 0x2887d9ca653b5ee2ULL, 0x4cf5d2259cbb2769ULL,
610         0xc0cf890a054346caULL, 0x74242860303c0    610         0xc0cf890a054346caULL, 0x74242860303c0c14ULL, 0xa026430f89ec65afULL,
611         0xdf056d67bdd568b8ULL, 0x8c3a5b2f99f86    611         0xdf056d67bdd568b8ULL, 0x8c3a5b2f99f861a3ULL, 0x1d090a180c0f0305ULL,
612         0x187dbc4623e2c15eULL, 0x7bb8ef8241165    612         0x187dbc4623e2c15eULL, 0x7bb8ef82411657f9ULL, 0x9918cefe7fa9d667ULL,
613         0xf035ec86439ad976ULL, 0x1295cdfa7d255    613         0xf035ec86439ad976ULL, 0x1295cdfa7d2558e8ULL, 0xfb32ea8e479fd875ULL,
614         0xbd2f491785e366aaULL, 0x921fc8f67bacd    614         0xbd2f491785e366aaULL, 0x921fc8f67bacd764ULL, 0x83a69ccde8d23a4eULL,
615         0x4b428a0e07cfc845ULL, 0xb9b488fdf0cc3    615         0x4b428a0e07cfc845ULL, 0xb9b488fdf0cc3c44ULL, 0x90dc2683cf35fa13ULL,
616         0x63c553c462f496a7ULL, 0xa552f551a601a    616         0x63c553c462f496a7ULL, 0xa552f551a601a7f4ULL, 0x01ef77b45ac298b5ULL,
617         0x1abe5233977bec29ULL, 0x7c0fb7a9da62b    617         0x1abe5233977bec29ULL, 0x7c0fb7a9da62b8d5ULL, 0x226fa8763bfcc754ULL,
618         0xf66dc319822caeefULL, 0xd4026b6fb9d06    618         0xf66dc319822caeefULL, 0xd4026b6fb9d069bbULL, 0xbfeca762317a4bddULL,
619         0xd176dd31963dabe0ULL, 0xc778d1219e37a    619         0xd176dd31963dabe0ULL, 0xc778d1219e37a9e6ULL, 0xb6284f1f81e667a9ULL,
620         0x4e363c5028220a1eULL, 0xcbc88f0201464    620         0x4e363c5028220a1eULL, 0xcbc88f02014647c9ULL, 0xc8e416c3ef1df20bULL,
621         0x032c99c1ee5bb5c2ULL, 0x6beecc0d88aa2    621         0x032c99c1ee5bb5c2ULL, 0x6beecc0d88aa2266ULL, 0x4981647bb356e532ULL,
622         0x0cb05e239f71ee2fULL, 0x461da399c27cb    622         0x0cb05e239f71ee2fULL, 0x461da399c27cbedfULL, 0x38d1fa45ac872b7dULL,
623         0xe2a0217c3ebf819eULL, 0xa67e6c90485a1    623         0xe2a0217c3ebf819eULL, 0xa67e6c90485a1236ULL, 0xf4ae2d6c36b58398ULL,
624         0xf5415ad86c771b2dULL, 0x622a247038360    624         0xf5415ad86c771b2dULL, 0x622a247038360e12ULL, 0x60e9ca058caf2365ULL,
625         0xf9f104fbf306f502ULL, 0xddc68312094c4    625         0xf9f104fbf306f502ULL, 0xddc68312094c45cfULL, 0x76e7c61584a52163ULL,
626         0x71509e3e1fd1ce4fULL, 0xa9e2ab7239704    626         0x71509e3e1fd1ce4fULL, 0xa9e2ab72397049dbULL, 0x09c4e87db09c2c74ULL,
627         0x8dd52c9bc33af916ULL, 0x54886e63bf59e    627         0x8dd52c9bc33af916ULL, 0x54886e63bf59e637ULL, 0x1e2593d9e254b6c7ULL,
628         0x25d8f05da0882878ULL, 0x816572b85c4b1    628         0x25d8f05da0882878ULL, 0x816572b85c4b1739ULL, 0xffa92b6432b0829bULL,
629         0xfe465cd068721a2eULL, 0xac961d2c169d8    629         0xfe465cd068721a2eULL, 0xac961d2c169d8b80ULL, 0xbcc03ea3df21fe1fULL,
630         0xa7911b2412988a83ULL, 0x533f3648242d0    630         0xa7911b2412988a83ULL, 0x533f3648242d091bULL, 0x40458c0603cac946ULL,
631         0xd8b2354c26a18794ULL, 0x98f7b94a256b4    631         0xd8b2354c26a18794ULL, 0x98f7b94a256b4ed2ULL, 0x659d7c5ba342e13eULL,
632         0x1fcae46db8962e72ULL, 0x42866273b753e    632         0x1fcae46db8962e72ULL, 0x42866273b753e431ULL, 0x6e9a7a53a747e03dULL,
633         0x2bab400b8b60eb20ULL, 0x59d747f47aea9    633         0x2bab400b8b60eb20ULL, 0x59d747f47aea90adULL, 0xb85bff49aa0ea4f1ULL,
634         0xd25a44f078661e22ULL, 0xcebc395c2eab8    634         0xd25a44f078661e22ULL, 0xcebc395c2eab8592ULL, 0x873d5d279dfd60a0ULL,
635         0x0000000000000000ULL, 0x5afbde3594b12    635         0x0000000000000000ULL, 0x5afbde3594b1256fULL, 0xf2f602f3f703f401ULL,
636         0xd5ed1cdbe312f10eULL, 0x75cb5fd46afe9    636         0xd5ed1cdbe312f10eULL, 0x75cb5fd46afe94a1ULL, 0x45313a582c270b1dULL,
637         0x5f8f686bbb5ce734ULL, 0x1056238fc9bc7    637         0x5f8f686bbb5ce734ULL, 0x1056238fc9bc759fULL, 0x07b7582b9b74ef2cULL,
638         0xe18cb8bdd0e4345cULL, 0xc697a695c4f53    638         0xe18cb8bdd0e4345cULL, 0xc697a695c4f53153ULL, 0x8f16c2ee77a3d461ULL,
639         0xa30adace67b7d06dULL, 0xd3b5334422a48    639         0xa30adace67b7d06dULL, 0xd3b5334422a48697ULL, 0x556719d7e59b7e82ULL,
640         0xeb64c9018e23adeaULL, 0xa1c934bbd32ef    640         0xeb64c9018e23adeaULL, 0xa1c934bbd32efd1aULL, 0x2edff655a48d297bULL,
641         0xcd90a09dc0f03050ULL, 0x88a19ac5ecd73    641         0xcd90a09dc0f03050ULL, 0x88a19ac5ecd73b4dULL, 0x30fa658c46d99fbcULL,
642         0x86d22a93c73ff815ULL, 0x2968ae7e3ff9c    642         0x86d22a93c73ff815ULL, 0x2968ae7e3ff9c657ULL, 0xad796a984c5f1335ULL,
643         0x3a121430181e060aULL, 0x271b1e2814110    643         0x3a121430181e060aULL, 0x271b1e281411050fULL, 0x3461a46633f6c552ULL,
644         0xbb77668844551133ULL, 0x06582f9fc1b67    644         0xbb77668844551133ULL, 0x06582f9fc1b67799ULL, 0x436915c7ed917c84ULL,
645         0x797b01f7f58f7a8eULL, 0x6f750de7fd857    645         0x797b01f7f58f7a8eULL, 0x6f750de7fd857888ULL, 0xf782b4add8ee365aULL,
646         0xc45448e0706c1c24ULL, 0x9eaf96d5e4dd3    646         0xc45448e0706c1c24ULL, 0x9eaf96d5e4dd394bULL, 0x1992cbf2792059ebULL,
647         0xe84850c060781828ULL, 0x70bfe98a45135    647         0xe84850c060781828ULL, 0x70bfe98a451356faULL, 0x393e8df1f645b3c8ULL,
648         0x243787e9fa4ab0cdULL, 0x51fcd83d90b42    648         0x243787e9fa4ab0cdULL, 0x51fcd83d90b4246cULL, 0x7de0c01d80a02060ULL,
649         0x32398bf9f240b2cbULL, 0x4fd94be472e09    649         0x32398bf9f240b2cbULL, 0x4fd94be472e092abULL, 0x894eed71b615a3f8ULL,
650         0x137aba4e27e7c05dULL, 0xd6c1851a0d494    650         0x137aba4e27e7c05dULL, 0xd6c1851a0d4944ccULL, 0x9133513795f762a6ULL,
651         0xb070608040501030ULL, 0x082b9fc9ea5eb    651         0xb070608040501030ULL, 0x082b9fc9ea5eb4c1ULL, 0xc5bb3f542aae8491ULL,
652         0xe7d49722115243c5ULL, 0x44de4dec76e59    652         0xe7d49722115243c5ULL, 0x44de4dec76e593a8ULL, 0x0574b65e2fedc25bULL,
653         0xb4eba16a357f4adeULL, 0x5b14a981ce73b    653         0xb4eba16a357f4adeULL, 0x5b14a981ce73bddaULL, 0x808a050c06898f8cULL,
654         0x02c3ee75b4992d77ULL, 0x5013af89ca76b    654         0x02c3ee75b4992d77ULL, 0x5013af89ca76bcd9ULL, 0x2df36f944ad69cb9ULL,
655         0xc90b6177b5df6abeULL, 0xfadd9d3a1d5d4    655         0xc90b6177b5df6abeULL, 0xfadd9d3a1d5d40c0ULL, 0x7a5798361bd4cf4cULL,
656         0x8249eb79b210a2fbULL, 0xe9a727743aba8    656         0x8249eb79b210a2fbULL, 0xe9a727743aba809dULL, 0x93f0bf42216e4fd1ULL,
657         0xd95d42f87c631f21ULL, 0x5d4c861e0fc5c    657         0xd95d42f87c631f21ULL, 0x5d4c861e0fc5ca43ULL, 0xda71db399238aae3ULL,
658         0xecd3912a155742c6ULL                     658         0xecd3912a155742c6ULL
659 };                                                659 };
660                                                   660 
661 static const u64 T7[256] = {                      661 static const u64 T7[256] = {
662         0x016ab9bb68d2d3baULL, 0xb1669ae5194df    662         0x016ab9bb68d2d3baULL, 0xb1669ae5194dfc54ULL, 0xcd1465e293bc712fULL,
663         0x511b8725b9cd9c74ULL, 0xa457a2f70251f    663         0x511b8725b9cd9c74ULL, 0xa457a2f70251f553ULL, 0x03bed6d0b86b68d3ULL,
664         0x04b5ded6bd6f6bd2ULL, 0xfe8552b36429d    664         0x04b5ded6bd6f6bd2ULL, 0xfe8552b36429d74dULL, 0xad4abafd0d5df050ULL,
665         0x63e009cf268ae9acULL, 0x84961c09830e8    665         0x63e009cf268ae9acULL, 0x84961c09830e8a8dULL, 0x1a4d91a579c6dcbfULL,
666         0x4d37a73daddd9070ULL, 0xa35caaf10755f    666         0x4d37a73daddd9070ULL, 0xa35caaf10755f652ULL, 0xe117a47bc852b39aULL,
667         0xf98e5ab5612dd44cULL, 0xac200346658f2    667         0xf98e5ab5612dd44cULL, 0xac200346658f23eaULL, 0x1184e6c4a67362d5ULL,
668         0xc268cc55f166a497ULL, 0x0da8c6dcb2636    668         0xc268cc55f166a497ULL, 0x0da8c6dcb2636ed1ULL, 0x99d085aaffcc5533ULL,
669         0xaa41b2fb0859f351ULL, 0x9c0fe2c72a71e    669         0xaa41b2fb0859f351ULL, 0x9c0fe2c72a71ed5bULL, 0x55ae59f304a2f7a6ULL,
670         0x20c1befe815f7fdeULL, 0xe5a27aad753dd    670         0x20c1befe815f7fdeULL, 0xe5a27aad753dd848ULL, 0x7fcc29d7329ae5a8ULL,
671         0xe80abc71c75eb699ULL, 0x3be696e0904b7    671         0xe80abc71c75eb699ULL, 0x3be696e0904b70dbULL, 0x9edb8dacfac85632ULL,
672         0x2215d19551e6c4b7ULL, 0xceaab3322bd71    672         0x2215d19551e6c4b7ULL, 0xceaab3322bd719fcULL, 0x93734b7048ab38e3ULL,
673         0xfd3b8463dc42bf9eULL, 0xd052fc41ef7ea    673         0xfd3b8463dc42bf9eULL, 0xd052fc41ef7eae91ULL, 0xe61cac7dcd56b09bULL,
674         0x947843764daf3be2ULL, 0x0661b1bd6dd6d    674         0x947843764daf3be2ULL, 0x0661b1bd6dd6d0bbULL, 0xdaf1329b5819c341ULL,
675         0x17e55779cba5b26eULL, 0x5cb341f90baef    675         0x17e55779cba5b26eULL, 0x5cb341f90baef2a5ULL, 0x4b561680c00b40cbULL,
676         0x0cc27f67dab1bd6bULL, 0xcc7edc59fb6ea    676         0x0cc27f67dab1bd6bULL, 0xcc7edc59fb6ea295ULL, 0x409f61e11fbefea1ULL,
677         0xe3c3cb1018eb08f3ULL, 0x302fe1814ffec    677         0xe3c3cb1018eb08f3ULL, 0x302fe1814ffeceb1ULL, 0x0e16100c0a080602ULL,
678         0x5e672e92db1749ccULL, 0x663f6ea2f3375    678         0x5e672e92db1749ccULL, 0x663f6ea2f33751c4ULL, 0x53cfe84e6974271dULL,
679         0x6c9ca07844503c14ULL, 0x730e56b0e82b5    679         0x6c9ca07844503c14ULL, 0x730e56b0e82b58c3ULL, 0x349a3f57f291a563ULL,
680         0x3ced9ee6954f73daULL, 0x8e35d2d33469e    680         0x3ced9ee6954f73daULL, 0x8e35d2d33469e75dULL, 0x8023c2df3e61e15fULL,
681         0x2ed7aef28b5779dcULL, 0x6e48cf1394e98    681         0x2ed7aef28b5779dcULL, 0x6e48cf1394e9877dULL, 0x596c2694de134acdULL,
682         0x605edf1f9ee1817fULL, 0x9b04eac12f75e    682         0x605edf1f9ee1817fULL, 0x9b04eac12f75ee5aULL, 0x19f34775c1adb46cULL,
683         0x893edad5316de45cULL, 0xffefeb080cfb0    683         0x893edad5316de45cULL, 0xffefeb080cfb04f7ULL, 0xf2472dd4be986a26ULL,
684         0xc7b7ab3824db1cffULL, 0xb9113b547e932    684         0xc7b7ab3824db1cffULL, 0xb9113b547e932aedULL, 0xa236134a6f8725e8ULL,
685         0xf4269c69d34eba9dULL, 0x10ee5f7fcea1b    685         0xf4269c69d34eba9dULL, 0x10ee5f7fcea1b16fULL, 0x8d8b04038c028f8eULL,
686         0x4fe3c8567d642b19ULL, 0x479469e71abaf    686         0x4fe3c8567d642b19ULL, 0x479469e71abafda0ULL, 0xeaded31a17e70df0ULL,
687         0x98ba3c11971e8689ULL, 0x2d697822333c1    687         0x98ba3c11971e8689ULL, 0x2d697822333c110fULL, 0x153138121b1c0907ULL,
688         0x6afd11c52986ecafULL, 0xdb9b8b2030cb1    688         0x6afd11c52986ecafULL, 0xdb9b8b2030cb10fbULL, 0x3858403028201808ULL,
689         0x6b97a87e41543f15ULL, 0x237f682e39341    689         0x6b97a87e41543f15ULL, 0x237f682e3934170dULL, 0x1c2c201814100c04ULL,
690         0x070b080605040301ULL, 0x21ab0745e98da    690         0x070b080605040301ULL, 0x21ab0745e98dac64ULL, 0x27cab6f8845b7cdfULL,
691         0x5f0d9729b3c59a76ULL, 0x7264ef0b80f98    691         0x5f0d9729b3c59a76ULL, 0x7264ef0b80f98b79ULL, 0x29dca6f48e537addULL,
692         0xb3b2f58ec9f4473dULL, 0x628ab0744e583    692         0xb3b2f58ec9f4473dULL, 0x628ab0744e583a16ULL, 0xbda4e582c3fc413fULL,
693         0x85fca5b2ebdc5937ULL, 0x1ef84f73c4a9b    693         0x85fca5b2ebdc5937ULL, 0x1ef84f73c4a9b76dULL, 0xa895dd90d8e04838ULL,
694         0x0877a1b167ded6b9ULL, 0x442abf37a2d19    694         0x0877a1b167ded6b9ULL, 0x442abf37a2d19573ULL, 0xa53d1b4c6a8326e9ULL,
695         0x8beab5bee1d45f35ULL, 0xb66d92e31c49f    695         0x8beab5bee1d45f35ULL, 0xb66d92e31c49ff55ULL, 0x4a3caf3ba8d99371ULL,
696         0x7c72ff078af18d7bULL, 0x839d140f860a8    696         0x7c72ff078af18d7bULL, 0x839d140f860a898cULL, 0x4321b731a7d59672ULL,
697         0x9fb13417921a8588ULL, 0xf8e4e30e09ff0    697         0x9fb13417921a8588ULL, 0xf8e4e30e09ff07f6ULL, 0xd6334dfc82a87e2aULL,
698         0xbaafed84c6f8423eULL, 0x8728cad93b65e    698         0xbaafed84c6f8423eULL, 0x8728cad93b65e25eULL, 0xf54c25d2bb9c6927ULL,
699         0xcfc00a894305ca46ULL, 0x247460283c301    699         0xcfc00a894305ca46ULL, 0x247460283c30140cULL, 0x26a00f43ec89af65ULL,
700         0x05df676dd5bdb868ULL, 0x3a8c2f5bf899a    700         0x05df676dd5bdb868ULL, 0x3a8c2f5bf899a361ULL, 0x091d180a0f0c0503ULL,
701         0x7d1846bce2235ec1ULL, 0xb87b82ef1641f    701         0x7d1846bce2235ec1ULL, 0xb87b82ef1641f957ULL, 0x1899fecea97f67d6ULL,
702         0x35f086ec9a4376d9ULL, 0x9512facd257de    702         0x35f086ec9a4376d9ULL, 0x9512facd257de858ULL, 0x32fb8eea9f4775d8ULL,
703         0x2fbd1749e385aa66ULL, 0x1f92f6c8ac7b6    703         0x2fbd1749e385aa66ULL, 0x1f92f6c8ac7b64d7ULL, 0xa683cd9cd2e84e3aULL,
704         0x424b0e8acf0745c8ULL, 0xb4b9fd88ccf04    704         0x424b0e8acf0745c8ULL, 0xb4b9fd88ccf0443cULL, 0xdc90832635cf13faULL,
705         0xc563c453f462a796ULL, 0x52a551f501a6f    705         0xc563c453f462a796ULL, 0x52a551f501a6f4a7ULL, 0xef01b477c25ab598ULL,
706         0xbe1a33527b9729ecULL, 0x0f7ca9b762dad    706         0xbe1a33527b9729ecULL, 0x0f7ca9b762dad5b8ULL, 0x6f2276a8fc3b54c7ULL,
707         0x6df619c32c82efaeULL, 0x02d46f6bd0b9b    707         0x6df619c32c82efaeULL, 0x02d46f6bd0b9bb69ULL, 0xecbf62a77a31dd4bULL,
708         0x76d131dd3d96e0abULL, 0x78c721d1379ee    708         0x76d131dd3d96e0abULL, 0x78c721d1379ee6a9ULL, 0x28b61f4fe681a967ULL,
709         0x364e503c22281e0aULL, 0xc8cb028f4601c    709         0x364e503c22281e0aULL, 0xc8cb028f4601c947ULL, 0xe4c8c3161def0bf2ULL,
710         0x2c03c1995beec2b5ULL, 0xee6b0dccaa886    710         0x2c03c1995beec2b5ULL, 0xee6b0dccaa886622ULL, 0x81497b6456b332e5ULL,
711         0xb00c235e719f2feeULL, 0x1d4699a37cc2d    711         0xb00c235e719f2feeULL, 0x1d4699a37cc2dfbeULL, 0xd13845fa87ac7d2bULL,
712         0xa0e27c21bf3e9e81ULL, 0x7ea6906c5a483    712         0xa0e27c21bf3e9e81ULL, 0x7ea6906c5a483612ULL, 0xaef46c2db5369883ULL,
713         0x41f5d85a776c2d1bULL, 0x2a62702436381    713         0x41f5d85a776c2d1bULL, 0x2a6270243638120eULL, 0xe96005caaf8c6523ULL,
714         0xf1f9fb0406f302f5ULL, 0xc6dd12834c09c    714         0xf1f9fb0406f302f5ULL, 0xc6dd12834c09cf45ULL, 0xe77615c6a5846321ULL,
715         0x50713e9ed11f4fceULL, 0xe2a972ab7039d    715         0x50713e9ed11f4fceULL, 0xe2a972ab7039db49ULL, 0xc4097de89cb0742cULL,
716         0xd58d9b2c3ac316f9ULL, 0x8854636e59bf3    716         0xd58d9b2c3ac316f9ULL, 0x8854636e59bf37e6ULL, 0x251ed99354e2c7b6ULL,
717         0xd8255df088a07828ULL, 0x6581b8724b5c3    717         0xd8255df088a07828ULL, 0x6581b8724b5c3917ULL, 0xa9ff642bb0329b82ULL,
718         0x46fed05c72682e1aULL, 0x96ac2c1d9d168    718         0x46fed05c72682e1aULL, 0x96ac2c1d9d16808bULL, 0xc0bca33e21df1ffeULL,
719         0x91a7241b9812838aULL, 0x3f5348362d241    719         0x91a7241b9812838aULL, 0x3f5348362d241b09ULL, 0x4540068cca0346c9ULL,
720         0xb2d84c35a1269487ULL, 0xf7984ab96b25d    720         0xb2d84c35a1269487ULL, 0xf7984ab96b25d24eULL, 0x9d655b7c42a33ee1ULL,
721         0xca1f6de496b8722eULL, 0x8642736253b73    721         0xca1f6de496b8722eULL, 0x8642736253b731e4ULL, 0x9a6e537a47a73de0ULL,
722         0xab2b0b40608b20ebULL, 0xd759f447ea7aa    722         0xab2b0b40608b20ebULL, 0xd759f447ea7aad90ULL, 0x5bb849ff0eaaf1a4ULL,
723         0x5ad2f0446678221eULL, 0xbcce5c39ab2e9    723         0x5ad2f0446678221eULL, 0xbcce5c39ab2e9285ULL, 0x3d87275dfd9da060ULL,
724         0x0000000000000000ULL, 0xfb5a35deb1946    724         0x0000000000000000ULL, 0xfb5a35deb1946f25ULL, 0xf6f2f30203f701f4ULL,
725         0xedd5db1c12e30ef1ULL, 0xcb75d45ffe6aa    725         0xedd5db1c12e30ef1ULL, 0xcb75d45ffe6aa194ULL, 0x3145583a272c1d0bULL,
726         0x8f5f6b685cbb34e7ULL, 0x56108f23bcc99    726         0x8f5f6b685cbb34e7ULL, 0x56108f23bcc99f75ULL, 0xb7072b58749b2cefULL,
727         0x8ce1bdb8e4d05c34ULL, 0x97c695a6f5c45    727         0x8ce1bdb8e4d05c34ULL, 0x97c695a6f5c45331ULL, 0x168feec2a37761d4ULL,
728         0x0aa3cedab7676dd0ULL, 0xb5d34433a4229    728         0x0aa3cedab7676dd0ULL, 0xb5d34433a4229786ULL, 0x6755d7199be5827eULL,
729         0x64eb01c9238eeaadULL, 0xc9a1bb342ed31    729         0x64eb01c9238eeaadULL, 0xc9a1bb342ed31afdULL, 0xdf2e55f68da47b29ULL,
730         0x90cd9da0f0c05030ULL, 0xa188c59ad7ec4    730         0x90cd9da0f0c05030ULL, 0xa188c59ad7ec4d3bULL, 0xfa308c65d946bc9fULL,
731         0xd286932a3fc715f8ULL, 0x68297eaef93f5    731         0xd286932a3fc715f8ULL, 0x68297eaef93f57c6ULL, 0x79ad986a5f4c3513ULL,
732         0x123a30141e180a06ULL, 0x1b27281e11140    732         0x123a30141e180a06ULL, 0x1b27281e11140f05ULL, 0x613466a4f63352c5ULL,
733         0x77bb886655443311ULL, 0x58069f2fb6c19    733         0x77bb886655443311ULL, 0x58069f2fb6c19977ULL, 0x6943c71591ed847cULL,
734         0x7b79f7018ff58e7aULL, 0x756fe70d85fd8    734         0x7b79f7018ff58e7aULL, 0x756fe70d85fd8878ULL, 0x82f7adb4eed85a36ULL,
735         0x54c4e0486c70241cULL, 0xaf9ed596dde44    735         0x54c4e0486c70241cULL, 0xaf9ed596dde44b39ULL, 0x9219f2cb2079eb59ULL,
736         0x48e8c05078602818ULL, 0xbf708ae91345f    736         0x48e8c05078602818ULL, 0xbf708ae91345fa56ULL, 0x3e39f18d45f6c8b3ULL,
737         0x3724e9874afacdb0ULL, 0xfc513dd8b4906    737         0x3724e9874afacdb0ULL, 0xfc513dd8b4906c24ULL, 0xe07d1dc0a0806020ULL,
738         0x3932f98b40f2cbb2ULL, 0xd94fe44be072a    738         0x3932f98b40f2cbb2ULL, 0xd94fe44be072ab92ULL, 0x4e8971ed15b6f8a3ULL,
739         0x7a134ebae7275dc0ULL, 0xc1d61a85490dc    739         0x7a134ebae7275dc0ULL, 0xc1d61a85490dcc44ULL, 0x33913751f795a662ULL,
740         0x70b0806050403010ULL, 0x2b08c99f5eeac    740         0x70b0806050403010ULL, 0x2b08c99f5eeac1b4ULL, 0xbbc5543fae2a9184ULL,
741         0xd4e722975211c543ULL, 0xde44ec4de576a    741         0xd4e722975211c543ULL, 0xde44ec4de576a893ULL, 0x74055eb6ed2f5bc2ULL,
742         0xebb46aa17f35de4aULL, 0x145b81a973ced    742         0xebb46aa17f35de4aULL, 0x145b81a973cedabdULL, 0x8a800c0589068c8fULL,
743         0xc30275ee99b4772dULL, 0x135089af76cad    743         0xc30275ee99b4772dULL, 0x135089af76cad9bcULL, 0xf32d946fd64ab99cULL,
744         0x0bc97761dfb5be6aULL, 0xddfa3a9d5d1dc    744         0x0bc97761dfb5be6aULL, 0xddfa3a9d5d1dc040ULL, 0x577a3698d41b4ccfULL,
745         0x498279eb10b2fba2ULL, 0xa7e97427ba3a9    745         0x498279eb10b2fba2ULL, 0xa7e97427ba3a9d80ULL, 0xf09342bf6e21d14fULL,
746         0x5dd9f842637c211fULL, 0x4c5d1e86c50f4    746         0x5dd9f842637c211fULL, 0x4c5d1e86c50f43caULL, 0x71da39db3892e3aaULL,
747         0xd3ec2a915715c642ULL                     747         0xd3ec2a915715c642ULL
748 };                                                748 };
749                                                   749 
750 static const u64 c[KHAZAD_ROUNDS + 1] = {         750 static const u64 c[KHAZAD_ROUNDS + 1] = {
751         0xba542f7453d3d24dULL, 0x50ac8dbf70529    751         0xba542f7453d3d24dULL, 0x50ac8dbf70529a4cULL, 0xead597d133515ba6ULL,
752         0xde48a899db32b7fcULL, 0xe39e919be2bb4    752         0xde48a899db32b7fcULL, 0xe39e919be2bb416eULL, 0xa5cb6b95a1f3b102ULL,
753         0xccc41d14c363da5dULL, 0x5fdc7dcd7f5a6    753         0xccc41d14c363da5dULL, 0x5fdc7dcd7f5a6c5cULL, 0xf726ffede89d6f8eULL
754 };                                                754 };
755                                                   755 
756 static int khazad_setkey(struct crypto_tfm *tf    756 static int khazad_setkey(struct crypto_tfm *tfm, const u8 *in_key,
757                          unsigned int key_len)    757                          unsigned int key_len)
758 {                                                 758 {
759         struct khazad_ctx *ctx = crypto_tfm_ct    759         struct khazad_ctx *ctx = crypto_tfm_ctx(tfm);
760         const __be32 *key = (const __be32 *)in    760         const __be32 *key = (const __be32 *)in_key;
761         int r;                                    761         int r;
762         const u64 *S = T7;                        762         const u64 *S = T7;
763         u64 K2, K1;                               763         u64 K2, K1;
764                                                   764 
765         /* key is supposed to be 32-bit aligne    765         /* key is supposed to be 32-bit aligned */
766         K2 = ((u64)be32_to_cpu(key[0]) << 32)     766         K2 = ((u64)be32_to_cpu(key[0]) << 32) | be32_to_cpu(key[1]);
767         K1 = ((u64)be32_to_cpu(key[2]) << 32)     767         K1 = ((u64)be32_to_cpu(key[2]) << 32) | be32_to_cpu(key[3]);
768                                                   768 
769         /* setup the encrypt key */               769         /* setup the encrypt key */
770         for (r = 0; r <= KHAZAD_ROUNDS; r++) {    770         for (r = 0; r <= KHAZAD_ROUNDS; r++) {
771                 ctx->E[r] = T0[(int)(K1 >> 56)    771                 ctx->E[r] = T0[(int)(K1 >> 56)       ] ^
772                             T1[(int)(K1 >> 48)    772                             T1[(int)(K1 >> 48) & 0xff] ^
773                             T2[(int)(K1 >> 40)    773                             T2[(int)(K1 >> 40) & 0xff] ^
774                             T3[(int)(K1 >> 32)    774                             T3[(int)(K1 >> 32) & 0xff] ^
775                             T4[(int)(K1 >> 24)    775                             T4[(int)(K1 >> 24) & 0xff] ^
776                             T5[(int)(K1 >> 16)    776                             T5[(int)(K1 >> 16) & 0xff] ^
777                             T6[(int)(K1 >>  8)    777                             T6[(int)(K1 >>  8) & 0xff] ^
778                             T7[(int)(K1      )    778                             T7[(int)(K1      ) & 0xff] ^
779                             c[r] ^ K2;            779                             c[r] ^ K2;
780                 K2 = K1;                          780                 K2 = K1; 
781                 K1 = ctx->E[r];                   781                 K1 = ctx->E[r];
782         }                                         782         }
783         /* Setup the decrypt key */               783         /* Setup the decrypt key */
784         ctx->D[0] = ctx->E[KHAZAD_ROUNDS];        784         ctx->D[0] = ctx->E[KHAZAD_ROUNDS];
785         for (r = 1; r < KHAZAD_ROUNDS; r++) {     785         for (r = 1; r < KHAZAD_ROUNDS; r++) {
786                 K1 = ctx->E[KHAZAD_ROUNDS - r]    786                 K1 = ctx->E[KHAZAD_ROUNDS - r];
787                 ctx->D[r] = T0[(int)S[(int)(K1    787                 ctx->D[r] = T0[(int)S[(int)(K1 >> 56)       ] & 0xff] ^
788                             T1[(int)S[(int)(K1    788                             T1[(int)S[(int)(K1 >> 48) & 0xff] & 0xff] ^
789                             T2[(int)S[(int)(K1    789                             T2[(int)S[(int)(K1 >> 40) & 0xff] & 0xff] ^
790                             T3[(int)S[(int)(K1    790                             T3[(int)S[(int)(K1 >> 32) & 0xff] & 0xff] ^
791                             T4[(int)S[(int)(K1    791                             T4[(int)S[(int)(K1 >> 24) & 0xff] & 0xff] ^
792                             T5[(int)S[(int)(K1    792                             T5[(int)S[(int)(K1 >> 16) & 0xff] & 0xff] ^
793                             T6[(int)S[(int)(K1    793                             T6[(int)S[(int)(K1 >>  8) & 0xff] & 0xff] ^
794                             T7[(int)S[(int)(K1    794                             T7[(int)S[(int)(K1      ) & 0xff] & 0xff];
795         }                                         795         }
796         ctx->D[KHAZAD_ROUNDS] = ctx->E[0];        796         ctx->D[KHAZAD_ROUNDS] = ctx->E[0];
797                                                   797 
798         return 0;                                 798         return 0;
799                                                   799 
800 }                                                 800 }
801                                                   801 
802 static void khazad_crypt(const u64 roundKey[KH    802 static void khazad_crypt(const u64 roundKey[KHAZAD_ROUNDS + 1],
803                 u8 *ciphertext, const u8 *plai    803                 u8 *ciphertext, const u8 *plaintext)
804 {                                                 804 {
805         const __be64 *src = (const __be64 *)pl    805         const __be64 *src = (const __be64 *)plaintext;
806         __be64 *dst = (__be64 *)ciphertext;       806         __be64 *dst = (__be64 *)ciphertext;
807         int r;                                    807         int r;
808         u64 state;                                808         u64 state;
809                                                   809 
810         state = be64_to_cpu(*src) ^ roundKey[0    810         state = be64_to_cpu(*src) ^ roundKey[0];
811                                                   811 
812         for (r = 1; r < KHAZAD_ROUNDS; r++) {     812         for (r = 1; r < KHAZAD_ROUNDS; r++) {
813                 state = T0[(int)(state >> 56)     813                 state = T0[(int)(state >> 56)       ] ^
814                         T1[(int)(state >> 48)     814                         T1[(int)(state >> 48) & 0xff] ^
815                         T2[(int)(state >> 40)     815                         T2[(int)(state >> 40) & 0xff] ^
816                         T3[(int)(state >> 32)     816                         T3[(int)(state >> 32) & 0xff] ^
817                         T4[(int)(state >> 24)     817                         T4[(int)(state >> 24) & 0xff] ^
818                         T5[(int)(state >> 16)     818                         T5[(int)(state >> 16) & 0xff] ^
819                         T6[(int)(state >>  8)     819                         T6[(int)(state >>  8) & 0xff] ^
820                         T7[(int)(state      )     820                         T7[(int)(state      ) & 0xff] ^
821                         roundKey[r];              821                         roundKey[r];
822         }                                         822         }
823                                                   823 
824         state = (T0[(int)(state >> 56)       ]    824         state = (T0[(int)(state >> 56)       ] & 0xff00000000000000ULL) ^
825                 (T1[(int)(state >> 48) & 0xff]    825                 (T1[(int)(state >> 48) & 0xff] & 0x00ff000000000000ULL) ^
826                 (T2[(int)(state >> 40) & 0xff]    826                 (T2[(int)(state >> 40) & 0xff] & 0x0000ff0000000000ULL) ^
827                 (T3[(int)(state >> 32) & 0xff]    827                 (T3[(int)(state >> 32) & 0xff] & 0x000000ff00000000ULL) ^
828                 (T4[(int)(state >> 24) & 0xff]    828                 (T4[(int)(state >> 24) & 0xff] & 0x00000000ff000000ULL) ^
829                 (T5[(int)(state >> 16) & 0xff]    829                 (T5[(int)(state >> 16) & 0xff] & 0x0000000000ff0000ULL) ^
830                 (T6[(int)(state >>  8) & 0xff]    830                 (T6[(int)(state >>  8) & 0xff] & 0x000000000000ff00ULL) ^
831                 (T7[(int)(state      ) & 0xff]    831                 (T7[(int)(state      ) & 0xff] & 0x00000000000000ffULL) ^
832                 roundKey[KHAZAD_ROUNDS];          832                 roundKey[KHAZAD_ROUNDS];
833                                                   833 
834         *dst = cpu_to_be64(state);                834         *dst = cpu_to_be64(state);
835 }                                                 835 }
836                                                   836 
837 static void khazad_encrypt(struct crypto_tfm *    837 static void khazad_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
838 {                                                 838 {
839         struct khazad_ctx *ctx = crypto_tfm_ct    839         struct khazad_ctx *ctx = crypto_tfm_ctx(tfm);
840         khazad_crypt(ctx->E, dst, src);           840         khazad_crypt(ctx->E, dst, src);
841 }                                                 841 }
842                                                   842 
843 static void khazad_decrypt(struct crypto_tfm *    843 static void khazad_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
844 {                                                 844 {
845         struct khazad_ctx *ctx = crypto_tfm_ct    845         struct khazad_ctx *ctx = crypto_tfm_ctx(tfm);
846         khazad_crypt(ctx->D, dst, src);           846         khazad_crypt(ctx->D, dst, src);
847 }                                                 847 }
848                                                   848 
849 static struct crypto_alg khazad_alg = {           849 static struct crypto_alg khazad_alg = {
850         .cra_name               =       "khaza    850         .cra_name               =       "khazad",
851         .cra_driver_name        =       "khaza    851         .cra_driver_name        =       "khazad-generic",
852         .cra_flags              =       CRYPTO    852         .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
853         .cra_blocksize          =       KHAZAD    853         .cra_blocksize          =       KHAZAD_BLOCK_SIZE,
854         .cra_ctxsize            =       sizeof    854         .cra_ctxsize            =       sizeof (struct khazad_ctx),
855         .cra_alignmask          =       7,        855         .cra_alignmask          =       7,
856         .cra_module             =       THIS_M    856         .cra_module             =       THIS_MODULE,
857         .cra_u                  =       { .cip    857         .cra_u                  =       { .cipher = {
858         .cia_min_keysize        =       KHAZAD    858         .cia_min_keysize        =       KHAZAD_KEY_SIZE,
859         .cia_max_keysize        =       KHAZAD    859         .cia_max_keysize        =       KHAZAD_KEY_SIZE,
860         .cia_setkey             =       khazad    860         .cia_setkey             =       khazad_setkey,
861         .cia_encrypt            =       khazad    861         .cia_encrypt            =       khazad_encrypt,
862         .cia_decrypt            =       khazad    862         .cia_decrypt            =       khazad_decrypt } }
863 };                                                863 };
864                                                   864 
865 static int __init khazad_mod_init(void)           865 static int __init khazad_mod_init(void)
866 {                                                 866 {
867         int ret = 0;                              867         int ret = 0;
868                                                   868         
869         ret = crypto_register_alg(&khazad_alg)    869         ret = crypto_register_alg(&khazad_alg);
870         return ret;                               870         return ret;
871 }                                                 871 }
872                                                   872 
873 static void __exit khazad_mod_fini(void)          873 static void __exit khazad_mod_fini(void)
874 {                                                 874 {
875         crypto_unregister_alg(&khazad_alg);       875         crypto_unregister_alg(&khazad_alg);
876 }                                                 876 }
877                                                   877 
878                                                   878 
879 subsys_initcall(khazad_mod_init);                 879 subsys_initcall(khazad_mod_init);
880 module_exit(khazad_mod_fini);                     880 module_exit(khazad_mod_fini);
881                                                   881 
882 MODULE_LICENSE("GPL");                            882 MODULE_LICENSE("GPL");
883 MODULE_DESCRIPTION("Khazad Cryptographic Algor    883 MODULE_DESCRIPTION("Khazad Cryptographic Algorithm");
884 MODULE_ALIAS_CRYPTO("khazad");                    884 MODULE_ALIAS_CRYPTO("khazad");
885                                                   885 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php