1/*
2 * Cryptographic API.
3 *
4 * AES Cipher Algorithm.
5 *
6 * Based on Brian Gladman's code.
7 *
8 * Linux developers:
9 *  Alexander Kjeldaas <astor@fast.no>
10 *  Herbert Valerio Riedel <hvr@hvrlab.org>
11 *  Kyle McMartin <kyle@debian.org>
12 *  Adam J. Richter <adam@yggdrasil.com> (conversion to 2.5 API).
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
18 *
19 * ---------------------------------------------------------------------------
20 * Copyright (c) 2002, Dr Brian Gladman <brg@gladman.me.uk>, Worcester, UK.
21 * All rights reserved.
22 *
23 * LICENSE TERMS
24 *
25 * The free distribution and use of this software in both source and binary
26 * form is allowed (with or without changes) provided that:
27 *
28 *   1. distributions of this source code include the above copyright
29 *      notice, this list of conditions and the following disclaimer;
30 *
31 *   2. distributions in binary form include the above copyright
32 *      notice, this list of conditions and the following disclaimer
33 *      in the documentation and/or other associated materials;
34 *
35 *   3. the copyright holder's name is not used to endorse products
36 *      built using this software without specific written permission.
37 *
38 * ALTERNATIVELY, provided that this notice is retained in full, this product
39 * may be distributed under the terms of the GNU General Public License (GPL),
40 * in which case the provisions of the GPL apply INSTEAD OF those given above.
41 *
42 * DISCLAIMER
43 *
44 * This software is provided 'as is' with no explicit or implied warranties
45 * in respect of its properties, including, but not limited to, correctness
46 * and/or fitness for purpose.
47 * ---------------------------------------------------------------------------
48 */
49
50#include <crypto/aes.h>
51#include <crypto/algapi.h>
52#include <linux/module.h>
53#include <linux/init.h>
54#include <linux/types.h>
55#include <linux/errno.h>
56#include <asm/byteorder.h>
57#include <asm/unaligned.h>
58
59static inline u8 byte(const u32 x, const unsigned n)
60{
61	return x >> (n << 3);
62}
63
64/* cacheline-aligned to facilitate prefetching into cache */
65__visible const u32 crypto_ft_tab[4][256] ____cacheline_aligned = {
66	{
67		0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
68		0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
69		0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
70		0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
71		0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
72		0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
73		0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
74		0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
75		0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
76		0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
77		0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
78		0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
79		0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
80		0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
81		0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
82		0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
83		0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
84		0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
85		0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
86		0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
87		0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
88		0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
89		0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
90		0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
91		0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
92		0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
93		0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
94		0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
95		0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
96		0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
97		0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
98		0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
99		0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
100		0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
101		0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
102		0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
103		0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
104		0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
105		0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
106		0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
107		0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
108		0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
109		0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
110		0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
111		0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
112		0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
113		0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
114		0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
115		0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
116		0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
117		0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
118		0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
119		0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
120		0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
121		0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
122		0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
123		0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
124		0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
125		0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
126		0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
127		0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
128		0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
129		0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
130		0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c,
131	}, {
132		0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
133		0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
134		0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
135		0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
136		0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
137		0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
138		0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
139		0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
140		0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
141		0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
142		0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
143		0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
144		0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
145		0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
146		0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
147		0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
148		0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
149		0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
150		0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
151		0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
152		0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
153		0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
154		0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
155		0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
156		0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
157		0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
158		0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
159		0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
160		0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
161		0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
162		0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
163		0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
164		0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
165		0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
166		0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
167		0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
168		0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
169		0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
170		0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
171		0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
172		0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
173		0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
174		0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
175		0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
176		0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
177		0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
178		0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
179		0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
180		0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
181		0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
182		0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
183		0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
184		0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
185		0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
186		0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
187		0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
188		0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
189		0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
190		0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
191		0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
192		0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
193		0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
194		0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
195		0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a,
196	}, {
197		0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
198		0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
199		0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
200		0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
201		0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
202		0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
203		0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
204		0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
205		0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
206		0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
207		0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
208		0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
209		0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
210		0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
211		0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
212		0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
213		0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
214		0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
215		0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
216		0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
217		0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
218		0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
219		0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
220		0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
221		0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
222		0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
223		0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
224		0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
225		0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
226		0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
227		0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
228		0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
229		0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
230		0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
231		0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
232		0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
233		0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
234		0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
235		0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
236		0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
237		0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
238		0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
239		0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
240		0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
241		0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
242		0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
243		0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
244		0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
245		0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
246		0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
247		0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
248		0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
249		0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
250		0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
251		0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
252		0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
253		0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
254		0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
255		0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
256		0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
257		0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
258		0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
259		0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
260		0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16,
261	}, {
262		0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
263		0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
264		0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
265		0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
266		0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
267		0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
268		0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
269		0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
270		0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
271		0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
272		0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
273		0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
274		0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
275		0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
276		0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
277		0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
278		0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
279		0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
280		0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
281		0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
282		0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
283		0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
284		0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
285		0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
286		0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
287		0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
288		0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
289		0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
290		0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
291		0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
292		0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
293		0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
294		0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
295		0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
296		0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
297		0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
298		0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
299		0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
300		0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
301		0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
302		0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
303		0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
304		0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
305		0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
306		0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
307		0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
308		0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
309		0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
310		0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
311		0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
312		0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
313		0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
314		0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
315		0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
316		0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
317		0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
318		0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
319		0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
320		0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
321		0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
322		0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
323		0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
324		0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
325		0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616,
326	}
327};
328
329static const u32 crypto_fl_tab[4][256] ____cacheline_aligned = {
330	{
331		0x00000063, 0x0000007c, 0x00000077, 0x0000007b,
332		0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5,
333		0x00000030, 0x00000001, 0x00000067, 0x0000002b,
334		0x000000fe, 0x000000d7, 0x000000ab, 0x00000076,
335		0x000000ca, 0x00000082, 0x000000c9, 0x0000007d,
336		0x000000fa, 0x00000059, 0x00000047, 0x000000f0,
337		0x000000ad, 0x000000d4, 0x000000a2, 0x000000af,
338		0x0000009c, 0x000000a4, 0x00000072, 0x000000c0,
339		0x000000b7, 0x000000fd, 0x00000093, 0x00000026,
340		0x00000036, 0x0000003f, 0x000000f7, 0x000000cc,
341		0x00000034, 0x000000a5, 0x000000e5, 0x000000f1,
342		0x00000071, 0x000000d8, 0x00000031, 0x00000015,
343		0x00000004, 0x000000c7, 0x00000023, 0x000000c3,
344		0x00000018, 0x00000096, 0x00000005, 0x0000009a,
345		0x00000007, 0x00000012, 0x00000080, 0x000000e2,
346		0x000000eb, 0x00000027, 0x000000b2, 0x00000075,
347		0x00000009, 0x00000083, 0x0000002c, 0x0000001a,
348		0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0,
349		0x00000052, 0x0000003b, 0x000000d6, 0x000000b3,
350		0x00000029, 0x000000e3, 0x0000002f, 0x00000084,
351		0x00000053, 0x000000d1, 0x00000000, 0x000000ed,
352		0x00000020, 0x000000fc, 0x000000b1, 0x0000005b,
353		0x0000006a, 0x000000cb, 0x000000be, 0x00000039,
354		0x0000004a, 0x0000004c, 0x00000058, 0x000000cf,
355		0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb,
356		0x00000043, 0x0000004d, 0x00000033, 0x00000085,
357		0x00000045, 0x000000f9, 0x00000002, 0x0000007f,
358		0x00000050, 0x0000003c, 0x0000009f, 0x000000a8,
359		0x00000051, 0x000000a3, 0x00000040, 0x0000008f,
360		0x00000092, 0x0000009d, 0x00000038, 0x000000f5,
361		0x000000bc, 0x000000b6, 0x000000da, 0x00000021,
362		0x00000010, 0x000000ff, 0x000000f3, 0x000000d2,
363		0x000000cd, 0x0000000c, 0x00000013, 0x000000ec,
364		0x0000005f, 0x00000097, 0x00000044, 0x00000017,
365		0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d,
366		0x00000064, 0x0000005d, 0x00000019, 0x00000073,
367		0x00000060, 0x00000081, 0x0000004f, 0x000000dc,
368		0x00000022, 0x0000002a, 0x00000090, 0x00000088,
369		0x00000046, 0x000000ee, 0x000000b8, 0x00000014,
370		0x000000de, 0x0000005e, 0x0000000b, 0x000000db,
371		0x000000e0, 0x00000032, 0x0000003a, 0x0000000a,
372		0x00000049, 0x00000006, 0x00000024, 0x0000005c,
373		0x000000c2, 0x000000d3, 0x000000ac, 0x00000062,
374		0x00000091, 0x00000095, 0x000000e4, 0x00000079,
375		0x000000e7, 0x000000c8, 0x00000037, 0x0000006d,
376		0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9,
377		0x0000006c, 0x00000056, 0x000000f4, 0x000000ea,
378		0x00000065, 0x0000007a, 0x000000ae, 0x00000008,
379		0x000000ba, 0x00000078, 0x00000025, 0x0000002e,
380		0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6,
381		0x000000e8, 0x000000dd, 0x00000074, 0x0000001f,
382		0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a,
383		0x00000070, 0x0000003e, 0x000000b5, 0x00000066,
384		0x00000048, 0x00000003, 0x000000f6, 0x0000000e,
385		0x00000061, 0x00000035, 0x00000057, 0x000000b9,
386		0x00000086, 0x000000c1, 0x0000001d, 0x0000009e,
387		0x000000e1, 0x000000f8, 0x00000098, 0x00000011,
388		0x00000069, 0x000000d9, 0x0000008e, 0x00000094,
389		0x0000009b, 0x0000001e, 0x00000087, 0x000000e9,
390		0x000000ce, 0x00000055, 0x00000028, 0x000000df,
391		0x0000008c, 0x000000a1, 0x00000089, 0x0000000d,
392		0x000000bf, 0x000000e6, 0x00000042, 0x00000068,
393		0x00000041, 0x00000099, 0x0000002d, 0x0000000f,
394		0x000000b0, 0x00000054, 0x000000bb, 0x00000016,
395	}, {
396		0x00006300, 0x00007c00, 0x00007700, 0x00007b00,
397		0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500,
398		0x00003000, 0x00000100, 0x00006700, 0x00002b00,
399		0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600,
400		0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00,
401		0x0000fa00, 0x00005900, 0x00004700, 0x0000f000,
402		0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00,
403		0x00009c00, 0x0000a400, 0x00007200, 0x0000c000,
404		0x0000b700, 0x0000fd00, 0x00009300, 0x00002600,
405		0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00,
406		0x00003400, 0x0000a500, 0x0000e500, 0x0000f100,
407		0x00007100, 0x0000d800, 0x00003100, 0x00001500,
408		0x00000400, 0x0000c700, 0x00002300, 0x0000c300,
409		0x00001800, 0x00009600, 0x00000500, 0x00009a00,
410		0x00000700, 0x00001200, 0x00008000, 0x0000e200,
411		0x0000eb00, 0x00002700, 0x0000b200, 0x00007500,
412		0x00000900, 0x00008300, 0x00002c00, 0x00001a00,
413		0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000,
414		0x00005200, 0x00003b00, 0x0000d600, 0x0000b300,
415		0x00002900, 0x0000e300, 0x00002f00, 0x00008400,
416		0x00005300, 0x0000d100, 0x00000000, 0x0000ed00,
417		0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00,
418		0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900,
419		0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00,
420		0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00,
421		0x00004300, 0x00004d00, 0x00003300, 0x00008500,
422		0x00004500, 0x0000f900, 0x00000200, 0x00007f00,
423		0x00005000, 0x00003c00, 0x00009f00, 0x0000a800,
424		0x00005100, 0x0000a300, 0x00004000, 0x00008f00,
425		0x00009200, 0x00009d00, 0x00003800, 0x0000f500,
426		0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100,
427		0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200,
428		0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00,
429		0x00005f00, 0x00009700, 0x00004400, 0x00001700,
430		0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00,
431		0x00006400, 0x00005d00, 0x00001900, 0x00007300,
432		0x00006000, 0x00008100, 0x00004f00, 0x0000dc00,
433		0x00002200, 0x00002a00, 0x00009000, 0x00008800,
434		0x00004600, 0x0000ee00, 0x0000b800, 0x00001400,
435		0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00,
436		0x0000e000, 0x00003200, 0x00003a00, 0x00000a00,
437		0x00004900, 0x00000600, 0x00002400, 0x00005c00,
438		0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200,
439		0x00009100, 0x00009500, 0x0000e400, 0x00007900,
440		0x0000e700, 0x0000c800, 0x00003700, 0x00006d00,
441		0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900,
442		0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00,
443		0x00006500, 0x00007a00, 0x0000ae00, 0x00000800,
444		0x0000ba00, 0x00007800, 0x00002500, 0x00002e00,
445		0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600,
446		0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00,
447		0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00,
448		0x00007000, 0x00003e00, 0x0000b500, 0x00006600,
449		0x00004800, 0x00000300, 0x0000f600, 0x00000e00,
450		0x00006100, 0x00003500, 0x00005700, 0x0000b900,
451		0x00008600, 0x0000c100, 0x00001d00, 0x00009e00,
452		0x0000e100, 0x0000f800, 0x00009800, 0x00001100,
453		0x00006900, 0x0000d900, 0x00008e00, 0x00009400,
454		0x00009b00, 0x00001e00, 0x00008700, 0x0000e900,
455		0x0000ce00, 0x00005500, 0x00002800, 0x0000df00,
456		0x00008c00, 0x0000a100, 0x00008900, 0x00000d00,
457		0x0000bf00, 0x0000e600, 0x00004200, 0x00006800,
458		0x00004100, 0x00009900, 0x00002d00, 0x00000f00,
459		0x0000b000, 0x00005400, 0x0000bb00, 0x00001600,
460	}, {
461		0x00630000, 0x007c0000, 0x00770000, 0x007b0000,
462		0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000,
463		0x00300000, 0x00010000, 0x00670000, 0x002b0000,
464		0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000,
465		0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000,
466		0x00fa0000, 0x00590000, 0x00470000, 0x00f00000,
467		0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000,
468		0x009c0000, 0x00a40000, 0x00720000, 0x00c00000,
469		0x00b70000, 0x00fd0000, 0x00930000, 0x00260000,
470		0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000,
471		0x00340000, 0x00a50000, 0x00e50000, 0x00f10000,
472		0x00710000, 0x00d80000, 0x00310000, 0x00150000,
473		0x00040000, 0x00c70000, 0x00230000, 0x00c30000,
474		0x00180000, 0x00960000, 0x00050000, 0x009a0000,
475		0x00070000, 0x00120000, 0x00800000, 0x00e20000,
476		0x00eb0000, 0x00270000, 0x00b20000, 0x00750000,
477		0x00090000, 0x00830000, 0x002c0000, 0x001a0000,
478		0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000,
479		0x00520000, 0x003b0000, 0x00d60000, 0x00b30000,
480		0x00290000, 0x00e30000, 0x002f0000, 0x00840000,
481		0x00530000, 0x00d10000, 0x00000000, 0x00ed0000,
482		0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000,
483		0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000,
484		0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000,
485		0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000,
486		0x00430000, 0x004d0000, 0x00330000, 0x00850000,
487		0x00450000, 0x00f90000, 0x00020000, 0x007f0000,
488		0x00500000, 0x003c0000, 0x009f0000, 0x00a80000,
489		0x00510000, 0x00a30000, 0x00400000, 0x008f0000,
490		0x00920000, 0x009d0000, 0x00380000, 0x00f50000,
491		0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000,
492		0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000,
493		0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000,
494		0x005f0000, 0x00970000, 0x00440000, 0x00170000,
495		0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000,
496		0x00640000, 0x005d0000, 0x00190000, 0x00730000,
497		0x00600000, 0x00810000, 0x004f0000, 0x00dc0000,
498		0x00220000, 0x002a0000, 0x00900000, 0x00880000,
499		0x00460000, 0x00ee0000, 0x00b80000, 0x00140000,
500		0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000,
501		0x00e00000, 0x00320000, 0x003a0000, 0x000a0000,
502		0x00490000, 0x00060000, 0x00240000, 0x005c0000,
503		0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000,
504		0x00910000, 0x00950000, 0x00e40000, 0x00790000,
505		0x00e70000, 0x00c80000, 0x00370000, 0x006d0000,
506		0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000,
507		0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000,
508		0x00650000, 0x007a0000, 0x00ae0000, 0x00080000,
509		0x00ba0000, 0x00780000, 0x00250000, 0x002e0000,
510		0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000,
511		0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000,
512		0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000,
513		0x00700000, 0x003e0000, 0x00b50000, 0x00660000,
514		0x00480000, 0x00030000, 0x00f60000, 0x000e0000,
515		0x00610000, 0x00350000, 0x00570000, 0x00b90000,
516		0x00860000, 0x00c10000, 0x001d0000, 0x009e0000,
517		0x00e10000, 0x00f80000, 0x00980000, 0x00110000,
518		0x00690000, 0x00d90000, 0x008e0000, 0x00940000,
519		0x009b0000, 0x001e0000, 0x00870000, 0x00e90000,
520		0x00ce0000, 0x00550000, 0x00280000, 0x00df0000,
521		0x008c0000, 0x00a10000, 0x00890000, 0x000d0000,
522		0x00bf0000, 0x00e60000, 0x00420000, 0x00680000,
523		0x00410000, 0x00990000, 0x002d0000, 0x000f0000,
524		0x00b00000, 0x00540000, 0x00bb0000, 0x00160000,
525	}, {
526		0x63000000, 0x7c000000, 0x77000000, 0x7b000000,
527		0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000,
528		0x30000000, 0x01000000, 0x67000000, 0x2b000000,
529		0xfe000000, 0xd7000000, 0xab000000, 0x76000000,
530		0xca000000, 0x82000000, 0xc9000000, 0x7d000000,
531		0xfa000000, 0x59000000, 0x47000000, 0xf0000000,
532		0xad000000, 0xd4000000, 0xa2000000, 0xaf000000,
533		0x9c000000, 0xa4000000, 0x72000000, 0xc0000000,
534		0xb7000000, 0xfd000000, 0x93000000, 0x26000000,
535		0x36000000, 0x3f000000, 0xf7000000, 0xcc000000,
536		0x34000000, 0xa5000000, 0xe5000000, 0xf1000000,
537		0x71000000, 0xd8000000, 0x31000000, 0x15000000,
538		0x04000000, 0xc7000000, 0x23000000, 0xc3000000,
539		0x18000000, 0x96000000, 0x05000000, 0x9a000000,
540		0x07000000, 0x12000000, 0x80000000, 0xe2000000,
541		0xeb000000, 0x27000000, 0xb2000000, 0x75000000,
542		0x09000000, 0x83000000, 0x2c000000, 0x1a000000,
543		0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000,
544		0x52000000, 0x3b000000, 0xd6000000, 0xb3000000,
545		0x29000000, 0xe3000000, 0x2f000000, 0x84000000,
546		0x53000000, 0xd1000000, 0x00000000, 0xed000000,
547		0x20000000, 0xfc000000, 0xb1000000, 0x5b000000,
548		0x6a000000, 0xcb000000, 0xbe000000, 0x39000000,
549		0x4a000000, 0x4c000000, 0x58000000, 0xcf000000,
550		0xd0000000, 0xef000000, 0xaa000000, 0xfb000000,
551		0x43000000, 0x4d000000, 0x33000000, 0x85000000,
552		0x45000000, 0xf9000000, 0x02000000, 0x7f000000,
553		0x50000000, 0x3c000000, 0x9f000000, 0xa8000000,
554		0x51000000, 0xa3000000, 0x40000000, 0x8f000000,
555		0x92000000, 0x9d000000, 0x38000000, 0xf5000000,
556		0xbc000000, 0xb6000000, 0xda000000, 0x21000000,
557		0x10000000, 0xff000000, 0xf3000000, 0xd2000000,
558		0xcd000000, 0x0c000000, 0x13000000, 0xec000000,
559		0x5f000000, 0x97000000, 0x44000000, 0x17000000,
560		0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000,
561		0x64000000, 0x5d000000, 0x19000000, 0x73000000,
562		0x60000000, 0x81000000, 0x4f000000, 0xdc000000,
563		0x22000000, 0x2a000000, 0x90000000, 0x88000000,
564		0x46000000, 0xee000000, 0xb8000000, 0x14000000,
565		0xde000000, 0x5e000000, 0x0b000000, 0xdb000000,
566		0xe0000000, 0x32000000, 0x3a000000, 0x0a000000,
567		0x49000000, 0x06000000, 0x24000000, 0x5c000000,
568		0xc2000000, 0xd3000000, 0xac000000, 0x62000000,
569		0x91000000, 0x95000000, 0xe4000000, 0x79000000,
570		0xe7000000, 0xc8000000, 0x37000000, 0x6d000000,
571		0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000,
572		0x6c000000, 0x56000000, 0xf4000000, 0xea000000,
573		0x65000000, 0x7a000000, 0xae000000, 0x08000000,
574		0xba000000, 0x78000000, 0x25000000, 0x2e000000,
575		0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000,
576		0xe8000000, 0xdd000000, 0x74000000, 0x1f000000,
577		0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000,
578		0x70000000, 0x3e000000, 0xb5000000, 0x66000000,
579		0x48000000, 0x03000000, 0xf6000000, 0x0e000000,
580		0x61000000, 0x35000000, 0x57000000, 0xb9000000,
581		0x86000000, 0xc1000000, 0x1d000000, 0x9e000000,
582		0xe1000000, 0xf8000000, 0x98000000, 0x11000000,
583		0x69000000, 0xd9000000, 0x8e000000, 0x94000000,
584		0x9b000000, 0x1e000000, 0x87000000, 0xe9000000,
585		0xce000000, 0x55000000, 0x28000000, 0xdf000000,
586		0x8c000000, 0xa1000000, 0x89000000, 0x0d000000,
587		0xbf000000, 0xe6000000, 0x42000000, 0x68000000,
588		0x41000000, 0x99000000, 0x2d000000, 0x0f000000,
589		0xb0000000, 0x54000000, 0xbb000000, 0x16000000,
590	}
591};
592
593__visible const u32 crypto_it_tab[4][256] ____cacheline_aligned = {
594	{
595		0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
596		0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
597		0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
598		0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5,
599		0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d,
600		0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b,
601		0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295,
602		0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e,
603		0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927,
604		0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d,
605		0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362,
606		0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9,
607		0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52,
608		0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566,
609		0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3,
610		0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed,
611		0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e,
612		0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4,
613		0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4,
614		0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd,
615		0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d,
616		0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060,
617		0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967,
618		0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879,
619		0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000,
620		0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c,
621		0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36,
622		0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624,
623		0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b,
624		0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c,
625		0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12,
626		0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14,
627		0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3,
628		0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b,
629		0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8,
630		0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684,
631		0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7,
632		0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177,
633		0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947,
634		0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322,
635		0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498,
636		0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f,
637		0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54,
638		0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382,
639		0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf,
640		0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb,
641		0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83,
642		0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef,
643		0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029,
644		0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235,
645		0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733,
646		0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117,
647		0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4,
648		0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546,
649		0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb,
650		0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d,
651		0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb,
652		0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a,
653		0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773,
654		0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478,
655		0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2,
656		0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff,
657		0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664,
658		0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0,
659	}, {
660		0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96,
661		0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x03e34b93,
662		0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525,
663		0xd7e54ffc, 0xcb2ac5d7, 0x44352680, 0xa362b58f,
664		0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1,
665		0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6,
666		0x5f8f03e7, 0x9c921595, 0x7a6dbfeb, 0x595295da,
667		0x83bed42d, 0x217458d3, 0x69e04929, 0xc8c98e44,
668		0x89c2756a, 0x798ef478, 0x3e58996b, 0x71b927dd,
669		0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4,
670		0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245,
671		0x7764b1e0, 0xae6bbb84, 0xa081fe1c, 0x2b08f994,
672		0x68487058, 0xfd458f19, 0x6cde9487, 0xf87b52b7,
673		0xd373ab23, 0x024b72e2, 0x8f1fe357, 0xab55662a,
674		0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5,
675		0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c,
676		0x1ccf8a2b, 0xb479a792, 0xf207f3f0, 0xe2694ea1,
677		0xf4da65cd, 0xbe0506d5, 0x6234d11f, 0xfea6c48a,
678		0x532e349d, 0x55f3a2a0, 0xe18a0532, 0xebf6a475,
679		0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51,
680		0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46,
681		0x8d5491b5, 0x5dc47105, 0xd406046f, 0x155060ff,
682		0xfb981924, 0xe9bdd697, 0x434089cc, 0x9ed96777,
683		0x42e8b0bd, 0x8b890788, 0x5b19e738, 0xeec879db,
684		0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000,
685		0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e,
686		0xff0efdfb, 0x38850f56, 0xd5ae3d1e, 0x392d3627,
687		0xd90f0a64, 0xa65c6821, 0x545b9bd1, 0x2e36243a,
688		0x670a0cb1, 0xe757930f, 0x96eeb4d2, 0x919b1b9e,
689		0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16,
690		0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d,
691		0x0d090e0b, 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8,
692		0x19f15785, 0x0775af4c, 0xdd99eebb, 0x607fa3fd,
693		0x2601f79f, 0xf5725cbc, 0x3b6644c5, 0x7efb5b34,
694		0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863,
695		0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420,
696		0x244a857d, 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d,
697		0x2f9e1d4b, 0x30b2dcf3, 0x52860dec, 0xe3c177d0,
698		0x16b32b6c, 0xb970a999, 0x489411fa, 0x64e94722,
699		0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef,
700		0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836,
701		0x81f5a6cf, 0xde7aa528, 0x8eb7da26, 0xbfad3fa4,
702		0x9d3a2ce4, 0x9278500d, 0xcc5f6a9b, 0x467e5462,
703		0x138df6c2, 0xb8d890e8, 0xf7392e5e, 0xafc382f5,
704		0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3,
705		0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b,
706		0x7826cd09, 0x18596ef4, 0xb79aec01, 0x9a4f83a8,
707		0x6e95e665, 0xe6ffaa7e, 0xcfbc2108, 0xe815efe6,
708		0x9be7bad9, 0x366f4ace, 0x099fead4, 0x7cb029d6,
709		0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0,
710		0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315,
711		0x9804f14a, 0xdaec41f7, 0x50cd7f0e, 0xf691172f,
712		0xd64d768d, 0xb0ef434d, 0x4daacc54, 0x0496e4df,
713		0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, 0x5165467f,
714		0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e,
715		0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13,
716		0x61d79a8c, 0x0ca1377a, 0x14f8598e, 0x3c13eb89,
717		0x27a9ceee, 0xc961b735, 0xe51ce1ed, 0xb1477a3c,
718		0xdfd29c59, 0x73f2553f, 0xce141879, 0x37c773bf,
719		0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886,
720		0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f,
721		0xc31d1672, 0x25e2bc0c, 0x493c288b, 0x950dff41,
722		0x01a83971, 0xb30c08de, 0xe4b4d89c, 0xc1566490,
723		0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042,
724	}, {
725		0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e,
726		0xab3bcb6b, 0x9d1ff145, 0xfaacab58, 0xe34b9303,
727		0x302055fa, 0x76adf66d, 0xcc889176, 0x02f5254c,
728		0xe54ffcd7, 0x2ac5d7cb, 0x35268044, 0x62b58fa3,
729		0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0,
730		0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9,
731		0x8f03e75f, 0x9215959c, 0x6dbfeb7a, 0x5295da59,
732		0xbed42d83, 0x7458d321, 0xe0492969, 0xc98e44c8,
733		0xc2756a89, 0x8ef47879, 0x58996b3e, 0xb927dd71,
734		0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a,
735		0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f,
736		0x64b1e077, 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b,
737		0x48705868, 0x458f19fd, 0xde94876c, 0x7b52b7f8,
738		0x73ab23d3, 0x4b72e202, 0x1fe3578f, 0x55662aab,
739		0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508,
740		0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82,
741		0xcf8a2b1c, 0x79a792b4, 0x07f3f0f2, 0x694ea1e2,
742		0xda65cdf4, 0x0506d5be, 0x34d11f62, 0xa6c48afe,
743		0x2e349d53, 0xf3a2a055, 0x8a0532e1, 0xf6a475eb,
744		0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110,
745		0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd,
746		0x5491b58d, 0xc471055d, 0x06046fd4, 0x5060ff15,
747		0x981924fb, 0xbdd697e9, 0x4089cc43, 0xd967779e,
748		0xe8b0bd42, 0x8907888b, 0x19e7385b, 0xc879dbee,
749		0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000,
750		0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72,
751		0x0efdfbff, 0x850f5638, 0xae3d1ed5, 0x2d362739,
752		0x0f0a64d9, 0x5c6821a6, 0x5b9bd154, 0x36243a2e,
753		0x0a0cb167, 0x57930fe7, 0xeeb4d296, 0x9b1b9e91,
754		0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a,
755		0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17,
756		0x090e0b0d, 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9,
757		0xf1578519, 0x75af4c07, 0x99eebbdd, 0x7fa3fd60,
758		0x01f79f26, 0x725cbcf5, 0x6644c53b, 0xfb5b347e,
759		0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1,
760		0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011,
761		0x4a857d24, 0xbbd2f83d, 0xf9ae1132, 0x29c76da1,
762		0x9e1d4b2f, 0xb2dcf330, 0x860dec52, 0xc177d0e3,
763		0xb32b6c16, 0x70a999b9, 0x9411fa48, 0xe9472264,
764		0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90,
765		0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b,
766		0xf5a6cf81, 0x7aa528de, 0xb7da268e, 0xad3fa4bf,
767		0x3a2ce49d, 0x78500d92, 0x5f6a9bcc, 0x7e546246,
768		0x8df6c213, 0xd890e8b8, 0x392e5ef7, 0xc382f5af,
769		0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312,
770		0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb,
771		0x26cd0978, 0x596ef418, 0x9aec01b7, 0x4f83a89a,
772		0x95e6656e, 0xffaa7ee6, 0xbc2108cf, 0x15efe6e8,
773		0xe7bad99b, 0x6f4ace36, 0x9fead409, 0xb029d67c,
774		0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066,
775		0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8,
776		0x04f14a98, 0xec41f7da, 0xcd7f0e50, 0x91172ff6,
777		0x4d768dd6, 0xef434db0, 0xaacc544d, 0x96e4df04,
778		0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, 0x65467f51,
779		0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41,
780		0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347,
781		0xd79a8c61, 0xa1377a0c, 0xf8598e14, 0x13eb893c,
782		0xa9ceee27, 0x61b735c9, 0x1ce1ede5, 0x477a3cb1,
783		0xd29c59df, 0xf2553f73, 0x141879ce, 0xc773bf37,
784		0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db,
785		0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40,
786		0x1d1672c3, 0xe2bc0c25, 0x3c288b49, 0x0dff4195,
787		0xa8397101, 0x0c08deb3, 0xb4d89ce4, 0x566490c1,
788		0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257,
789	}, {
790		0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27,
791		0x3bcb6bab, 0x1ff1459d, 0xacab58fa, 0x4b9303e3,
792		0x2055fa30, 0xadf66d76, 0x889176cc, 0xf5254c02,
793		0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, 0xb58fa362,
794		0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe,
795		0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3,
796		0x03e75f8f, 0x15959c92, 0xbfeb7a6d, 0x95da5952,
797		0xd42d83be, 0x58d32174, 0x492969e0, 0x8e44c8c9,
798		0x756a89c2, 0xf478798e, 0x996b3e58, 0x27dd71b9,
799		0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace,
800		0x63184adf, 0xe582311a, 0x97603351, 0x62457f53,
801		0xb1e07764, 0xbb84ae6b, 0xfe1ca081, 0xf9942b08,
802		0x70586848, 0x8f19fd45, 0x94876cde, 0x52b7f87b,
803		0xab23d373, 0x72e2024b, 0xe3578f1f, 0x662aab55,
804		0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837,
805		0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216,
806		0x8a2b1ccf, 0xa792b479, 0xf3f0f207, 0x4ea1e269,
807		0x65cdf4da, 0x06d5be05, 0xd11f6234, 0xc48afea6,
808		0x349d532e, 0xa2a055f3, 0x0532e18a, 0xa475ebf6,
809		0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e,
810		0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6,
811		0x91b58d54, 0x71055dc4, 0x046fd406, 0x60ff1550,
812		0x1924fb98, 0xd697e9bd, 0x89cc4340, 0x67779ed9,
813		0xb0bd42e8, 0x07888b89, 0xe7385b19, 0x79dbeec8,
814		0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000,
815		0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a,
816		0xfdfbff0e, 0x0f563885, 0x3d1ed5ae, 0x3627392d,
817		0x0a64d90f, 0x6821a65c, 0x9bd1545b, 0x243a2e36,
818		0x0cb1670a, 0x930fe757, 0xb4d296ee, 0x1b9e919b,
819		0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12,
820		0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b,
821		0x0e0b0d09, 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e,
822		0x578519f1, 0xaf4c0775, 0xeebbdd99, 0xa3fd607f,
823		0xf79f2601, 0x5cbcf572, 0x44c53b66, 0x5b347efb,
824		0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4,
825		0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6,
826		0x857d244a, 0xd2f83dbb, 0xae1132f9, 0xc76da129,
827		0x1d4b2f9e, 0xdcf330b2, 0x0dec5286, 0x77d0e3c1,
828		0x2b6c16b3, 0xa999b970, 0x11fa4894, 0x472264e9,
829		0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033,
830		0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4,
831		0xa6cf81f5, 0xa528de7a, 0xda268eb7, 0x3fa4bfad,
832		0x2ce49d3a, 0x500d9278, 0x6a9bcc5f, 0x5462467e,
833		0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, 0x82f5afc3,
834		0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225,
835		0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b,
836		0xcd097826, 0x6ef41859, 0xec01b79a, 0x83a89a4f,
837		0xe6656e95, 0xaa7ee6ff, 0x2108cfbc, 0xefe6e815,
838		0xbad99be7, 0x4ace366f, 0xead4099f, 0x29d67cb0,
839		0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2,
840		0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7,
841		0xf14a9804, 0x41f7daec, 0x7f0e50cd, 0x172ff691,
842		0x768dd64d, 0x434db0ef, 0xcc544daa, 0xe4df0496,
843		0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, 0x467f5165,
844		0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b,
845		0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6,
846		0x9a8c61d7, 0x377a0ca1, 0x598e14f8, 0xeb893c13,
847		0xceee27a9, 0xb735c961, 0xe1ede51c, 0x7a3cb147,
848		0x9c59dfd2, 0x553f73f2, 0x1879ce14, 0x73bf37c7,
849		0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44,
850		0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3,
851		0x1672c31d, 0xbc0c25e2, 0x288b493c, 0xff41950d,
852		0x397101a8, 0x08deb30c, 0xd89ce4b4, 0x6490c156,
853		0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8,
854	}
855};
856
857static const u32 crypto_il_tab[4][256] ____cacheline_aligned = {
858	{
859		0x00000052, 0x00000009, 0x0000006a, 0x000000d5,
860		0x00000030, 0x00000036, 0x000000a5, 0x00000038,
861		0x000000bf, 0x00000040, 0x000000a3, 0x0000009e,
862		0x00000081, 0x000000f3, 0x000000d7, 0x000000fb,
863		0x0000007c, 0x000000e3, 0x00000039, 0x00000082,
864		0x0000009b, 0x0000002f, 0x000000ff, 0x00000087,
865		0x00000034, 0x0000008e, 0x00000043, 0x00000044,
866		0x000000c4, 0x000000de, 0x000000e9, 0x000000cb,
867		0x00000054, 0x0000007b, 0x00000094, 0x00000032,
868		0x000000a6, 0x000000c2, 0x00000023, 0x0000003d,
869		0x000000ee, 0x0000004c, 0x00000095, 0x0000000b,
870		0x00000042, 0x000000fa, 0x000000c3, 0x0000004e,
871		0x00000008, 0x0000002e, 0x000000a1, 0x00000066,
872		0x00000028, 0x000000d9, 0x00000024, 0x000000b2,
873		0x00000076, 0x0000005b, 0x000000a2, 0x00000049,
874		0x0000006d, 0x0000008b, 0x000000d1, 0x00000025,
875		0x00000072, 0x000000f8, 0x000000f6, 0x00000064,
876		0x00000086, 0x00000068, 0x00000098, 0x00000016,
877		0x000000d4, 0x000000a4, 0x0000005c, 0x000000cc,
878		0x0000005d, 0x00000065, 0x000000b6, 0x00000092,
879		0x0000006c, 0x00000070, 0x00000048, 0x00000050,
880		0x000000fd, 0x000000ed, 0x000000b9, 0x000000da,
881		0x0000005e, 0x00000015, 0x00000046, 0x00000057,
882		0x000000a7, 0x0000008d, 0x0000009d, 0x00000084,
883		0x00000090, 0x000000d8, 0x000000ab, 0x00000000,
884		0x0000008c, 0x000000bc, 0x000000d3, 0x0000000a,
885		0x000000f7, 0x000000e4, 0x00000058, 0x00000005,
886		0x000000b8, 0x000000b3, 0x00000045, 0x00000006,
887		0x000000d0, 0x0000002c, 0x0000001e, 0x0000008f,
888		0x000000ca, 0x0000003f, 0x0000000f, 0x00000002,
889		0x000000c1, 0x000000af, 0x000000bd, 0x00000003,
890		0x00000001, 0x00000013, 0x0000008a, 0x0000006b,
891		0x0000003a, 0x00000091, 0x00000011, 0x00000041,
892		0x0000004f, 0x00000067, 0x000000dc, 0x000000ea,
893		0x00000097, 0x000000f2, 0x000000cf, 0x000000ce,
894		0x000000f0, 0x000000b4, 0x000000e6, 0x00000073,
895		0x00000096, 0x000000ac, 0x00000074, 0x00000022,
896		0x000000e7, 0x000000ad, 0x00000035, 0x00000085,
897		0x000000e2, 0x000000f9, 0x00000037, 0x000000e8,
898		0x0000001c, 0x00000075, 0x000000df, 0x0000006e,
899		0x00000047, 0x000000f1, 0x0000001a, 0x00000071,
900		0x0000001d, 0x00000029, 0x000000c5, 0x00000089,
901		0x0000006f, 0x000000b7, 0x00000062, 0x0000000e,
902		0x000000aa, 0x00000018, 0x000000be, 0x0000001b,
903		0x000000fc, 0x00000056, 0x0000003e, 0x0000004b,
904		0x000000c6, 0x000000d2, 0x00000079, 0x00000020,
905		0x0000009a, 0x000000db, 0x000000c0, 0x000000fe,
906		0x00000078, 0x000000cd, 0x0000005a, 0x000000f4,
907		0x0000001f, 0x000000dd, 0x000000a8, 0x00000033,
908		0x00000088, 0x00000007, 0x000000c7, 0x00000031,
909		0x000000b1, 0x00000012, 0x00000010, 0x00000059,
910		0x00000027, 0x00000080, 0x000000ec, 0x0000005f,
911		0x00000060, 0x00000051, 0x0000007f, 0x000000a9,
912		0x00000019, 0x000000b5, 0x0000004a, 0x0000000d,
913		0x0000002d, 0x000000e5, 0x0000007a, 0x0000009f,
914		0x00000093, 0x000000c9, 0x0000009c, 0x000000ef,
915		0x000000a0, 0x000000e0, 0x0000003b, 0x0000004d,
916		0x000000ae, 0x0000002a, 0x000000f5, 0x000000b0,
917		0x000000c8, 0x000000eb, 0x000000bb, 0x0000003c,
918		0x00000083, 0x00000053, 0x00000099, 0x00000061,
919		0x00000017, 0x0000002b, 0x00000004, 0x0000007e,
920		0x000000ba, 0x00000077, 0x000000d6, 0x00000026,
921		0x000000e1, 0x00000069, 0x00000014, 0x00000063,
922		0x00000055, 0x00000021, 0x0000000c, 0x0000007d,
923	}, {
924		0x00005200, 0x00000900, 0x00006a00, 0x0000d500,
925		0x00003000, 0x00003600, 0x0000a500, 0x00003800,
926		0x0000bf00, 0x00004000, 0x0000a300, 0x00009e00,
927		0x00008100, 0x0000f300, 0x0000d700, 0x0000fb00,
928		0x00007c00, 0x0000e300, 0x00003900, 0x00008200,
929		0x00009b00, 0x00002f00, 0x0000ff00, 0x00008700,
930		0x00003400, 0x00008e00, 0x00004300, 0x00004400,
931		0x0000c400, 0x0000de00, 0x0000e900, 0x0000cb00,
932		0x00005400, 0x00007b00, 0x00009400, 0x00003200,
933		0x0000a600, 0x0000c200, 0x00002300, 0x00003d00,
934		0x0000ee00, 0x00004c00, 0x00009500, 0x00000b00,
935		0x00004200, 0x0000fa00, 0x0000c300, 0x00004e00,
936		0x00000800, 0x00002e00, 0x0000a100, 0x00006600,
937		0x00002800, 0x0000d900, 0x00002400, 0x0000b200,
938		0x00007600, 0x00005b00, 0x0000a200, 0x00004900,
939		0x00006d00, 0x00008b00, 0x0000d100, 0x00002500,
940		0x00007200, 0x0000f800, 0x0000f600, 0x00006400,
941		0x00008600, 0x00006800, 0x00009800, 0x00001600,
942		0x0000d400, 0x0000a400, 0x00005c00, 0x0000cc00,
943		0x00005d00, 0x00006500, 0x0000b600, 0x00009200,
944		0x00006c00, 0x00007000, 0x00004800, 0x00005000,
945		0x0000fd00, 0x0000ed00, 0x0000b900, 0x0000da00,
946		0x00005e00, 0x00001500, 0x00004600, 0x00005700,
947		0x0000a700, 0x00008d00, 0x00009d00, 0x00008400,
948		0x00009000, 0x0000d800, 0x0000ab00, 0x00000000,
949		0x00008c00, 0x0000bc00, 0x0000d300, 0x00000a00,
950		0x0000f700, 0x0000e400, 0x00005800, 0x00000500,
951		0x0000b800, 0x0000b300, 0x00004500, 0x00000600,
952		0x0000d000, 0x00002c00, 0x00001e00, 0x00008f00,
953		0x0000ca00, 0x00003f00, 0x00000f00, 0x00000200,
954		0x0000c100, 0x0000af00, 0x0000bd00, 0x00000300,
955		0x00000100, 0x00001300, 0x00008a00, 0x00006b00,
956		0x00003a00, 0x00009100, 0x00001100, 0x00004100,
957		0x00004f00, 0x00006700, 0x0000dc00, 0x0000ea00,
958		0x00009700, 0x0000f200, 0x0000cf00, 0x0000ce00,
959		0x0000f000, 0x0000b400, 0x0000e600, 0x00007300,
960		0x00009600, 0x0000ac00, 0x00007400, 0x00002200,
961		0x0000e700, 0x0000ad00, 0x00003500, 0x00008500,
962		0x0000e200, 0x0000f900, 0x00003700, 0x0000e800,
963		0x00001c00, 0x00007500, 0x0000df00, 0x00006e00,
964		0x00004700, 0x0000f100, 0x00001a00, 0x00007100,
965		0x00001d00, 0x00002900, 0x0000c500, 0x00008900,
966		0x00006f00, 0x0000b700, 0x00006200, 0x00000e00,
967		0x0000aa00, 0x00001800, 0x0000be00, 0x00001b00,
968		0x0000fc00, 0x00005600, 0x00003e00, 0x00004b00,
969		0x0000c600, 0x0000d200, 0x00007900, 0x00002000,
970		0x00009a00, 0x0000db00, 0x0000c000, 0x0000fe00,
971		0x00007800, 0x0000cd00, 0x00005a00, 0x0000f400,
972		0x00001f00, 0x0000dd00, 0x0000a800, 0x00003300,
973		0x00008800, 0x00000700, 0x0000c700, 0x00003100,
974		0x0000b100, 0x00001200, 0x00001000, 0x00005900,
975		0x00002700, 0x00008000, 0x0000ec00, 0x00005f00,
976		0x00006000, 0x00005100, 0x00007f00, 0x0000a900,
977		0x00001900, 0x0000b500, 0x00004a00, 0x00000d00,
978		0x00002d00, 0x0000e500, 0x00007a00, 0x00009f00,
979		0x00009300, 0x0000c900, 0x00009c00, 0x0000ef00,
980		0x0000a000, 0x0000e000, 0x00003b00, 0x00004d00,
981		0x0000ae00, 0x00002a00, 0x0000f500, 0x0000b000,
982		0x0000c800, 0x0000eb00, 0x0000bb00, 0x00003c00,
983		0x00008300, 0x00005300, 0x00009900, 0x00006100,
984		0x00001700, 0x00002b00, 0x00000400, 0x00007e00,
985		0x0000ba00, 0x00007700, 0x0000d600, 0x00002600,
986		0x0000e100, 0x00006900, 0x00001400, 0x00006300,
987		0x00005500, 0x00002100, 0x00000c00, 0x00007d00,
988	}, {
989		0x00520000, 0x00090000, 0x006a0000, 0x00d50000,
990		0x00300000, 0x00360000, 0x00a50000, 0x00380000,
991		0x00bf0000, 0x00400000, 0x00a30000, 0x009e0000,
992		0x00810000, 0x00f30000, 0x00d70000, 0x00fb0000,
993		0x007c0000, 0x00e30000, 0x00390000, 0x00820000,
994		0x009b0000, 0x002f0000, 0x00ff0000, 0x00870000,
995		0x00340000, 0x008e0000, 0x00430000, 0x00440000,
996		0x00c40000, 0x00de0000, 0x00e90000, 0x00cb0000,
997		0x00540000, 0x007b0000, 0x00940000, 0x00320000,
998		0x00a60000, 0x00c20000, 0x00230000, 0x003d0000,
999		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
1121EXPORT_SYMBOL_GPL(crypto_ft_tab);
1122EXPORT_SYMBOL_GPL(crypto_it_tab);
1123
1124/**
1125 * crypto_aes_set_key - Set the AES key.
1126 * @tfm:	The %crypto_tfm that is used in the context.
1127 * @in_key:	The input key.
1128 * @key_len:	The size of the key.
1129 *
1130 * This function uses aes_expand_key() to expand the key.  &crypto_aes_ctx
1131 * _must_ be the private data embedded in @tfm which is retrieved with
1132 * crypto_tfm_ctx().
1133 *
1134 * Return: 0 on success; -EINVAL on failure (only happens for bad key lengths)
1135 */
1136int 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}
1143EXPORT_SYMBOL_GPL(crypto_aes_set_key);
1144
1145/* encrypt a block of text */
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
1176static 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/* decrypt a block of text */
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
1246static 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
1285static 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
1304static int __init aes_init(void)
1305{
1306	return crypto_register_alg(&aes_alg);
1307}
1308
1309static void __exit aes_fini(void)
1310{
1311	crypto_unregister_alg(&aes_alg);
1312}
1313
1314subsys_initcall(aes_init);
1315module_exit(aes_fini);
1316
1317MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
1318MODULE_LICENSE("Dual BSD/GPL");
1319MODULE_ALIAS_CRYPTO("aes");
1320MODULE_ALIAS_CRYPTO("aes-generic");
1321