0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050 #include <crypto/aes.h>
0051 #include <linux/module.h>
0052 #include <linux/init.h>
0053 #include <linux/types.h>
0054 #include <linux/errno.h>
0055 #include <linux/crypto.h>
0056 #include <asm/byteorder.h>
0057 #include <asm/unaligned.h>
0058
0059 static inline u8 byte(const u32 x, const unsigned n)
0060 {
0061 return x >> (n << 3);
0062 }
0063
0064
0065 __visible const u32 crypto_ft_tab[4][256] ____cacheline_aligned = {
0066 {
0067 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
0068 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
0069 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
0070 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
0071 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
0072 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
0073 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
0074 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
0075 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
0076 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
0077 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
0078 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
0079 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
0080 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
0081 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
0082 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
0083 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
0084 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
0085 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
0086 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
0087 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
0088 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
0089 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
0090 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
0091 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
0092 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
0093 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
0094 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
0095 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
0096 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
0097 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
0098 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
0099 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
0100 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
0101 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
0102 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
0103 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
0104 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
0105 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
0106 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
0107 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
0108 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
0109 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
0110 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
0111 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
0112 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
0113 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
0114 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
0115 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
0116 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
0117 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
0118 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
0119 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
0120 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
0121 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
0122 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
0123 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
0124 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
0125 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
0126 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
0127 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
0128 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
0129 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
0130 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c,
0131 }, {
0132 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
0133 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
0134 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
0135 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
0136 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
0137 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
0138 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
0139 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
0140 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
0141 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
0142 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
0143 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
0144 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
0145 0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
0146 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
0147 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
0148 0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
0149 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
0150 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
0151 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
0152 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
0153 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
0154 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
0155 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
0156 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
0157 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
0158 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
0159 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
0160 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
0161 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
0162 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
0163 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
0164 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
0165 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
0166 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
0167 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
0168 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
0169 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
0170 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
0171 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
0172 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
0173 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
0174 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
0175 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
0176 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
0177 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
0178 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
0179 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
0180 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
0181 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
0182 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
0183 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
0184 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
0185 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
0186 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
0187 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
0188 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
0189 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
0190 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
0191 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
0192 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
0193 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
0194 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
0195 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a,
0196 }, {
0197 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
0198 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
0199 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
0200 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
0201 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
0202 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
0203 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
0204 0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
0205 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
0206 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
0207 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
0208 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
0209 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
0210 0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
0211 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
0212 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
0213 0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
0214 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
0215 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
0216 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
0217 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
0218 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
0219 0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
0220 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
0221 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
0222 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
0223 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
0224 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
0225 0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
0226 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
0227 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
0228 0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
0229 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
0230 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
0231 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
0232 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
0233 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
0234 0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
0235 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
0236 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
0237 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
0238 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
0239 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
0240 0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
0241 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
0242 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
0243 0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
0244 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
0245 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
0246 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
0247 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
0248 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
0249 0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
0250 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
0251 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
0252 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
0253 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
0254 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
0255 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
0256 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
0257 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
0258 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
0259 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
0260 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16,
0261 }, {
0262 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
0263 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
0264 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
0265 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
0266 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
0267 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
0268 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
0269 0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
0270 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
0271 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
0272 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
0273 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
0274 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
0275 0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
0276 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
0277 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
0278 0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
0279 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
0280 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
0281 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
0282 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
0283 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
0284 0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
0285 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
0286 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
0287 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
0288 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
0289 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
0290 0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
0291 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
0292 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
0293 0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
0294 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
0295 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
0296 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
0297 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
0298 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
0299 0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
0300 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
0301 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
0302 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
0303 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
0304 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
0305 0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
0306 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
0307 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
0308 0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
0309 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
0310 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
0311 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
0312 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
0313 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
0314 0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
0315 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
0316 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
0317 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
0318 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
0319 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
0320 0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
0321 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
0322 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
0323 0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
0324 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
0325 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616,
0326 }
0327 };
0328
0329 static const u32 crypto_fl_tab[4][256] ____cacheline_aligned = {
0330 {
0331 0x00000063, 0x0000007c, 0x00000077, 0x0000007b,
0332 0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5,
0333 0x00000030, 0x00000001, 0x00000067, 0x0000002b,
0334 0x000000fe, 0x000000d7, 0x000000ab, 0x00000076,
0335 0x000000ca, 0x00000082, 0x000000c9, 0x0000007d,
0336 0x000000fa, 0x00000059, 0x00000047, 0x000000f0,
0337 0x000000ad, 0x000000d4, 0x000000a2, 0x000000af,
0338 0x0000009c, 0x000000a4, 0x00000072, 0x000000c0,
0339 0x000000b7, 0x000000fd, 0x00000093, 0x00000026,
0340 0x00000036, 0x0000003f, 0x000000f7, 0x000000cc,
0341 0x00000034, 0x000000a5, 0x000000e5, 0x000000f1,
0342 0x00000071, 0x000000d8, 0x00000031, 0x00000015,
0343 0x00000004, 0x000000c7, 0x00000023, 0x000000c3,
0344 0x00000018, 0x00000096, 0x00000005, 0x0000009a,
0345 0x00000007, 0x00000012, 0x00000080, 0x000000e2,
0346 0x000000eb, 0x00000027, 0x000000b2, 0x00000075,
0347 0x00000009, 0x00000083, 0x0000002c, 0x0000001a,
0348 0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0,
0349 0x00000052, 0x0000003b, 0x000000d6, 0x000000b3,
0350 0x00000029, 0x000000e3, 0x0000002f, 0x00000084,
0351 0x00000053, 0x000000d1, 0x00000000, 0x000000ed,
0352 0x00000020, 0x000000fc, 0x000000b1, 0x0000005b,
0353 0x0000006a, 0x000000cb, 0x000000be, 0x00000039,
0354 0x0000004a, 0x0000004c, 0x00000058, 0x000000cf,
0355 0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb,
0356 0x00000043, 0x0000004d, 0x00000033, 0x00000085,
0357 0x00000045, 0x000000f9, 0x00000002, 0x0000007f,
0358 0x00000050, 0x0000003c, 0x0000009f, 0x000000a8,
0359 0x00000051, 0x000000a3, 0x00000040, 0x0000008f,
0360 0x00000092, 0x0000009d, 0x00000038, 0x000000f5,
0361 0x000000bc, 0x000000b6, 0x000000da, 0x00000021,
0362 0x00000010, 0x000000ff, 0x000000f3, 0x000000d2,
0363 0x000000cd, 0x0000000c, 0x00000013, 0x000000ec,
0364 0x0000005f, 0x00000097, 0x00000044, 0x00000017,
0365 0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d,
0366 0x00000064, 0x0000005d, 0x00000019, 0x00000073,
0367 0x00000060, 0x00000081, 0x0000004f, 0x000000dc,
0368 0x00000022, 0x0000002a, 0x00000090, 0x00000088,
0369 0x00000046, 0x000000ee, 0x000000b8, 0x00000014,
0370 0x000000de, 0x0000005e, 0x0000000b, 0x000000db,
0371 0x000000e0, 0x00000032, 0x0000003a, 0x0000000a,
0372 0x00000049, 0x00000006, 0x00000024, 0x0000005c,
0373 0x000000c2, 0x000000d3, 0x000000ac, 0x00000062,
0374 0x00000091, 0x00000095, 0x000000e4, 0x00000079,
0375 0x000000e7, 0x000000c8, 0x00000037, 0x0000006d,
0376 0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9,
0377 0x0000006c, 0x00000056, 0x000000f4, 0x000000ea,
0378 0x00000065, 0x0000007a, 0x000000ae, 0x00000008,
0379 0x000000ba, 0x00000078, 0x00000025, 0x0000002e,
0380 0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6,
0381 0x000000e8, 0x000000dd, 0x00000074, 0x0000001f,
0382 0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a,
0383 0x00000070, 0x0000003e, 0x000000b5, 0x00000066,
0384 0x00000048, 0x00000003, 0x000000f6, 0x0000000e,
0385 0x00000061, 0x00000035, 0x00000057, 0x000000b9,
0386 0x00000086, 0x000000c1, 0x0000001d, 0x0000009e,
0387 0x000000e1, 0x000000f8, 0x00000098, 0x00000011,
0388 0x00000069, 0x000000d9, 0x0000008e, 0x00000094,
0389 0x0000009b, 0x0000001e, 0x00000087, 0x000000e9,
0390 0x000000ce, 0x00000055, 0x00000028, 0x000000df,
0391 0x0000008c, 0x000000a1, 0x00000089, 0x0000000d,
0392 0x000000bf, 0x000000e6, 0x00000042, 0x00000068,
0393 0x00000041, 0x00000099, 0x0000002d, 0x0000000f,
0394 0x000000b0, 0x00000054, 0x000000bb, 0x00000016,
0395 }, {
0396 0x00006300, 0x00007c00, 0x00007700, 0x00007b00,
0397 0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500,
0398 0x00003000, 0x00000100, 0x00006700, 0x00002b00,
0399 0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600,
0400 0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00,
0401 0x0000fa00, 0x00005900, 0x00004700, 0x0000f000,
0402 0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00,
0403 0x00009c00, 0x0000a400, 0x00007200, 0x0000c000,
0404 0x0000b700, 0x0000fd00, 0x00009300, 0x00002600,
0405 0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00,
0406 0x00003400, 0x0000a500, 0x0000e500, 0x0000f100,
0407 0x00007100, 0x0000d800, 0x00003100, 0x00001500,
0408 0x00000400, 0x0000c700, 0x00002300, 0x0000c300,
0409 0x00001800, 0x00009600, 0x00000500, 0x00009a00,
0410 0x00000700, 0x00001200, 0x00008000, 0x0000e200,
0411 0x0000eb00, 0x00002700, 0x0000b200, 0x00007500,
0412 0x00000900, 0x00008300, 0x00002c00, 0x00001a00,
0413 0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000,
0414 0x00005200, 0x00003b00, 0x0000d600, 0x0000b300,
0415 0x00002900, 0x0000e300, 0x00002f00, 0x00008400,
0416 0x00005300, 0x0000d100, 0x00000000, 0x0000ed00,
0417 0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00,
0418 0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900,
0419 0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00,
0420 0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00,
0421 0x00004300, 0x00004d00, 0x00003300, 0x00008500,
0422 0x00004500, 0x0000f900, 0x00000200, 0x00007f00,
0423 0x00005000, 0x00003c00, 0x00009f00, 0x0000a800,
0424 0x00005100, 0x0000a300, 0x00004000, 0x00008f00,
0425 0x00009200, 0x00009d00, 0x00003800, 0x0000f500,
0426 0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100,
0427 0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200,
0428 0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00,
0429 0x00005f00, 0x00009700, 0x00004400, 0x00001700,
0430 0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00,
0431 0x00006400, 0x00005d00, 0x00001900, 0x00007300,
0432 0x00006000, 0x00008100, 0x00004f00, 0x0000dc00,
0433 0x00002200, 0x00002a00, 0x00009000, 0x00008800,
0434 0x00004600, 0x0000ee00, 0x0000b800, 0x00001400,
0435 0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00,
0436 0x0000e000, 0x00003200, 0x00003a00, 0x00000a00,
0437 0x00004900, 0x00000600, 0x00002400, 0x00005c00,
0438 0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200,
0439 0x00009100, 0x00009500, 0x0000e400, 0x00007900,
0440 0x0000e700, 0x0000c800, 0x00003700, 0x00006d00,
0441 0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900,
0442 0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00,
0443 0x00006500, 0x00007a00, 0x0000ae00, 0x00000800,
0444 0x0000ba00, 0x00007800, 0x00002500, 0x00002e00,
0445 0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600,
0446 0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00,
0447 0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00,
0448 0x00007000, 0x00003e00, 0x0000b500, 0x00006600,
0449 0x00004800, 0x00000300, 0x0000f600, 0x00000e00,
0450 0x00006100, 0x00003500, 0x00005700, 0x0000b900,
0451 0x00008600, 0x0000c100, 0x00001d00, 0x00009e00,
0452 0x0000e100, 0x0000f800, 0x00009800, 0x00001100,
0453 0x00006900, 0x0000d900, 0x00008e00, 0x00009400,
0454 0x00009b00, 0x00001e00, 0x00008700, 0x0000e900,
0455 0x0000ce00, 0x00005500, 0x00002800, 0x0000df00,
0456 0x00008c00, 0x0000a100, 0x00008900, 0x00000d00,
0457 0x0000bf00, 0x0000e600, 0x00004200, 0x00006800,
0458 0x00004100, 0x00009900, 0x00002d00, 0x00000f00,
0459 0x0000b000, 0x00005400, 0x0000bb00, 0x00001600,
0460 }, {
0461 0x00630000, 0x007c0000, 0x00770000, 0x007b0000,
0462 0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000,
0463 0x00300000, 0x00010000, 0x00670000, 0x002b0000,
0464 0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000,
0465 0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000,
0466 0x00fa0000, 0x00590000, 0x00470000, 0x00f00000,
0467 0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000,
0468 0x009c0000, 0x00a40000, 0x00720000, 0x00c00000,
0469 0x00b70000, 0x00fd0000, 0x00930000, 0x00260000,
0470 0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000,
0471 0x00340000, 0x00a50000, 0x00e50000, 0x00f10000,
0472 0x00710000, 0x00d80000, 0x00310000, 0x00150000,
0473 0x00040000, 0x00c70000, 0x00230000, 0x00c30000,
0474 0x00180000, 0x00960000, 0x00050000, 0x009a0000,
0475 0x00070000, 0x00120000, 0x00800000, 0x00e20000,
0476 0x00eb0000, 0x00270000, 0x00b20000, 0x00750000,
0477 0x00090000, 0x00830000, 0x002c0000, 0x001a0000,
0478 0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000,
0479 0x00520000, 0x003b0000, 0x00d60000, 0x00b30000,
0480 0x00290000, 0x00e30000, 0x002f0000, 0x00840000,
0481 0x00530000, 0x00d10000, 0x00000000, 0x00ed0000,
0482 0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000,
0483 0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000,
0484 0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000,
0485 0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000,
0486 0x00430000, 0x004d0000, 0x00330000, 0x00850000,
0487 0x00450000, 0x00f90000, 0x00020000, 0x007f0000,
0488 0x00500000, 0x003c0000, 0x009f0000, 0x00a80000,
0489 0x00510000, 0x00a30000, 0x00400000, 0x008f0000,
0490 0x00920000, 0x009d0000, 0x00380000, 0x00f50000,
0491 0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000,
0492 0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000,
0493 0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000,
0494 0x005f0000, 0x00970000, 0x00440000, 0x00170000,
0495 0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000,
0496 0x00640000, 0x005d0000, 0x00190000, 0x00730000,
0497 0x00600000, 0x00810000, 0x004f0000, 0x00dc0000,
0498 0x00220000, 0x002a0000, 0x00900000, 0x00880000,
0499 0x00460000, 0x00ee0000, 0x00b80000, 0x00140000,
0500 0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000,
0501 0x00e00000, 0x00320000, 0x003a0000, 0x000a0000,
0502 0x00490000, 0x00060000, 0x00240000, 0x005c0000,
0503 0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000,
0504 0x00910000, 0x00950000, 0x00e40000, 0x00790000,
0505 0x00e70000, 0x00c80000, 0x00370000, 0x006d0000,
0506 0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000,
0507 0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000,
0508 0x00650000, 0x007a0000, 0x00ae0000, 0x00080000,
0509 0x00ba0000, 0x00780000, 0x00250000, 0x002e0000,
0510 0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000,
0511 0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000,
0512 0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000,
0513 0x00700000, 0x003e0000, 0x00b50000, 0x00660000,
0514 0x00480000, 0x00030000, 0x00f60000, 0x000e0000,
0515 0x00610000, 0x00350000, 0x00570000, 0x00b90000,
0516 0x00860000, 0x00c10000, 0x001d0000, 0x009e0000,
0517 0x00e10000, 0x00f80000, 0x00980000, 0x00110000,
0518 0x00690000, 0x00d90000, 0x008e0000, 0x00940000,
0519 0x009b0000, 0x001e0000, 0x00870000, 0x00e90000,
0520 0x00ce0000, 0x00550000, 0x00280000, 0x00df0000,
0521 0x008c0000, 0x00a10000, 0x00890000, 0x000d0000,
0522 0x00bf0000, 0x00e60000, 0x00420000, 0x00680000,
0523 0x00410000, 0x00990000, 0x002d0000, 0x000f0000,
0524 0x00b00000, 0x00540000, 0x00bb0000, 0x00160000,
0525 }, {
0526 0x63000000, 0x7c000000, 0x77000000, 0x7b000000,
0527 0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000,
0528 0x30000000, 0x01000000, 0x67000000, 0x2b000000,
0529 0xfe000000, 0xd7000000, 0xab000000, 0x76000000,
0530 0xca000000, 0x82000000, 0xc9000000, 0x7d000000,
0531 0xfa000000, 0x59000000, 0x47000000, 0xf0000000,
0532 0xad000000, 0xd4000000, 0xa2000000, 0xaf000000,
0533 0x9c000000, 0xa4000000, 0x72000000, 0xc0000000,
0534 0xb7000000, 0xfd000000, 0x93000000, 0x26000000,
0535 0x36000000, 0x3f000000, 0xf7000000, 0xcc000000,
0536 0x34000000, 0xa5000000, 0xe5000000, 0xf1000000,
0537 0x71000000, 0xd8000000, 0x31000000, 0x15000000,
0538 0x04000000, 0xc7000000, 0x23000000, 0xc3000000,
0539 0x18000000, 0x96000000, 0x05000000, 0x9a000000,
0540 0x07000000, 0x12000000, 0x80000000, 0xe2000000,
0541 0xeb000000, 0x27000000, 0xb2000000, 0x75000000,
0542 0x09000000, 0x83000000, 0x2c000000, 0x1a000000,
0543 0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000,
0544 0x52000000, 0x3b000000, 0xd6000000, 0xb3000000,
0545 0x29000000, 0xe3000000, 0x2f000000, 0x84000000,
0546 0x53000000, 0xd1000000, 0x00000000, 0xed000000,
0547 0x20000000, 0xfc000000, 0xb1000000, 0x5b000000,
0548 0x6a000000, 0xcb000000, 0xbe000000, 0x39000000,
0549 0x4a000000, 0x4c000000, 0x58000000, 0xcf000000,
0550 0xd0000000, 0xef000000, 0xaa000000, 0xfb000000,
0551 0x43000000, 0x4d000000, 0x33000000, 0x85000000,
0552 0x45000000, 0xf9000000, 0x02000000, 0x7f000000,
0553 0x50000000, 0x3c000000, 0x9f000000, 0xa8000000,
0554 0x51000000, 0xa3000000, 0x40000000, 0x8f000000,
0555 0x92000000, 0x9d000000, 0x38000000, 0xf5000000,
0556 0xbc000000, 0xb6000000, 0xda000000, 0x21000000,
0557 0x10000000, 0xff000000, 0xf3000000, 0xd2000000,
0558 0xcd000000, 0x0c000000, 0x13000000, 0xec000000,
0559 0x5f000000, 0x97000000, 0x44000000, 0x17000000,
0560 0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000,
0561 0x64000000, 0x5d000000, 0x19000000, 0x73000000,
0562 0x60000000, 0x81000000, 0x4f000000, 0xdc000000,
0563 0x22000000, 0x2a000000, 0x90000000, 0x88000000,
0564 0x46000000, 0xee000000, 0xb8000000, 0x14000000,
0565 0xde000000, 0x5e000000, 0x0b000000, 0xdb000000,
0566 0xe0000000, 0x32000000, 0x3a000000, 0x0a000000,
0567 0x49000000, 0x06000000, 0x24000000, 0x5c000000,
0568 0xc2000000, 0xd3000000, 0xac000000, 0x62000000,
0569 0x91000000, 0x95000000, 0xe4000000, 0x79000000,
0570 0xe7000000, 0xc8000000, 0x37000000, 0x6d000000,
0571 0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000,
0572 0x6c000000, 0x56000000, 0xf4000000, 0xea000000,
0573 0x65000000, 0x7a000000, 0xae000000, 0x08000000,
0574 0xba000000, 0x78000000, 0x25000000, 0x2e000000,
0575 0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000,
0576 0xe8000000, 0xdd000000, 0x74000000, 0x1f000000,
0577 0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000,
0578 0x70000000, 0x3e000000, 0xb5000000, 0x66000000,
0579 0x48000000, 0x03000000, 0xf6000000, 0x0e000000,
0580 0x61000000, 0x35000000, 0x57000000, 0xb9000000,
0581 0x86000000, 0xc1000000, 0x1d000000, 0x9e000000,
0582 0xe1000000, 0xf8000000, 0x98000000, 0x11000000,
0583 0x69000000, 0xd9000000, 0x8e000000, 0x94000000,
0584 0x9b000000, 0x1e000000, 0x87000000, 0xe9000000,
0585 0xce000000, 0x55000000, 0x28000000, 0xdf000000,
0586 0x8c000000, 0xa1000000, 0x89000000, 0x0d000000,
0587 0xbf000000, 0xe6000000, 0x42000000, 0x68000000,
0588 0x41000000, 0x99000000, 0x2d000000, 0x0f000000,
0589 0xb0000000, 0x54000000, 0xbb000000, 0x16000000,
0590 }
0591 };
0592
0593 __visible const u32 crypto_it_tab[4][256] ____cacheline_aligned = {
0594 {
0595 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
0596 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
0597 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
0598 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5,
0599 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d,
0600 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b,
0601 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295,
0602 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e,
0603 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927,
0604 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d,
0605 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362,
0606 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9,
0607 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52,
0608 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566,
0609 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3,
0610 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed,
0611 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e,
0612 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4,
0613 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4,
0614 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd,
0615 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d,
0616 0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060,
0617 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967,
0618 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879,
0619 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000,
0620 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c,
0621 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36,
0622 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624,
0623 0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b,
0624 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c,
0625 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12,
0626 0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14,
0627 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3,
0628 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b,
0629 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8,
0630 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684,
0631 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7,
0632 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177,
0633 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947,
0634 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322,
0635 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498,
0636 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f,
0637 0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54,
0638 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382,
0639 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf,
0640 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb,
0641 0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83,
0642 0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef,
0643 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029,
0644 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235,
0645 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733,
0646 0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117,
0647 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4,
0648 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546,
0649 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb,
0650 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d,
0651 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb,
0652 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a,
0653 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773,
0654 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478,
0655 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2,
0656 0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff,
0657 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664,
0658 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0,
0659 }, {
0660 0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96,
0661 0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x03e34b93,
0662 0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525,
0663 0xd7e54ffc, 0xcb2ac5d7, 0x44352680, 0xa362b58f,
0664 0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1,
0665 0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6,
0666 0x5f8f03e7, 0x9c921595, 0x7a6dbfeb, 0x595295da,
0667 0x83bed42d, 0x217458d3, 0x69e04929, 0xc8c98e44,
0668 0x89c2756a, 0x798ef478, 0x3e58996b, 0x71b927dd,
0669 0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4,
0670 0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245,
0671 0x7764b1e0, 0xae6bbb84, 0xa081fe1c, 0x2b08f994,
0672 0x68487058, 0xfd458f19, 0x6cde9487, 0xf87b52b7,
0673 0xd373ab23, 0x024b72e2, 0x8f1fe357, 0xab55662a,
0674 0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5,
0675 0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c,
0676 0x1ccf8a2b, 0xb479a792, 0xf207f3f0, 0xe2694ea1,
0677 0xf4da65cd, 0xbe0506d5, 0x6234d11f, 0xfea6c48a,
0678 0x532e349d, 0x55f3a2a0, 0xe18a0532, 0xebf6a475,
0679 0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51,
0680 0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46,
0681 0x8d5491b5, 0x5dc47105, 0xd406046f, 0x155060ff,
0682 0xfb981924, 0xe9bdd697, 0x434089cc, 0x9ed96777,
0683 0x42e8b0bd, 0x8b890788, 0x5b19e738, 0xeec879db,
0684 0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000,
0685 0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e,
0686 0xff0efdfb, 0x38850f56, 0xd5ae3d1e, 0x392d3627,
0687 0xd90f0a64, 0xa65c6821, 0x545b9bd1, 0x2e36243a,
0688 0x670a0cb1, 0xe757930f, 0x96eeb4d2, 0x919b1b9e,
0689 0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16,
0690 0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d,
0691 0x0d090e0b, 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8,
0692 0x19f15785, 0x0775af4c, 0xdd99eebb, 0x607fa3fd,
0693 0x2601f79f, 0xf5725cbc, 0x3b6644c5, 0x7efb5b34,
0694 0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863,
0695 0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420,
0696 0x244a857d, 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d,
0697 0x2f9e1d4b, 0x30b2dcf3, 0x52860dec, 0xe3c177d0,
0698 0x16b32b6c, 0xb970a999, 0x489411fa, 0x64e94722,
0699 0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef,
0700 0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836,
0701 0x81f5a6cf, 0xde7aa528, 0x8eb7da26, 0xbfad3fa4,
0702 0x9d3a2ce4, 0x9278500d, 0xcc5f6a9b, 0x467e5462,
0703 0x138df6c2, 0xb8d890e8, 0xf7392e5e, 0xafc382f5,
0704 0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3,
0705 0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b,
0706 0x7826cd09, 0x18596ef4, 0xb79aec01, 0x9a4f83a8,
0707 0x6e95e665, 0xe6ffaa7e, 0xcfbc2108, 0xe815efe6,
0708 0x9be7bad9, 0x366f4ace, 0x099fead4, 0x7cb029d6,
0709 0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0,
0710 0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315,
0711 0x9804f14a, 0xdaec41f7, 0x50cd7f0e, 0xf691172f,
0712 0xd64d768d, 0xb0ef434d, 0x4daacc54, 0x0496e4df,
0713 0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, 0x5165467f,
0714 0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e,
0715 0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13,
0716 0x61d79a8c, 0x0ca1377a, 0x14f8598e, 0x3c13eb89,
0717 0x27a9ceee, 0xc961b735, 0xe51ce1ed, 0xb1477a3c,
0718 0xdfd29c59, 0x73f2553f, 0xce141879, 0x37c773bf,
0719 0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886,
0720 0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f,
0721 0xc31d1672, 0x25e2bc0c, 0x493c288b, 0x950dff41,
0722 0x01a83971, 0xb30c08de, 0xe4b4d89c, 0xc1566490,
0723 0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042,
0724 }, {
0725 0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e,
0726 0xab3bcb6b, 0x9d1ff145, 0xfaacab58, 0xe34b9303,
0727 0x302055fa, 0x76adf66d, 0xcc889176, 0x02f5254c,
0728 0xe54ffcd7, 0x2ac5d7cb, 0x35268044, 0x62b58fa3,
0729 0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0,
0730 0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9,
0731 0x8f03e75f, 0x9215959c, 0x6dbfeb7a, 0x5295da59,
0732 0xbed42d83, 0x7458d321, 0xe0492969, 0xc98e44c8,
0733 0xc2756a89, 0x8ef47879, 0x58996b3e, 0xb927dd71,
0734 0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a,
0735 0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f,
0736 0x64b1e077, 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b,
0737 0x48705868, 0x458f19fd, 0xde94876c, 0x7b52b7f8,
0738 0x73ab23d3, 0x4b72e202, 0x1fe3578f, 0x55662aab,
0739 0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508,
0740 0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82,
0741 0xcf8a2b1c, 0x79a792b4, 0x07f3f0f2, 0x694ea1e2,
0742 0xda65cdf4, 0x0506d5be, 0x34d11f62, 0xa6c48afe,
0743 0x2e349d53, 0xf3a2a055, 0x8a0532e1, 0xf6a475eb,
0744 0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110,
0745 0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd,
0746 0x5491b58d, 0xc471055d, 0x06046fd4, 0x5060ff15,
0747 0x981924fb, 0xbdd697e9, 0x4089cc43, 0xd967779e,
0748 0xe8b0bd42, 0x8907888b, 0x19e7385b, 0xc879dbee,
0749 0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000,
0750 0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72,
0751 0x0efdfbff, 0x850f5638, 0xae3d1ed5, 0x2d362739,
0752 0x0f0a64d9, 0x5c6821a6, 0x5b9bd154, 0x36243a2e,
0753 0x0a0cb167, 0x57930fe7, 0xeeb4d296, 0x9b1b9e91,
0754 0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a,
0755 0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17,
0756 0x090e0b0d, 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9,
0757 0xf1578519, 0x75af4c07, 0x99eebbdd, 0x7fa3fd60,
0758 0x01f79f26, 0x725cbcf5, 0x6644c53b, 0xfb5b347e,
0759 0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1,
0760 0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011,
0761 0x4a857d24, 0xbbd2f83d, 0xf9ae1132, 0x29c76da1,
0762 0x9e1d4b2f, 0xb2dcf330, 0x860dec52, 0xc177d0e3,
0763 0xb32b6c16, 0x70a999b9, 0x9411fa48, 0xe9472264,
0764 0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90,
0765 0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b,
0766 0xf5a6cf81, 0x7aa528de, 0xb7da268e, 0xad3fa4bf,
0767 0x3a2ce49d, 0x78500d92, 0x5f6a9bcc, 0x7e546246,
0768 0x8df6c213, 0xd890e8b8, 0x392e5ef7, 0xc382f5af,
0769 0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312,
0770 0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb,
0771 0x26cd0978, 0x596ef418, 0x9aec01b7, 0x4f83a89a,
0772 0x95e6656e, 0xffaa7ee6, 0xbc2108cf, 0x15efe6e8,
0773 0xe7bad99b, 0x6f4ace36, 0x9fead409, 0xb029d67c,
0774 0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066,
0775 0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8,
0776 0x04f14a98, 0xec41f7da, 0xcd7f0e50, 0x91172ff6,
0777 0x4d768dd6, 0xef434db0, 0xaacc544d, 0x96e4df04,
0778 0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, 0x65467f51,
0779 0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41,
0780 0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347,
0781 0xd79a8c61, 0xa1377a0c, 0xf8598e14, 0x13eb893c,
0782 0xa9ceee27, 0x61b735c9, 0x1ce1ede5, 0x477a3cb1,
0783 0xd29c59df, 0xf2553f73, 0x141879ce, 0xc773bf37,
0784 0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db,
0785 0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40,
0786 0x1d1672c3, 0xe2bc0c25, 0x3c288b49, 0x0dff4195,
0787 0xa8397101, 0x0c08deb3, 0xb4d89ce4, 0x566490c1,
0788 0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257,
0789 }, {
0790 0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27,
0791 0x3bcb6bab, 0x1ff1459d, 0xacab58fa, 0x4b9303e3,
0792 0x2055fa30, 0xadf66d76, 0x889176cc, 0xf5254c02,
0793 0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, 0xb58fa362,
0794 0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe,
0795 0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3,
0796 0x03e75f8f, 0x15959c92, 0xbfeb7a6d, 0x95da5952,
0797 0xd42d83be, 0x58d32174, 0x492969e0, 0x8e44c8c9,
0798 0x756a89c2, 0xf478798e, 0x996b3e58, 0x27dd71b9,
0799 0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace,
0800 0x63184adf, 0xe582311a, 0x97603351, 0x62457f53,
0801 0xb1e07764, 0xbb84ae6b, 0xfe1ca081, 0xf9942b08,
0802 0x70586848, 0x8f19fd45, 0x94876cde, 0x52b7f87b,
0803 0xab23d373, 0x72e2024b, 0xe3578f1f, 0x662aab55,
0804 0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837,
0805 0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216,
0806 0x8a2b1ccf, 0xa792b479, 0xf3f0f207, 0x4ea1e269,
0807 0x65cdf4da, 0x06d5be05, 0xd11f6234, 0xc48afea6,
0808 0x349d532e, 0xa2a055f3, 0x0532e18a, 0xa475ebf6,
0809 0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e,
0810 0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6,
0811 0x91b58d54, 0x71055dc4, 0x046fd406, 0x60ff1550,
0812 0x1924fb98, 0xd697e9bd, 0x89cc4340, 0x67779ed9,
0813 0xb0bd42e8, 0x07888b89, 0xe7385b19, 0x79dbeec8,
0814 0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000,
0815 0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a,
0816 0xfdfbff0e, 0x0f563885, 0x3d1ed5ae, 0x3627392d,
0817 0x0a64d90f, 0x6821a65c, 0x9bd1545b, 0x243a2e36,
0818 0x0cb1670a, 0x930fe757, 0xb4d296ee, 0x1b9e919b,
0819 0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12,
0820 0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b,
0821 0x0e0b0d09, 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e,
0822 0x578519f1, 0xaf4c0775, 0xeebbdd99, 0xa3fd607f,
0823 0xf79f2601, 0x5cbcf572, 0x44c53b66, 0x5b347efb,
0824 0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4,
0825 0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6,
0826 0x857d244a, 0xd2f83dbb, 0xae1132f9, 0xc76da129,
0827 0x1d4b2f9e, 0xdcf330b2, 0x0dec5286, 0x77d0e3c1,
0828 0x2b6c16b3, 0xa999b970, 0x11fa4894, 0x472264e9,
0829 0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033,
0830 0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4,
0831 0xa6cf81f5, 0xa528de7a, 0xda268eb7, 0x3fa4bfad,
0832 0x2ce49d3a, 0x500d9278, 0x6a9bcc5f, 0x5462467e,
0833 0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, 0x82f5afc3,
0834 0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225,
0835 0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b,
0836 0xcd097826, 0x6ef41859, 0xec01b79a, 0x83a89a4f,
0837 0xe6656e95, 0xaa7ee6ff, 0x2108cfbc, 0xefe6e815,
0838 0xbad99be7, 0x4ace366f, 0xead4099f, 0x29d67cb0,
0839 0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2,
0840 0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7,
0841 0xf14a9804, 0x41f7daec, 0x7f0e50cd, 0x172ff691,
0842 0x768dd64d, 0x434db0ef, 0xcc544daa, 0xe4df0496,
0843 0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, 0x467f5165,
0844 0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b,
0845 0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6,
0846 0x9a8c61d7, 0x377a0ca1, 0x598e14f8, 0xeb893c13,
0847 0xceee27a9, 0xb735c961, 0xe1ede51c, 0x7a3cb147,
0848 0x9c59dfd2, 0x553f73f2, 0x1879ce14, 0x73bf37c7,
0849 0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44,
0850 0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3,
0851 0x1672c31d, 0xbc0c25e2, 0x288b493c, 0xff41950d,
0852 0x397101a8, 0x08deb30c, 0xd89ce4b4, 0x6490c156,
0853 0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8,
0854 }
0855 };
0856
0857 static const u32 crypto_il_tab[4][256] ____cacheline_aligned = {
0858 {
0859 0x00000052, 0x00000009, 0x0000006a, 0x000000d5,
0860 0x00000030, 0x00000036, 0x000000a5, 0x00000038,
0861 0x000000bf, 0x00000040, 0x000000a3, 0x0000009e,
0862 0x00000081, 0x000000f3, 0x000000d7, 0x000000fb,
0863 0x0000007c, 0x000000e3, 0x00000039, 0x00000082,
0864 0x0000009b, 0x0000002f, 0x000000ff, 0x00000087,
0865 0x00000034, 0x0000008e, 0x00000043, 0x00000044,
0866 0x000000c4, 0x000000de, 0x000000e9, 0x000000cb,
0867 0x00000054, 0x0000007b, 0x00000094, 0x00000032,
0868 0x000000a6, 0x000000c2, 0x00000023, 0x0000003d,
0869 0x000000ee, 0x0000004c, 0x00000095, 0x0000000b,
0870 0x00000042, 0x000000fa, 0x000000c3, 0x0000004e,
0871 0x00000008, 0x0000002e, 0x000000a1, 0x00000066,
0872 0x00000028, 0x000000d9, 0x00000024, 0x000000b2,
0873 0x00000076, 0x0000005b, 0x000000a2, 0x00000049,
0874 0x0000006d, 0x0000008b, 0x000000d1, 0x00000025,
0875 0x00000072, 0x000000f8, 0x000000f6, 0x00000064,
0876 0x00000086, 0x00000068, 0x00000098, 0x00000016,
0877 0x000000d4, 0x000000a4, 0x0000005c, 0x000000cc,
0878 0x0000005d, 0x00000065, 0x000000b6, 0x00000092,
0879 0x0000006c, 0x00000070, 0x00000048, 0x00000050,
0880 0x000000fd, 0x000000ed, 0x000000b9, 0x000000da,
0881 0x0000005e, 0x00000015, 0x00000046, 0x00000057,
0882 0x000000a7, 0x0000008d, 0x0000009d, 0x00000084,
0883 0x00000090, 0x000000d8, 0x000000ab, 0x00000000,
0884 0x0000008c, 0x000000bc, 0x000000d3, 0x0000000a,
0885 0x000000f7, 0x000000e4, 0x00000058, 0x00000005,
0886 0x000000b8, 0x000000b3, 0x00000045, 0x00000006,
0887 0x000000d0, 0x0000002c, 0x0000001e, 0x0000008f,
0888 0x000000ca, 0x0000003f, 0x0000000f, 0x00000002,
0889 0x000000c1, 0x000000af, 0x000000bd, 0x00000003,
0890 0x00000001, 0x00000013, 0x0000008a, 0x0000006b,
0891 0x0000003a, 0x00000091, 0x00000011, 0x00000041,
0892 0x0000004f, 0x00000067, 0x000000dc, 0x000000ea,
0893 0x00000097, 0x000000f2, 0x000000cf, 0x000000ce,
0894 0x000000f0, 0x000000b4, 0x000000e6, 0x00000073,
0895 0x00000096, 0x000000ac, 0x00000074, 0x00000022,
0896 0x000000e7, 0x000000ad, 0x00000035, 0x00000085,
0897 0x000000e2, 0x000000f9, 0x00000037, 0x000000e8,
0898 0x0000001c, 0x00000075, 0x000000df, 0x0000006e,
0899 0x00000047, 0x000000f1, 0x0000001a, 0x00000071,
0900 0x0000001d, 0x00000029, 0x000000c5, 0x00000089,
0901 0x0000006f, 0x000000b7, 0x00000062, 0x0000000e,
0902 0x000000aa, 0x00000018, 0x000000be, 0x0000001b,
0903 0x000000fc, 0x00000056, 0x0000003e, 0x0000004b,
0904 0x000000c6, 0x000000d2, 0x00000079, 0x00000020,
0905 0x0000009a, 0x000000db, 0x000000c0, 0x000000fe,
0906 0x00000078, 0x000000cd, 0x0000005a, 0x000000f4,
0907 0x0000001f, 0x000000dd, 0x000000a8, 0x00000033,
0908 0x00000088, 0x00000007, 0x000000c7, 0x00000031,
0909 0x000000b1, 0x00000012, 0x00000010, 0x00000059,
0910 0x00000027, 0x00000080, 0x000000ec, 0x0000005f,
0911 0x00000060, 0x00000051, 0x0000007f, 0x000000a9,
0912 0x00000019, 0x000000b5, 0x0000004a, 0x0000000d,
0913 0x0000002d, 0x000000e5, 0x0000007a, 0x0000009f,
0914 0x00000093, 0x000000c9, 0x0000009c, 0x000000ef,
0915 0x000000a0, 0x000000e0, 0x0000003b, 0x0000004d,
0916 0x000000ae, 0x0000002a, 0x000000f5, 0x000000b0,
0917 0x000000c8, 0x000000eb, 0x000000bb, 0x0000003c,
0918 0x00000083, 0x00000053, 0x00000099, 0x00000061,
0919 0x00000017, 0x0000002b, 0x00000004, 0x0000007e,
0920 0x000000ba, 0x00000077, 0x000000d6, 0x00000026,
0921 0x000000e1, 0x00000069, 0x00000014, 0x00000063,
0922 0x00000055, 0x00000021, 0x0000000c, 0x0000007d,
0923 }, {
0924 0x00005200, 0x00000900, 0x00006a00, 0x0000d500,
0925 0x00003000, 0x00003600, 0x0000a500, 0x00003800,
0926 0x0000bf00, 0x00004000, 0x0000a300, 0x00009e00,
0927 0x00008100, 0x0000f300, 0x0000d700, 0x0000fb00,
0928 0x00007c00, 0x0000e300, 0x00003900, 0x00008200,
0929 0x00009b00, 0x00002f00, 0x0000ff00, 0x00008700,
0930 0x00003400, 0x00008e00, 0x00004300, 0x00004400,
0931 0x0000c400, 0x0000de00, 0x0000e900, 0x0000cb00,
0932 0x00005400, 0x00007b00, 0x00009400, 0x00003200,
0933 0x0000a600, 0x0000c200, 0x00002300, 0x00003d00,
0934 0x0000ee00, 0x00004c00, 0x00009500, 0x00000b00,
0935 0x00004200, 0x0000fa00, 0x0000c300, 0x00004e00,
0936 0x00000800, 0x00002e00, 0x0000a100, 0x00006600,
0937 0x00002800, 0x0000d900, 0x00002400, 0x0000b200,
0938 0x00007600, 0x00005b00, 0x0000a200, 0x00004900,
0939 0x00006d00, 0x00008b00, 0x0000d100, 0x00002500,
0940 0x00007200, 0x0000f800, 0x0000f600, 0x00006400,
0941 0x00008600, 0x00006800, 0x00009800, 0x00001600,
0942 0x0000d400, 0x0000a400, 0x00005c00, 0x0000cc00,
0943 0x00005d00, 0x00006500, 0x0000b600, 0x00009200,
0944 0x00006c00, 0x00007000, 0x00004800, 0x00005000,
0945 0x0000fd00, 0x0000ed00, 0x0000b900, 0x0000da00,
0946 0x00005e00, 0x00001500, 0x00004600, 0x00005700,
0947 0x0000a700, 0x00008d00, 0x00009d00, 0x00008400,
0948 0x00009000, 0x0000d800, 0x0000ab00, 0x00000000,
0949 0x00008c00, 0x0000bc00, 0x0000d300, 0x00000a00,
0950 0x0000f700, 0x0000e400, 0x00005800, 0x00000500,
0951 0x0000b800, 0x0000b300, 0x00004500, 0x00000600,
0952 0x0000d000, 0x00002c00, 0x00001e00, 0x00008f00,
0953 0x0000ca00, 0x00003f00, 0x00000f00, 0x00000200,
0954 0x0000c100, 0x0000af00, 0x0000bd00, 0x00000300,
0955 0x00000100, 0x00001300, 0x00008a00, 0x00006b00,
0956 0x00003a00, 0x00009100, 0x00001100, 0x00004100,
0957 0x00004f00, 0x00006700, 0x0000dc00, 0x0000ea00,
0958 0x00009700, 0x0000f200, 0x0000cf00, 0x0000ce00,
0959 0x0000f000, 0x0000b400, 0x0000e600, 0x00007300,
0960 0x00009600, 0x0000ac00, 0x00007400, 0x00002200,
0961 0x0000e700, 0x0000ad00, 0x00003500, 0x00008500,
0962 0x0000e200, 0x0000f900, 0x00003700, 0x0000e800,
0963 0x00001c00, 0x00007500, 0x0000df00, 0x00006e00,
0964 0x00004700, 0x0000f100, 0x00001a00, 0x00007100,
0965 0x00001d00, 0x00002900, 0x0000c500, 0x00008900,
0966 0x00006f00, 0x0000b700, 0x00006200, 0x00000e00,
0967 0x0000aa00, 0x00001800, 0x0000be00, 0x00001b00,
0968 0x0000fc00, 0x00005600, 0x00003e00, 0x00004b00,
0969 0x0000c600, 0x0000d200, 0x00007900, 0x00002000,
0970 0x00009a00, 0x0000db00, 0x0000c000, 0x0000fe00,
0971 0x00007800, 0x0000cd00, 0x00005a00, 0x0000f400,
0972 0x00001f00, 0x0000dd00, 0x0000a800, 0x00003300,
0973 0x00008800, 0x00000700, 0x0000c700, 0x00003100,
0974 0x0000b100, 0x00001200, 0x00001000, 0x00005900,
0975 0x00002700, 0x00008000, 0x0000ec00, 0x00005f00,
0976 0x00006000, 0x00005100, 0x00007f00, 0x0000a900,
0977 0x00001900, 0x0000b500, 0x00004a00, 0x00000d00,
0978 0x00002d00, 0x0000e500, 0x00007a00, 0x00009f00,
0979 0x00009300, 0x0000c900, 0x00009c00, 0x0000ef00,
0980 0x0000a000, 0x0000e000, 0x00003b00, 0x00004d00,
0981 0x0000ae00, 0x00002a00, 0x0000f500, 0x0000b000,
0982 0x0000c800, 0x0000eb00, 0x0000bb00, 0x00003c00,
0983 0x00008300, 0x00005300, 0x00009900, 0x00006100,
0984 0x00001700, 0x00002b00, 0x00000400, 0x00007e00,
0985 0x0000ba00, 0x00007700, 0x0000d600, 0x00002600,
0986 0x0000e100, 0x00006900, 0x00001400, 0x00006300,
0987 0x00005500, 0x00002100, 0x00000c00, 0x00007d00,
0988 }, {
0989 0x00520000, 0x00090000, 0x006a0000, 0x00d50000,
0990 0x00300000, 0x00360000, 0x00a50000, 0x00380000,
0991 0x00bf0000, 0x00400000, 0x00a30000, 0x009e0000,
0992 0x00810000, 0x00f30000, 0x00d70000, 0x00fb0000,
0993 0x007c0000, 0x00e30000, 0x00390000, 0x00820000,
0994 0x009b0000, 0x002f0000, 0x00ff0000, 0x00870000,
0995 0x00340000, 0x008e0000, 0x00430000, 0x00440000,
0996 0x00c40000, 0x00de0000, 0x00e90000, 0x00cb0000,
0997 0x00540000, 0x007b0000, 0x00940000, 0x00320000,
0998 0x00a60000, 0x00c20000, 0x00230000, 0x003d0000,
0999 0x00ee0000, 0x004c0000, 0x00950000, 0x000b0000,
1000 0x00420000, 0x00fa0000, 0x00c30000, 0x004e0000,
1001 0x00080000, 0x002e0000, 0x00a10000, 0x00660000,
1002 0x00280000, 0x00d90000, 0x00240000, 0x00b20000,
1003 0x00760000, 0x005b0000, 0x00a20000, 0x00490000,
1004 0x006d0000, 0x008b0000, 0x00d10000, 0x00250000,
1005 0x00720000, 0x00f80000, 0x00f60000, 0x00640000,
1006 0x00860000, 0x00680000, 0x00980000, 0x00160000,
1007 0x00d40000, 0x00a40000, 0x005c0000, 0x00cc0000,
1008 0x005d0000, 0x00650000, 0x00b60000, 0x00920000,
1009 0x006c0000, 0x00700000, 0x00480000, 0x00500000,
1010 0x00fd0000, 0x00ed0000, 0x00b90000, 0x00da0000,
1011 0x005e0000, 0x00150000, 0x00460000, 0x00570000,
1012 0x00a70000, 0x008d0000, 0x009d0000, 0x00840000,
1013 0x00900000, 0x00d80000, 0x00ab0000, 0x00000000,
1014 0x008c0000, 0x00bc0000, 0x00d30000, 0x000a0000,
1015 0x00f70000, 0x00e40000, 0x00580000, 0x00050000,
1016 0x00b80000, 0x00b30000, 0x00450000, 0x00060000,
1017 0x00d00000, 0x002c0000, 0x001e0000, 0x008f0000,
1018 0x00ca0000, 0x003f0000, 0x000f0000, 0x00020000,
1019 0x00c10000, 0x00af0000, 0x00bd0000, 0x00030000,
1020 0x00010000, 0x00130000, 0x008a0000, 0x006b0000,
1021 0x003a0000, 0x00910000, 0x00110000, 0x00410000,
1022 0x004f0000, 0x00670000, 0x00dc0000, 0x00ea0000,
1023 0x00970000, 0x00f20000, 0x00cf0000, 0x00ce0000,
1024 0x00f00000, 0x00b40000, 0x00e60000, 0x00730000,
1025 0x00960000, 0x00ac0000, 0x00740000, 0x00220000,
1026 0x00e70000, 0x00ad0000, 0x00350000, 0x00850000,
1027 0x00e20000, 0x00f90000, 0x00370000, 0x00e80000,
1028 0x001c0000, 0x00750000, 0x00df0000, 0x006e0000,
1029 0x00470000, 0x00f10000, 0x001a0000, 0x00710000,
1030 0x001d0000, 0x00290000, 0x00c50000, 0x00890000,
1031 0x006f0000, 0x00b70000, 0x00620000, 0x000e0000,
1032 0x00aa0000, 0x00180000, 0x00be0000, 0x001b0000,
1033 0x00fc0000, 0x00560000, 0x003e0000, 0x004b0000,
1034 0x00c60000, 0x00d20000, 0x00790000, 0x00200000,
1035 0x009a0000, 0x00db0000, 0x00c00000, 0x00fe0000,
1036 0x00780000, 0x00cd0000, 0x005a0000, 0x00f40000,
1037 0x001f0000, 0x00dd0000, 0x00a80000, 0x00330000,
1038 0x00880000, 0x00070000, 0x00c70000, 0x00310000,
1039 0x00b10000, 0x00120000, 0x00100000, 0x00590000,
1040 0x00270000, 0x00800000, 0x00ec0000, 0x005f0000,
1041 0x00600000, 0x00510000, 0x007f0000, 0x00a90000,
1042 0x00190000, 0x00b50000, 0x004a0000, 0x000d0000,
1043 0x002d0000, 0x00e50000, 0x007a0000, 0x009f0000,
1044 0x00930000, 0x00c90000, 0x009c0000, 0x00ef0000,
1045 0x00a00000, 0x00e00000, 0x003b0000, 0x004d0000,
1046 0x00ae0000, 0x002a0000, 0x00f50000, 0x00b00000,
1047 0x00c80000, 0x00eb0000, 0x00bb0000, 0x003c0000,
1048 0x00830000, 0x00530000, 0x00990000, 0x00610000,
1049 0x00170000, 0x002b0000, 0x00040000, 0x007e0000,
1050 0x00ba0000, 0x00770000, 0x00d60000, 0x00260000,
1051 0x00e10000, 0x00690000, 0x00140000, 0x00630000,
1052 0x00550000, 0x00210000, 0x000c0000, 0x007d0000,
1053 }, {
1054 0x52000000, 0x09000000, 0x6a000000, 0xd5000000,
1055 0x30000000, 0x36000000, 0xa5000000, 0x38000000,
1056 0xbf000000, 0x40000000, 0xa3000000, 0x9e000000,
1057 0x81000000, 0xf3000000, 0xd7000000, 0xfb000000,
1058 0x7c000000, 0xe3000000, 0x39000000, 0x82000000,
1059 0x9b000000, 0x2f000000, 0xff000000, 0x87000000,
1060 0x34000000, 0x8e000000, 0x43000000, 0x44000000,
1061 0xc4000000, 0xde000000, 0xe9000000, 0xcb000000,
1062 0x54000000, 0x7b000000, 0x94000000, 0x32000000,
1063 0xa6000000, 0xc2000000, 0x23000000, 0x3d000000,
1064 0xee000000, 0x4c000000, 0x95000000, 0x0b000000,
1065 0x42000000, 0xfa000000, 0xc3000000, 0x4e000000,
1066 0x08000000, 0x2e000000, 0xa1000000, 0x66000000,
1067 0x28000000, 0xd9000000, 0x24000000, 0xb2000000,
1068 0x76000000, 0x5b000000, 0xa2000000, 0x49000000,
1069 0x6d000000, 0x8b000000, 0xd1000000, 0x25000000,
1070 0x72000000, 0xf8000000, 0xf6000000, 0x64000000,
1071 0x86000000, 0x68000000, 0x98000000, 0x16000000,
1072 0xd4000000, 0xa4000000, 0x5c000000, 0xcc000000,
1073 0x5d000000, 0x65000000, 0xb6000000, 0x92000000,
1074 0x6c000000, 0x70000000, 0x48000000, 0x50000000,
1075 0xfd000000, 0xed000000, 0xb9000000, 0xda000000,
1076 0x5e000000, 0x15000000, 0x46000000, 0x57000000,
1077 0xa7000000, 0x8d000000, 0x9d000000, 0x84000000,
1078 0x90000000, 0xd8000000, 0xab000000, 0x00000000,
1079 0x8c000000, 0xbc000000, 0xd3000000, 0x0a000000,
1080 0xf7000000, 0xe4000000, 0x58000000, 0x05000000,
1081 0xb8000000, 0xb3000000, 0x45000000, 0x06000000,
1082 0xd0000000, 0x2c000000, 0x1e000000, 0x8f000000,
1083 0xca000000, 0x3f000000, 0x0f000000, 0x02000000,
1084 0xc1000000, 0xaf000000, 0xbd000000, 0x03000000,
1085 0x01000000, 0x13000000, 0x8a000000, 0x6b000000,
1086 0x3a000000, 0x91000000, 0x11000000, 0x41000000,
1087 0x4f000000, 0x67000000, 0xdc000000, 0xea000000,
1088 0x97000000, 0xf2000000, 0xcf000000, 0xce000000,
1089 0xf0000000, 0xb4000000, 0xe6000000, 0x73000000,
1090 0x96000000, 0xac000000, 0x74000000, 0x22000000,
1091 0xe7000000, 0xad000000, 0x35000000, 0x85000000,
1092 0xe2000000, 0xf9000000, 0x37000000, 0xe8000000,
1093 0x1c000000, 0x75000000, 0xdf000000, 0x6e000000,
1094 0x47000000, 0xf1000000, 0x1a000000, 0x71000000,
1095 0x1d000000, 0x29000000, 0xc5000000, 0x89000000,
1096 0x6f000000, 0xb7000000, 0x62000000, 0x0e000000,
1097 0xaa000000, 0x18000000, 0xbe000000, 0x1b000000,
1098 0xfc000000, 0x56000000, 0x3e000000, 0x4b000000,
1099 0xc6000000, 0xd2000000, 0x79000000, 0x20000000,
1100 0x9a000000, 0xdb000000, 0xc0000000, 0xfe000000,
1101 0x78000000, 0xcd000000, 0x5a000000, 0xf4000000,
1102 0x1f000000, 0xdd000000, 0xa8000000, 0x33000000,
1103 0x88000000, 0x07000000, 0xc7000000, 0x31000000,
1104 0xb1000000, 0x12000000, 0x10000000, 0x59000000,
1105 0x27000000, 0x80000000, 0xec000000, 0x5f000000,
1106 0x60000000, 0x51000000, 0x7f000000, 0xa9000000,
1107 0x19000000, 0xb5000000, 0x4a000000, 0x0d000000,
1108 0x2d000000, 0xe5000000, 0x7a000000, 0x9f000000,
1109 0x93000000, 0xc9000000, 0x9c000000, 0xef000000,
1110 0xa0000000, 0xe0000000, 0x3b000000, 0x4d000000,
1111 0xae000000, 0x2a000000, 0xf5000000, 0xb0000000,
1112 0xc8000000, 0xeb000000, 0xbb000000, 0x3c000000,
1113 0x83000000, 0x53000000, 0x99000000, 0x61000000,
1114 0x17000000, 0x2b000000, 0x04000000, 0x7e000000,
1115 0xba000000, 0x77000000, 0xd6000000, 0x26000000,
1116 0xe1000000, 0x69000000, 0x14000000, 0x63000000,
1117 0x55000000, 0x21000000, 0x0c000000, 0x7d000000,
1118 }
1119 };
1120
1121 EXPORT_SYMBOL_GPL(crypto_ft_tab);
1122 EXPORT_SYMBOL_GPL(crypto_it_tab);
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136 int crypto_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
1137 unsigned int key_len)
1138 {
1139 struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
1140
1141 return aes_expandkey(ctx, in_key, key_len);
1142 }
1143 EXPORT_SYMBOL_GPL(crypto_aes_set_key);
1144
1145
1146
1147 #define f_rn(bo, bi, n, k) do { \
1148 bo[n] = crypto_ft_tab[0][byte(bi[n], 0)] ^ \
1149 crypto_ft_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
1150 crypto_ft_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
1151 crypto_ft_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
1152 } while (0)
1153
1154 #define f_nround(bo, bi, k) do {\
1155 f_rn(bo, bi, 0, k); \
1156 f_rn(bo, bi, 1, k); \
1157 f_rn(bo, bi, 2, k); \
1158 f_rn(bo, bi, 3, k); \
1159 k += 4; \
1160 } while (0)
1161
1162 #define f_rl(bo, bi, n, k) do { \
1163 bo[n] = crypto_fl_tab[0][byte(bi[n], 0)] ^ \
1164 crypto_fl_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
1165 crypto_fl_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
1166 crypto_fl_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
1167 } while (0)
1168
1169 #define f_lround(bo, bi, k) do {\
1170 f_rl(bo, bi, 0, k); \
1171 f_rl(bo, bi, 1, k); \
1172 f_rl(bo, bi, 2, k); \
1173 f_rl(bo, bi, 3, k); \
1174 } while (0)
1175
1176 static void crypto_aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1177 {
1178 const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
1179 u32 b0[4], b1[4];
1180 const u32 *kp = ctx->key_enc + 4;
1181 const int key_len = ctx->key_length;
1182
1183 b0[0] = ctx->key_enc[0] ^ get_unaligned_le32(in);
1184 b0[1] = ctx->key_enc[1] ^ get_unaligned_le32(in + 4);
1185 b0[2] = ctx->key_enc[2] ^ get_unaligned_le32(in + 8);
1186 b0[3] = ctx->key_enc[3] ^ get_unaligned_le32(in + 12);
1187
1188 if (key_len > 24) {
1189 f_nround(b1, b0, kp);
1190 f_nround(b0, b1, kp);
1191 }
1192
1193 if (key_len > 16) {
1194 f_nround(b1, b0, kp);
1195 f_nround(b0, b1, kp);
1196 }
1197
1198 f_nround(b1, b0, kp);
1199 f_nround(b0, b1, kp);
1200 f_nround(b1, b0, kp);
1201 f_nround(b0, b1, kp);
1202 f_nround(b1, b0, kp);
1203 f_nround(b0, b1, kp);
1204 f_nround(b1, b0, kp);
1205 f_nround(b0, b1, kp);
1206 f_nround(b1, b0, kp);
1207 f_lround(b0, b1, kp);
1208
1209 put_unaligned_le32(b0[0], out);
1210 put_unaligned_le32(b0[1], out + 4);
1211 put_unaligned_le32(b0[2], out + 8);
1212 put_unaligned_le32(b0[3], out + 12);
1213 }
1214
1215
1216
1217 #define i_rn(bo, bi, n, k) do { \
1218 bo[n] = crypto_it_tab[0][byte(bi[n], 0)] ^ \
1219 crypto_it_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \
1220 crypto_it_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
1221 crypto_it_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \
1222 } while (0)
1223
1224 #define i_nround(bo, bi, k) do {\
1225 i_rn(bo, bi, 0, k); \
1226 i_rn(bo, bi, 1, k); \
1227 i_rn(bo, bi, 2, k); \
1228 i_rn(bo, bi, 3, k); \
1229 k += 4; \
1230 } while (0)
1231
1232 #define i_rl(bo, bi, n, k) do { \
1233 bo[n] = crypto_il_tab[0][byte(bi[n], 0)] ^ \
1234 crypto_il_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \
1235 crypto_il_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
1236 crypto_il_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \
1237 } while (0)
1238
1239 #define i_lround(bo, bi, k) do {\
1240 i_rl(bo, bi, 0, k); \
1241 i_rl(bo, bi, 1, k); \
1242 i_rl(bo, bi, 2, k); \
1243 i_rl(bo, bi, 3, k); \
1244 } while (0)
1245
1246 static void crypto_aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1247 {
1248 const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
1249 u32 b0[4], b1[4];
1250 const int key_len = ctx->key_length;
1251 const u32 *kp = ctx->key_dec + 4;
1252
1253 b0[0] = ctx->key_dec[0] ^ get_unaligned_le32(in);
1254 b0[1] = ctx->key_dec[1] ^ get_unaligned_le32(in + 4);
1255 b0[2] = ctx->key_dec[2] ^ get_unaligned_le32(in + 8);
1256 b0[3] = ctx->key_dec[3] ^ get_unaligned_le32(in + 12);
1257
1258 if (key_len > 24) {
1259 i_nround(b1, b0, kp);
1260 i_nround(b0, b1, kp);
1261 }
1262
1263 if (key_len > 16) {
1264 i_nround(b1, b0, kp);
1265 i_nround(b0, b1, kp);
1266 }
1267
1268 i_nround(b1, b0, kp);
1269 i_nround(b0, b1, kp);
1270 i_nround(b1, b0, kp);
1271 i_nround(b0, b1, kp);
1272 i_nround(b1, b0, kp);
1273 i_nround(b0, b1, kp);
1274 i_nround(b1, b0, kp);
1275 i_nround(b0, b1, kp);
1276 i_nround(b1, b0, kp);
1277 i_lround(b0, b1, kp);
1278
1279 put_unaligned_le32(b0[0], out);
1280 put_unaligned_le32(b0[1], out + 4);
1281 put_unaligned_le32(b0[2], out + 8);
1282 put_unaligned_le32(b0[3], out + 12);
1283 }
1284
1285 static struct crypto_alg aes_alg = {
1286 .cra_name = "aes",
1287 .cra_driver_name = "aes-generic",
1288 .cra_priority = 100,
1289 .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
1290 .cra_blocksize = AES_BLOCK_SIZE,
1291 .cra_ctxsize = sizeof(struct crypto_aes_ctx),
1292 .cra_module = THIS_MODULE,
1293 .cra_u = {
1294 .cipher = {
1295 .cia_min_keysize = AES_MIN_KEY_SIZE,
1296 .cia_max_keysize = AES_MAX_KEY_SIZE,
1297 .cia_setkey = crypto_aes_set_key,
1298 .cia_encrypt = crypto_aes_encrypt,
1299 .cia_decrypt = crypto_aes_decrypt
1300 }
1301 }
1302 };
1303
1304 static int __init aes_init(void)
1305 {
1306 return crypto_register_alg(&aes_alg);
1307 }
1308
1309 static void __exit aes_fini(void)
1310 {
1311 crypto_unregister_alg(&aes_alg);
1312 }
1313
1314 subsys_initcall(aes_init);
1315 module_exit(aes_fini);
1316
1317 MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
1318 MODULE_LICENSE("Dual BSD/GPL");
1319 MODULE_ALIAS_CRYPTO("aes");
1320 MODULE_ALIAS_CRYPTO("aes-generic");