1/** 2 * Author......: See docs/credits.txt 3 * License.....: MIT 4 */ 5 6#include "inc_vendor.h" 7#include "inc_types.h" 8#include "inc_platform.h" 9#include "inc_common.h" 10#include "inc_cipher_aes.h" 11 12CONSTANT_VK u32a te0[256] = 13{ 14 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 15 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 16 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 17 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 18 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 19 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 20 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 21 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 22 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 23 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 24 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 25 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 26 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 27 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 28 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 29 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 30 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 31 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 32 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 33 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 34 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 35 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 36 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 37 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 38 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 39 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 40 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 41 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 42 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 43 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 44 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 45 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 46 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 47 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 48 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 49 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 50 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 51 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 52 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 53 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 54 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 55 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 56 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 57 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 58 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 59 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 60 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 61 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 62 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 63 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 64 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 65 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 66 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 67 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 68 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 69 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 70 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 71 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 72 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 73 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 74 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 75 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 76 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 77 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a, 78}; 79 80CONSTANT_VK u32a te1[256] = 81{ 82 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 83 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 84 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 85 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 86 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 87 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 88 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 89 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 90 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 91 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 92 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 93 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 94 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 95 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 96 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 97 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 98 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 99 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 100 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 101 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 102 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 103 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 104 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 105 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 106 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 107 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 108 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 109 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 110 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 111 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 112 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 113 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 114 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 115 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 116 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 117 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 118 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 119 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 120 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 121 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 122 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 123 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 124 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 125 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 126 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 127 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 128 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 129 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 130 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 131 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 132 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 133 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 134 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 135 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 136 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 137 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 138 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 139 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 140 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 141 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 142 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 143 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 144 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 145 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616, 146}; 147 148CONSTANT_VK u32a te2[256] = 149{ 150 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 151 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 152 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 153 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 154 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 155 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 156 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 157 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 158 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 159 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 160 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 161 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 162 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 163 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 164 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 165 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 166 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 167 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 168 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 169 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 170 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 171 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 172 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 173 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 174 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 175 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 176 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 177 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 178 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 179 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 180 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 181 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 182 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 183 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 184 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 185 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 186 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 187 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 188 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 189 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 190 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 191 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 192 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 193 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 194 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 195 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 196 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 197 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 198 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 199 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 200 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 201 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 202 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 203 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 204 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 205 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 206 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 207 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 208 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 209 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 210 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 211 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 212 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 213 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16, 214}; 215 216CONSTANT_VK u32a te3[256] = 217{ 218 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 219 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 220 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 221 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 222 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 223 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 224 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 225 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 226 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 227 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 228 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 229 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 230 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 231 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 232 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 233 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 234 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 235 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 236 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 237 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 238 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 239 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 240 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 241 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 242 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 243 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 244 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 245 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 246 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 247 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 248 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 249 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 250 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 251 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 252 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 253 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 254 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 255 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 256 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 257 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 258 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 259 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 260 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 261 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 262 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 263 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 264 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 265 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 266 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 267 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 268 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 269 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 270 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 271 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 272 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 273 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 274 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 275 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 276 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 277 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 278 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 279 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 280 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 281 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c, 282}; 283 284CONSTANT_VK u32a te4[256] = 285{ 286 0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b, 287 0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5, 288 0x30303030, 0x01010101, 0x67676767, 0x2b2b2b2b, 289 0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676, 290 0xcacacaca, 0x82828282, 0xc9c9c9c9, 0x7d7d7d7d, 291 0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0, 292 0xadadadad, 0xd4d4d4d4, 0xa2a2a2a2, 0xafafafaf, 293 0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0, 294 0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626, 295 0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc, 296 0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1, 297 0x71717171, 0xd8d8d8d8, 0x31313131, 0x15151515, 298 0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3, 299 0x18181818, 0x96969696, 0x05050505, 0x9a9a9a9a, 300 0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2, 301 0xebebebeb, 0x27272727, 0xb2b2b2b2, 0x75757575, 302 0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a, 303 0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0, 304 0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3, 305 0x29292929, 0xe3e3e3e3, 0x2f2f2f2f, 0x84848484, 306 0x53535353, 0xd1d1d1d1, 0x00000000, 0xedededed, 307 0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b, 308 0x6a6a6a6a, 0xcbcbcbcb, 0xbebebebe, 0x39393939, 309 0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf, 310 0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, 0xfbfbfbfb, 311 0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585, 312 0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f, 313 0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8, 314 0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f, 315 0x92929292, 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5, 316 0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121, 317 0x10101010, 0xffffffff, 0xf3f3f3f3, 0xd2d2d2d2, 318 0xcdcdcdcd, 0x0c0c0c0c, 0x13131313, 0xecececec, 319 0x5f5f5f5f, 0x97979797, 0x44444444, 0x17171717, 320 0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d, 321 0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373, 322 0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc, 323 0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888, 324 0x46464646, 0xeeeeeeee, 0xb8b8b8b8, 0x14141414, 325 0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb, 326 0xe0e0e0e0, 0x32323232, 0x3a3a3a3a, 0x0a0a0a0a, 327 0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c, 328 0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, 0x62626262, 329 0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979, 330 0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d, 331 0x8d8d8d8d, 0xd5d5d5d5, 0x4e4e4e4e, 0xa9a9a9a9, 332 0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea, 333 0x65656565, 0x7a7a7a7a, 0xaeaeaeae, 0x08080808, 334 0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e, 335 0x1c1c1c1c, 0xa6a6a6a6, 0xb4b4b4b4, 0xc6c6c6c6, 336 0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f, 337 0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, 0x8a8a8a8a, 338 0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666, 339 0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e, 340 0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9, 341 0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e, 342 0xe1e1e1e1, 0xf8f8f8f8, 0x98989898, 0x11111111, 343 0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494, 344 0x9b9b9b9b, 0x1e1e1e1e, 0x87878787, 0xe9e9e9e9, 345 0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf, 346 0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, 0x0d0d0d0d, 347 0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868, 348 0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f, 349 0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616, 350}; 351 352CONSTANT_VK u32a td0[256] = 353{ 354 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 355 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 356 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 357 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 358 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 359 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 360 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 361 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 362 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 363 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 364 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 365 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 366 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 367 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 368 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 369 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 370 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 371 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 372 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 373 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 374 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 375 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 376 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 377 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 378 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 379 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 380 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 381 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 382 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 383 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 384 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 385 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 386 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 387 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 388 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 389 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 390 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 391 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 392 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 393 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 394 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 395 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 396 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 397 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 398 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 399 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 400 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 401 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 402 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 403 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 404 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 405 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 406 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 407 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 408 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 409 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 410 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 411 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 412 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 413 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 414 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 415 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 416 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 417 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742, 418}; 419 420CONSTANT_VK u32a td1[256] = 421{ 422 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 423 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 424 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 425 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 426 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 427 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 428 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 429 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 430 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 431 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 432 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 433 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 434 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 435 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 436 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 437 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 438 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 439 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 440 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 441 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 442 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 443 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 444 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 445 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 446 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 447 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 448 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 449 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 450 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 451 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 452 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 453 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 454 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 455 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 456 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 457 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 458 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 459 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 460 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 461 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 462 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 463 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 464 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 465 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 466 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 467 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 468 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 469 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 470 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 471 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 472 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 473 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 474 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 475 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 476 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 477 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 478 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 479 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 480 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 481 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 482 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 483 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 484 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 485 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857, 486}; 487 488CONSTANT_VK u32a td2[256] = 489{ 490 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 491 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 492 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 493 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 494 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 495 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 496 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 497 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 498 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 499 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 500 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 501 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 502 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 503 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 504 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 505 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 506 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 507 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 508 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 509 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 510 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 511 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 512 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 513 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 514 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 515 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 516 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 517 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 518 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 519 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 520 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 521 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 522 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 523 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 524 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 525 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 526 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 527 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 528 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 529 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 530 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 531 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 532 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 533 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 534 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 535 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 536 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 537 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 538 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 539 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 540 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 541 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 542 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 543 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 544 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 545 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 546 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 547 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 548 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 549 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 550 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 551 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 552 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 553 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8, 554}; 555 556CONSTANT_VK u32a td3[256] = 557{ 558 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 559 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 560 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 561 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 562 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 563 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 564 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 565 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 566 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 567 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 568 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 569 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 570 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 571 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 572 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 573 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 574 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 575 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 576 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 577 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 578 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 579 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 580 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 581 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 582 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 583 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 584 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 585 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 586 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 587 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 588 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 589 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 590 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 591 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 592 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 593 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 594 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 595 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 596 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 597 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 598 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 599 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 600 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 601 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 602 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 603 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 604 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 605 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 606 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 607 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 608 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 609 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 610 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 611 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 612 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 613 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 614 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 615 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 616 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 617 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 618 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 619 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 620 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 621 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0, 622}; 623 624CONSTANT_VK u32a td4[256] = 625{ 626 0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5, 627 0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838, 628 0xbfbfbfbf, 0x40404040, 0xa3a3a3a3, 0x9e9e9e9e, 629 0x81818181, 0xf3f3f3f3, 0xd7d7d7d7, 0xfbfbfbfb, 630 0x7c7c7c7c, 0xe3e3e3e3, 0x39393939, 0x82828282, 631 0x9b9b9b9b, 0x2f2f2f2f, 0xffffffff, 0x87878787, 632 0x34343434, 0x8e8e8e8e, 0x43434343, 0x44444444, 633 0xc4c4c4c4, 0xdededede, 0xe9e9e9e9, 0xcbcbcbcb, 634 0x54545454, 0x7b7b7b7b, 0x94949494, 0x32323232, 635 0xa6a6a6a6, 0xc2c2c2c2, 0x23232323, 0x3d3d3d3d, 636 0xeeeeeeee, 0x4c4c4c4c, 0x95959595, 0x0b0b0b0b, 637 0x42424242, 0xfafafafa, 0xc3c3c3c3, 0x4e4e4e4e, 638 0x08080808, 0x2e2e2e2e, 0xa1a1a1a1, 0x66666666, 639 0x28282828, 0xd9d9d9d9, 0x24242424, 0xb2b2b2b2, 640 0x76767676, 0x5b5b5b5b, 0xa2a2a2a2, 0x49494949, 641 0x6d6d6d6d, 0x8b8b8b8b, 0xd1d1d1d1, 0x25252525, 642 0x72727272, 0xf8f8f8f8, 0xf6f6f6f6, 0x64646464, 643 0x86868686, 0x68686868, 0x98989898, 0x16161616, 644 0xd4d4d4d4, 0xa4a4a4a4, 0x5c5c5c5c, 0xcccccccc, 645 0x5d5d5d5d, 0x65656565, 0xb6b6b6b6, 0x92929292, 646 0x6c6c6c6c, 0x70707070, 0x48484848, 0x50505050, 647 0xfdfdfdfd, 0xedededed, 0xb9b9b9b9, 0xdadadada, 648 0x5e5e5e5e, 0x15151515, 0x46464646, 0x57575757, 649 0xa7a7a7a7, 0x8d8d8d8d, 0x9d9d9d9d, 0x84848484, 650 0x90909090, 0xd8d8d8d8, 0xabababab, 0x00000000, 651 0x8c8c8c8c, 0xbcbcbcbc, 0xd3d3d3d3, 0x0a0a0a0a, 652 0xf7f7f7f7, 0xe4e4e4e4, 0x58585858, 0x05050505, 653 0xb8b8b8b8, 0xb3b3b3b3, 0x45454545, 0x06060606, 654 0xd0d0d0d0, 0x2c2c2c2c, 0x1e1e1e1e, 0x8f8f8f8f, 655 0xcacacaca, 0x3f3f3f3f, 0x0f0f0f0f, 0x02020202, 656 0xc1c1c1c1, 0xafafafaf, 0xbdbdbdbd, 0x03030303, 657 0x01010101, 0x13131313, 0x8a8a8a8a, 0x6b6b6b6b, 658 0x3a3a3a3a, 0x91919191, 0x11111111, 0x41414141, 659 0x4f4f4f4f, 0x67676767, 0xdcdcdcdc, 0xeaeaeaea, 660 0x97979797, 0xf2f2f2f2, 0xcfcfcfcf, 0xcececece, 661 0xf0f0f0f0, 0xb4b4b4b4, 0xe6e6e6e6, 0x73737373, 662 0x96969696, 0xacacacac, 0x74747474, 0x22222222, 663 0xe7e7e7e7, 0xadadadad, 0x35353535, 0x85858585, 664 0xe2e2e2e2, 0xf9f9f9f9, 0x37373737, 0xe8e8e8e8, 665 0x1c1c1c1c, 0x75757575, 0xdfdfdfdf, 0x6e6e6e6e, 666 0x47474747, 0xf1f1f1f1, 0x1a1a1a1a, 0x71717171, 667 0x1d1d1d1d, 0x29292929, 0xc5c5c5c5, 0x89898989, 668 0x6f6f6f6f, 0xb7b7b7b7, 0x62626262, 0x0e0e0e0e, 669 0xaaaaaaaa, 0x18181818, 0xbebebebe, 0x1b1b1b1b, 670 0xfcfcfcfc, 0x56565656, 0x3e3e3e3e, 0x4b4b4b4b, 671 0xc6c6c6c6, 0xd2d2d2d2, 0x79797979, 0x20202020, 672 0x9a9a9a9a, 0xdbdbdbdb, 0xc0c0c0c0, 0xfefefefe, 673 0x78787878, 0xcdcdcdcd, 0x5a5a5a5a, 0xf4f4f4f4, 674 0x1f1f1f1f, 0xdddddddd, 0xa8a8a8a8, 0x33333333, 675 0x88888888, 0x07070707, 0xc7c7c7c7, 0x31313131, 676 0xb1b1b1b1, 0x12121212, 0x10101010, 0x59595959, 677 0x27272727, 0x80808080, 0xecececec, 0x5f5f5f5f, 678 0x60606060, 0x51515151, 0x7f7f7f7f, 0xa9a9a9a9, 679 0x19191919, 0xb5b5b5b5, 0x4a4a4a4a, 0x0d0d0d0d, 680 0x2d2d2d2d, 0xe5e5e5e5, 0x7a7a7a7a, 0x9f9f9f9f, 681 0x93939393, 0xc9c9c9c9, 0x9c9c9c9c, 0xefefefef, 682 0xa0a0a0a0, 0xe0e0e0e0, 0x3b3b3b3b, 0x4d4d4d4d, 683 0xaeaeaeae, 0x2a2a2a2a, 0xf5f5f5f5, 0xb0b0b0b0, 684 0xc8c8c8c8, 0xebebebeb, 0xbbbbbbbb, 0x3c3c3c3c, 685 0x83838383, 0x53535353, 0x99999999, 0x61616161, 686 0x17171717, 0x2b2b2b2b, 0x04040404, 0x7e7e7e7e, 687 0xbabababa, 0x77777777, 0xd6d6d6d6, 0x26262626, 688 0xe1e1e1e1, 0x69696969, 0x14141414, 0x63636363, 689 0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d, 690}; 691 692// 128 bit key 693 694DECLSPEC void aes128_ExpandKey (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 695{ 696 ks[ 0] = ukey[0]; 697 ks[ 1] = ukey[1]; 698 ks[ 2] = ukey[2]; 699 ks[ 3] = ukey[3]; 700 ks[ 4] = ks[ 0] ^ 0x01000000 701 ^ (s_te2[(ks[ 3] >> 16) & 0xff] & 0xff000000) 702 ^ (s_te3[(ks[ 3] >> 8) & 0xff] & 0x00ff0000) 703 ^ (s_te0[(ks[ 3] >> 0) & 0xff] & 0x0000ff00) 704 ^ (s_te1[(ks[ 3] >> 24) & 0xff] & 0x000000ff); 705 ks[ 5] = ks[ 1] ^ ks[ 4]; 706 ks[ 6] = ks[ 2] ^ ks[ 5]; 707 ks[ 7] = ks[ 3] ^ ks[ 6]; 708 ks[ 8] = ks[ 4] ^ 0x02000000 709 ^ (s_te2[(ks[ 7] >> 16) & 0xff] & 0xff000000) 710 ^ (s_te3[(ks[ 7] >> 8) & 0xff] & 0x00ff0000) 711 ^ (s_te0[(ks[ 7] >> 0) & 0xff] & 0x0000ff00) 712 ^ (s_te1[(ks[ 7] >> 24) & 0xff] & 0x000000ff); 713 ks[ 9] = ks[ 5] ^ ks[ 8]; 714 ks[10] = ks[ 6] ^ ks[ 9]; 715 ks[11] = ks[ 7] ^ ks[10]; 716 ks[12] = ks[ 8] ^ 0x04000000 717 ^ (s_te2[(ks[11] >> 16) & 0xff] & 0xff000000) 718 ^ (s_te3[(ks[11] >> 8) & 0xff] & 0x00ff0000) 719 ^ (s_te0[(ks[11] >> 0) & 0xff] & 0x0000ff00) 720 ^ (s_te1[(ks[11] >> 24) & 0xff] & 0x000000ff); 721 ks[13] = ks[ 9] ^ ks[12]; 722 ks[14] = ks[10] ^ ks[13]; 723 ks[15] = ks[11] ^ ks[14]; 724 ks[16] = ks[12] ^ 0x08000000 725 ^ (s_te2[(ks[15] >> 16) & 0xff] & 0xff000000) 726 ^ (s_te3[(ks[15] >> 8) & 0xff] & 0x00ff0000) 727 ^ (s_te0[(ks[15] >> 0) & 0xff] & 0x0000ff00) 728 ^ (s_te1[(ks[15] >> 24) & 0xff] & 0x000000ff); 729 ks[17] = ks[13] ^ ks[16]; 730 ks[18] = ks[14] ^ ks[17]; 731 ks[19] = ks[15] ^ ks[18]; 732 ks[20] = ks[16] ^ 0x10000000 733 ^ (s_te2[(ks[19] >> 16) & 0xff] & 0xff000000) 734 ^ (s_te3[(ks[19] >> 8) & 0xff] & 0x00ff0000) 735 ^ (s_te0[(ks[19] >> 0) & 0xff] & 0x0000ff00) 736 ^ (s_te1[(ks[19] >> 24) & 0xff] & 0x000000ff); 737 ks[21] = ks[17] ^ ks[20]; 738 ks[22] = ks[18] ^ ks[21]; 739 ks[23] = ks[19] ^ ks[22]; 740 ks[24] = ks[20] ^ 0x20000000 741 ^ (s_te2[(ks[23] >> 16) & 0xff] & 0xff000000) 742 ^ (s_te3[(ks[23] >> 8) & 0xff] & 0x00ff0000) 743 ^ (s_te0[(ks[23] >> 0) & 0xff] & 0x0000ff00) 744 ^ (s_te1[(ks[23] >> 24) & 0xff] & 0x000000ff); 745 ks[25] = ks[21] ^ ks[24]; 746 ks[26] = ks[22] ^ ks[25]; 747 ks[27] = ks[23] ^ ks[26]; 748 ks[28] = ks[24] ^ 0x40000000 749 ^ (s_te2[(ks[27] >> 16) & 0xff] & 0xff000000) 750 ^ (s_te3[(ks[27] >> 8) & 0xff] & 0x00ff0000) 751 ^ (s_te0[(ks[27] >> 0) & 0xff] & 0x0000ff00) 752 ^ (s_te1[(ks[27] >> 24) & 0xff] & 0x000000ff); 753 ks[29] = ks[25] ^ ks[28]; 754 ks[30] = ks[26] ^ ks[29]; 755 ks[31] = ks[27] ^ ks[30]; 756 ks[32] = ks[28] ^ 0x80000000 757 ^ (s_te2[(ks[31] >> 16) & 0xff] & 0xff000000) 758 ^ (s_te3[(ks[31] >> 8) & 0xff] & 0x00ff0000) 759 ^ (s_te0[(ks[31] >> 0) & 0xff] & 0x0000ff00) 760 ^ (s_te1[(ks[31] >> 24) & 0xff] & 0x000000ff); 761 ks[33] = ks[29] ^ ks[32]; 762 ks[34] = ks[30] ^ ks[33]; 763 ks[35] = ks[31] ^ ks[34]; 764 ks[36] = ks[32] ^ 0x1b000000 765 ^ (s_te2[(ks[35] >> 16) & 0xff] & 0xff000000) 766 ^ (s_te3[(ks[35] >> 8) & 0xff] & 0x00ff0000) 767 ^ (s_te0[(ks[35] >> 0) & 0xff] & 0x0000ff00) 768 ^ (s_te1[(ks[35] >> 24) & 0xff] & 0x000000ff); 769 ks[37] = ks[33] ^ ks[36]; 770 ks[38] = ks[34] ^ ks[37]; 771 ks[39] = ks[35] ^ ks[38]; 772 ks[40] = ks[36] ^ 0x36000000 773 ^ (s_te2[(ks[39] >> 16) & 0xff] & 0xff000000) 774 ^ (s_te3[(ks[39] >> 8) & 0xff] & 0x00ff0000) 775 ^ (s_te0[(ks[39] >> 0) & 0xff] & 0x0000ff00) 776 ^ (s_te1[(ks[39] >> 24) & 0xff] & 0x000000ff); 777 ks[41] = ks[37] ^ ks[40]; 778 ks[42] = ks[38] ^ ks[41]; 779 ks[43] = ks[39] ^ ks[42]; 780} 781 782DECLSPEC void aes128_InvertKey (u32 *ks, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 783{ 784 u32 temp; 785 786 temp = ks[ 0]; ks[ 0] = ks[40]; ks[40] = temp; 787 temp = ks[ 1]; ks[ 1] = ks[41]; ks[41] = temp; 788 temp = ks[ 2]; ks[ 2] = ks[42]; ks[42] = temp; 789 temp = ks[ 3]; ks[ 3] = ks[43]; ks[43] = temp; 790 temp = ks[ 4]; ks[ 4] = ks[36]; ks[36] = temp; 791 temp = ks[ 5]; ks[ 5] = ks[37]; ks[37] = temp; 792 temp = ks[ 6]; ks[ 6] = ks[38]; ks[38] = temp; 793 temp = ks[ 7]; ks[ 7] = ks[39]; ks[39] = temp; 794 temp = ks[ 8]; ks[ 8] = ks[32]; ks[32] = temp; 795 temp = ks[ 9]; ks[ 9] = ks[33]; ks[33] = temp; 796 temp = ks[10]; ks[10] = ks[34]; ks[34] = temp; 797 temp = ks[11]; ks[11] = ks[35]; ks[35] = temp; 798 temp = ks[12]; ks[12] = ks[28]; ks[28] = temp; 799 temp = ks[13]; ks[13] = ks[29]; ks[29] = temp; 800 temp = ks[14]; ks[14] = ks[30]; ks[30] = temp; 801 temp = ks[15]; ks[15] = ks[31]; ks[31] = temp; 802 temp = ks[16]; ks[16] = ks[24]; ks[24] = temp; 803 temp = ks[17]; ks[17] = ks[25]; ks[25] = temp; 804 temp = ks[18]; ks[18] = ks[26]; ks[26] = temp; 805 temp = ks[19]; ks[19] = ks[27]; ks[27] = temp; 806 807 ks[ 4] = s_td0[s_te1[(ks[ 4] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 4] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 4] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 4] >> 0) & 0xff] & 0xff]; 808 ks[ 5] = s_td0[s_te1[(ks[ 5] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 5] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 5] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 5] >> 0) & 0xff] & 0xff]; 809 ks[ 6] = s_td0[s_te1[(ks[ 6] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 6] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 6] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 6] >> 0) & 0xff] & 0xff]; 810 ks[ 7] = s_td0[s_te1[(ks[ 7] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 7] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 7] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 7] >> 0) & 0xff] & 0xff]; 811 ks[ 8] = s_td0[s_te1[(ks[ 8] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 8] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 8] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 8] >> 0) & 0xff] & 0xff]; 812 ks[ 9] = s_td0[s_te1[(ks[ 9] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 9] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 9] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 9] >> 0) & 0xff] & 0xff]; 813 ks[10] = s_td0[s_te1[(ks[10] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[10] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[10] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[10] >> 0) & 0xff] & 0xff]; 814 ks[11] = s_td0[s_te1[(ks[11] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[11] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[11] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[11] >> 0) & 0xff] & 0xff]; 815 ks[12] = s_td0[s_te1[(ks[12] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[12] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[12] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[12] >> 0) & 0xff] & 0xff]; 816 ks[13] = s_td0[s_te1[(ks[13] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[13] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[13] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[13] >> 0) & 0xff] & 0xff]; 817 ks[14] = s_td0[s_te1[(ks[14] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[14] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[14] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[14] >> 0) & 0xff] & 0xff]; 818 ks[15] = s_td0[s_te1[(ks[15] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[15] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[15] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[15] >> 0) & 0xff] & 0xff]; 819 ks[16] = s_td0[s_te1[(ks[16] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[16] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[16] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[16] >> 0) & 0xff] & 0xff]; 820 ks[17] = s_td0[s_te1[(ks[17] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[17] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[17] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[17] >> 0) & 0xff] & 0xff]; 821 ks[18] = s_td0[s_te1[(ks[18] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[18] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[18] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[18] >> 0) & 0xff] & 0xff]; 822 ks[19] = s_td0[s_te1[(ks[19] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[19] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[19] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[19] >> 0) & 0xff] & 0xff]; 823 ks[20] = s_td0[s_te1[(ks[20] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[20] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[20] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[20] >> 0) & 0xff] & 0xff]; 824 ks[21] = s_td0[s_te1[(ks[21] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[21] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[21] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[21] >> 0) & 0xff] & 0xff]; 825 ks[22] = s_td0[s_te1[(ks[22] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[22] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[22] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[22] >> 0) & 0xff] & 0xff]; 826 ks[23] = s_td0[s_te1[(ks[23] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[23] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[23] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[23] >> 0) & 0xff] & 0xff]; 827 ks[24] = s_td0[s_te1[(ks[24] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[24] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[24] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[24] >> 0) & 0xff] & 0xff]; 828 ks[25] = s_td0[s_te1[(ks[25] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[25] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[25] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[25] >> 0) & 0xff] & 0xff]; 829 ks[26] = s_td0[s_te1[(ks[26] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[26] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[26] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[26] >> 0) & 0xff] & 0xff]; 830 ks[27] = s_td0[s_te1[(ks[27] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[27] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[27] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[27] >> 0) & 0xff] & 0xff]; 831 ks[28] = s_td0[s_te1[(ks[28] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[28] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[28] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[28] >> 0) & 0xff] & 0xff]; 832 ks[29] = s_td0[s_te1[(ks[29] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[29] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[29] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[29] >> 0) & 0xff] & 0xff]; 833 ks[30] = s_td0[s_te1[(ks[30] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[30] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[30] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[30] >> 0) & 0xff] & 0xff]; 834 ks[31] = s_td0[s_te1[(ks[31] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[31] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[31] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[31] >> 0) & 0xff] & 0xff]; 835 ks[32] = s_td0[s_te1[(ks[32] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[32] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[32] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[32] >> 0) & 0xff] & 0xff]; 836 ks[33] = s_td0[s_te1[(ks[33] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[33] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[33] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[33] >> 0) & 0xff] & 0xff]; 837 ks[34] = s_td0[s_te1[(ks[34] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[34] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[34] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[34] >> 0) & 0xff] & 0xff]; 838 ks[35] = s_td0[s_te1[(ks[35] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[35] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[35] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[35] >> 0) & 0xff] & 0xff]; 839 ks[36] = s_td0[s_te1[(ks[36] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[36] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[36] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[36] >> 0) & 0xff] & 0xff]; 840 ks[37] = s_td0[s_te1[(ks[37] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[37] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[37] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[37] >> 0) & 0xff] & 0xff]; 841 ks[38] = s_td0[s_te1[(ks[38] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[38] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[38] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[38] >> 0) & 0xff] & 0xff]; 842 ks[39] = s_td0[s_te1[(ks[39] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[39] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[39] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[39] >> 0) & 0xff] & 0xff]; 843} 844 845DECLSPEC void aes128_set_encrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 846{ 847 u32 ukey_s[4]; 848 849 ukey_s[0] = hc_swap32_S (ukey[0]); 850 ukey_s[1] = hc_swap32_S (ukey[1]); 851 ukey_s[2] = hc_swap32_S (ukey[2]); 852 ukey_s[3] = hc_swap32_S (ukey[3]); 853 854 aes128_ExpandKey (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 855} 856 857DECLSPEC void aes128_set_decrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 858{ 859 u32 ukey_s[4]; 860 861 ukey_s[0] = hc_swap32_S (ukey[0]); 862 ukey_s[1] = hc_swap32_S (ukey[1]); 863 ukey_s[2] = hc_swap32_S (ukey[2]); 864 ukey_s[3] = hc_swap32_S (ukey[3]); 865 866 aes128_ExpandKey (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 867 868 aes128_InvertKey (ks, s_te1, s_td0, s_td1, s_td2, s_td3); 869} 870 871DECLSPEC void aes128_encrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_te4) 872{ 873 u32 in_s[4]; 874 875 in_s[0] = hc_swap32_S (in[0]); 876 in_s[1] = hc_swap32_S (in[1]); 877 in_s[2] = hc_swap32_S (in[2]); 878 in_s[3] = hc_swap32_S (in[3]); 879 880 u32 s0 = in_s[0] ^ ks[0]; 881 u32 s1 = in_s[1] ^ ks[1]; 882 u32 s2 = in_s[2] ^ ks[2]; 883 u32 s3 = in_s[3] ^ ks[3]; 884 885 u32 t0; 886 u32 t1; 887 u32 t2; 888 u32 t3; 889 890 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[ 4]; 891 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[ 5]; 892 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[ 6]; 893 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[ 7]; 894 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[ 8]; 895 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[ 9]; 896 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[10]; 897 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[11]; 898 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[12]; 899 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[13]; 900 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[14]; 901 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[15]; 902 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[16]; 903 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[17]; 904 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[18]; 905 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[19]; 906 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[20]; 907 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[21]; 908 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[22]; 909 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[23]; 910 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[24]; 911 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[25]; 912 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[26]; 913 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[27]; 914 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[28]; 915 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[29]; 916 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[30]; 917 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[31]; 918 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[32]; 919 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[33]; 920 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[34]; 921 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[35]; 922 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[36]; 923 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[37]; 924 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[38]; 925 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[39]; 926 927 out[0] = (s_te4[(t0 >> 24) & 0xff] & 0xff000000) 928 ^ (s_te4[(t1 >> 16) & 0xff] & 0x00ff0000) 929 ^ (s_te4[(t2 >> 8) & 0xff] & 0x0000ff00) 930 ^ (s_te4[(t3 >> 0) & 0xff] & 0x000000ff) 931 ^ ks[40]; 932 933 out[1] = (s_te4[(t1 >> 24) & 0xff] & 0xff000000) 934 ^ (s_te4[(t2 >> 16) & 0xff] & 0x00ff0000) 935 ^ (s_te4[(t3 >> 8) & 0xff] & 0x0000ff00) 936 ^ (s_te4[(t0 >> 0) & 0xff] & 0x000000ff) 937 ^ ks[41]; 938 939 out[2] = (s_te4[(t2 >> 24) & 0xff] & 0xff000000) 940 ^ (s_te4[(t3 >> 16) & 0xff] & 0x00ff0000) 941 ^ (s_te4[(t0 >> 8) & 0xff] & 0x0000ff00) 942 ^ (s_te4[(t1 >> 0) & 0xff] & 0x000000ff) 943 ^ ks[42]; 944 945 out[3] = (s_te4[(t3 >> 24) & 0xff] & 0xff000000) 946 ^ (s_te4[(t0 >> 16) & 0xff] & 0x00ff0000) 947 ^ (s_te4[(t1 >> 8) & 0xff] & 0x0000ff00) 948 ^ (s_te4[(t2 >> 0) & 0xff] & 0x000000ff) 949 ^ ks[43]; 950 951 out[0] = hc_swap32_S (out[0]); 952 out[1] = hc_swap32_S (out[1]); 953 out[2] = hc_swap32_S (out[2]); 954 out[3] = hc_swap32_S (out[3]); 955} 956 957DECLSPEC void aes128_decrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3, SHM_TYPE u32 *s_td4) 958{ 959 u32 in_s[4]; 960 961 in_s[0] = hc_swap32_S (in[0]); 962 in_s[1] = hc_swap32_S (in[1]); 963 in_s[2] = hc_swap32_S (in[2]); 964 in_s[3] = hc_swap32_S (in[3]); 965 966 u32 s0 = in_s[0] ^ ks[0]; 967 u32 s1 = in_s[1] ^ ks[1]; 968 u32 s2 = in_s[2] ^ ks[2]; 969 u32 s3 = in_s[3] ^ ks[3]; 970 971 u32 t0; 972 u32 t1; 973 u32 t2; 974 u32 t3; 975 976 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[ 4]; 977 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[ 5]; 978 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[ 6]; 979 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[ 7]; 980 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[ 8]; 981 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[ 9]; 982 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[10]; 983 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[11]; 984 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[12]; 985 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[13]; 986 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[14]; 987 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[15]; 988 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[16]; 989 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[17]; 990 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[18]; 991 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[19]; 992 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[20]; 993 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[21]; 994 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[22]; 995 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[23]; 996 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[24]; 997 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[25]; 998 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[26]; 999 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[27]; 1000 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[28]; 1001 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[29]; 1002 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[30]; 1003 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[31]; 1004 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[32]; 1005 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[33]; 1006 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[34]; 1007 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[35]; 1008 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[36]; 1009 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[37]; 1010 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[38]; 1011 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[39]; 1012 1013 out[0] = (s_td4[(t0 >> 24) & 0xff] & 0xff000000) 1014 ^ (s_td4[(t3 >> 16) & 0xff] & 0x00ff0000) 1015 ^ (s_td4[(t2 >> 8) & 0xff] & 0x0000ff00) 1016 ^ (s_td4[(t1 >> 0) & 0xff] & 0x000000ff) 1017 ^ ks[40]; 1018 1019 out[1] = (s_td4[(t1 >> 24) & 0xff] & 0xff000000) 1020 ^ (s_td4[(t0 >> 16) & 0xff] & 0x00ff0000) 1021 ^ (s_td4[(t3 >> 8) & 0xff] & 0x0000ff00) 1022 ^ (s_td4[(t2 >> 0) & 0xff] & 0x000000ff) 1023 ^ ks[41]; 1024 1025 out[2] = (s_td4[(t2 >> 24) & 0xff] & 0xff000000) 1026 ^ (s_td4[(t1 >> 16) & 0xff] & 0x00ff0000) 1027 ^ (s_td4[(t0 >> 8) & 0xff] & 0x0000ff00) 1028 ^ (s_td4[(t3 >> 0) & 0xff] & 0x000000ff) 1029 ^ ks[42]; 1030 1031 out[3] = (s_td4[(t3 >> 24) & 0xff] & 0xff000000) 1032 ^ (s_td4[(t2 >> 16) & 0xff] & 0x00ff0000) 1033 ^ (s_td4[(t1 >> 8) & 0xff] & 0x0000ff00) 1034 ^ (s_td4[(t0 >> 0) & 0xff] & 0x000000ff) 1035 ^ ks[43]; 1036 1037 out[0] = hc_swap32_S (out[0]); 1038 out[1] = hc_swap32_S (out[1]); 1039 out[2] = hc_swap32_S (out[2]); 1040 out[3] = hc_swap32_S (out[3]); 1041} 1042 1043// 192 bit key 1044 1045DECLSPEC void aes192_ExpandKey (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 1046{ 1047 ks[ 0] = ukey[0]; 1048 ks[ 1] = ukey[1]; 1049 ks[ 2] = ukey[2]; 1050 ks[ 3] = ukey[3]; 1051 ks[ 4] = ukey[4]; 1052 ks[ 5] = ukey[5]; 1053 ks[ 6] = ks[ 0] ^ 0x01000000 1054 ^ (s_te2[(ks[ 5] >> 16) & 0xff] & 0xff000000) 1055 ^ (s_te3[(ks[ 5] >> 8) & 0xff] & 0x00ff0000) 1056 ^ (s_te0[(ks[ 5] >> 0) & 0xff] & 0x0000ff00) 1057 ^ (s_te1[(ks[ 5] >> 24) & 0xff] & 0x000000ff); 1058 ks[ 7] = ks[ 1] ^ ks[ 6]; 1059 ks[ 8] = ks[ 2] ^ ks[ 7]; 1060 ks[ 9] = ks[ 3] ^ ks[ 8]; 1061 ks[10] = ks[ 4] ^ ks[ 9]; 1062 ks[11] = ks[ 5] ^ ks[10]; 1063 ks[12] = ks[ 6] ^ 0x02000000 1064 ^ (s_te2[(ks[11] >> 16) & 0xff] & 0xff000000) 1065 ^ (s_te3[(ks[11] >> 8) & 0xff] & 0x00ff0000) 1066 ^ (s_te0[(ks[11] >> 0) & 0xff] & 0x0000ff00) 1067 ^ (s_te1[(ks[11] >> 24) & 0xff] & 0x000000ff); 1068 ks[13] = ks[ 7] ^ ks[12]; 1069 ks[14] = ks[ 8] ^ ks[13]; 1070 ks[15] = ks[ 9] ^ ks[14]; 1071 ks[16] = ks[10] ^ ks[15]; 1072 ks[17] = ks[11] ^ ks[16]; 1073 ks[18] = ks[12] ^ 0x04000000 1074 ^ (s_te2[(ks[17] >> 16) & 0xff] & 0xff000000) 1075 ^ (s_te3[(ks[17] >> 8) & 0xff] & 0x00ff0000) 1076 ^ (s_te0[(ks[17] >> 0) & 0xff] & 0x0000ff00) 1077 ^ (s_te1[(ks[17] >> 24) & 0xff] & 0x000000ff); 1078 ks[19] = ks[13] ^ ks[18]; 1079 ks[20] = ks[14] ^ ks[19]; 1080 ks[21] = ks[15] ^ ks[20]; 1081 ks[22] = ks[16] ^ ks[21]; 1082 ks[23] = ks[17] ^ ks[22]; 1083 ks[24] = ks[18] ^ 0x08000000 1084 ^ (s_te2[(ks[23] >> 16) & 0xff] & 0xff000000) 1085 ^ (s_te3[(ks[23] >> 8) & 0xff] & 0x00ff0000) 1086 ^ (s_te0[(ks[23] >> 0) & 0xff] & 0x0000ff00) 1087 ^ (s_te1[(ks[23] >> 24) & 0xff] & 0x000000ff); 1088 ks[25] = ks[19] ^ ks[24]; 1089 ks[26] = ks[20] ^ ks[25]; 1090 ks[27] = ks[21] ^ ks[26]; 1091 ks[28] = ks[22] ^ ks[27]; 1092 ks[29] = ks[23] ^ ks[28]; 1093 ks[30] = ks[24] ^ 0x10000000 1094 ^ (s_te2[(ks[29] >> 16) & 0xff] & 0xff000000) 1095 ^ (s_te3[(ks[29] >> 8) & 0xff] & 0x00ff0000) 1096 ^ (s_te0[(ks[29] >> 0) & 0xff] & 0x0000ff00) 1097 ^ (s_te1[(ks[29] >> 24) & 0xff] & 0x000000ff); 1098 ks[31] = ks[25] ^ ks[30]; 1099 ks[32] = ks[26] ^ ks[31]; 1100 ks[33] = ks[27] ^ ks[32]; 1101 ks[34] = ks[28] ^ ks[33]; 1102 ks[35] = ks[29] ^ ks[34]; 1103 ks[36] = ks[30] ^ 0x20000000 1104 ^ (s_te2[(ks[35] >> 16) & 0xff] & 0xff000000) 1105 ^ (s_te3[(ks[35] >> 8) & 0xff] & 0x00ff0000) 1106 ^ (s_te0[(ks[35] >> 0) & 0xff] & 0x0000ff00) 1107 ^ (s_te1[(ks[35] >> 24) & 0xff] & 0x000000ff); 1108 ks[37] = ks[31] ^ ks[36]; 1109 ks[38] = ks[32] ^ ks[37]; 1110 ks[39] = ks[33] ^ ks[38]; 1111 ks[40] = ks[34] ^ ks[39]; 1112 ks[41] = ks[35] ^ ks[40]; 1113 ks[42] = ks[36] ^ 0x40000000 1114 ^ (s_te2[(ks[41] >> 16) & 0xff] & 0xff000000) 1115 ^ (s_te3[(ks[41] >> 8) & 0xff] & 0x00ff0000) 1116 ^ (s_te0[(ks[41] >> 0) & 0xff] & 0x0000ff00) 1117 ^ (s_te1[(ks[41] >> 24) & 0xff] & 0x000000ff); 1118 ks[43] = ks[37] ^ ks[42]; 1119 ks[44] = ks[38] ^ ks[43]; 1120 ks[45] = ks[39] ^ ks[44]; 1121 ks[46] = ks[40] ^ ks[45]; 1122 ks[47] = ks[41] ^ ks[46]; 1123 ks[48] = ks[42] ^ 0x80000000 1124 ^ (s_te2[(ks[47] >> 16) & 0xff] & 0xff000000) 1125 ^ (s_te3[(ks[47] >> 8) & 0xff] & 0x00ff0000) 1126 ^ (s_te0[(ks[47] >> 0) & 0xff] & 0x0000ff00) 1127 ^ (s_te1[(ks[47] >> 24) & 0xff] & 0x000000ff); 1128 ks[49] = ks[43] ^ ks[48]; 1129 ks[50] = ks[44] ^ ks[49]; 1130 ks[51] = ks[45] ^ ks[50]; 1131} 1132 1133DECLSPEC void aes192_InvertKey (u32 *ks, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 1134{ 1135 u32 temp; 1136 1137 temp = ks[ 0]; ks[ 0] = ks[48]; ks[48] = temp; 1138 temp = ks[ 1]; ks[ 1] = ks[49]; ks[49] = temp; 1139 temp = ks[ 2]; ks[ 2] = ks[50]; ks[50] = temp; 1140 temp = ks[ 3]; ks[ 3] = ks[51]; ks[51] = temp; 1141 temp = ks[ 4]; ks[ 4] = ks[44]; ks[44] = temp; 1142 temp = ks[ 5]; ks[ 5] = ks[45]; ks[45] = temp; 1143 temp = ks[ 6]; ks[ 6] = ks[46]; ks[46] = temp; 1144 temp = ks[ 7]; ks[ 7] = ks[47]; ks[47] = temp; 1145 temp = ks[ 8]; ks[ 8] = ks[40]; ks[40] = temp; 1146 temp = ks[ 9]; ks[ 9] = ks[41]; ks[41] = temp; 1147 temp = ks[10]; ks[10] = ks[42]; ks[42] = temp; 1148 temp = ks[11]; ks[11] = ks[43]; ks[43] = temp; 1149 temp = ks[12]; ks[12] = ks[36]; ks[36] = temp; 1150 temp = ks[13]; ks[13] = ks[37]; ks[37] = temp; 1151 temp = ks[14]; ks[14] = ks[38]; ks[38] = temp; 1152 temp = ks[15]; ks[15] = ks[39]; ks[39] = temp; 1153 temp = ks[16]; ks[16] = ks[32]; ks[32] = temp; 1154 temp = ks[17]; ks[17] = ks[33]; ks[33] = temp; 1155 temp = ks[18]; ks[18] = ks[34]; ks[34] = temp; 1156 temp = ks[19]; ks[19] = ks[35]; ks[35] = temp; 1157 temp = ks[20]; ks[20] = ks[28]; ks[28] = temp; 1158 temp = ks[21]; ks[21] = ks[29]; ks[29] = temp; 1159 temp = ks[22]; ks[22] = ks[30]; ks[30] = temp; 1160 temp = ks[23]; ks[23] = ks[31]; ks[31] = temp; 1161 1162 ks[ 4] = s_td0[s_te1[(ks[ 4] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 4] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 4] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 4] >> 0) & 0xff] & 0xff]; 1163 ks[ 5] = s_td0[s_te1[(ks[ 5] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 5] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 5] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 5] >> 0) & 0xff] & 0xff]; 1164 ks[ 6] = s_td0[s_te1[(ks[ 6] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 6] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 6] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 6] >> 0) & 0xff] & 0xff]; 1165 ks[ 7] = s_td0[s_te1[(ks[ 7] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 7] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 7] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 7] >> 0) & 0xff] & 0xff]; 1166 ks[ 8] = s_td0[s_te1[(ks[ 8] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 8] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 8] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 8] >> 0) & 0xff] & 0xff]; 1167 ks[ 9] = s_td0[s_te1[(ks[ 9] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 9] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 9] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 9] >> 0) & 0xff] & 0xff]; 1168 ks[10] = s_td0[s_te1[(ks[10] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[10] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[10] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[10] >> 0) & 0xff] & 0xff]; 1169 ks[11] = s_td0[s_te1[(ks[11] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[11] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[11] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[11] >> 0) & 0xff] & 0xff]; 1170 ks[12] = s_td0[s_te1[(ks[12] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[12] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[12] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[12] >> 0) & 0xff] & 0xff]; 1171 ks[13] = s_td0[s_te1[(ks[13] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[13] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[13] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[13] >> 0) & 0xff] & 0xff]; 1172 ks[14] = s_td0[s_te1[(ks[14] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[14] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[14] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[14] >> 0) & 0xff] & 0xff]; 1173 ks[15] = s_td0[s_te1[(ks[15] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[15] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[15] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[15] >> 0) & 0xff] & 0xff]; 1174 ks[16] = s_td0[s_te1[(ks[16] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[16] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[16] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[16] >> 0) & 0xff] & 0xff]; 1175 ks[17] = s_td0[s_te1[(ks[17] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[17] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[17] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[17] >> 0) & 0xff] & 0xff]; 1176 ks[18] = s_td0[s_te1[(ks[18] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[18] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[18] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[18] >> 0) & 0xff] & 0xff]; 1177 ks[19] = s_td0[s_te1[(ks[19] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[19] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[19] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[19] >> 0) & 0xff] & 0xff]; 1178 ks[20] = s_td0[s_te1[(ks[20] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[20] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[20] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[20] >> 0) & 0xff] & 0xff]; 1179 ks[21] = s_td0[s_te1[(ks[21] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[21] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[21] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[21] >> 0) & 0xff] & 0xff]; 1180 ks[22] = s_td0[s_te1[(ks[22] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[22] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[22] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[22] >> 0) & 0xff] & 0xff]; 1181 ks[23] = s_td0[s_te1[(ks[23] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[23] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[23] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[23] >> 0) & 0xff] & 0xff]; 1182 ks[24] = s_td0[s_te1[(ks[24] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[24] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[24] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[24] >> 0) & 0xff] & 0xff]; 1183 ks[25] = s_td0[s_te1[(ks[25] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[25] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[25] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[25] >> 0) & 0xff] & 0xff]; 1184 ks[26] = s_td0[s_te1[(ks[26] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[26] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[26] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[26] >> 0) & 0xff] & 0xff]; 1185 ks[27] = s_td0[s_te1[(ks[27] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[27] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[27] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[27] >> 0) & 0xff] & 0xff]; 1186 ks[28] = s_td0[s_te1[(ks[28] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[28] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[28] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[28] >> 0) & 0xff] & 0xff]; 1187 ks[29] = s_td0[s_te1[(ks[29] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[29] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[29] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[29] >> 0) & 0xff] & 0xff]; 1188 ks[30] = s_td0[s_te1[(ks[30] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[30] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[30] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[30] >> 0) & 0xff] & 0xff]; 1189 ks[31] = s_td0[s_te1[(ks[31] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[31] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[31] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[31] >> 0) & 0xff] & 0xff]; 1190 ks[32] = s_td0[s_te1[(ks[32] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[32] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[32] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[32] >> 0) & 0xff] & 0xff]; 1191 ks[33] = s_td0[s_te1[(ks[33] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[33] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[33] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[33] >> 0) & 0xff] & 0xff]; 1192 ks[34] = s_td0[s_te1[(ks[34] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[34] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[34] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[34] >> 0) & 0xff] & 0xff]; 1193 ks[35] = s_td0[s_te1[(ks[35] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[35] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[35] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[35] >> 0) & 0xff] & 0xff]; 1194 ks[36] = s_td0[s_te1[(ks[36] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[36] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[36] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[36] >> 0) & 0xff] & 0xff]; 1195 ks[37] = s_td0[s_te1[(ks[37] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[37] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[37] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[37] >> 0) & 0xff] & 0xff]; 1196 ks[38] = s_td0[s_te1[(ks[38] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[38] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[38] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[38] >> 0) & 0xff] & 0xff]; 1197 ks[39] = s_td0[s_te1[(ks[39] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[39] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[39] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[39] >> 0) & 0xff] & 0xff]; 1198 ks[40] = s_td0[s_te1[(ks[40] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[40] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[40] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[40] >> 0) & 0xff] & 0xff]; 1199 ks[41] = s_td0[s_te1[(ks[41] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[41] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[41] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[41] >> 0) & 0xff] & 0xff]; 1200 ks[42] = s_td0[s_te1[(ks[42] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[42] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[42] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[42] >> 0) & 0xff] & 0xff]; 1201 ks[43] = s_td0[s_te1[(ks[43] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[43] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[43] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[43] >> 0) & 0xff] & 0xff]; 1202 ks[44] = s_td0[s_te1[(ks[44] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[44] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[44] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[44] >> 0) & 0xff] & 0xff]; 1203 ks[45] = s_td0[s_te1[(ks[45] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[45] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[45] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[45] >> 0) & 0xff] & 0xff]; 1204 ks[46] = s_td0[s_te1[(ks[46] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[46] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[46] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[46] >> 0) & 0xff] & 0xff]; 1205 ks[47] = s_td0[s_te1[(ks[47] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[47] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[47] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[47] >> 0) & 0xff] & 0xff]; 1206} 1207 1208DECLSPEC void aes192_set_encrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 1209{ 1210 u32 ukey_s[6]; 1211 1212 ukey_s[0] = hc_swap32_S (ukey[0]); 1213 ukey_s[1] = hc_swap32_S (ukey[1]); 1214 ukey_s[2] = hc_swap32_S (ukey[2]); 1215 ukey_s[3] = hc_swap32_S (ukey[3]); 1216 ukey_s[4] = hc_swap32_S (ukey[4]); 1217 ukey_s[5] = hc_swap32_S (ukey[5]); 1218 1219 aes192_ExpandKey (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 1220} 1221 1222DECLSPEC void aes192_set_decrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 1223{ 1224 u32 ukey_s[6]; 1225 1226 ukey_s[0] = hc_swap32_S (ukey[0]); 1227 ukey_s[1] = hc_swap32_S (ukey[1]); 1228 ukey_s[2] = hc_swap32_S (ukey[2]); 1229 ukey_s[3] = hc_swap32_S (ukey[3]); 1230 ukey_s[4] = hc_swap32_S (ukey[4]); 1231 ukey_s[5] = hc_swap32_S (ukey[5]); 1232 1233 aes192_ExpandKey (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 1234 1235 aes192_InvertKey (ks, s_te1, s_td0, s_td1, s_td2, s_td3); 1236} 1237 1238DECLSPEC void aes192_encrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_te4) 1239{ 1240 u32 in_s[4]; 1241 1242 in_s[0] = hc_swap32_S (in[0]); 1243 in_s[1] = hc_swap32_S (in[1]); 1244 in_s[2] = hc_swap32_S (in[2]); 1245 in_s[3] = hc_swap32_S (in[3]); 1246 1247 u32 s0 = in_s[0] ^ ks[0]; 1248 u32 s1 = in_s[1] ^ ks[1]; 1249 u32 s2 = in_s[2] ^ ks[2]; 1250 u32 s3 = in_s[3] ^ ks[3]; 1251 1252 u32 t0; 1253 u32 t1; 1254 u32 t2; 1255 u32 t3; 1256 1257 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[ 4]; 1258 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[ 5]; 1259 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[ 6]; 1260 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[ 7]; 1261 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[ 8]; 1262 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[ 9]; 1263 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[10]; 1264 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[11]; 1265 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[12]; 1266 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[13]; 1267 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[14]; 1268 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[15]; 1269 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[16]; 1270 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[17]; 1271 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[18]; 1272 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[19]; 1273 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[20]; 1274 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[21]; 1275 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[22]; 1276 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[23]; 1277 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[24]; 1278 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[25]; 1279 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[26]; 1280 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[27]; 1281 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[28]; 1282 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[29]; 1283 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[30]; 1284 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[31]; 1285 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[32]; 1286 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[33]; 1287 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[34]; 1288 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[35]; 1289 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[36]; 1290 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[37]; 1291 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[38]; 1292 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[39]; 1293 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[40]; 1294 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[41]; 1295 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[42]; 1296 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[43]; 1297 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[44]; 1298 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[45]; 1299 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[46]; 1300 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[47]; 1301 1302 out[0] = (s_te4[(t0 >> 24) & 0xff] & 0xff000000) 1303 ^ (s_te4[(t1 >> 16) & 0xff] & 0x00ff0000) 1304 ^ (s_te4[(t2 >> 8) & 0xff] & 0x0000ff00) 1305 ^ (s_te4[(t3 >> 0) & 0xff] & 0x000000ff) 1306 ^ ks[48]; 1307 1308 out[1] = (s_te4[(t1 >> 24) & 0xff] & 0xff000000) 1309 ^ (s_te4[(t2 >> 16) & 0xff] & 0x00ff0000) 1310 ^ (s_te4[(t3 >> 8) & 0xff] & 0x0000ff00) 1311 ^ (s_te4[(t0 >> 0) & 0xff] & 0x000000ff) 1312 ^ ks[49]; 1313 1314 out[2] = (s_te4[(t2 >> 24) & 0xff] & 0xff000000) 1315 ^ (s_te4[(t3 >> 16) & 0xff] & 0x00ff0000) 1316 ^ (s_te4[(t0 >> 8) & 0xff] & 0x0000ff00) 1317 ^ (s_te4[(t1 >> 0) & 0xff] & 0x000000ff) 1318 ^ ks[50]; 1319 1320 out[3] = (s_te4[(t3 >> 24) & 0xff] & 0xff000000) 1321 ^ (s_te4[(t0 >> 16) & 0xff] & 0x00ff0000) 1322 ^ (s_te4[(t1 >> 8) & 0xff] & 0x0000ff00) 1323 ^ (s_te4[(t2 >> 0) & 0xff] & 0x000000ff) 1324 ^ ks[51]; 1325 1326 out[0] = hc_swap32_S (out[0]); 1327 out[1] = hc_swap32_S (out[1]); 1328 out[2] = hc_swap32_S (out[2]); 1329 out[3] = hc_swap32_S (out[3]); 1330} 1331 1332DECLSPEC void aes192_decrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3, SHM_TYPE u32 *s_td4) 1333{ 1334 u32 in_s[4]; 1335 1336 in_s[0] = hc_swap32_S (in[0]); 1337 in_s[1] = hc_swap32_S (in[1]); 1338 in_s[2] = hc_swap32_S (in[2]); 1339 in_s[3] = hc_swap32_S (in[3]); 1340 1341 u32 s0 = in_s[0] ^ ks[0]; 1342 u32 s1 = in_s[1] ^ ks[1]; 1343 u32 s2 = in_s[2] ^ ks[2]; 1344 u32 s3 = in_s[3] ^ ks[3]; 1345 1346 u32 t0; 1347 u32 t1; 1348 u32 t2; 1349 u32 t3; 1350 1351 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[ 4]; 1352 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[ 5]; 1353 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[ 6]; 1354 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[ 7]; 1355 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[ 8]; 1356 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[ 9]; 1357 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[10]; 1358 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[11]; 1359 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[12]; 1360 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[13]; 1361 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[14]; 1362 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[15]; 1363 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[16]; 1364 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[17]; 1365 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[18]; 1366 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[19]; 1367 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[20]; 1368 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[21]; 1369 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[22]; 1370 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[23]; 1371 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[24]; 1372 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[25]; 1373 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[26]; 1374 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[27]; 1375 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[28]; 1376 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[29]; 1377 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[30]; 1378 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[31]; 1379 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[32]; 1380 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[33]; 1381 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[34]; 1382 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[35]; 1383 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[36]; 1384 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[37]; 1385 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[38]; 1386 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[39]; 1387 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[40]; 1388 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[41]; 1389 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[42]; 1390 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[43]; 1391 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[44]; 1392 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[45]; 1393 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[46]; 1394 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[47]; 1395 1396 out[0] = (s_td4[(t0 >> 24) & 0xff] & 0xff000000) 1397 ^ (s_td4[(t3 >> 16) & 0xff] & 0x00ff0000) 1398 ^ (s_td4[(t2 >> 8) & 0xff] & 0x0000ff00) 1399 ^ (s_td4[(t1 >> 0) & 0xff] & 0x000000ff) 1400 ^ ks[48]; 1401 1402 out[1] = (s_td4[(t1 >> 24) & 0xff] & 0xff000000) 1403 ^ (s_td4[(t0 >> 16) & 0xff] & 0x00ff0000) 1404 ^ (s_td4[(t3 >> 8) & 0xff] & 0x0000ff00) 1405 ^ (s_td4[(t2 >> 0) & 0xff] & 0x000000ff) 1406 ^ ks[49]; 1407 1408 out[2] = (s_td4[(t2 >> 24) & 0xff] & 0xff000000) 1409 ^ (s_td4[(t1 >> 16) & 0xff] & 0x00ff0000) 1410 ^ (s_td4[(t0 >> 8) & 0xff] & 0x0000ff00) 1411 ^ (s_td4[(t3 >> 0) & 0xff] & 0x000000ff) 1412 ^ ks[50]; 1413 1414 out[3] = (s_td4[(t3 >> 24) & 0xff] & 0xff000000) 1415 ^ (s_td4[(t2 >> 16) & 0xff] & 0x00ff0000) 1416 ^ (s_td4[(t1 >> 8) & 0xff] & 0x0000ff00) 1417 ^ (s_td4[(t0 >> 0) & 0xff] & 0x000000ff) 1418 ^ ks[51]; 1419 1420 out[0] = hc_swap32_S (out[0]); 1421 out[1] = hc_swap32_S (out[1]); 1422 out[2] = hc_swap32_S (out[2]); 1423 out[3] = hc_swap32_S (out[3]); 1424} 1425 1426// 256 bit key 1427 1428DECLSPEC void aes256_ExpandKey (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 1429{ 1430 ks[ 0] = ukey[0]; 1431 ks[ 1] = ukey[1]; 1432 ks[ 2] = ukey[2]; 1433 ks[ 3] = ukey[3]; 1434 ks[ 4] = ukey[4]; 1435 ks[ 5] = ukey[5]; 1436 ks[ 6] = ukey[6]; 1437 ks[ 7] = ukey[7]; 1438 ks[ 8] = ks[ 0] ^ 0x01000000 1439 ^ (s_te2[(ks[ 7] >> 16) & 0xff] & 0xff000000) 1440 ^ (s_te3[(ks[ 7] >> 8) & 0xff] & 0x00ff0000) 1441 ^ (s_te0[(ks[ 7] >> 0) & 0xff] & 0x0000ff00) 1442 ^ (s_te1[(ks[ 7] >> 24) & 0xff] & 0x000000ff); 1443 ks[ 9] = ks[ 1] ^ ks[ 8]; 1444 ks[10] = ks[ 2] ^ ks[ 9]; 1445 ks[11] = ks[ 3] ^ ks[10]; 1446 ks[12] = ks[ 4] ^ 0 1447 ^ (s_te2[(ks[11] >> 24) & 0xff] & 0xff000000) 1448 ^ (s_te3[(ks[11] >> 16) & 0xff] & 0x00ff0000) 1449 ^ (s_te0[(ks[11] >> 8) & 0xff] & 0x0000ff00) 1450 ^ (s_te1[(ks[11] >> 0) & 0xff] & 0x000000ff); 1451 ks[13] = ks[ 5] ^ ks[12]; 1452 ks[14] = ks[ 6] ^ ks[13]; 1453 ks[15] = ks[ 7] ^ ks[14]; 1454 ks[16] = ks[ 8] ^ 0x02000000 1455 ^ (s_te2[(ks[15] >> 16) & 0xff] & 0xff000000) 1456 ^ (s_te3[(ks[15] >> 8) & 0xff] & 0x00ff0000) 1457 ^ (s_te0[(ks[15] >> 0) & 0xff] & 0x0000ff00) 1458 ^ (s_te1[(ks[15] >> 24) & 0xff] & 0x000000ff); 1459 ks[17] = ks[ 9] ^ ks[16]; 1460 ks[18] = ks[10] ^ ks[17]; 1461 ks[19] = ks[11] ^ ks[18]; 1462 ks[20] = ks[12] ^ 0 1463 ^ (s_te2[(ks[19] >> 24) & 0xff] & 0xff000000) 1464 ^ (s_te3[(ks[19] >> 16) & 0xff] & 0x00ff0000) 1465 ^ (s_te0[(ks[19] >> 8) & 0xff] & 0x0000ff00) 1466 ^ (s_te1[(ks[19] >> 0) & 0xff] & 0x000000ff); 1467 ks[21] = ks[13] ^ ks[20]; 1468 ks[22] = ks[14] ^ ks[21]; 1469 ks[23] = ks[15] ^ ks[22]; 1470 ks[24] = ks[16] ^ 0x04000000 1471 ^ (s_te2[(ks[23] >> 16) & 0xff] & 0xff000000) 1472 ^ (s_te3[(ks[23] >> 8) & 0xff] & 0x00ff0000) 1473 ^ (s_te0[(ks[23] >> 0) & 0xff] & 0x0000ff00) 1474 ^ (s_te1[(ks[23] >> 24) & 0xff] & 0x000000ff); 1475 ks[25] = ks[17] ^ ks[24]; 1476 ks[26] = ks[18] ^ ks[25]; 1477 ks[27] = ks[19] ^ ks[26]; 1478 ks[28] = ks[20] ^ 0 1479 ^ (s_te2[(ks[27] >> 24) & 0xff] & 0xff000000) 1480 ^ (s_te3[(ks[27] >> 16) & 0xff] & 0x00ff0000) 1481 ^ (s_te0[(ks[27] >> 8) & 0xff] & 0x0000ff00) 1482 ^ (s_te1[(ks[27] >> 0) & 0xff] & 0x000000ff); 1483 ks[29] = ks[21] ^ ks[28]; 1484 ks[30] = ks[22] ^ ks[29]; 1485 ks[31] = ks[23] ^ ks[30]; 1486 ks[32] = ks[24] ^ 0x08000000 1487 ^ (s_te2[(ks[31] >> 16) & 0xff] & 0xff000000) 1488 ^ (s_te3[(ks[31] >> 8) & 0xff] & 0x00ff0000) 1489 ^ (s_te0[(ks[31] >> 0) & 0xff] & 0x0000ff00) 1490 ^ (s_te1[(ks[31] >> 24) & 0xff] & 0x000000ff); 1491 ks[33] = ks[25] ^ ks[32]; 1492 ks[34] = ks[26] ^ ks[33]; 1493 ks[35] = ks[27] ^ ks[34]; 1494 ks[36] = ks[28] ^ 0 1495 ^ (s_te2[(ks[35] >> 24) & 0xff] & 0xff000000) 1496 ^ (s_te3[(ks[35] >> 16) & 0xff] & 0x00ff0000) 1497 ^ (s_te0[(ks[35] >> 8) & 0xff] & 0x0000ff00) 1498 ^ (s_te1[(ks[35] >> 0) & 0xff] & 0x000000ff); 1499 ks[37] = ks[29] ^ ks[36]; 1500 ks[38] = ks[30] ^ ks[37]; 1501 ks[39] = ks[31] ^ ks[38]; 1502 ks[40] = ks[32] ^ 0x10000000 1503 ^ (s_te2[(ks[39] >> 16) & 0xff] & 0xff000000) 1504 ^ (s_te3[(ks[39] >> 8) & 0xff] & 0x00ff0000) 1505 ^ (s_te0[(ks[39] >> 0) & 0xff] & 0x0000ff00) 1506 ^ (s_te1[(ks[39] >> 24) & 0xff] & 0x000000ff); 1507 ks[41] = ks[33] ^ ks[40]; 1508 ks[42] = ks[34] ^ ks[41]; 1509 ks[43] = ks[35] ^ ks[42]; 1510 ks[44] = ks[36] ^ 0 1511 ^ (s_te2[(ks[43] >> 24) & 0xff] & 0xff000000) 1512 ^ (s_te3[(ks[43] >> 16) & 0xff] & 0x00ff0000) 1513 ^ (s_te0[(ks[43] >> 8) & 0xff] & 0x0000ff00) 1514 ^ (s_te1[(ks[43] >> 0) & 0xff] & 0x000000ff); 1515 ks[45] = ks[37] ^ ks[44]; 1516 ks[46] = ks[38] ^ ks[45]; 1517 ks[47] = ks[39] ^ ks[46]; 1518 ks[48] = ks[40] ^ 0x20000000 1519 ^ (s_te2[(ks[47] >> 16) & 0xff] & 0xff000000) 1520 ^ (s_te3[(ks[47] >> 8) & 0xff] & 0x00ff0000) 1521 ^ (s_te0[(ks[47] >> 0) & 0xff] & 0x0000ff00) 1522 ^ (s_te1[(ks[47] >> 24) & 0xff] & 0x000000ff); 1523 ks[49] = ks[41] ^ ks[48]; 1524 ks[50] = ks[42] ^ ks[49]; 1525 ks[51] = ks[43] ^ ks[50]; 1526 ks[52] = ks[44] ^ 0 1527 ^ (s_te2[(ks[51] >> 24) & 0xff] & 0xff000000) 1528 ^ (s_te3[(ks[51] >> 16) & 0xff] & 0x00ff0000) 1529 ^ (s_te0[(ks[51] >> 8) & 0xff] & 0x0000ff00) 1530 ^ (s_te1[(ks[51] >> 0) & 0xff] & 0x000000ff); 1531 ks[53] = ks[45] ^ ks[52]; 1532 ks[54] = ks[46] ^ ks[53]; 1533 ks[55] = ks[47] ^ ks[54]; 1534 ks[56] = ks[48] ^ 0x40000000 1535 ^ (s_te2[(ks[55] >> 16) & 0xff] & 0xff000000) 1536 ^ (s_te3[(ks[55] >> 8) & 0xff] & 0x00ff0000) 1537 ^ (s_te0[(ks[55] >> 0) & 0xff] & 0x0000ff00) 1538 ^ (s_te1[(ks[55] >> 24) & 0xff] & 0x000000ff); 1539 ks[57] = ks[49] ^ ks[56]; 1540 ks[58] = ks[50] ^ ks[57]; 1541 ks[59] = ks[51] ^ ks[58]; 1542} 1543 1544DECLSPEC void aes256_InvertKey (u32 *ks, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 1545{ 1546 u32 temp; 1547 1548 temp = ks[ 0]; ks[ 0] = ks[56]; ks[56] = temp; 1549 temp = ks[ 1]; ks[ 1] = ks[57]; ks[57] = temp; 1550 temp = ks[ 2]; ks[ 2] = ks[58]; ks[58] = temp; 1551 temp = ks[ 3]; ks[ 3] = ks[59]; ks[59] = temp; 1552 temp = ks[ 4]; ks[ 4] = ks[52]; ks[52] = temp; 1553 temp = ks[ 5]; ks[ 5] = ks[53]; ks[53] = temp; 1554 temp = ks[ 6]; ks[ 6] = ks[54]; ks[54] = temp; 1555 temp = ks[ 7]; ks[ 7] = ks[55]; ks[55] = temp; 1556 temp = ks[ 8]; ks[ 8] = ks[48]; ks[48] = temp; 1557 temp = ks[ 9]; ks[ 9] = ks[49]; ks[49] = temp; 1558 temp = ks[10]; ks[10] = ks[50]; ks[50] = temp; 1559 temp = ks[11]; ks[11] = ks[51]; ks[51] = temp; 1560 temp = ks[12]; ks[12] = ks[44]; ks[44] = temp; 1561 temp = ks[13]; ks[13] = ks[45]; ks[45] = temp; 1562 temp = ks[14]; ks[14] = ks[46]; ks[46] = temp; 1563 temp = ks[15]; ks[15] = ks[47]; ks[47] = temp; 1564 temp = ks[16]; ks[16] = ks[40]; ks[40] = temp; 1565 temp = ks[17]; ks[17] = ks[41]; ks[41] = temp; 1566 temp = ks[18]; ks[18] = ks[42]; ks[42] = temp; 1567 temp = ks[19]; ks[19] = ks[43]; ks[43] = temp; 1568 temp = ks[20]; ks[20] = ks[36]; ks[36] = temp; 1569 temp = ks[21]; ks[21] = ks[37]; ks[37] = temp; 1570 temp = ks[22]; ks[22] = ks[38]; ks[38] = temp; 1571 temp = ks[23]; ks[23] = ks[39]; ks[39] = temp; 1572 temp = ks[24]; ks[24] = ks[32]; ks[32] = temp; 1573 temp = ks[25]; ks[25] = ks[33]; ks[33] = temp; 1574 temp = ks[26]; ks[26] = ks[34]; ks[34] = temp; 1575 temp = ks[27]; ks[27] = ks[35]; ks[35] = temp; 1576 1577 ks[ 4] = s_td0[s_te1[(ks[ 4] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 4] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 4] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 4] >> 0) & 0xff] & 0xff]; 1578 ks[ 5] = s_td0[s_te1[(ks[ 5] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 5] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 5] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 5] >> 0) & 0xff] & 0xff]; 1579 ks[ 6] = s_td0[s_te1[(ks[ 6] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 6] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 6] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 6] >> 0) & 0xff] & 0xff]; 1580 ks[ 7] = s_td0[s_te1[(ks[ 7] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 7] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 7] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 7] >> 0) & 0xff] & 0xff]; 1581 ks[ 8] = s_td0[s_te1[(ks[ 8] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 8] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 8] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 8] >> 0) & 0xff] & 0xff]; 1582 ks[ 9] = s_td0[s_te1[(ks[ 9] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[ 9] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[ 9] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[ 9] >> 0) & 0xff] & 0xff]; 1583 ks[10] = s_td0[s_te1[(ks[10] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[10] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[10] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[10] >> 0) & 0xff] & 0xff]; 1584 ks[11] = s_td0[s_te1[(ks[11] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[11] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[11] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[11] >> 0) & 0xff] & 0xff]; 1585 ks[12] = s_td0[s_te1[(ks[12] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[12] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[12] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[12] >> 0) & 0xff] & 0xff]; 1586 ks[13] = s_td0[s_te1[(ks[13] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[13] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[13] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[13] >> 0) & 0xff] & 0xff]; 1587 ks[14] = s_td0[s_te1[(ks[14] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[14] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[14] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[14] >> 0) & 0xff] & 0xff]; 1588 ks[15] = s_td0[s_te1[(ks[15] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[15] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[15] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[15] >> 0) & 0xff] & 0xff]; 1589 ks[16] = s_td0[s_te1[(ks[16] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[16] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[16] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[16] >> 0) & 0xff] & 0xff]; 1590 ks[17] = s_td0[s_te1[(ks[17] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[17] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[17] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[17] >> 0) & 0xff] & 0xff]; 1591 ks[18] = s_td0[s_te1[(ks[18] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[18] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[18] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[18] >> 0) & 0xff] & 0xff]; 1592 ks[19] = s_td0[s_te1[(ks[19] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[19] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[19] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[19] >> 0) & 0xff] & 0xff]; 1593 ks[20] = s_td0[s_te1[(ks[20] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[20] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[20] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[20] >> 0) & 0xff] & 0xff]; 1594 ks[21] = s_td0[s_te1[(ks[21] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[21] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[21] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[21] >> 0) & 0xff] & 0xff]; 1595 ks[22] = s_td0[s_te1[(ks[22] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[22] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[22] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[22] >> 0) & 0xff] & 0xff]; 1596 ks[23] = s_td0[s_te1[(ks[23] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[23] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[23] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[23] >> 0) & 0xff] & 0xff]; 1597 ks[24] = s_td0[s_te1[(ks[24] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[24] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[24] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[24] >> 0) & 0xff] & 0xff]; 1598 ks[25] = s_td0[s_te1[(ks[25] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[25] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[25] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[25] >> 0) & 0xff] & 0xff]; 1599 ks[26] = s_td0[s_te1[(ks[26] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[26] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[26] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[26] >> 0) & 0xff] & 0xff]; 1600 ks[27] = s_td0[s_te1[(ks[27] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[27] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[27] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[27] >> 0) & 0xff] & 0xff]; 1601 ks[28] = s_td0[s_te1[(ks[28] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[28] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[28] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[28] >> 0) & 0xff] & 0xff]; 1602 ks[29] = s_td0[s_te1[(ks[29] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[29] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[29] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[29] >> 0) & 0xff] & 0xff]; 1603 ks[30] = s_td0[s_te1[(ks[30] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[30] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[30] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[30] >> 0) & 0xff] & 0xff]; 1604 ks[31] = s_td0[s_te1[(ks[31] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[31] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[31] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[31] >> 0) & 0xff] & 0xff]; 1605 ks[32] = s_td0[s_te1[(ks[32] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[32] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[32] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[32] >> 0) & 0xff] & 0xff]; 1606 ks[33] = s_td0[s_te1[(ks[33] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[33] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[33] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[33] >> 0) & 0xff] & 0xff]; 1607 ks[34] = s_td0[s_te1[(ks[34] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[34] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[34] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[34] >> 0) & 0xff] & 0xff]; 1608 ks[35] = s_td0[s_te1[(ks[35] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[35] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[35] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[35] >> 0) & 0xff] & 0xff]; 1609 ks[36] = s_td0[s_te1[(ks[36] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[36] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[36] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[36] >> 0) & 0xff] & 0xff]; 1610 ks[37] = s_td0[s_te1[(ks[37] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[37] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[37] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[37] >> 0) & 0xff] & 0xff]; 1611 ks[38] = s_td0[s_te1[(ks[38] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[38] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[38] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[38] >> 0) & 0xff] & 0xff]; 1612 ks[39] = s_td0[s_te1[(ks[39] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[39] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[39] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[39] >> 0) & 0xff] & 0xff]; 1613 ks[40] = s_td0[s_te1[(ks[40] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[40] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[40] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[40] >> 0) & 0xff] & 0xff]; 1614 ks[41] = s_td0[s_te1[(ks[41] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[41] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[41] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[41] >> 0) & 0xff] & 0xff]; 1615 ks[42] = s_td0[s_te1[(ks[42] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[42] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[42] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[42] >> 0) & 0xff] & 0xff]; 1616 ks[43] = s_td0[s_te1[(ks[43] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[43] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[43] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[43] >> 0) & 0xff] & 0xff]; 1617 ks[44] = s_td0[s_te1[(ks[44] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[44] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[44] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[44] >> 0) & 0xff] & 0xff]; 1618 ks[45] = s_td0[s_te1[(ks[45] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[45] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[45] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[45] >> 0) & 0xff] & 0xff]; 1619 ks[46] = s_td0[s_te1[(ks[46] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[46] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[46] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[46] >> 0) & 0xff] & 0xff]; 1620 ks[47] = s_td0[s_te1[(ks[47] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[47] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[47] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[47] >> 0) & 0xff] & 0xff]; 1621 ks[48] = s_td0[s_te1[(ks[48] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[48] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[48] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[48] >> 0) & 0xff] & 0xff]; 1622 ks[49] = s_td0[s_te1[(ks[49] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[49] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[49] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[49] >> 0) & 0xff] & 0xff]; 1623 ks[50] = s_td0[s_te1[(ks[50] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[50] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[50] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[50] >> 0) & 0xff] & 0xff]; 1624 ks[51] = s_td0[s_te1[(ks[51] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[51] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[51] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[51] >> 0) & 0xff] & 0xff]; 1625 ks[52] = s_td0[s_te1[(ks[52] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[52] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[52] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[52] >> 0) & 0xff] & 0xff]; 1626 ks[53] = s_td0[s_te1[(ks[53] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[53] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[53] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[53] >> 0) & 0xff] & 0xff]; 1627 ks[54] = s_td0[s_te1[(ks[54] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[54] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[54] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[54] >> 0) & 0xff] & 0xff]; 1628 ks[55] = s_td0[s_te1[(ks[55] >> 24) & 0xff] & 0xff] ^ s_td1[s_te1[(ks[55] >> 16) & 0xff] & 0xff] ^ s_td2[s_te1[(ks[55] >> 8) & 0xff] & 0xff] ^ s_td3[s_te1[(ks[55] >> 0) & 0xff] & 0xff]; 1629} 1630 1631DECLSPEC void aes256_set_encrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 1632{ 1633 u32 ukey_s[8]; 1634 1635 ukey_s[0] = hc_swap32_S (ukey[0]); 1636 ukey_s[1] = hc_swap32_S (ukey[1]); 1637 ukey_s[2] = hc_swap32_S (ukey[2]); 1638 ukey_s[3] = hc_swap32_S (ukey[3]); 1639 ukey_s[4] = hc_swap32_S (ukey[4]); 1640 ukey_s[5] = hc_swap32_S (ukey[5]); 1641 ukey_s[6] = hc_swap32_S (ukey[6]); 1642 ukey_s[7] = hc_swap32_S (ukey[7]); 1643 1644 aes256_ExpandKey (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 1645} 1646 1647DECLSPEC void aes256_set_decrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 1648{ 1649 u32 ukey_s[8]; 1650 1651 ukey_s[0] = hc_swap32_S (ukey[0]); 1652 ukey_s[1] = hc_swap32_S (ukey[1]); 1653 ukey_s[2] = hc_swap32_S (ukey[2]); 1654 ukey_s[3] = hc_swap32_S (ukey[3]); 1655 ukey_s[4] = hc_swap32_S (ukey[4]); 1656 ukey_s[5] = hc_swap32_S (ukey[5]); 1657 ukey_s[6] = hc_swap32_S (ukey[6]); 1658 ukey_s[7] = hc_swap32_S (ukey[7]); 1659 1660 aes256_ExpandKey (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 1661 1662 aes256_InvertKey (ks, s_te1, s_td0, s_td1, s_td2, s_td3); 1663} 1664 1665DECLSPEC void aes256_encrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_te4) 1666{ 1667 u32 in_s[4]; 1668 1669 in_s[0] = hc_swap32_S (in[0]); 1670 in_s[1] = hc_swap32_S (in[1]); 1671 in_s[2] = hc_swap32_S (in[2]); 1672 in_s[3] = hc_swap32_S (in[3]); 1673 1674 u32 s0 = in_s[0] ^ ks[0]; 1675 u32 s1 = in_s[1] ^ ks[1]; 1676 u32 s2 = in_s[2] ^ ks[2]; 1677 u32 s3 = in_s[3] ^ ks[3]; 1678 1679 u32 t0; 1680 u32 t1; 1681 u32 t2; 1682 u32 t3; 1683 1684 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[ 4]; 1685 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[ 5]; 1686 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[ 6]; 1687 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[ 7]; 1688 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[ 8]; 1689 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[ 9]; 1690 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[10]; 1691 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[11]; 1692 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[12]; 1693 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[13]; 1694 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[14]; 1695 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[15]; 1696 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[16]; 1697 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[17]; 1698 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[18]; 1699 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[19]; 1700 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[20]; 1701 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[21]; 1702 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[22]; 1703 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[23]; 1704 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[24]; 1705 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[25]; 1706 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[26]; 1707 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[27]; 1708 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[28]; 1709 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[29]; 1710 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[30]; 1711 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[31]; 1712 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[32]; 1713 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[33]; 1714 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[34]; 1715 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[35]; 1716 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[36]; 1717 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[37]; 1718 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[38]; 1719 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[39]; 1720 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[40]; 1721 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[41]; 1722 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[42]; 1723 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[43]; 1724 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[44]; 1725 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[45]; 1726 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[46]; 1727 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[47]; 1728 s0 = s_te0[t0 >> 24] ^ s_te1[(t1 >> 16) & 0xff] ^ s_te2[(t2 >> 8) & 0xff] ^ s_te3[t3 & 0xff] ^ ks[48]; 1729 s1 = s_te0[t1 >> 24] ^ s_te1[(t2 >> 16) & 0xff] ^ s_te2[(t3 >> 8) & 0xff] ^ s_te3[t0 & 0xff] ^ ks[49]; 1730 s2 = s_te0[t2 >> 24] ^ s_te1[(t3 >> 16) & 0xff] ^ s_te2[(t0 >> 8) & 0xff] ^ s_te3[t1 & 0xff] ^ ks[50]; 1731 s3 = s_te0[t3 >> 24] ^ s_te1[(t0 >> 16) & 0xff] ^ s_te2[(t1 >> 8) & 0xff] ^ s_te3[t2 & 0xff] ^ ks[51]; 1732 t0 = s_te0[s0 >> 24] ^ s_te1[(s1 >> 16) & 0xff] ^ s_te2[(s2 >> 8) & 0xff] ^ s_te3[s3 & 0xff] ^ ks[52]; 1733 t1 = s_te0[s1 >> 24] ^ s_te1[(s2 >> 16) & 0xff] ^ s_te2[(s3 >> 8) & 0xff] ^ s_te3[s0 & 0xff] ^ ks[53]; 1734 t2 = s_te0[s2 >> 24] ^ s_te1[(s3 >> 16) & 0xff] ^ s_te2[(s0 >> 8) & 0xff] ^ s_te3[s1 & 0xff] ^ ks[54]; 1735 t3 = s_te0[s3 >> 24] ^ s_te1[(s0 >> 16) & 0xff] ^ s_te2[(s1 >> 8) & 0xff] ^ s_te3[s2 & 0xff] ^ ks[55]; 1736 1737 out[0] = (s_te4[(t0 >> 24) & 0xff] & 0xff000000) 1738 ^ (s_te4[(t1 >> 16) & 0xff] & 0x00ff0000) 1739 ^ (s_te4[(t2 >> 8) & 0xff] & 0x0000ff00) 1740 ^ (s_te4[(t3 >> 0) & 0xff] & 0x000000ff) 1741 ^ ks[56]; 1742 1743 out[1] = (s_te4[(t1 >> 24) & 0xff] & 0xff000000) 1744 ^ (s_te4[(t2 >> 16) & 0xff] & 0x00ff0000) 1745 ^ (s_te4[(t3 >> 8) & 0xff] & 0x0000ff00) 1746 ^ (s_te4[(t0 >> 0) & 0xff] & 0x000000ff) 1747 ^ ks[57]; 1748 1749 out[2] = (s_te4[(t2 >> 24) & 0xff] & 0xff000000) 1750 ^ (s_te4[(t3 >> 16) & 0xff] & 0x00ff0000) 1751 ^ (s_te4[(t0 >> 8) & 0xff] & 0x0000ff00) 1752 ^ (s_te4[(t1 >> 0) & 0xff] & 0x000000ff) 1753 ^ ks[58]; 1754 1755 out[3] = (s_te4[(t3 >> 24) & 0xff] & 0xff000000) 1756 ^ (s_te4[(t0 >> 16) & 0xff] & 0x00ff0000) 1757 ^ (s_te4[(t1 >> 8) & 0xff] & 0x0000ff00) 1758 ^ (s_te4[(t2 >> 0) & 0xff] & 0x000000ff) 1759 ^ ks[59]; 1760 1761 out[0] = hc_swap32_S (out[0]); 1762 out[1] = hc_swap32_S (out[1]); 1763 out[2] = hc_swap32_S (out[2]); 1764 out[3] = hc_swap32_S (out[3]); 1765} 1766 1767DECLSPEC void aes256_decrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3, SHM_TYPE u32 *s_td4) 1768{ 1769 u32 in_s[4]; 1770 1771 in_s[0] = hc_swap32_S (in[0]); 1772 in_s[1] = hc_swap32_S (in[1]); 1773 in_s[2] = hc_swap32_S (in[2]); 1774 in_s[3] = hc_swap32_S (in[3]); 1775 1776 u32 s0 = in_s[0] ^ ks[0]; 1777 u32 s1 = in_s[1] ^ ks[1]; 1778 u32 s2 = in_s[2] ^ ks[2]; 1779 u32 s3 = in_s[3] ^ ks[3]; 1780 1781 u32 t0; 1782 u32 t1; 1783 u32 t2; 1784 u32 t3; 1785 1786 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[ 4]; 1787 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[ 5]; 1788 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[ 6]; 1789 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[ 7]; 1790 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[ 8]; 1791 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[ 9]; 1792 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[10]; 1793 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[11]; 1794 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[12]; 1795 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[13]; 1796 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[14]; 1797 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[15]; 1798 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[16]; 1799 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[17]; 1800 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[18]; 1801 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[19]; 1802 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[20]; 1803 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[21]; 1804 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[22]; 1805 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[23]; 1806 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[24]; 1807 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[25]; 1808 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[26]; 1809 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[27]; 1810 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[28]; 1811 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[29]; 1812 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[30]; 1813 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[31]; 1814 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[32]; 1815 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[33]; 1816 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[34]; 1817 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[35]; 1818 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[36]; 1819 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[37]; 1820 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[38]; 1821 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[39]; 1822 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[40]; 1823 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[41]; 1824 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[42]; 1825 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[43]; 1826 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[44]; 1827 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[45]; 1828 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[46]; 1829 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[47]; 1830 s0 = s_td0[t0 >> 24] ^ s_td1[(t3 >> 16) & 0xff] ^ s_td2[(t2 >> 8) & 0xff] ^ s_td3[t1 & 0xff] ^ ks[48]; 1831 s1 = s_td0[t1 >> 24] ^ s_td1[(t0 >> 16) & 0xff] ^ s_td2[(t3 >> 8) & 0xff] ^ s_td3[t2 & 0xff] ^ ks[49]; 1832 s2 = s_td0[t2 >> 24] ^ s_td1[(t1 >> 16) & 0xff] ^ s_td2[(t0 >> 8) & 0xff] ^ s_td3[t3 & 0xff] ^ ks[50]; 1833 s3 = s_td0[t3 >> 24] ^ s_td1[(t2 >> 16) & 0xff] ^ s_td2[(t1 >> 8) & 0xff] ^ s_td3[t0 & 0xff] ^ ks[51]; 1834 t0 = s_td0[s0 >> 24] ^ s_td1[(s3 >> 16) & 0xff] ^ s_td2[(s2 >> 8) & 0xff] ^ s_td3[s1 & 0xff] ^ ks[52]; 1835 t1 = s_td0[s1 >> 24] ^ s_td1[(s0 >> 16) & 0xff] ^ s_td2[(s3 >> 8) & 0xff] ^ s_td3[s2 & 0xff] ^ ks[53]; 1836 t2 = s_td0[s2 >> 24] ^ s_td1[(s1 >> 16) & 0xff] ^ s_td2[(s0 >> 8) & 0xff] ^ s_td3[s3 & 0xff] ^ ks[54]; 1837 t3 = s_td0[s3 >> 24] ^ s_td1[(s2 >> 16) & 0xff] ^ s_td2[(s1 >> 8) & 0xff] ^ s_td3[s0 & 0xff] ^ ks[55]; 1838 1839 out[0] = (s_td4[(t0 >> 24) & 0xff] & 0xff000000) 1840 ^ (s_td4[(t3 >> 16) & 0xff] & 0x00ff0000) 1841 ^ (s_td4[(t2 >> 8) & 0xff] & 0x0000ff00) 1842 ^ (s_td4[(t1 >> 0) & 0xff] & 0x000000ff) 1843 ^ ks[56]; 1844 1845 out[1] = (s_td4[(t1 >> 24) & 0xff] & 0xff000000) 1846 ^ (s_td4[(t0 >> 16) & 0xff] & 0x00ff0000) 1847 ^ (s_td4[(t3 >> 8) & 0xff] & 0x0000ff00) 1848 ^ (s_td4[(t2 >> 0) & 0xff] & 0x000000ff) 1849 ^ ks[57]; 1850 1851 out[2] = (s_td4[(t2 >> 24) & 0xff] & 0xff000000) 1852 ^ (s_td4[(t1 >> 16) & 0xff] & 0x00ff0000) 1853 ^ (s_td4[(t0 >> 8) & 0xff] & 0x0000ff00) 1854 ^ (s_td4[(t3 >> 0) & 0xff] & 0x000000ff) 1855 ^ ks[58]; 1856 1857 out[3] = (s_td4[(t3 >> 24) & 0xff] & 0xff000000) 1858 ^ (s_td4[(t2 >> 16) & 0xff] & 0x00ff0000) 1859 ^ (s_td4[(t1 >> 8) & 0xff] & 0x0000ff00) 1860 ^ (s_td4[(t0 >> 0) & 0xff] & 0x000000ff) 1861 ^ ks[59]; 1862 1863 out[0] = hc_swap32_S (out[0]); 1864 out[1] = hc_swap32_S (out[1]); 1865 out[2] = hc_swap32_S (out[2]); 1866 out[3] = hc_swap32_S (out[3]); 1867} 1868 1869// wrapper to avoid hc_swap32_S() confusion in the kernel code 1870 1871DECLSPEC void AES128_set_encrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 1872{ 1873 u32 ukey_s[4]; 1874 1875 ukey_s[0] = hc_swap32_S (ukey[0]); 1876 ukey_s[1] = hc_swap32_S (ukey[1]); 1877 ukey_s[2] = hc_swap32_S (ukey[2]); 1878 ukey_s[3] = hc_swap32_S (ukey[3]); 1879 1880 aes128_set_encrypt_key (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 1881} 1882 1883DECLSPEC void AES128_set_decrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 1884{ 1885 u32 ukey_s[4]; 1886 1887 ukey_s[0] = hc_swap32_S (ukey[0]); 1888 ukey_s[1] = hc_swap32_S (ukey[1]); 1889 ukey_s[2] = hc_swap32_S (ukey[2]); 1890 ukey_s[3] = hc_swap32_S (ukey[3]); 1891 1892 aes128_set_decrypt_key (ks, ukey_s, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); 1893} 1894 1895DECLSPEC void AES128_encrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_te4) 1896{ 1897 u32 in_s[4]; 1898 1899 in_s[0] = hc_swap32_S (in[0]); 1900 in_s[1] = hc_swap32_S (in[1]); 1901 in_s[2] = hc_swap32_S (in[2]); 1902 in_s[3] = hc_swap32_S (in[3]); 1903 1904 u32 out_s[4]; 1905 1906 aes128_encrypt (ks, in_s, out_s, s_te0, s_te1, s_te2, s_te3, s_te4); 1907 1908 out[0] = hc_swap32_S (out_s[0]); 1909 out[1] = hc_swap32_S (out_s[1]); 1910 out[2] = hc_swap32_S (out_s[2]); 1911 out[3] = hc_swap32_S (out_s[3]); 1912} 1913 1914DECLSPEC void AES128_decrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3, SHM_TYPE u32 *s_td4) 1915{ 1916 u32 in_s[4]; 1917 1918 in_s[0] = hc_swap32_S (in[0]); 1919 in_s[1] = hc_swap32_S (in[1]); 1920 in_s[2] = hc_swap32_S (in[2]); 1921 in_s[3] = hc_swap32_S (in[3]); 1922 1923 u32 out_s[4]; 1924 1925 aes128_decrypt (ks, in_s, out_s, s_td0, s_td1, s_td2, s_td3, s_td4); 1926 1927 out[0] = hc_swap32_S (out_s[0]); 1928 out[1] = hc_swap32_S (out_s[1]); 1929 out[2] = hc_swap32_S (out_s[2]); 1930 out[3] = hc_swap32_S (out_s[3]); 1931} 1932 1933DECLSPEC void AES192_set_encrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 1934{ 1935 u32 ukey_s[6]; 1936 1937 ukey_s[0] = hc_swap32_S (ukey[0]); 1938 ukey_s[1] = hc_swap32_S (ukey[1]); 1939 ukey_s[2] = hc_swap32_S (ukey[2]); 1940 ukey_s[3] = hc_swap32_S (ukey[3]); 1941 ukey_s[4] = hc_swap32_S (ukey[4]); 1942 ukey_s[5] = hc_swap32_S (ukey[5]); 1943 1944 aes192_set_encrypt_key (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 1945} 1946 1947DECLSPEC void AES192_set_decrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 1948{ 1949 u32 ukey_s[6]; 1950 1951 ukey_s[0] = hc_swap32_S (ukey[0]); 1952 ukey_s[1] = hc_swap32_S (ukey[1]); 1953 ukey_s[2] = hc_swap32_S (ukey[2]); 1954 ukey_s[3] = hc_swap32_S (ukey[3]); 1955 ukey_s[4] = hc_swap32_S (ukey[4]); 1956 ukey_s[5] = hc_swap32_S (ukey[5]); 1957 1958 aes192_set_decrypt_key (ks, ukey_s, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); 1959} 1960 1961DECLSPEC void AES192_encrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_te4) 1962{ 1963 u32 in_s[4]; 1964 1965 in_s[0] = hc_swap32_S (in[0]); 1966 in_s[1] = hc_swap32_S (in[1]); 1967 in_s[2] = hc_swap32_S (in[2]); 1968 in_s[3] = hc_swap32_S (in[3]); 1969 1970 u32 out_s[4]; 1971 1972 aes192_encrypt (ks, in_s, out_s, s_te0, s_te1, s_te2, s_te3, s_te4); 1973 1974 out[0] = hc_swap32_S (out_s[0]); 1975 out[1] = hc_swap32_S (out_s[1]); 1976 out[2] = hc_swap32_S (out_s[2]); 1977 out[3] = hc_swap32_S (out_s[3]); 1978} 1979 1980DECLSPEC void AES192_decrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3, SHM_TYPE u32 *s_td4) 1981{ 1982 u32 in_s[4]; 1983 1984 in_s[0] = hc_swap32_S (in[0]); 1985 in_s[1] = hc_swap32_S (in[1]); 1986 in_s[2] = hc_swap32_S (in[2]); 1987 in_s[3] = hc_swap32_S (in[3]); 1988 1989 u32 out_s[4]; 1990 1991 aes192_decrypt (ks, in_s, out_s, s_td0, s_td1, s_td2, s_td3, s_td4); 1992 1993 out[0] = hc_swap32_S (out_s[0]); 1994 out[1] = hc_swap32_S (out_s[1]); 1995 out[2] = hc_swap32_S (out_s[2]); 1996 out[3] = hc_swap32_S (out_s[3]); 1997} 1998 1999DECLSPEC void AES256_set_encrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3) 2000{ 2001 u32 ukey_s[8]; 2002 2003 ukey_s[0] = hc_swap32_S (ukey[0]); 2004 ukey_s[1] = hc_swap32_S (ukey[1]); 2005 ukey_s[2] = hc_swap32_S (ukey[2]); 2006 ukey_s[3] = hc_swap32_S (ukey[3]); 2007 ukey_s[4] = hc_swap32_S (ukey[4]); 2008 ukey_s[5] = hc_swap32_S (ukey[5]); 2009 ukey_s[6] = hc_swap32_S (ukey[6]); 2010 ukey_s[7] = hc_swap32_S (ukey[7]); 2011 2012 aes256_set_encrypt_key (ks, ukey_s, s_te0, s_te1, s_te2, s_te3); 2013} 2014 2015DECLSPEC void AES256_set_decrypt_key (u32 *ks, const u32 *ukey, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3) 2016{ 2017 u32 ukey_s[8]; 2018 2019 ukey_s[0] = hc_swap32_S (ukey[0]); 2020 ukey_s[1] = hc_swap32_S (ukey[1]); 2021 ukey_s[2] = hc_swap32_S (ukey[2]); 2022 ukey_s[3] = hc_swap32_S (ukey[3]); 2023 ukey_s[4] = hc_swap32_S (ukey[4]); 2024 ukey_s[5] = hc_swap32_S (ukey[5]); 2025 ukey_s[6] = hc_swap32_S (ukey[6]); 2026 ukey_s[7] = hc_swap32_S (ukey[7]); 2027 2028 aes256_set_decrypt_key (ks, ukey_s, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); 2029} 2030 2031DECLSPEC void AES256_encrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_te0, SHM_TYPE u32 *s_te1, SHM_TYPE u32 *s_te2, SHM_TYPE u32 *s_te3, SHM_TYPE u32 *s_te4) 2032{ 2033 u32 in_s[4]; 2034 2035 in_s[0] = hc_swap32_S (in[0]); 2036 in_s[1] = hc_swap32_S (in[1]); 2037 in_s[2] = hc_swap32_S (in[2]); 2038 in_s[3] = hc_swap32_S (in[3]); 2039 2040 u32 out_s[4]; 2041 2042 aes256_encrypt (ks, in_s, out_s, s_te0, s_te1, s_te2, s_te3, s_te4); 2043 2044 out[0] = hc_swap32_S (out_s[0]); 2045 out[1] = hc_swap32_S (out_s[1]); 2046 out[2] = hc_swap32_S (out_s[2]); 2047 out[3] = hc_swap32_S (out_s[3]); 2048} 2049 2050DECLSPEC void AES256_decrypt (const u32 *ks, const u32 *in, u32 *out, SHM_TYPE u32 *s_td0, SHM_TYPE u32 *s_td1, SHM_TYPE u32 *s_td2, SHM_TYPE u32 *s_td3, SHM_TYPE u32 *s_td4) 2051{ 2052 u32 in_s[4]; 2053 2054 in_s[0] = hc_swap32_S (in[0]); 2055 in_s[1] = hc_swap32_S (in[1]); 2056 in_s[2] = hc_swap32_S (in[2]); 2057 in_s[3] = hc_swap32_S (in[3]); 2058 2059 u32 out_s[4]; 2060 2061 aes256_decrypt (ks, in_s, out_s, s_td0, s_td1, s_td2, s_td3, s_td4); 2062 2063 out[0] = hc_swap32_S (out_s[0]); 2064 out[1] = hc_swap32_S (out_s[1]); 2065 out[2] = hc_swap32_S (out_s[2]); 2066 out[3] = hc_swap32_S (out_s[3]); 2067} 2068