1 1.1 elric /* $NetBSD: rijndael-alg-fst.c,v 1.2 2017/01/28 21:31:47 christos Exp $ */ 2 1.1 elric 3 1.1 elric /* NetBSD: rijndael-alg-fst.c,v 1.5 2001/11/13 01:40:10 lukem Exp */ 4 1.1 elric /* $KAME: rijndael-alg-fst.c,v 1.10 2003/07/15 10:47:16 itojun Exp $ */ 5 1.1 elric /** 6 1.1 elric * rijndael-alg-fst.c 7 1.1 elric * 8 1.1 elric * @version 3.0 (December 2000) 9 1.1 elric * 10 1.1 elric * Optimised ANSI C code for the Rijndael cipher (now AES) 11 1.1 elric * 12 1.1 elric * @author Vincent Rijmen <vincent.rijmen (at) esat.kuleuven.ac.be> 13 1.1 elric * @author Antoon Bosselaers <antoon.bosselaers (at) esat.kuleuven.ac.be> 14 1.1 elric * @author Paulo Barreto <paulo.barreto (at) terra.com.br> 15 1.1 elric * 16 1.1 elric * This code is hereby placed in the public domain. 17 1.1 elric * 18 1.1 elric * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS 19 1.1 elric * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 1.1 elric * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 1.1 elric * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE 22 1.1 elric * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 1.1 elric * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 1.1 elric * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 25 1.1 elric * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 26 1.1 elric * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 27 1.1 elric * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 28 1.1 elric * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 1.1 elric */ 30 1.1 elric 31 1.1 elric /* "NetBSD: rijndael-alg-fst.c,v 1.5 2001/11/13 01:40:10 lukem Exp" */ 32 1.1 elric 33 1.2 christos #include <config.h> 34 1.2 christos #include <krb5/roken.h> 35 1.1 elric 36 1.1 elric #ifdef KRB5 37 1.1 elric #include <krb5/krb5-types.h> 38 1.1 elric #endif 39 1.1 elric 40 1.1 elric #include "rijndael-alg-fst.h" 41 1.1 elric 42 1.1 elric /* 43 1.1 elric Te0[x] = S [x].[02, 01, 01, 03]; 44 1.1 elric Te1[x] = S [x].[03, 02, 01, 01]; 45 1.1 elric Te2[x] = S [x].[01, 03, 02, 01]; 46 1.1 elric Te3[x] = S [x].[01, 01, 03, 02]; 47 1.1 elric Te4[x] = S [x].[01, 01, 01, 01]; 48 1.1 elric 49 1.1 elric Td0[x] = Si[x].[0e, 09, 0d, 0b]; 50 1.1 elric Td1[x] = Si[x].[0b, 0e, 09, 0d]; 51 1.1 elric Td2[x] = Si[x].[0d, 0b, 0e, 09]; 52 1.1 elric Td3[x] = Si[x].[09, 0d, 0b, 0e]; 53 1.1 elric Td4[x] = Si[x].[01, 01, 01, 01]; 54 1.1 elric */ 55 1.1 elric 56 1.1 elric static const uint32_t Te0[256] = { 57 1.1 elric 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU, 58 1.1 elric 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U, 59 1.1 elric 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU, 60 1.1 elric 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU, 61 1.1 elric 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U, 62 1.1 elric 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU, 63 1.1 elric 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU, 64 1.1 elric 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU, 65 1.1 elric 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU, 66 1.1 elric 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU, 67 1.1 elric 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U, 68 1.1 elric 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU, 69 1.1 elric 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU, 70 1.1 elric 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U, 71 1.1 elric 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU, 72 1.1 elric 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU, 73 1.1 elric 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU, 74 1.1 elric 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU, 75 1.1 elric 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU, 76 1.1 elric 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U, 77 1.1 elric 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU, 78 1.1 elric 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU, 79 1.1 elric 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU, 80 1.1 elric 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU, 81 1.1 elric 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U, 82 1.1 elric 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U, 83 1.1 elric 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U, 84 1.1 elric 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U, 85 1.1 elric 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU, 86 1.1 elric 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U, 87 1.1 elric 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U, 88 1.1 elric 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU, 89 1.1 elric 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU, 90 1.1 elric 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U, 91 1.1 elric 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U, 92 1.1 elric 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U, 93 1.1 elric 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU, 94 1.1 elric 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U, 95 1.1 elric 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU, 96 1.1 elric 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U, 97 1.1 elric 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU, 98 1.1 elric 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U, 99 1.1 elric 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U, 100 1.1 elric 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU, 101 1.1 elric 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U, 102 1.1 elric 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U, 103 1.1 elric 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U, 104 1.1 elric 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U, 105 1.1 elric 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U, 106 1.1 elric 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U, 107 1.1 elric 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U, 108 1.1 elric 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U, 109 1.1 elric 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU, 110 1.1 elric 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U, 111 1.1 elric 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U, 112 1.1 elric 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U, 113 1.1 elric 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U, 114 1.1 elric 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U, 115 1.1 elric 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U, 116 1.1 elric 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU, 117 1.1 elric 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U, 118 1.1 elric 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U, 119 1.1 elric 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U, 120 1.1 elric 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU, 121 1.1 elric }; 122 1.1 elric static const uint32_t Te1[256] = { 123 1.1 elric 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU, 124 1.1 elric 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U, 125 1.1 elric 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU, 126 1.1 elric 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U, 127 1.1 elric 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU, 128 1.1 elric 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U, 129 1.1 elric 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU, 130 1.1 elric 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U, 131 1.1 elric 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U, 132 1.1 elric 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU, 133 1.1 elric 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U, 134 1.1 elric 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U, 135 1.1 elric 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U, 136 1.1 elric 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU, 137 1.1 elric 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U, 138 1.1 elric 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U, 139 1.1 elric 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU, 140 1.1 elric 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U, 141 1.1 elric 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U, 142 1.1 elric 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U, 143 1.1 elric 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU, 144 1.1 elric 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU, 145 1.1 elric 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U, 146 1.1 elric 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU, 147 1.1 elric 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU, 148 1.1 elric 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U, 149 1.1 elric 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU, 150 1.1 elric 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U, 151 1.1 elric 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU, 152 1.1 elric 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U, 153 1.1 elric 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U, 154 1.1 elric 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U, 155 1.1 elric 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU, 156 1.1 elric 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U, 157 1.1 elric 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU, 158 1.1 elric 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U, 159 1.1 elric 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU, 160 1.1 elric 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U, 161 1.1 elric 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U, 162 1.1 elric 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU, 163 1.1 elric 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU, 164 1.1 elric 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU, 165 1.1 elric 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U, 166 1.1 elric 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U, 167 1.1 elric 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU, 168 1.1 elric 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U, 169 1.1 elric 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU, 170 1.1 elric 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U, 171 1.1 elric 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU, 172 1.1 elric 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U, 173 1.1 elric 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU, 174 1.1 elric 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU, 175 1.1 elric 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U, 176 1.1 elric 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU, 177 1.1 elric 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U, 178 1.1 elric 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU, 179 1.1 elric 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U, 180 1.1 elric 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U, 181 1.1 elric 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U, 182 1.1 elric 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU, 183 1.1 elric 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU, 184 1.1 elric 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U, 185 1.1 elric 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU, 186 1.1 elric 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U, 187 1.1 elric }; 188 1.1 elric static const uint32_t Te2[256] = { 189 1.1 elric 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU, 190 1.1 elric 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U, 191 1.1 elric 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU, 192 1.1 elric 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U, 193 1.1 elric 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU, 194 1.1 elric 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U, 195 1.1 elric 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU, 196 1.1 elric 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U, 197 1.1 elric 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U, 198 1.1 elric 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU, 199 1.1 elric 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U, 200 1.1 elric 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U, 201 1.1 elric 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U, 202 1.1 elric 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU, 203 1.1 elric 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U, 204 1.1 elric 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U, 205 1.1 elric 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU, 206 1.1 elric 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U, 207 1.1 elric 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U, 208 1.1 elric 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U, 209 1.1 elric 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU, 210 1.1 elric 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU, 211 1.1 elric 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U, 212 1.1 elric 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU, 213 1.1 elric 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU, 214 1.1 elric 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U, 215 1.1 elric 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU, 216 1.1 elric 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U, 217 1.1 elric 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU, 218 1.1 elric 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U, 219 1.1 elric 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U, 220 1.1 elric 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U, 221 1.1 elric 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU, 222 1.1 elric 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U, 223 1.1 elric 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU, 224 1.1 elric 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U, 225 1.1 elric 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU, 226 1.1 elric 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U, 227 1.1 elric 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U, 228 1.1 elric 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU, 229 1.1 elric 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU, 230 1.1 elric 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU, 231 1.1 elric 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U, 232 1.1 elric 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U, 233 1.1 elric 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU, 234 1.1 elric 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U, 235 1.1 elric 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU, 236 1.1 elric 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U, 237 1.1 elric 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU, 238 1.1 elric 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U, 239 1.1 elric 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU, 240 1.1 elric 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU, 241 1.1 elric 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U, 242 1.1 elric 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU, 243 1.1 elric 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U, 244 1.1 elric 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU, 245 1.1 elric 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U, 246 1.1 elric 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U, 247 1.1 elric 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U, 248 1.1 elric 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU, 249 1.1 elric 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU, 250 1.1 elric 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U, 251 1.1 elric 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU, 252 1.1 elric 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U, 253 1.1 elric }; 254 1.1 elric static const uint32_t Te3[256] = { 255 1.1 elric 256 1.1 elric 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U, 257 1.1 elric 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U, 258 1.1 elric 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U, 259 1.1 elric 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU, 260 1.1 elric 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU, 261 1.1 elric 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU, 262 1.1 elric 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U, 263 1.1 elric 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU, 264 1.1 elric 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU, 265 1.1 elric 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U, 266 1.1 elric 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U, 267 1.1 elric 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU, 268 1.1 elric 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU, 269 1.1 elric 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU, 270 1.1 elric 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU, 271 1.1 elric 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU, 272 1.1 elric 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U, 273 1.1 elric 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU, 274 1.1 elric 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU, 275 1.1 elric 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U, 276 1.1 elric 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U, 277 1.1 elric 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U, 278 1.1 elric 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U, 279 1.1 elric 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U, 280 1.1 elric 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU, 281 1.1 elric 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U, 282 1.1 elric 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU, 283 1.1 elric 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU, 284 1.1 elric 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U, 285 1.1 elric 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U, 286 1.1 elric 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U, 287 1.1 elric 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU, 288 1.1 elric 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U, 289 1.1 elric 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU, 290 1.1 elric 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU, 291 1.1 elric 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U, 292 1.1 elric 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U, 293 1.1 elric 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU, 294 1.1 elric 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U, 295 1.1 elric 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU, 296 1.1 elric 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U, 297 1.1 elric 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U, 298 1.1 elric 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U, 299 1.1 elric 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U, 300 1.1 elric 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU, 301 1.1 elric 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U, 302 1.1 elric 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU, 303 1.1 elric 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U, 304 1.1 elric 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU, 305 1.1 elric 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U, 306 1.1 elric 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU, 307 1.1 elric 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU, 308 1.1 elric 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU, 309 1.1 elric 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU, 310 1.1 elric 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U, 311 1.1 elric 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U, 312 1.1 elric 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U, 313 1.1 elric 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U, 314 1.1 elric 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U, 315 1.1 elric 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U, 316 1.1 elric 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU, 317 1.1 elric 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U, 318 1.1 elric 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU, 319 1.1 elric 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU, 320 1.1 elric }; 321 1.1 elric static const uint32_t Te4[256] = { 322 1.1 elric 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU, 323 1.1 elric 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U, 324 1.1 elric 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU, 325 1.1 elric 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U, 326 1.1 elric 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU, 327 1.1 elric 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U, 328 1.1 elric 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU, 329 1.1 elric 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U, 330 1.1 elric 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U, 331 1.1 elric 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU, 332 1.1 elric 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U, 333 1.1 elric 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U, 334 1.1 elric 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U, 335 1.1 elric 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU, 336 1.1 elric 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U, 337 1.1 elric 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U, 338 1.1 elric 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU, 339 1.1 elric 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U, 340 1.1 elric 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U, 341 1.1 elric 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U, 342 1.1 elric 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU, 343 1.1 elric 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU, 344 1.1 elric 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U, 345 1.1 elric 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU, 346 1.1 elric 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU, 347 1.1 elric 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U, 348 1.1 elric 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU, 349 1.1 elric 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U, 350 1.1 elric 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU, 351 1.1 elric 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U, 352 1.1 elric 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U, 353 1.1 elric 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U, 354 1.1 elric 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU, 355 1.1 elric 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U, 356 1.1 elric 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU, 357 1.1 elric 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U, 358 1.1 elric 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU, 359 1.1 elric 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U, 360 1.1 elric 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U, 361 1.1 elric 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU, 362 1.1 elric 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU, 363 1.1 elric 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU, 364 1.1 elric 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U, 365 1.1 elric 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U, 366 1.1 elric 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU, 367 1.1 elric 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U, 368 1.1 elric 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU, 369 1.1 elric 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U, 370 1.1 elric 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU, 371 1.1 elric 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U, 372 1.1 elric 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU, 373 1.1 elric 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU, 374 1.1 elric 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U, 375 1.1 elric 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU, 376 1.1 elric 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U, 377 1.1 elric 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU, 378 1.1 elric 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U, 379 1.1 elric 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U, 380 1.1 elric 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U, 381 1.1 elric 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU, 382 1.1 elric 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU, 383 1.1 elric 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U, 384 1.1 elric 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU, 385 1.1 elric 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U, 386 1.1 elric }; 387 1.1 elric static const uint32_t Td0[256] = { 388 1.1 elric 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U, 389 1.1 elric 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U, 390 1.1 elric 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U, 391 1.1 elric 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU, 392 1.1 elric 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U, 393 1.1 elric 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U, 394 1.1 elric 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU, 395 1.1 elric 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U, 396 1.1 elric 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU, 397 1.1 elric 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U, 398 1.1 elric 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U, 399 1.1 elric 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U, 400 1.1 elric 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U, 401 1.1 elric 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU, 402 1.1 elric 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U, 403 1.1 elric 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU, 404 1.1 elric 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U, 405 1.1 elric 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU, 406 1.1 elric 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U, 407 1.1 elric 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U, 408 1.1 elric 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U, 409 1.1 elric 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU, 410 1.1 elric 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U, 411 1.1 elric 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU, 412 1.1 elric 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U, 413 1.1 elric 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU, 414 1.1 elric 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U, 415 1.1 elric 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU, 416 1.1 elric 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU, 417 1.1 elric 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U, 418 1.1 elric 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU, 419 1.1 elric 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U, 420 1.1 elric 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU, 421 1.1 elric 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U, 422 1.1 elric 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U, 423 1.1 elric 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U, 424 1.1 elric 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU, 425 1.1 elric 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U, 426 1.1 elric 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U, 427 1.1 elric 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU, 428 1.1 elric 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U, 429 1.1 elric 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U, 430 1.1 elric 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U, 431 1.1 elric 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U, 432 1.1 elric 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U, 433 1.1 elric 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU, 434 1.1 elric 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U, 435 1.1 elric 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U, 436 1.1 elric 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U, 437 1.1 elric 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U, 438 1.1 elric 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U, 439 1.1 elric 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU, 440 1.1 elric 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU, 441 1.1 elric 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU, 442 1.1 elric 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU, 443 1.1 elric 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U, 444 1.1 elric 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U, 445 1.1 elric 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU, 446 1.1 elric 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU, 447 1.1 elric 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U, 448 1.1 elric 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU, 449 1.1 elric 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U, 450 1.1 elric 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U, 451 1.1 elric 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U, 452 1.1 elric }; 453 1.1 elric static const uint32_t Td1[256] = { 454 1.1 elric 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU, 455 1.1 elric 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U, 456 1.1 elric 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU, 457 1.1 elric 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U, 458 1.1 elric 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U, 459 1.1 elric 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U, 460 1.1 elric 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U, 461 1.1 elric 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U, 462 1.1 elric 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U, 463 1.1 elric 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU, 464 1.1 elric 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU, 465 1.1 elric 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU, 466 1.1 elric 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U, 467 1.1 elric 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU, 468 1.1 elric 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U, 469 1.1 elric 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U, 470 1.1 elric 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U, 471 1.1 elric 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU, 472 1.1 elric 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU, 473 1.1 elric 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U, 474 1.1 elric 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU, 475 1.1 elric 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U, 476 1.1 elric 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU, 477 1.1 elric 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU, 478 1.1 elric 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U, 479 1.1 elric 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U, 480 1.1 elric 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U, 481 1.1 elric 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU, 482 1.1 elric 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U, 483 1.1 elric 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU, 484 1.1 elric 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U, 485 1.1 elric 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U, 486 1.1 elric 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U, 487 1.1 elric 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU, 488 1.1 elric 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U, 489 1.1 elric 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U, 490 1.1 elric 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U, 491 1.1 elric 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U, 492 1.1 elric 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U, 493 1.1 elric 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U, 494 1.1 elric 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU, 495 1.1 elric 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU, 496 1.1 elric 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U, 497 1.1 elric 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU, 498 1.1 elric 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U, 499 1.1 elric 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU, 500 1.1 elric 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU, 501 1.1 elric 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U, 502 1.1 elric 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU, 503 1.1 elric 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U, 504 1.1 elric 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U, 505 1.1 elric 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U, 506 1.1 elric 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U, 507 1.1 elric 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U, 508 1.1 elric 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U, 509 1.1 elric 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U, 510 1.1 elric 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU, 511 1.1 elric 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U, 512 1.1 elric 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U, 513 1.1 elric 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU, 514 1.1 elric 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U, 515 1.1 elric 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U, 516 1.1 elric 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U, 517 1.1 elric 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U, 518 1.1 elric }; 519 1.1 elric static const uint32_t Td2[256] = { 520 1.1 elric 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U, 521 1.1 elric 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U, 522 1.1 elric 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U, 523 1.1 elric 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U, 524 1.1 elric 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU, 525 1.1 elric 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U, 526 1.1 elric 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U, 527 1.1 elric 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U, 528 1.1 elric 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U, 529 1.1 elric 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU, 530 1.1 elric 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U, 531 1.1 elric 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U, 532 1.1 elric 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU, 533 1.1 elric 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U, 534 1.1 elric 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U, 535 1.1 elric 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U, 536 1.1 elric 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U, 537 1.1 elric 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U, 538 1.1 elric 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U, 539 1.1 elric 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU, 540 1.1 elric 541 1.1 elric 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U, 542 1.1 elric 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U, 543 1.1 elric 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U, 544 1.1 elric 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U, 545 1.1 elric 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U, 546 1.1 elric 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU, 547 1.1 elric 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU, 548 1.1 elric 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U, 549 1.1 elric 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU, 550 1.1 elric 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U, 551 1.1 elric 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU, 552 1.1 elric 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU, 553 1.1 elric 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU, 554 1.1 elric 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU, 555 1.1 elric 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U, 556 1.1 elric 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U, 557 1.1 elric 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U, 558 1.1 elric 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U, 559 1.1 elric 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U, 560 1.1 elric 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U, 561 1.1 elric 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U, 562 1.1 elric 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU, 563 1.1 elric 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU, 564 1.1 elric 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U, 565 1.1 elric 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U, 566 1.1 elric 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU, 567 1.1 elric 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU, 568 1.1 elric 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U, 569 1.1 elric 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U, 570 1.1 elric 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U, 571 1.1 elric 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U, 572 1.1 elric 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U, 573 1.1 elric 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U, 574 1.1 elric 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U, 575 1.1 elric 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU, 576 1.1 elric 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U, 577 1.1 elric 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U, 578 1.1 elric 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U, 579 1.1 elric 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U, 580 1.1 elric 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U, 581 1.1 elric 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U, 582 1.1 elric 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU, 583 1.1 elric 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U, 584 1.1 elric 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U, 585 1.1 elric }; 586 1.1 elric static const uint32_t Td3[256] = { 587 1.1 elric 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU, 588 1.1 elric 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU, 589 1.1 elric 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U, 590 1.1 elric 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U, 591 1.1 elric 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU, 592 1.1 elric 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU, 593 1.1 elric 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U, 594 1.1 elric 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU, 595 1.1 elric 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U, 596 1.1 elric 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU, 597 1.1 elric 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U, 598 1.1 elric 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U, 599 1.1 elric 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U, 600 1.1 elric 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U, 601 1.1 elric 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U, 602 1.1 elric 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU, 603 1.1 elric 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU, 604 1.1 elric 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U, 605 1.1 elric 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U, 606 1.1 elric 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU, 607 1.1 elric 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU, 608 1.1 elric 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U, 609 1.1 elric 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U, 610 1.1 elric 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U, 611 1.1 elric 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U, 612 1.1 elric 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU, 613 1.1 elric 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U, 614 1.1 elric 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U, 615 1.1 elric 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU, 616 1.1 elric 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU, 617 1.1 elric 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U, 618 1.1 elric 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U, 619 1.1 elric 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U, 620 1.1 elric 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU, 621 1.1 elric 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U, 622 1.1 elric 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U, 623 1.1 elric 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U, 624 1.1 elric 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U, 625 1.1 elric 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U, 626 1.1 elric 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U, 627 1.1 elric 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U, 628 1.1 elric 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU, 629 1.1 elric 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U, 630 1.1 elric 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U, 631 1.1 elric 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU, 632 1.1 elric 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU, 633 1.1 elric 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U, 634 1.1 elric 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU, 635 1.1 elric 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U, 636 1.1 elric 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U, 637 1.1 elric 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U, 638 1.1 elric 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U, 639 1.1 elric 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U, 640 1.1 elric 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U, 641 1.1 elric 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU, 642 1.1 elric 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU, 643 1.1 elric 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU, 644 1.1 elric 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU, 645 1.1 elric 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U, 646 1.1 elric 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U, 647 1.1 elric 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U, 648 1.1 elric 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU, 649 1.1 elric 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U, 650 1.1 elric 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U, 651 1.1 elric }; 652 1.1 elric static const uint32_t Td4[256] = { 653 1.1 elric 0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U, 654 1.1 elric 0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U, 655 1.1 elric 0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU, 656 1.1 elric 0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU, 657 1.1 elric 0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U, 658 1.1 elric 0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U, 659 1.1 elric 0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U, 660 1.1 elric 0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU, 661 1.1 elric 0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U, 662 1.1 elric 0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU, 663 1.1 elric 0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU, 664 1.1 elric 0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU, 665 1.1 elric 0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U, 666 1.1 elric 0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U, 667 1.1 elric 0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U, 668 1.1 elric 0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U, 669 1.1 elric 0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U, 670 1.1 elric 0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U, 671 1.1 elric 0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU, 672 1.1 elric 0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U, 673 1.1 elric 0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U, 674 1.1 elric 0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU, 675 1.1 elric 0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U, 676 1.1 elric 0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U, 677 1.1 elric 0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U, 678 1.1 elric 0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU, 679 1.1 elric 0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U, 680 1.1 elric 0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U, 681 1.1 elric 0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU, 682 1.1 elric 0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U, 683 1.1 elric 0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U, 684 1.1 elric 0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU, 685 1.1 elric 0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U, 686 1.1 elric 0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU, 687 1.1 elric 0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU, 688 1.1 elric 0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U, 689 1.1 elric 0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U, 690 1.1 elric 0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U, 691 1.1 elric 0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U, 692 1.1 elric 0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU, 693 1.1 elric 0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U, 694 1.1 elric 0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U, 695 1.1 elric 0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU, 696 1.1 elric 0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU, 697 1.1 elric 0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU, 698 1.1 elric 0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U, 699 1.1 elric 0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU, 700 1.1 elric 0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U, 701 1.1 elric 0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U, 702 1.1 elric 0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U, 703 1.1 elric 0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U, 704 1.1 elric 0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU, 705 1.1 elric 0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U, 706 1.1 elric 0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU, 707 1.1 elric 0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU, 708 1.1 elric 0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU, 709 1.1 elric 0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU, 710 1.1 elric 0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U, 711 1.1 elric 0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU, 712 1.1 elric 0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U, 713 1.1 elric 0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU, 714 1.1 elric 0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U, 715 1.1 elric 0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U, 716 1.1 elric 0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU, 717 1.1 elric }; 718 1.1 elric static const uint32_t rcon[] = { 719 1.1 elric 0x01000000, 0x02000000, 0x04000000, 0x08000000, 720 1.1 elric 0x10000000, 0x20000000, 0x40000000, 0x80000000, 721 1.1 elric 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ 722 1.1 elric }; 723 1.1 elric 724 1.1 elric #define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) 725 1.1 elric 726 1.1 elric #ifdef _MSC_VER 727 1.1 elric #define GETU32(p) SWAP(*((uint32_t *)(p))) 728 1.1 elric #define PUTU32(ct, st) { *((uint32_t *)(ct)) = SWAP((st)); } 729 1.1 elric #else 730 1.1 elric #define GETU32(pt) (((uint32_t)(pt)[0] << 24) ^ ((uint32_t)(pt)[1] << 16) ^ ((uint32_t)(pt)[2] << 8) ^ ((uint32_t)(pt)[3])) 731 1.1 elric #define PUTU32(ct, st) { (ct)[0] = (uint8_t)((st) >> 24); (ct)[1] = (uint8_t)((st) >> 16); (ct)[2] = (uint8_t)((st) >> 8); (ct)[3] = (uint8_t)(st); } 732 1.1 elric #endif 733 1.1 elric 734 1.1 elric /** 735 1.1 elric * Expand the cipher key into the encryption key schedule. 736 1.1 elric * 737 1.1 elric * @return the number of rounds for the given cipher key size. 738 1.1 elric */ 739 1.1 elric int rijndaelKeySetupEnc(uint32_t rk[/*4*(Nr + 1)*/], const uint8_t cipherKey[], int keyBits) { 740 1.1 elric int i = 0; 741 1.1 elric uint32_t temp; 742 1.1 elric 743 1.1 elric rk[0] = GETU32(cipherKey ); 744 1.1 elric rk[1] = GETU32(cipherKey + 4); 745 1.1 elric rk[2] = GETU32(cipherKey + 8); 746 1.1 elric rk[3] = GETU32(cipherKey + 12); 747 1.1 elric if (keyBits == 128) { 748 1.1 elric for (;;) { 749 1.1 elric temp = rk[3]; 750 1.1 elric rk[4] = rk[0] ^ 751 1.1 elric (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ 752 1.1 elric (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ 753 1.1 elric (Te4[(temp ) & 0xff] & 0x0000ff00) ^ 754 1.1 elric (Te4[(temp >> 24) ] & 0x000000ff) ^ 755 1.1 elric rcon[i]; 756 1.1 elric rk[5] = rk[1] ^ rk[4]; 757 1.1 elric rk[6] = rk[2] ^ rk[5]; 758 1.1 elric rk[7] = rk[3] ^ rk[6]; 759 1.1 elric if (++i == 10) { 760 1.1 elric return 10; 761 1.1 elric } 762 1.1 elric rk += 4; 763 1.1 elric } 764 1.1 elric } 765 1.1 elric rk[4] = GETU32(cipherKey + 16); 766 1.1 elric rk[5] = GETU32(cipherKey + 20); 767 1.1 elric if (keyBits == 192) { 768 1.1 elric for (;;) { 769 1.1 elric temp = rk[ 5]; 770 1.1 elric rk[ 6] = rk[ 0] ^ 771 1.1 elric (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ 772 1.1 elric (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ 773 1.1 elric (Te4[(temp ) & 0xff] & 0x0000ff00) ^ 774 1.1 elric (Te4[(temp >> 24) ] & 0x000000ff) ^ 775 1.1 elric rcon[i]; 776 1.1 elric rk[ 7] = rk[ 1] ^ rk[ 6]; 777 1.1 elric rk[ 8] = rk[ 2] ^ rk[ 7]; 778 1.1 elric rk[ 9] = rk[ 3] ^ rk[ 8]; 779 1.1 elric if (++i == 8) { 780 1.1 elric return 12; 781 1.1 elric } 782 1.1 elric rk[10] = rk[ 4] ^ rk[ 9]; 783 1.1 elric rk[11] = rk[ 5] ^ rk[10]; 784 1.1 elric rk += 6; 785 1.1 elric } 786 1.1 elric } 787 1.1 elric rk[6] = GETU32(cipherKey + 24); 788 1.1 elric rk[7] = GETU32(cipherKey + 28); 789 1.1 elric if (keyBits == 256) { 790 1.1 elric for (;;) { 791 1.1 elric temp = rk[ 7]; 792 1.1 elric rk[ 8] = rk[ 0] ^ 793 1.1 elric (Te4[(temp >> 16) & 0xff] & 0xff000000) ^ 794 1.1 elric (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^ 795 1.1 elric (Te4[(temp ) & 0xff] & 0x0000ff00) ^ 796 1.1 elric (Te4[(temp >> 24) ] & 0x000000ff) ^ 797 1.1 elric rcon[i]; 798 1.1 elric rk[ 9] = rk[ 1] ^ rk[ 8]; 799 1.1 elric rk[10] = rk[ 2] ^ rk[ 9]; 800 1.1 elric rk[11] = rk[ 3] ^ rk[10]; 801 1.1 elric if (++i == 7) { 802 1.1 elric return 14; 803 1.1 elric } 804 1.1 elric temp = rk[11]; 805 1.1 elric rk[12] = rk[ 4] ^ 806 1.1 elric (Te4[(temp >> 24) ] & 0xff000000) ^ 807 1.1 elric (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^ 808 1.1 elric (Te4[(temp >> 8) & 0xff] & 0x0000ff00) ^ 809 1.1 elric (Te4[(temp ) & 0xff] & 0x000000ff); 810 1.1 elric rk[13] = rk[ 5] ^ rk[12]; 811 1.1 elric rk[14] = rk[ 6] ^ rk[13]; 812 1.1 elric rk[15] = rk[ 7] ^ rk[14]; 813 1.1 elric 814 1.1 elric rk += 8; 815 1.1 elric } 816 1.1 elric } 817 1.1 elric return 0; 818 1.1 elric } 819 1.1 elric 820 1.1 elric /** 821 1.1 elric * Expand the cipher key into the decryption key schedule. 822 1.1 elric * 823 1.1 elric * @return the number of rounds for the given cipher key size. 824 1.1 elric */ 825 1.1 elric int rijndaelKeySetupDec(uint32_t rk[/*4*(Nr + 1)*/], const uint8_t cipherKey[], int keyBits) { 826 1.1 elric int Nr, i, j; 827 1.1 elric uint32_t temp; 828 1.1 elric 829 1.1 elric /* expand the cipher key: */ 830 1.1 elric Nr = rijndaelKeySetupEnc(rk, cipherKey, keyBits); 831 1.1 elric /* invert the order of the round keys: */ 832 1.1 elric for (i = 0, j = 4*Nr; i < j; i += 4, j -= 4) { 833 1.1 elric temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp; 834 1.1 elric temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; 835 1.1 elric temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; 836 1.1 elric temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; 837 1.1 elric } 838 1.1 elric /* apply the inverse MixColumn transform to all round keys but the first and the last: */ 839 1.1 elric for (i = 1; i < Nr; i++) { 840 1.1 elric rk += 4; 841 1.1 elric rk[0] = 842 1.1 elric Td0[Te4[(rk[0] >> 24) ] & 0xff] ^ 843 1.1 elric Td1[Te4[(rk[0] >> 16) & 0xff] & 0xff] ^ 844 1.1 elric Td2[Te4[(rk[0] >> 8) & 0xff] & 0xff] ^ 845 1.1 elric Td3[Te4[(rk[0] ) & 0xff] & 0xff]; 846 1.1 elric rk[1] = 847 1.1 elric Td0[Te4[(rk[1] >> 24) ] & 0xff] ^ 848 1.1 elric Td1[Te4[(rk[1] >> 16) & 0xff] & 0xff] ^ 849 1.1 elric Td2[Te4[(rk[1] >> 8) & 0xff] & 0xff] ^ 850 1.1 elric Td3[Te4[(rk[1] ) & 0xff] & 0xff]; 851 1.1 elric rk[2] = 852 1.1 elric Td0[Te4[(rk[2] >> 24) ] & 0xff] ^ 853 1.1 elric Td1[Te4[(rk[2] >> 16) & 0xff] & 0xff] ^ 854 1.1 elric Td2[Te4[(rk[2] >> 8) & 0xff] & 0xff] ^ 855 1.1 elric Td3[Te4[(rk[2] ) & 0xff] & 0xff]; 856 1.1 elric rk[3] = 857 1.1 elric Td0[Te4[(rk[3] >> 24) ] & 0xff] ^ 858 1.1 elric Td1[Te4[(rk[3] >> 16) & 0xff] & 0xff] ^ 859 1.1 elric Td2[Te4[(rk[3] >> 8) & 0xff] & 0xff] ^ 860 1.1 elric Td3[Te4[(rk[3] ) & 0xff] & 0xff]; 861 1.1 elric } 862 1.1 elric return Nr; 863 1.1 elric } 864 1.1 elric 865 1.1 elric void rijndaelEncrypt(const uint32_t rk[/*4*(Nr + 1)*/], int Nr, const uint8_t pt[16], uint8_t ct[16]) { 866 1.1 elric uint32_t s0, s1, s2, s3, t0, t1, t2, t3; 867 1.1 elric #ifndef FULL_UNROLL 868 1.1 elric int r; 869 1.1 elric #endif /* ?FULL_UNROLL */ 870 1.1 elric 871 1.1 elric /* 872 1.1 elric * map byte array block to cipher state 873 1.1 elric * and add initial round key: 874 1.1 elric */ 875 1.1 elric s0 = GETU32(pt ) ^ rk[0]; 876 1.1 elric s1 = GETU32(pt + 4) ^ rk[1]; 877 1.1 elric s2 = GETU32(pt + 8) ^ rk[2]; 878 1.1 elric s3 = GETU32(pt + 12) ^ rk[3]; 879 1.1 elric #ifdef FULL_UNROLL 880 1.1 elric /* round 1: */ 881 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4]; 882 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5]; 883 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6]; 884 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7]; 885 1.1 elric /* round 2: */ 886 1.1 elric s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8]; 887 1.1 elric s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9]; 888 1.1 elric s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10]; 889 1.1 elric s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11]; 890 1.1 elric /* round 3: */ 891 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12]; 892 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13]; 893 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14]; 894 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15]; 895 1.1 elric /* round 4: */ 896 1.1 elric s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16]; 897 1.1 elric s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17]; 898 1.1 elric s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18]; 899 1.1 elric s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19]; 900 1.1 elric /* round 5: */ 901 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20]; 902 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21]; 903 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22]; 904 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23]; 905 1.1 elric /* round 6: */ 906 1.1 elric s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24]; 907 1.1 elric s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25]; 908 1.1 elric s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26]; 909 1.1 elric s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27]; 910 1.1 elric /* round 7: */ 911 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28]; 912 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29]; 913 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30]; 914 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31]; 915 1.1 elric /* round 8: */ 916 1.1 elric s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32]; 917 1.1 elric s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33]; 918 1.1 elric s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34]; 919 1.1 elric s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35]; 920 1.1 elric /* round 9: */ 921 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36]; 922 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37]; 923 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38]; 924 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39]; 925 1.1 elric if (Nr > 10) { 926 1.1 elric /* round 10: */ 927 1.1 elric s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40]; 928 1.1 elric s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41]; 929 1.1 elric s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42]; 930 1.1 elric s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43]; 931 1.1 elric /* round 11: */ 932 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44]; 933 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45]; 934 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46]; 935 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47]; 936 1.1 elric if (Nr > 12) { 937 1.1 elric /* round 12: */ 938 1.1 elric s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48]; 939 1.1 elric s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49]; 940 1.1 elric s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50]; 941 1.1 elric s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51]; 942 1.1 elric /* round 13: */ 943 1.1 elric t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52]; 944 1.1 elric t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53]; 945 1.1 elric t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54]; 946 1.1 elric t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55]; 947 1.1 elric } 948 1.1 elric } 949 1.1 elric rk += Nr << 2; 950 1.1 elric #else /* !FULL_UNROLL */ 951 1.1 elric /* 952 1.1 elric * Nr - 1 full rounds: 953 1.1 elric */ 954 1.1 elric r = Nr >> 1; 955 1.1 elric for (;;) { 956 1.1 elric t0 = 957 1.1 elric Te0[(s0 >> 24) ] ^ 958 1.1 elric Te1[(s1 >> 16) & 0xff] ^ 959 1.1 elric Te2[(s2 >> 8) & 0xff] ^ 960 1.1 elric Te3[(s3 ) & 0xff] ^ 961 1.1 elric rk[4]; 962 1.1 elric t1 = 963 1.1 elric Te0[(s1 >> 24) ] ^ 964 1.1 elric Te1[(s2 >> 16) & 0xff] ^ 965 1.1 elric Te2[(s3 >> 8) & 0xff] ^ 966 1.1 elric Te3[(s0 ) & 0xff] ^ 967 1.1 elric rk[5]; 968 1.1 elric t2 = 969 1.1 elric Te0[(s2 >> 24) ] ^ 970 1.1 elric Te1[(s3 >> 16) & 0xff] ^ 971 1.1 elric Te2[(s0 >> 8) & 0xff] ^ 972 1.1 elric Te3[(s1 ) & 0xff] ^ 973 1.1 elric rk[6]; 974 1.1 elric t3 = 975 1.1 elric Te0[(s3 >> 24) ] ^ 976 1.1 elric Te1[(s0 >> 16) & 0xff] ^ 977 1.1 elric Te2[(s1 >> 8) & 0xff] ^ 978 1.1 elric Te3[(s2 ) & 0xff] ^ 979 1.1 elric rk[7]; 980 1.1 elric 981 1.1 elric rk += 8; 982 1.1 elric if (--r == 0) { 983 1.1 elric break; 984 1.1 elric } 985 1.1 elric 986 1.1 elric s0 = 987 1.1 elric Te0[(t0 >> 24) ] ^ 988 1.1 elric Te1[(t1 >> 16) & 0xff] ^ 989 1.1 elric Te2[(t2 >> 8) & 0xff] ^ 990 1.1 elric Te3[(t3 ) & 0xff] ^ 991 1.1 elric rk[0]; 992 1.1 elric s1 = 993 1.1 elric Te0[(t1 >> 24) ] ^ 994 1.1 elric Te1[(t2 >> 16) & 0xff] ^ 995 1.1 elric Te2[(t3 >> 8) & 0xff] ^ 996 1.1 elric Te3[(t0 ) & 0xff] ^ 997 1.1 elric rk[1]; 998 1.1 elric s2 = 999 1.1 elric Te0[(t2 >> 24) ] ^ 1000 1.1 elric Te1[(t3 >> 16) & 0xff] ^ 1001 1.1 elric Te2[(t0 >> 8) & 0xff] ^ 1002 1.1 elric Te3[(t1 ) & 0xff] ^ 1003 1.1 elric rk[2]; 1004 1.1 elric s3 = 1005 1.1 elric Te0[(t3 >> 24) ] ^ 1006 1.1 elric Te1[(t0 >> 16) & 0xff] ^ 1007 1.1 elric Te2[(t1 >> 8) & 0xff] ^ 1008 1.1 elric Te3[(t2 ) & 0xff] ^ 1009 1.1 elric rk[3]; 1010 1.1 elric } 1011 1.1 elric #endif /* ?FULL_UNROLL */ 1012 1.1 elric /* 1013 1.1 elric * apply last round and 1014 1.1 elric * map cipher state to byte array block: 1015 1.1 elric */ 1016 1.1 elric s0 = 1017 1.1 elric (Te4[(t0 >> 24) ] & 0xff000000) ^ 1018 1.1 elric (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ 1019 1.1 elric (Te4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ 1020 1.1 elric (Te4[(t3 ) & 0xff] & 0x000000ff) ^ 1021 1.1 elric rk[0]; 1022 1.1 elric PUTU32(ct , s0); 1023 1.1 elric s1 = 1024 1.1 elric (Te4[(t1 >> 24) ] & 0xff000000) ^ 1025 1.1 elric (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ 1026 1.1 elric (Te4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ 1027 1.1 elric (Te4[(t0 ) & 0xff] & 0x000000ff) ^ 1028 1.1 elric rk[1]; 1029 1.1 elric PUTU32(ct + 4, s1); 1030 1.1 elric s2 = 1031 1.1 elric (Te4[(t2 >> 24) ] & 0xff000000) ^ 1032 1.1 elric (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ 1033 1.1 elric (Te4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ 1034 1.1 elric (Te4[(t1 ) & 0xff] & 0x000000ff) ^ 1035 1.1 elric rk[2]; 1036 1.1 elric PUTU32(ct + 8, s2); 1037 1.1 elric s3 = 1038 1.1 elric (Te4[(t3 >> 24) ] & 0xff000000) ^ 1039 1.1 elric (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ 1040 1.1 elric (Te4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ 1041 1.1 elric (Te4[(t2 ) & 0xff] & 0x000000ff) ^ 1042 1.1 elric rk[3]; 1043 1.1 elric PUTU32(ct + 12, s3); 1044 1.1 elric } 1045 1.1 elric 1046 1.1 elric void rijndaelDecrypt(const uint32_t rk[/*4*(Nr + 1)*/], int Nr, const uint8_t ct[16], uint8_t pt[16]) { 1047 1.1 elric uint32_t s0, s1, s2, s3, t0, t1, t2, t3; 1048 1.1 elric #ifndef FULL_UNROLL 1049 1.1 elric int r; 1050 1.1 elric #endif /* ?FULL_UNROLL */ 1051 1.1 elric 1052 1.1 elric /* 1053 1.1 elric * map byte array block to cipher state 1054 1.1 elric * and add initial round key: 1055 1.1 elric */ 1056 1.1 elric s0 = GETU32(ct ) ^ rk[0]; 1057 1.1 elric s1 = GETU32(ct + 4) ^ rk[1]; 1058 1.1 elric s2 = GETU32(ct + 8) ^ rk[2]; 1059 1.1 elric s3 = GETU32(ct + 12) ^ rk[3]; 1060 1.1 elric #ifdef FULL_UNROLL 1061 1.1 elric /* round 1: */ 1062 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4]; 1063 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5]; 1064 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6]; 1065 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7]; 1066 1.1 elric /* round 2: */ 1067 1.1 elric s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8]; 1068 1.1 elric s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9]; 1069 1.1 elric s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10]; 1070 1.1 elric s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11]; 1071 1.1 elric /* round 3: */ 1072 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12]; 1073 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13]; 1074 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14]; 1075 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15]; 1076 1.1 elric /* round 4: */ 1077 1.1 elric s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16]; 1078 1.1 elric s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17]; 1079 1.1 elric s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18]; 1080 1.1 elric s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19]; 1081 1.1 elric /* round 5: */ 1082 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20]; 1083 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21]; 1084 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22]; 1085 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23]; 1086 1.1 elric /* round 6: */ 1087 1.1 elric s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24]; 1088 1.1 elric s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25]; 1089 1.1 elric s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26]; 1090 1.1 elric s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27]; 1091 1.1 elric /* round 7: */ 1092 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28]; 1093 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29]; 1094 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30]; 1095 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31]; 1096 1.1 elric /* round 8: */ 1097 1.1 elric s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32]; 1098 1.1 elric s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33]; 1099 1.1 elric s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34]; 1100 1.1 elric s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35]; 1101 1.1 elric /* round 9: */ 1102 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36]; 1103 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37]; 1104 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38]; 1105 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39]; 1106 1.1 elric if (Nr > 10) { 1107 1.1 elric /* round 10: */ 1108 1.1 elric s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40]; 1109 1.1 elric s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41]; 1110 1.1 elric s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42]; 1111 1.1 elric s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43]; 1112 1.1 elric /* round 11: */ 1113 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44]; 1114 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45]; 1115 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46]; 1116 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47]; 1117 1.1 elric if (Nr > 12) { 1118 1.1 elric /* round 12: */ 1119 1.1 elric s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48]; 1120 1.1 elric s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49]; 1121 1.1 elric s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50]; 1122 1.1 elric s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51]; 1123 1.1 elric /* round 13: */ 1124 1.1 elric t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52]; 1125 1.1 elric t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53]; 1126 1.1 elric t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54]; 1127 1.1 elric t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55]; 1128 1.1 elric } 1129 1.1 elric } 1130 1.1 elric rk += Nr << 2; 1131 1.1 elric #else /* !FULL_UNROLL */ 1132 1.1 elric /* 1133 1.1 elric * Nr - 1 full rounds: 1134 1.1 elric */ 1135 1.1 elric r = Nr >> 1; 1136 1.1 elric for (;;) { 1137 1.1 elric t0 = 1138 1.1 elric Td0[(s0 >> 24) ] ^ 1139 1.1 elric Td1[(s3 >> 16) & 0xff] ^ 1140 1.1 elric Td2[(s2 >> 8) & 0xff] ^ 1141 1.1 elric Td3[(s1 ) & 0xff] ^ 1142 1.1 elric rk[4]; 1143 1.1 elric t1 = 1144 1.1 elric Td0[(s1 >> 24) ] ^ 1145 1.1 elric Td1[(s0 >> 16) & 0xff] ^ 1146 1.1 elric Td2[(s3 >> 8) & 0xff] ^ 1147 1.1 elric Td3[(s2 ) & 0xff] ^ 1148 1.1 elric rk[5]; 1149 1.1 elric t2 = 1150 1.1 elric Td0[(s2 >> 24) ] ^ 1151 1.1 elric Td1[(s1 >> 16) & 0xff] ^ 1152 1.1 elric Td2[(s0 >> 8) & 0xff] ^ 1153 1.1 elric Td3[(s3 ) & 0xff] ^ 1154 1.1 elric rk[6]; 1155 1.1 elric t3 = 1156 1.1 elric Td0[(s3 >> 24) ] ^ 1157 1.1 elric Td1[(s2 >> 16) & 0xff] ^ 1158 1.1 elric Td2[(s1 >> 8) & 0xff] ^ 1159 1.1 elric Td3[(s0 ) & 0xff] ^ 1160 1.1 elric rk[7]; 1161 1.1 elric 1162 1.1 elric rk += 8; 1163 1.1 elric if (--r == 0) { 1164 1.1 elric break; 1165 1.1 elric } 1166 1.1 elric 1167 1.1 elric s0 = 1168 1.1 elric Td0[(t0 >> 24) ] ^ 1169 1.1 elric Td1[(t3 >> 16) & 0xff] ^ 1170 1.1 elric Td2[(t2 >> 8) & 0xff] ^ 1171 1.1 elric Td3[(t1 ) & 0xff] ^ 1172 1.1 elric rk[0]; 1173 1.1 elric s1 = 1174 1.1 elric Td0[(t1 >> 24) ] ^ 1175 1.1 elric Td1[(t0 >> 16) & 0xff] ^ 1176 1.1 elric Td2[(t3 >> 8) & 0xff] ^ 1177 1.1 elric Td3[(t2 ) & 0xff] ^ 1178 1.1 elric rk[1]; 1179 1.1 elric s2 = 1180 1.1 elric Td0[(t2 >> 24) ] ^ 1181 1.1 elric Td1[(t1 >> 16) & 0xff] ^ 1182 1.1 elric Td2[(t0 >> 8) & 0xff] ^ 1183 1.1 elric Td3[(t3 ) & 0xff] ^ 1184 1.1 elric rk[2]; 1185 1.1 elric s3 = 1186 1.1 elric Td0[(t3 >> 24) ] ^ 1187 1.1 elric Td1[(t2 >> 16) & 0xff] ^ 1188 1.1 elric Td2[(t1 >> 8) & 0xff] ^ 1189 1.1 elric Td3[(t0 ) & 0xff] ^ 1190 1.1 elric rk[3]; 1191 1.1 elric } 1192 1.1 elric #endif /* ?FULL_UNROLL */ 1193 1.1 elric /* 1194 1.1 elric * apply last round and 1195 1.1 elric * map cipher state to byte array block: 1196 1.1 elric */ 1197 1.1 elric s0 = 1198 1.1 elric (Td4[(t0 >> 24) ] & 0xff000000) ^ 1199 1.1 elric (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ 1200 1.1 elric (Td4[(t2 >> 8) & 0xff] & 0x0000ff00) ^ 1201 1.1 elric (Td4[(t1 ) & 0xff] & 0x000000ff) ^ 1202 1.1 elric rk[0]; 1203 1.1 elric PUTU32(pt , s0); 1204 1.1 elric s1 = 1205 1.1 elric (Td4[(t1 >> 24) ] & 0xff000000) ^ 1206 1.1 elric (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ 1207 1.1 elric (Td4[(t3 >> 8) & 0xff] & 0x0000ff00) ^ 1208 1.1 elric (Td4[(t2 ) & 0xff] & 0x000000ff) ^ 1209 1.1 elric rk[1]; 1210 1.1 elric PUTU32(pt + 4, s1); 1211 1.1 elric s2 = 1212 1.1 elric (Td4[(t2 >> 24) ] & 0xff000000) ^ 1213 1.1 elric (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ 1214 1.1 elric (Td4[(t0 >> 8) & 0xff] & 0x0000ff00) ^ 1215 1.1 elric (Td4[(t3 ) & 0xff] & 0x000000ff) ^ 1216 1.1 elric rk[2]; 1217 1.1 elric PUTU32(pt + 8, s2); 1218 1.1 elric s3 = 1219 1.1 elric (Td4[(t3 >> 24) ] & 0xff000000) ^ 1220 1.1 elric (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ 1221 1.1 elric (Td4[(t1 >> 8) & 0xff] & 0x0000ff00) ^ 1222 1.1 elric (Td4[(t0 ) & 0xff] & 0x000000ff) ^ 1223 1.1 elric rk[3]; 1224 1.1 elric PUTU32(pt + 12, s3); 1225 1.1 elric } 1226