1f8246af0SSebastian Siewior /*
2f8246af0SSebastian Siewior * Cryptographic API.
3f8246af0SSebastian Siewior *
4f8246af0SSebastian Siewior * AES Cipher Algorithm.
5f8246af0SSebastian Siewior *
6f8246af0SSebastian Siewior * Based on Brian Gladman's code.
7f8246af0SSebastian Siewior *
8f8246af0SSebastian Siewior * Linux developers:
9f8246af0SSebastian Siewior * Alexander Kjeldaas <astor@fast.no>
10f8246af0SSebastian Siewior * Herbert Valerio Riedel <hvr@hvrlab.org>
11f8246af0SSebastian Siewior * Kyle McMartin <kyle@debian.org>
12f8246af0SSebastian Siewior * Adam J. Richter <adam@yggdrasil.com> (conversion to 2.5 API).
13f8246af0SSebastian Siewior *
14f8246af0SSebastian Siewior * This program is free software; you can redistribute it and/or modify
15f8246af0SSebastian Siewior * it under the terms of the GNU General Public License as published by
16f8246af0SSebastian Siewior * the Free Software Foundation; either version 2 of the License, or
17f8246af0SSebastian Siewior * (at your option) any later version.
18f8246af0SSebastian Siewior *
19f8246af0SSebastian Siewior * ---------------------------------------------------------------------------
20f8246af0SSebastian Siewior * Copyright (c) 2002, Dr Brian Gladman <brg@gladman.me.uk>, Worcester, UK.
21f8246af0SSebastian Siewior * All rights reserved.
22f8246af0SSebastian Siewior *
23f8246af0SSebastian Siewior * LICENSE TERMS
24f8246af0SSebastian Siewior *
25f8246af0SSebastian Siewior * The free distribution and use of this software in both source and binary
26f8246af0SSebastian Siewior * form is allowed (with or without changes) provided that:
27f8246af0SSebastian Siewior *
28f8246af0SSebastian Siewior * 1. distributions of this source code include the above copyright
29f8246af0SSebastian Siewior * notice, this list of conditions and the following disclaimer;
30f8246af0SSebastian Siewior *
31f8246af0SSebastian Siewior * 2. distributions in binary form include the above copyright
32f8246af0SSebastian Siewior * notice, this list of conditions and the following disclaimer
33f8246af0SSebastian Siewior * in the documentation and/or other associated materials;
34f8246af0SSebastian Siewior *
35f8246af0SSebastian Siewior * 3. the copyright holder's name is not used to endorse products
36f8246af0SSebastian Siewior * built using this software without specific written permission.
37f8246af0SSebastian Siewior *
38f8246af0SSebastian Siewior * ALTERNATIVELY, provided that this notice is retained in full, this product
39f8246af0SSebastian Siewior * may be distributed under the terms of the GNU General Public License (GPL),
40f8246af0SSebastian Siewior * in which case the provisions of the GPL apply INSTEAD OF those given above.
41f8246af0SSebastian Siewior *
42f8246af0SSebastian Siewior * DISCLAIMER
43f8246af0SSebastian Siewior *
44f8246af0SSebastian Siewior * This software is provided 'as is' with no explicit or implied warranties
45f8246af0SSebastian Siewior * in respect of its properties, including, but not limited to, correctness
46f8246af0SSebastian Siewior * and/or fitness for purpose.
47f8246af0SSebastian Siewior * ---------------------------------------------------------------------------
48f8246af0SSebastian Siewior */
49f8246af0SSebastian Siewior
5089e12654SSebastian Siewior #include <crypto/aes.h>
51*14386d47SHerbert Xu #include <crypto/algapi.h>
52f8246af0SSebastian Siewior #include <linux/module.h>
53f8246af0SSebastian Siewior #include <linux/init.h>
54f8246af0SSebastian Siewior #include <linux/types.h>
55f8246af0SSebastian Siewior #include <linux/errno.h>
56f8246af0SSebastian Siewior #include <asm/byteorder.h>
57ec38a937SArd Biesheuvel #include <asm/unaligned.h>
58f8246af0SSebastian Siewior
byte(const u32 x,const unsigned n)59be5fb270SSebastian Siewior static inline u8 byte(const u32 x, const unsigned n)
60f8246af0SSebastian Siewior {
61f8246af0SSebastian Siewior return x >> (n << 3);
62f8246af0SSebastian Siewior }
63f8246af0SSebastian Siewior
64913a3aa0SEric Biggers /* cacheline-aligned to facilitate prefetching into cache */
6561abc356SAndi Kleen __visible const u32 crypto_ft_tab[4][256] ____cacheline_aligned = {
660ee4a969SHerbert Xu {
670ee4a969SHerbert Xu 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
680ee4a969SHerbert Xu 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
690ee4a969SHerbert Xu 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
700ee4a969SHerbert Xu 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
710ee4a969SHerbert Xu 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
720ee4a969SHerbert Xu 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
730ee4a969SHerbert Xu 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
740ee4a969SHerbert Xu 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
750ee4a969SHerbert Xu 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
760ee4a969SHerbert Xu 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
770ee4a969SHerbert Xu 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
780ee4a969SHerbert Xu 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
790ee4a969SHerbert Xu 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
800ee4a969SHerbert Xu 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
810ee4a969SHerbert Xu 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
820ee4a969SHerbert Xu 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
830ee4a969SHerbert Xu 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
840ee4a969SHerbert Xu 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
850ee4a969SHerbert Xu 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
860ee4a969SHerbert Xu 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
870ee4a969SHerbert Xu 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
880ee4a969SHerbert Xu 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
890ee4a969SHerbert Xu 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
900ee4a969SHerbert Xu 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
910ee4a969SHerbert Xu 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
920ee4a969SHerbert Xu 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
930ee4a969SHerbert Xu 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
940ee4a969SHerbert Xu 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
950ee4a969SHerbert Xu 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
960ee4a969SHerbert Xu 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
970ee4a969SHerbert Xu 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
980ee4a969SHerbert Xu 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
990ee4a969SHerbert Xu 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
1000ee4a969SHerbert Xu 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
1010ee4a969SHerbert Xu 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
1020ee4a969SHerbert Xu 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
1030ee4a969SHerbert Xu 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
1040ee4a969SHerbert Xu 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
1050ee4a969SHerbert Xu 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
1060ee4a969SHerbert Xu 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
1070ee4a969SHerbert Xu 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
1080ee4a969SHerbert Xu 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
1090ee4a969SHerbert Xu 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
1100ee4a969SHerbert Xu 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
1110ee4a969SHerbert Xu 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
1120ee4a969SHerbert Xu 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
1130ee4a969SHerbert Xu 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
1140ee4a969SHerbert Xu 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
1150ee4a969SHerbert Xu 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
1160ee4a969SHerbert Xu 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
1170ee4a969SHerbert Xu 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
1180ee4a969SHerbert Xu 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
1190ee4a969SHerbert Xu 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
1200ee4a969SHerbert Xu 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
1210ee4a969SHerbert Xu 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
1220ee4a969SHerbert Xu 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
1230ee4a969SHerbert Xu 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
1240ee4a969SHerbert Xu 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
1250ee4a969SHerbert Xu 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
1260ee4a969SHerbert Xu 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
1270ee4a969SHerbert Xu 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
1280ee4a969SHerbert Xu 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
1290ee4a969SHerbert Xu 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
1300ee4a969SHerbert Xu 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c,
1310ee4a969SHerbert Xu }, {
1320ee4a969SHerbert Xu 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
1330ee4a969SHerbert Xu 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
1340ee4a969SHerbert Xu 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
1350ee4a969SHerbert Xu 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
1360ee4a969SHerbert Xu 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
1370ee4a969SHerbert Xu 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
1380ee4a969SHerbert Xu 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
1390ee4a969SHerbert Xu 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
1400ee4a969SHerbert Xu 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
1410ee4a969SHerbert Xu 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
1420ee4a969SHerbert Xu 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
1430ee4a969SHerbert Xu 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
1440ee4a969SHerbert Xu 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
1450ee4a969SHerbert Xu 0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
1460ee4a969SHerbert Xu 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
1470ee4a969SHerbert Xu 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
1480ee4a969SHerbert Xu 0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
1490ee4a969SHerbert Xu 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
1500ee4a969SHerbert Xu 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
1510ee4a969SHerbert Xu 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
1520ee4a969SHerbert Xu 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
1530ee4a969SHerbert Xu 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
1540ee4a969SHerbert Xu 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
1550ee4a969SHerbert Xu 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
1560ee4a969SHerbert Xu 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
1570ee4a969SHerbert Xu 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
1580ee4a969SHerbert Xu 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
1590ee4a969SHerbert Xu 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
1600ee4a969SHerbert Xu 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
1610ee4a969SHerbert Xu 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
1620ee4a969SHerbert Xu 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
1630ee4a969SHerbert Xu 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
1640ee4a969SHerbert Xu 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
1650ee4a969SHerbert Xu 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
1660ee4a969SHerbert Xu 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
1670ee4a969SHerbert Xu 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
1680ee4a969SHerbert Xu 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
1690ee4a969SHerbert Xu 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
1700ee4a969SHerbert Xu 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
1710ee4a969SHerbert Xu 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
1720ee4a969SHerbert Xu 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
1730ee4a969SHerbert Xu 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
1740ee4a969SHerbert Xu 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
1750ee4a969SHerbert Xu 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
1760ee4a969SHerbert Xu 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
1770ee4a969SHerbert Xu 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
1780ee4a969SHerbert Xu 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
1790ee4a969SHerbert Xu 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
1800ee4a969SHerbert Xu 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
1810ee4a969SHerbert Xu 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
1820ee4a969SHerbert Xu 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
1830ee4a969SHerbert Xu 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
1840ee4a969SHerbert Xu 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
1850ee4a969SHerbert Xu 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
1860ee4a969SHerbert Xu 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
1870ee4a969SHerbert Xu 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
1880ee4a969SHerbert Xu 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
1890ee4a969SHerbert Xu 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
1900ee4a969SHerbert Xu 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
1910ee4a969SHerbert Xu 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
1920ee4a969SHerbert Xu 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
1930ee4a969SHerbert Xu 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
1940ee4a969SHerbert Xu 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
1950ee4a969SHerbert Xu 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a,
1960ee4a969SHerbert Xu }, {
1970ee4a969SHerbert Xu 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
1980ee4a969SHerbert Xu 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
1990ee4a969SHerbert Xu 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
2000ee4a969SHerbert Xu 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
2010ee4a969SHerbert Xu 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
2020ee4a969SHerbert Xu 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
2030ee4a969SHerbert Xu 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
2040ee4a969SHerbert Xu 0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
2050ee4a969SHerbert Xu 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
2060ee4a969SHerbert Xu 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
2070ee4a969SHerbert Xu 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
2080ee4a969SHerbert Xu 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
2090ee4a969SHerbert Xu 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
2100ee4a969SHerbert Xu 0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
2110ee4a969SHerbert Xu 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
2120ee4a969SHerbert Xu 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
2130ee4a969SHerbert Xu 0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
2140ee4a969SHerbert Xu 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
2150ee4a969SHerbert Xu 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
2160ee4a969SHerbert Xu 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
2170ee4a969SHerbert Xu 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
2180ee4a969SHerbert Xu 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
2190ee4a969SHerbert Xu 0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
2200ee4a969SHerbert Xu 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
2210ee4a969SHerbert Xu 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
2220ee4a969SHerbert Xu 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
2230ee4a969SHerbert Xu 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
2240ee4a969SHerbert Xu 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
2250ee4a969SHerbert Xu 0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
2260ee4a969SHerbert Xu 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
2270ee4a969SHerbert Xu 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
2280ee4a969SHerbert Xu 0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
2290ee4a969SHerbert Xu 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
2300ee4a969SHerbert Xu 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
2310ee4a969SHerbert Xu 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
2320ee4a969SHerbert Xu 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
2330ee4a969SHerbert Xu 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
2340ee4a969SHerbert Xu 0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
2350ee4a969SHerbert Xu 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
2360ee4a969SHerbert Xu 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
2370ee4a969SHerbert Xu 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
2380ee4a969SHerbert Xu 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
2390ee4a969SHerbert Xu 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
2400ee4a969SHerbert Xu 0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
2410ee4a969SHerbert Xu 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
2420ee4a969SHerbert Xu 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
2430ee4a969SHerbert Xu 0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
2440ee4a969SHerbert Xu 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
2450ee4a969SHerbert Xu 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
2460ee4a969SHerbert Xu 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
2470ee4a969SHerbert Xu 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
2480ee4a969SHerbert Xu 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
2490ee4a969SHerbert Xu 0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
2500ee4a969SHerbert Xu 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
2510ee4a969SHerbert Xu 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
2520ee4a969SHerbert Xu 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
2530ee4a969SHerbert Xu 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
2540ee4a969SHerbert Xu 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
2550ee4a969SHerbert Xu 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
2560ee4a969SHerbert Xu 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
2570ee4a969SHerbert Xu 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
2580ee4a969SHerbert Xu 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
2590ee4a969SHerbert Xu 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
2600ee4a969SHerbert Xu 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16,
2610ee4a969SHerbert Xu }, {
2620ee4a969SHerbert Xu 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
2630ee4a969SHerbert Xu 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
2640ee4a969SHerbert Xu 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
2650ee4a969SHerbert Xu 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
2660ee4a969SHerbert Xu 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
2670ee4a969SHerbert Xu 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
2680ee4a969SHerbert Xu 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
2690ee4a969SHerbert Xu 0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
2700ee4a969SHerbert Xu 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
2710ee4a969SHerbert Xu 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
2720ee4a969SHerbert Xu 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
2730ee4a969SHerbert Xu 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
2740ee4a969SHerbert Xu 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
2750ee4a969SHerbert Xu 0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
2760ee4a969SHerbert Xu 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
2770ee4a969SHerbert Xu 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
2780ee4a969SHerbert Xu 0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
2790ee4a969SHerbert Xu 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
2800ee4a969SHerbert Xu 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
2810ee4a969SHerbert Xu 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
2820ee4a969SHerbert Xu 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
2830ee4a969SHerbert Xu 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
2840ee4a969SHerbert Xu 0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
2850ee4a969SHerbert Xu 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
2860ee4a969SHerbert Xu 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
2870ee4a969SHerbert Xu 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
2880ee4a969SHerbert Xu 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
2890ee4a969SHerbert Xu 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
2900ee4a969SHerbert Xu 0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
2910ee4a969SHerbert Xu 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
2920ee4a969SHerbert Xu 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
2930ee4a969SHerbert Xu 0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
2940ee4a969SHerbert Xu 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
2950ee4a969SHerbert Xu 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
2960ee4a969SHerbert Xu 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
2970ee4a969SHerbert Xu 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
2980ee4a969SHerbert Xu 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
2990ee4a969SHerbert Xu 0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
3000ee4a969SHerbert Xu 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
3010ee4a969SHerbert Xu 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
3020ee4a969SHerbert Xu 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
3030ee4a969SHerbert Xu 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
3040ee4a969SHerbert Xu 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
3050ee4a969SHerbert Xu 0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
3060ee4a969SHerbert Xu 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
3070ee4a969SHerbert Xu 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
3080ee4a969SHerbert Xu 0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
3090ee4a969SHerbert Xu 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
3100ee4a969SHerbert Xu 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
3110ee4a969SHerbert Xu 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
3120ee4a969SHerbert Xu 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
3130ee4a969SHerbert Xu 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
3140ee4a969SHerbert Xu 0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
3150ee4a969SHerbert Xu 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
3160ee4a969SHerbert Xu 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
3170ee4a969SHerbert Xu 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
3180ee4a969SHerbert Xu 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
3190ee4a969SHerbert Xu 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
3200ee4a969SHerbert Xu 0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
3210ee4a969SHerbert Xu 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
3220ee4a969SHerbert Xu 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
3230ee4a969SHerbert Xu 0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
3240ee4a969SHerbert Xu 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
3250ee4a969SHerbert Xu 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616,
3260ee4a969SHerbert Xu }
3270ee4a969SHerbert Xu };
3280ee4a969SHerbert Xu
3291e25ca02SArd Biesheuvel static const u32 crypto_fl_tab[4][256] ____cacheline_aligned = {
3300ee4a969SHerbert Xu {
3310ee4a969SHerbert Xu 0x00000063, 0x0000007c, 0x00000077, 0x0000007b,
3320ee4a969SHerbert Xu 0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5,
3330ee4a969SHerbert Xu 0x00000030, 0x00000001, 0x00000067, 0x0000002b,
3340ee4a969SHerbert Xu 0x000000fe, 0x000000d7, 0x000000ab, 0x00000076,
3350ee4a969SHerbert Xu 0x000000ca, 0x00000082, 0x000000c9, 0x0000007d,
3360ee4a969SHerbert Xu 0x000000fa, 0x00000059, 0x00000047, 0x000000f0,
3370ee4a969SHerbert Xu 0x000000ad, 0x000000d4, 0x000000a2, 0x000000af,
3380ee4a969SHerbert Xu 0x0000009c, 0x000000a4, 0x00000072, 0x000000c0,
3390ee4a969SHerbert Xu 0x000000b7, 0x000000fd, 0x00000093, 0x00000026,
3400ee4a969SHerbert Xu 0x00000036, 0x0000003f, 0x000000f7, 0x000000cc,
3410ee4a969SHerbert Xu 0x00000034, 0x000000a5, 0x000000e5, 0x000000f1,
3420ee4a969SHerbert Xu 0x00000071, 0x000000d8, 0x00000031, 0x00000015,
3430ee4a969SHerbert Xu 0x00000004, 0x000000c7, 0x00000023, 0x000000c3,
3440ee4a969SHerbert Xu 0x00000018, 0x00000096, 0x00000005, 0x0000009a,
3450ee4a969SHerbert Xu 0x00000007, 0x00000012, 0x00000080, 0x000000e2,
3460ee4a969SHerbert Xu 0x000000eb, 0x00000027, 0x000000b2, 0x00000075,
3470ee4a969SHerbert Xu 0x00000009, 0x00000083, 0x0000002c, 0x0000001a,
3480ee4a969SHerbert Xu 0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0,
3490ee4a969SHerbert Xu 0x00000052, 0x0000003b, 0x000000d6, 0x000000b3,
3500ee4a969SHerbert Xu 0x00000029, 0x000000e3, 0x0000002f, 0x00000084,
3510ee4a969SHerbert Xu 0x00000053, 0x000000d1, 0x00000000, 0x000000ed,
3520ee4a969SHerbert Xu 0x00000020, 0x000000fc, 0x000000b1, 0x0000005b,
3530ee4a969SHerbert Xu 0x0000006a, 0x000000cb, 0x000000be, 0x00000039,
3540ee4a969SHerbert Xu 0x0000004a, 0x0000004c, 0x00000058, 0x000000cf,
3550ee4a969SHerbert Xu 0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb,
3560ee4a969SHerbert Xu 0x00000043, 0x0000004d, 0x00000033, 0x00000085,
3570ee4a969SHerbert Xu 0x00000045, 0x000000f9, 0x00000002, 0x0000007f,
3580ee4a969SHerbert Xu 0x00000050, 0x0000003c, 0x0000009f, 0x000000a8,
3590ee4a969SHerbert Xu 0x00000051, 0x000000a3, 0x00000040, 0x0000008f,
3600ee4a969SHerbert Xu 0x00000092, 0x0000009d, 0x00000038, 0x000000f5,
3610ee4a969SHerbert Xu 0x000000bc, 0x000000b6, 0x000000da, 0x00000021,
3620ee4a969SHerbert Xu 0x00000010, 0x000000ff, 0x000000f3, 0x000000d2,
3630ee4a969SHerbert Xu 0x000000cd, 0x0000000c, 0x00000013, 0x000000ec,
3640ee4a969SHerbert Xu 0x0000005f, 0x00000097, 0x00000044, 0x00000017,
3650ee4a969SHerbert Xu 0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d,
3660ee4a969SHerbert Xu 0x00000064, 0x0000005d, 0x00000019, 0x00000073,
3670ee4a969SHerbert Xu 0x00000060, 0x00000081, 0x0000004f, 0x000000dc,
3680ee4a969SHerbert Xu 0x00000022, 0x0000002a, 0x00000090, 0x00000088,
3690ee4a969SHerbert Xu 0x00000046, 0x000000ee, 0x000000b8, 0x00000014,
3700ee4a969SHerbert Xu 0x000000de, 0x0000005e, 0x0000000b, 0x000000db,
3710ee4a969SHerbert Xu 0x000000e0, 0x00000032, 0x0000003a, 0x0000000a,
3720ee4a969SHerbert Xu 0x00000049, 0x00000006, 0x00000024, 0x0000005c,
3730ee4a969SHerbert Xu 0x000000c2, 0x000000d3, 0x000000ac, 0x00000062,
3740ee4a969SHerbert Xu 0x00000091, 0x00000095, 0x000000e4, 0x00000079,
3750ee4a969SHerbert Xu 0x000000e7, 0x000000c8, 0x00000037, 0x0000006d,
3760ee4a969SHerbert Xu 0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9,
3770ee4a969SHerbert Xu 0x0000006c, 0x00000056, 0x000000f4, 0x000000ea,
3780ee4a969SHerbert Xu 0x00000065, 0x0000007a, 0x000000ae, 0x00000008,
3790ee4a969SHerbert Xu 0x000000ba, 0x00000078, 0x00000025, 0x0000002e,
3800ee4a969SHerbert Xu 0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6,
3810ee4a969SHerbert Xu 0x000000e8, 0x000000dd, 0x00000074, 0x0000001f,
3820ee4a969SHerbert Xu 0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a,
3830ee4a969SHerbert Xu 0x00000070, 0x0000003e, 0x000000b5, 0x00000066,
3840ee4a969SHerbert Xu 0x00000048, 0x00000003, 0x000000f6, 0x0000000e,
3850ee4a969SHerbert Xu 0x00000061, 0x00000035, 0x00000057, 0x000000b9,
3860ee4a969SHerbert Xu 0x00000086, 0x000000c1, 0x0000001d, 0x0000009e,
3870ee4a969SHerbert Xu 0x000000e1, 0x000000f8, 0x00000098, 0x00000011,
3880ee4a969SHerbert Xu 0x00000069, 0x000000d9, 0x0000008e, 0x00000094,
3890ee4a969SHerbert Xu 0x0000009b, 0x0000001e, 0x00000087, 0x000000e9,
3900ee4a969SHerbert Xu 0x000000ce, 0x00000055, 0x00000028, 0x000000df,
3910ee4a969SHerbert Xu 0x0000008c, 0x000000a1, 0x00000089, 0x0000000d,
3920ee4a969SHerbert Xu 0x000000bf, 0x000000e6, 0x00000042, 0x00000068,
3930ee4a969SHerbert Xu 0x00000041, 0x00000099, 0x0000002d, 0x0000000f,
3940ee4a969SHerbert Xu 0x000000b0, 0x00000054, 0x000000bb, 0x00000016,
3950ee4a969SHerbert Xu }, {
3960ee4a969SHerbert Xu 0x00006300, 0x00007c00, 0x00007700, 0x00007b00,
3970ee4a969SHerbert Xu 0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500,
3980ee4a969SHerbert Xu 0x00003000, 0x00000100, 0x00006700, 0x00002b00,
3990ee4a969SHerbert Xu 0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600,
4000ee4a969SHerbert Xu 0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00,
4010ee4a969SHerbert Xu 0x0000fa00, 0x00005900, 0x00004700, 0x0000f000,
4020ee4a969SHerbert Xu 0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00,
4030ee4a969SHerbert Xu 0x00009c00, 0x0000a400, 0x00007200, 0x0000c000,
4040ee4a969SHerbert Xu 0x0000b700, 0x0000fd00, 0x00009300, 0x00002600,
4050ee4a969SHerbert Xu 0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00,
4060ee4a969SHerbert Xu 0x00003400, 0x0000a500, 0x0000e500, 0x0000f100,
4070ee4a969SHerbert Xu 0x00007100, 0x0000d800, 0x00003100, 0x00001500,
4080ee4a969SHerbert Xu 0x00000400, 0x0000c700, 0x00002300, 0x0000c300,
4090ee4a969SHerbert Xu 0x00001800, 0x00009600, 0x00000500, 0x00009a00,
4100ee4a969SHerbert Xu 0x00000700, 0x00001200, 0x00008000, 0x0000e200,
4110ee4a969SHerbert Xu 0x0000eb00, 0x00002700, 0x0000b200, 0x00007500,
4120ee4a969SHerbert Xu 0x00000900, 0x00008300, 0x00002c00, 0x00001a00,
4130ee4a969SHerbert Xu 0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000,
4140ee4a969SHerbert Xu 0x00005200, 0x00003b00, 0x0000d600, 0x0000b300,
4150ee4a969SHerbert Xu 0x00002900, 0x0000e300, 0x00002f00, 0x00008400,
4160ee4a969SHerbert Xu 0x00005300, 0x0000d100, 0x00000000, 0x0000ed00,
4170ee4a969SHerbert Xu 0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00,
4180ee4a969SHerbert Xu 0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900,
4190ee4a969SHerbert Xu 0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00,
4200ee4a969SHerbert Xu 0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00,
4210ee4a969SHerbert Xu 0x00004300, 0x00004d00, 0x00003300, 0x00008500,
4220ee4a969SHerbert Xu 0x00004500, 0x0000f900, 0x00000200, 0x00007f00,
4230ee4a969SHerbert Xu 0x00005000, 0x00003c00, 0x00009f00, 0x0000a800,
4240ee4a969SHerbert Xu 0x00005100, 0x0000a300, 0x00004000, 0x00008f00,
4250ee4a969SHerbert Xu 0x00009200, 0x00009d00, 0x00003800, 0x0000f500,
4260ee4a969SHerbert Xu 0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100,
4270ee4a969SHerbert Xu 0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200,
4280ee4a969SHerbert Xu 0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00,
4290ee4a969SHerbert Xu 0x00005f00, 0x00009700, 0x00004400, 0x00001700,
4300ee4a969SHerbert Xu 0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00,
4310ee4a969SHerbert Xu 0x00006400, 0x00005d00, 0x00001900, 0x00007300,
4320ee4a969SHerbert Xu 0x00006000, 0x00008100, 0x00004f00, 0x0000dc00,
4330ee4a969SHerbert Xu 0x00002200, 0x00002a00, 0x00009000, 0x00008800,
4340ee4a969SHerbert Xu 0x00004600, 0x0000ee00, 0x0000b800, 0x00001400,
4350ee4a969SHerbert Xu 0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00,
4360ee4a969SHerbert Xu 0x0000e000, 0x00003200, 0x00003a00, 0x00000a00,
4370ee4a969SHerbert Xu 0x00004900, 0x00000600, 0x00002400, 0x00005c00,
4380ee4a969SHerbert Xu 0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200,
4390ee4a969SHerbert Xu 0x00009100, 0x00009500, 0x0000e400, 0x00007900,
4400ee4a969SHerbert Xu 0x0000e700, 0x0000c800, 0x00003700, 0x00006d00,
4410ee4a969SHerbert Xu 0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900,
4420ee4a969SHerbert Xu 0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00,
4430ee4a969SHerbert Xu 0x00006500, 0x00007a00, 0x0000ae00, 0x00000800,
4440ee4a969SHerbert Xu 0x0000ba00, 0x00007800, 0x00002500, 0x00002e00,
4450ee4a969SHerbert Xu 0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600,
4460ee4a969SHerbert Xu 0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00,
4470ee4a969SHerbert Xu 0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00,
4480ee4a969SHerbert Xu 0x00007000, 0x00003e00, 0x0000b500, 0x00006600,
4490ee4a969SHerbert Xu 0x00004800, 0x00000300, 0x0000f600, 0x00000e00,
4500ee4a969SHerbert Xu 0x00006100, 0x00003500, 0x00005700, 0x0000b900,
4510ee4a969SHerbert Xu 0x00008600, 0x0000c100, 0x00001d00, 0x00009e00,
4520ee4a969SHerbert Xu 0x0000e100, 0x0000f800, 0x00009800, 0x00001100,
4530ee4a969SHerbert Xu 0x00006900, 0x0000d900, 0x00008e00, 0x00009400,
4540ee4a969SHerbert Xu 0x00009b00, 0x00001e00, 0x00008700, 0x0000e900,
4550ee4a969SHerbert Xu 0x0000ce00, 0x00005500, 0x00002800, 0x0000df00,
4560ee4a969SHerbert Xu 0x00008c00, 0x0000a100, 0x00008900, 0x00000d00,
4570ee4a969SHerbert Xu 0x0000bf00, 0x0000e600, 0x00004200, 0x00006800,
4580ee4a969SHerbert Xu 0x00004100, 0x00009900, 0x00002d00, 0x00000f00,
4590ee4a969SHerbert Xu 0x0000b000, 0x00005400, 0x0000bb00, 0x00001600,
4600ee4a969SHerbert Xu }, {
4610ee4a969SHerbert Xu 0x00630000, 0x007c0000, 0x00770000, 0x007b0000,
4620ee4a969SHerbert Xu 0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000,
4630ee4a969SHerbert Xu 0x00300000, 0x00010000, 0x00670000, 0x002b0000,
4640ee4a969SHerbert Xu 0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000,
4650ee4a969SHerbert Xu 0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000,
4660ee4a969SHerbert Xu 0x00fa0000, 0x00590000, 0x00470000, 0x00f00000,
4670ee4a969SHerbert Xu 0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000,
4680ee4a969SHerbert Xu 0x009c0000, 0x00a40000, 0x00720000, 0x00c00000,
4690ee4a969SHerbert Xu 0x00b70000, 0x00fd0000, 0x00930000, 0x00260000,
4700ee4a969SHerbert Xu 0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000,
4710ee4a969SHerbert Xu 0x00340000, 0x00a50000, 0x00e50000, 0x00f10000,
4720ee4a969SHerbert Xu 0x00710000, 0x00d80000, 0x00310000, 0x00150000,
4730ee4a969SHerbert Xu 0x00040000, 0x00c70000, 0x00230000, 0x00c30000,
4740ee4a969SHerbert Xu 0x00180000, 0x00960000, 0x00050000, 0x009a0000,
4750ee4a969SHerbert Xu 0x00070000, 0x00120000, 0x00800000, 0x00e20000,
4760ee4a969SHerbert Xu 0x00eb0000, 0x00270000, 0x00b20000, 0x00750000,
4770ee4a969SHerbert Xu 0x00090000, 0x00830000, 0x002c0000, 0x001a0000,
4780ee4a969SHerbert Xu 0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000,
4790ee4a969SHerbert Xu 0x00520000, 0x003b0000, 0x00d60000, 0x00b30000,
4800ee4a969SHerbert Xu 0x00290000, 0x00e30000, 0x002f0000, 0x00840000,
4810ee4a969SHerbert Xu 0x00530000, 0x00d10000, 0x00000000, 0x00ed0000,
4820ee4a969SHerbert Xu 0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000,
4830ee4a969SHerbert Xu 0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000,
4840ee4a969SHerbert Xu 0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000,
4850ee4a969SHerbert Xu 0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000,
4860ee4a969SHerbert Xu 0x00430000, 0x004d0000, 0x00330000, 0x00850000,
4870ee4a969SHerbert Xu 0x00450000, 0x00f90000, 0x00020000, 0x007f0000,
4880ee4a969SHerbert Xu 0x00500000, 0x003c0000, 0x009f0000, 0x00a80000,
4890ee4a969SHerbert Xu 0x00510000, 0x00a30000, 0x00400000, 0x008f0000,
4900ee4a969SHerbert Xu 0x00920000, 0x009d0000, 0x00380000, 0x00f50000,
4910ee4a969SHerbert Xu 0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000,
4920ee4a969SHerbert Xu 0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000,
4930ee4a969SHerbert Xu 0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000,
4940ee4a969SHerbert Xu 0x005f0000, 0x00970000, 0x00440000, 0x00170000,
4950ee4a969SHerbert Xu 0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000,
4960ee4a969SHerbert Xu 0x00640000, 0x005d0000, 0x00190000, 0x00730000,
4970ee4a969SHerbert Xu 0x00600000, 0x00810000, 0x004f0000, 0x00dc0000,
4980ee4a969SHerbert Xu 0x00220000, 0x002a0000, 0x00900000, 0x00880000,
4990ee4a969SHerbert Xu 0x00460000, 0x00ee0000, 0x00b80000, 0x00140000,
5000ee4a969SHerbert Xu 0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000,
5010ee4a969SHerbert Xu 0x00e00000, 0x00320000, 0x003a0000, 0x000a0000,
5020ee4a969SHerbert Xu 0x00490000, 0x00060000, 0x00240000, 0x005c0000,
5030ee4a969SHerbert Xu 0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000,
5040ee4a969SHerbert Xu 0x00910000, 0x00950000, 0x00e40000, 0x00790000,
5050ee4a969SHerbert Xu 0x00e70000, 0x00c80000, 0x00370000, 0x006d0000,
5060ee4a969SHerbert Xu 0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000,
5070ee4a969SHerbert Xu 0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000,
5080ee4a969SHerbert Xu 0x00650000, 0x007a0000, 0x00ae0000, 0x00080000,
5090ee4a969SHerbert Xu 0x00ba0000, 0x00780000, 0x00250000, 0x002e0000,
5100ee4a969SHerbert Xu 0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000,
5110ee4a969SHerbert Xu 0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000,
5120ee4a969SHerbert Xu 0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000,
5130ee4a969SHerbert Xu 0x00700000, 0x003e0000, 0x00b50000, 0x00660000,
5140ee4a969SHerbert Xu 0x00480000, 0x00030000, 0x00f60000, 0x000e0000,
5150ee4a969SHerbert Xu 0x00610000, 0x00350000, 0x00570000, 0x00b90000,
5160ee4a969SHerbert Xu 0x00860000, 0x00c10000, 0x001d0000, 0x009e0000,
5170ee4a969SHerbert Xu 0x00e10000, 0x00f80000, 0x00980000, 0x00110000,
5180ee4a969SHerbert Xu 0x00690000, 0x00d90000, 0x008e0000, 0x00940000,
5190ee4a969SHerbert Xu 0x009b0000, 0x001e0000, 0x00870000, 0x00e90000,
5200ee4a969SHerbert Xu 0x00ce0000, 0x00550000, 0x00280000, 0x00df0000,
5210ee4a969SHerbert Xu 0x008c0000, 0x00a10000, 0x00890000, 0x000d0000,
5220ee4a969SHerbert Xu 0x00bf0000, 0x00e60000, 0x00420000, 0x00680000,
5230ee4a969SHerbert Xu 0x00410000, 0x00990000, 0x002d0000, 0x000f0000,
5240ee4a969SHerbert Xu 0x00b00000, 0x00540000, 0x00bb0000, 0x00160000,
5250ee4a969SHerbert Xu }, {
5260ee4a969SHerbert Xu 0x63000000, 0x7c000000, 0x77000000, 0x7b000000,
5270ee4a969SHerbert Xu 0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000,
5280ee4a969SHerbert Xu 0x30000000, 0x01000000, 0x67000000, 0x2b000000,
5290ee4a969SHerbert Xu 0xfe000000, 0xd7000000, 0xab000000, 0x76000000,
5300ee4a969SHerbert Xu 0xca000000, 0x82000000, 0xc9000000, 0x7d000000,
5310ee4a969SHerbert Xu 0xfa000000, 0x59000000, 0x47000000, 0xf0000000,
5320ee4a969SHerbert Xu 0xad000000, 0xd4000000, 0xa2000000, 0xaf000000,
5330ee4a969SHerbert Xu 0x9c000000, 0xa4000000, 0x72000000, 0xc0000000,
5340ee4a969SHerbert Xu 0xb7000000, 0xfd000000, 0x93000000, 0x26000000,
5350ee4a969SHerbert Xu 0x36000000, 0x3f000000, 0xf7000000, 0xcc000000,
5360ee4a969SHerbert Xu 0x34000000, 0xa5000000, 0xe5000000, 0xf1000000,
5370ee4a969SHerbert Xu 0x71000000, 0xd8000000, 0x31000000, 0x15000000,
5380ee4a969SHerbert Xu 0x04000000, 0xc7000000, 0x23000000, 0xc3000000,
5390ee4a969SHerbert Xu 0x18000000, 0x96000000, 0x05000000, 0x9a000000,
5400ee4a969SHerbert Xu 0x07000000, 0x12000000, 0x80000000, 0xe2000000,
5410ee4a969SHerbert Xu 0xeb000000, 0x27000000, 0xb2000000, 0x75000000,
5420ee4a969SHerbert Xu 0x09000000, 0x83000000, 0x2c000000, 0x1a000000,
5430ee4a969SHerbert Xu 0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000,
5440ee4a969SHerbert Xu 0x52000000, 0x3b000000, 0xd6000000, 0xb3000000,
5450ee4a969SHerbert Xu 0x29000000, 0xe3000000, 0x2f000000, 0x84000000,
5460ee4a969SHerbert Xu 0x53000000, 0xd1000000, 0x00000000, 0xed000000,
5470ee4a969SHerbert Xu 0x20000000, 0xfc000000, 0xb1000000, 0x5b000000,
5480ee4a969SHerbert Xu 0x6a000000, 0xcb000000, 0xbe000000, 0x39000000,
5490ee4a969SHerbert Xu 0x4a000000, 0x4c000000, 0x58000000, 0xcf000000,
5500ee4a969SHerbert Xu 0xd0000000, 0xef000000, 0xaa000000, 0xfb000000,
5510ee4a969SHerbert Xu 0x43000000, 0x4d000000, 0x33000000, 0x85000000,
5520ee4a969SHerbert Xu 0x45000000, 0xf9000000, 0x02000000, 0x7f000000,
5530ee4a969SHerbert Xu 0x50000000, 0x3c000000, 0x9f000000, 0xa8000000,
5540ee4a969SHerbert Xu 0x51000000, 0xa3000000, 0x40000000, 0x8f000000,
5550ee4a969SHerbert Xu 0x92000000, 0x9d000000, 0x38000000, 0xf5000000,
5560ee4a969SHerbert Xu 0xbc000000, 0xb6000000, 0xda000000, 0x21000000,
5570ee4a969SHerbert Xu 0x10000000, 0xff000000, 0xf3000000, 0xd2000000,
5580ee4a969SHerbert Xu 0xcd000000, 0x0c000000, 0x13000000, 0xec000000,
5590ee4a969SHerbert Xu 0x5f000000, 0x97000000, 0x44000000, 0x17000000,
5600ee4a969SHerbert Xu 0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000,
5610ee4a969SHerbert Xu 0x64000000, 0x5d000000, 0x19000000, 0x73000000,
5620ee4a969SHerbert Xu 0x60000000, 0x81000000, 0x4f000000, 0xdc000000,
5630ee4a969SHerbert Xu 0x22000000, 0x2a000000, 0x90000000, 0x88000000,
5640ee4a969SHerbert Xu 0x46000000, 0xee000000, 0xb8000000, 0x14000000,
5650ee4a969SHerbert Xu 0xde000000, 0x5e000000, 0x0b000000, 0xdb000000,
5660ee4a969SHerbert Xu 0xe0000000, 0x32000000, 0x3a000000, 0x0a000000,
5670ee4a969SHerbert Xu 0x49000000, 0x06000000, 0x24000000, 0x5c000000,
5680ee4a969SHerbert Xu 0xc2000000, 0xd3000000, 0xac000000, 0x62000000,
5690ee4a969SHerbert Xu 0x91000000, 0x95000000, 0xe4000000, 0x79000000,
5700ee4a969SHerbert Xu 0xe7000000, 0xc8000000, 0x37000000, 0x6d000000,
5710ee4a969SHerbert Xu 0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000,
5720ee4a969SHerbert Xu 0x6c000000, 0x56000000, 0xf4000000, 0xea000000,
5730ee4a969SHerbert Xu 0x65000000, 0x7a000000, 0xae000000, 0x08000000,
5740ee4a969SHerbert Xu 0xba000000, 0x78000000, 0x25000000, 0x2e000000,
5750ee4a969SHerbert Xu 0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000,
5760ee4a969SHerbert Xu 0xe8000000, 0xdd000000, 0x74000000, 0x1f000000,
5770ee4a969SHerbert Xu 0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000,
5780ee4a969SHerbert Xu 0x70000000, 0x3e000000, 0xb5000000, 0x66000000,
5790ee4a969SHerbert Xu 0x48000000, 0x03000000, 0xf6000000, 0x0e000000,
5800ee4a969SHerbert Xu 0x61000000, 0x35000000, 0x57000000, 0xb9000000,
5810ee4a969SHerbert Xu 0x86000000, 0xc1000000, 0x1d000000, 0x9e000000,
5820ee4a969SHerbert Xu 0xe1000000, 0xf8000000, 0x98000000, 0x11000000,
5830ee4a969SHerbert Xu 0x69000000, 0xd9000000, 0x8e000000, 0x94000000,
5840ee4a969SHerbert Xu 0x9b000000, 0x1e000000, 0x87000000, 0xe9000000,
5850ee4a969SHerbert Xu 0xce000000, 0x55000000, 0x28000000, 0xdf000000,
5860ee4a969SHerbert Xu 0x8c000000, 0xa1000000, 0x89000000, 0x0d000000,
5870ee4a969SHerbert Xu 0xbf000000, 0xe6000000, 0x42000000, 0x68000000,
5880ee4a969SHerbert Xu 0x41000000, 0x99000000, 0x2d000000, 0x0f000000,
5890ee4a969SHerbert Xu 0xb0000000, 0x54000000, 0xbb000000, 0x16000000,
5900ee4a969SHerbert Xu }
5910ee4a969SHerbert Xu };
5920ee4a969SHerbert Xu
59361abc356SAndi Kleen __visible const u32 crypto_it_tab[4][256] ____cacheline_aligned = {
5940ee4a969SHerbert Xu {
5950ee4a969SHerbert Xu 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
5960ee4a969SHerbert Xu 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
5970ee4a969SHerbert Xu 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
5980ee4a969SHerbert Xu 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5,
5990ee4a969SHerbert Xu 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d,
6000ee4a969SHerbert Xu 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b,
6010ee4a969SHerbert Xu 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295,
6020ee4a969SHerbert Xu 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e,
6030ee4a969SHerbert Xu 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927,
6040ee4a969SHerbert Xu 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d,
6050ee4a969SHerbert Xu 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362,
6060ee4a969SHerbert Xu 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9,
6070ee4a969SHerbert Xu 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52,
6080ee4a969SHerbert Xu 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566,
6090ee4a969SHerbert Xu 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3,
6100ee4a969SHerbert Xu 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed,
6110ee4a969SHerbert Xu 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e,
6120ee4a969SHerbert Xu 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4,
6130ee4a969SHerbert Xu 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4,
6140ee4a969SHerbert Xu 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd,
6150ee4a969SHerbert Xu 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d,
6160ee4a969SHerbert Xu 0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060,
6170ee4a969SHerbert Xu 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967,
6180ee4a969SHerbert Xu 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879,
6190ee4a969SHerbert Xu 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000,
6200ee4a969SHerbert Xu 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c,
6210ee4a969SHerbert Xu 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36,
6220ee4a969SHerbert Xu 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624,
6230ee4a969SHerbert Xu 0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b,
6240ee4a969SHerbert Xu 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c,
6250ee4a969SHerbert Xu 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12,
6260ee4a969SHerbert Xu 0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14,
6270ee4a969SHerbert Xu 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3,
6280ee4a969SHerbert Xu 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b,
6290ee4a969SHerbert Xu 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8,
6300ee4a969SHerbert Xu 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684,
6310ee4a969SHerbert Xu 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7,
6320ee4a969SHerbert Xu 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177,
6330ee4a969SHerbert Xu 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947,
6340ee4a969SHerbert Xu 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322,
6350ee4a969SHerbert Xu 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498,
6360ee4a969SHerbert Xu 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f,
6370ee4a969SHerbert Xu 0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54,
6380ee4a969SHerbert Xu 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382,
6390ee4a969SHerbert Xu 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf,
6400ee4a969SHerbert Xu 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb,
6410ee4a969SHerbert Xu 0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83,
6420ee4a969SHerbert Xu 0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef,
6430ee4a969SHerbert Xu 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029,
6440ee4a969SHerbert Xu 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235,
6450ee4a969SHerbert Xu 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733,
6460ee4a969SHerbert Xu 0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117,
6470ee4a969SHerbert Xu 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4,
6480ee4a969SHerbert Xu 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546,
6490ee4a969SHerbert Xu 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb,
6500ee4a969SHerbert Xu 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d,
6510ee4a969SHerbert Xu 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb,
6520ee4a969SHerbert Xu 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a,
6530ee4a969SHerbert Xu 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773,
6540ee4a969SHerbert Xu 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478,
6550ee4a969SHerbert Xu 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2,
6560ee4a969SHerbert Xu 0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff,
6570ee4a969SHerbert Xu 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664,
6580ee4a969SHerbert Xu 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0,
6590ee4a969SHerbert Xu }, {
6600ee4a969SHerbert Xu 0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96,
6610ee4a969SHerbert Xu 0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x03e34b93,
6620ee4a969SHerbert Xu 0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525,
6630ee4a969SHerbert Xu 0xd7e54ffc, 0xcb2ac5d7, 0x44352680, 0xa362b58f,
6640ee4a969SHerbert Xu 0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1,
6650ee4a969SHerbert Xu 0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6,
6660ee4a969SHerbert Xu 0x5f8f03e7, 0x9c921595, 0x7a6dbfeb, 0x595295da,
6670ee4a969SHerbert Xu 0x83bed42d, 0x217458d3, 0x69e04929, 0xc8c98e44,
6680ee4a969SHerbert Xu 0x89c2756a, 0x798ef478, 0x3e58996b, 0x71b927dd,
6690ee4a969SHerbert Xu 0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4,
6700ee4a969SHerbert Xu 0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245,
6710ee4a969SHerbert Xu 0x7764b1e0, 0xae6bbb84, 0xa081fe1c, 0x2b08f994,
6720ee4a969SHerbert Xu 0x68487058, 0xfd458f19, 0x6cde9487, 0xf87b52b7,
6730ee4a969SHerbert Xu 0xd373ab23, 0x024b72e2, 0x8f1fe357, 0xab55662a,
6740ee4a969SHerbert Xu 0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5,
6750ee4a969SHerbert Xu 0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c,
6760ee4a969SHerbert Xu 0x1ccf8a2b, 0xb479a792, 0xf207f3f0, 0xe2694ea1,
6770ee4a969SHerbert Xu 0xf4da65cd, 0xbe0506d5, 0x6234d11f, 0xfea6c48a,
6780ee4a969SHerbert Xu 0x532e349d, 0x55f3a2a0, 0xe18a0532, 0xebf6a475,
6790ee4a969SHerbert Xu 0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51,
6800ee4a969SHerbert Xu 0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46,
6810ee4a969SHerbert Xu 0x8d5491b5, 0x5dc47105, 0xd406046f, 0x155060ff,
6820ee4a969SHerbert Xu 0xfb981924, 0xe9bdd697, 0x434089cc, 0x9ed96777,
6830ee4a969SHerbert Xu 0x42e8b0bd, 0x8b890788, 0x5b19e738, 0xeec879db,
6840ee4a969SHerbert Xu 0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000,
6850ee4a969SHerbert Xu 0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e,
6860ee4a969SHerbert Xu 0xff0efdfb, 0x38850f56, 0xd5ae3d1e, 0x392d3627,
6870ee4a969SHerbert Xu 0xd90f0a64, 0xa65c6821, 0x545b9bd1, 0x2e36243a,
6880ee4a969SHerbert Xu 0x670a0cb1, 0xe757930f, 0x96eeb4d2, 0x919b1b9e,
6890ee4a969SHerbert Xu 0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16,
6900ee4a969SHerbert Xu 0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d,
6910ee4a969SHerbert Xu 0x0d090e0b, 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8,
6920ee4a969SHerbert Xu 0x19f15785, 0x0775af4c, 0xdd99eebb, 0x607fa3fd,
6930ee4a969SHerbert Xu 0x2601f79f, 0xf5725cbc, 0x3b6644c5, 0x7efb5b34,
6940ee4a969SHerbert Xu 0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863,
6950ee4a969SHerbert Xu 0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420,
6960ee4a969SHerbert Xu 0x244a857d, 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d,
6970ee4a969SHerbert Xu 0x2f9e1d4b, 0x30b2dcf3, 0x52860dec, 0xe3c177d0,
6980ee4a969SHerbert Xu 0x16b32b6c, 0xb970a999, 0x489411fa, 0x64e94722,
6990ee4a969SHerbert Xu 0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef,
7000ee4a969SHerbert Xu 0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836,
7010ee4a969SHerbert Xu 0x81f5a6cf, 0xde7aa528, 0x8eb7da26, 0xbfad3fa4,
7020ee4a969SHerbert Xu 0x9d3a2ce4, 0x9278500d, 0xcc5f6a9b, 0x467e5462,
7030ee4a969SHerbert Xu 0x138df6c2, 0xb8d890e8, 0xf7392e5e, 0xafc382f5,
7040ee4a969SHerbert Xu 0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3,
7050ee4a969SHerbert Xu 0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b,
7060ee4a969SHerbert Xu 0x7826cd09, 0x18596ef4, 0xb79aec01, 0x9a4f83a8,
7070ee4a969SHerbert Xu 0x6e95e665, 0xe6ffaa7e, 0xcfbc2108, 0xe815efe6,
7080ee4a969SHerbert Xu 0x9be7bad9, 0x366f4ace, 0x099fead4, 0x7cb029d6,
7090ee4a969SHerbert Xu 0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0,
7100ee4a969SHerbert Xu 0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315,
7110ee4a969SHerbert Xu 0x9804f14a, 0xdaec41f7, 0x50cd7f0e, 0xf691172f,
7120ee4a969SHerbert Xu 0xd64d768d, 0xb0ef434d, 0x4daacc54, 0x0496e4df,
7130ee4a969SHerbert Xu 0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, 0x5165467f,
7140ee4a969SHerbert Xu 0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e,
7150ee4a969SHerbert Xu 0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13,
7160ee4a969SHerbert Xu 0x61d79a8c, 0x0ca1377a, 0x14f8598e, 0x3c13eb89,
7170ee4a969SHerbert Xu 0x27a9ceee, 0xc961b735, 0xe51ce1ed, 0xb1477a3c,
7180ee4a969SHerbert Xu 0xdfd29c59, 0x73f2553f, 0xce141879, 0x37c773bf,
7190ee4a969SHerbert Xu 0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886,
7200ee4a969SHerbert Xu 0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f,
7210ee4a969SHerbert Xu 0xc31d1672, 0x25e2bc0c, 0x493c288b, 0x950dff41,
7220ee4a969SHerbert Xu 0x01a83971, 0xb30c08de, 0xe4b4d89c, 0xc1566490,
7230ee4a969SHerbert Xu 0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042,
7240ee4a969SHerbert Xu }, {
7250ee4a969SHerbert Xu 0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e,
7260ee4a969SHerbert Xu 0xab3bcb6b, 0x9d1ff145, 0xfaacab58, 0xe34b9303,
7270ee4a969SHerbert Xu 0x302055fa, 0x76adf66d, 0xcc889176, 0x02f5254c,
7280ee4a969SHerbert Xu 0xe54ffcd7, 0x2ac5d7cb, 0x35268044, 0x62b58fa3,
7290ee4a969SHerbert Xu 0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0,
7300ee4a969SHerbert Xu 0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9,
7310ee4a969SHerbert Xu 0x8f03e75f, 0x9215959c, 0x6dbfeb7a, 0x5295da59,
7320ee4a969SHerbert Xu 0xbed42d83, 0x7458d321, 0xe0492969, 0xc98e44c8,
7330ee4a969SHerbert Xu 0xc2756a89, 0x8ef47879, 0x58996b3e, 0xb927dd71,
7340ee4a969SHerbert Xu 0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a,
7350ee4a969SHerbert Xu 0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f,
7360ee4a969SHerbert Xu 0x64b1e077, 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b,
7370ee4a969SHerbert Xu 0x48705868, 0x458f19fd, 0xde94876c, 0x7b52b7f8,
7380ee4a969SHerbert Xu 0x73ab23d3, 0x4b72e202, 0x1fe3578f, 0x55662aab,
7390ee4a969SHerbert Xu 0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508,
7400ee4a969SHerbert Xu 0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82,
7410ee4a969SHerbert Xu 0xcf8a2b1c, 0x79a792b4, 0x07f3f0f2, 0x694ea1e2,
7420ee4a969SHerbert Xu 0xda65cdf4, 0x0506d5be, 0x34d11f62, 0xa6c48afe,
7430ee4a969SHerbert Xu 0x2e349d53, 0xf3a2a055, 0x8a0532e1, 0xf6a475eb,
7440ee4a969SHerbert Xu 0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110,
7450ee4a969SHerbert Xu 0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd,
7460ee4a969SHerbert Xu 0x5491b58d, 0xc471055d, 0x06046fd4, 0x5060ff15,
7470ee4a969SHerbert Xu 0x981924fb, 0xbdd697e9, 0x4089cc43, 0xd967779e,
7480ee4a969SHerbert Xu 0xe8b0bd42, 0x8907888b, 0x19e7385b, 0xc879dbee,
7490ee4a969SHerbert Xu 0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000,
7500ee4a969SHerbert Xu 0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72,
7510ee4a969SHerbert Xu 0x0efdfbff, 0x850f5638, 0xae3d1ed5, 0x2d362739,
7520ee4a969SHerbert Xu 0x0f0a64d9, 0x5c6821a6, 0x5b9bd154, 0x36243a2e,
7530ee4a969SHerbert Xu 0x0a0cb167, 0x57930fe7, 0xeeb4d296, 0x9b1b9e91,
7540ee4a969SHerbert Xu 0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a,
7550ee4a969SHerbert Xu 0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17,
7560ee4a969SHerbert Xu 0x090e0b0d, 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9,
7570ee4a969SHerbert Xu 0xf1578519, 0x75af4c07, 0x99eebbdd, 0x7fa3fd60,
7580ee4a969SHerbert Xu 0x01f79f26, 0x725cbcf5, 0x6644c53b, 0xfb5b347e,
7590ee4a969SHerbert Xu 0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1,
7600ee4a969SHerbert Xu 0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011,
7610ee4a969SHerbert Xu 0x4a857d24, 0xbbd2f83d, 0xf9ae1132, 0x29c76da1,
7620ee4a969SHerbert Xu 0x9e1d4b2f, 0xb2dcf330, 0x860dec52, 0xc177d0e3,
7630ee4a969SHerbert Xu 0xb32b6c16, 0x70a999b9, 0x9411fa48, 0xe9472264,
7640ee4a969SHerbert Xu 0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90,
7650ee4a969SHerbert Xu 0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b,
7660ee4a969SHerbert Xu 0xf5a6cf81, 0x7aa528de, 0xb7da268e, 0xad3fa4bf,
7670ee4a969SHerbert Xu 0x3a2ce49d, 0x78500d92, 0x5f6a9bcc, 0x7e546246,
7680ee4a969SHerbert Xu 0x8df6c213, 0xd890e8b8, 0x392e5ef7, 0xc382f5af,
7690ee4a969SHerbert Xu 0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312,
7700ee4a969SHerbert Xu 0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb,
7710ee4a969SHerbert Xu 0x26cd0978, 0x596ef418, 0x9aec01b7, 0x4f83a89a,
7720ee4a969SHerbert Xu 0x95e6656e, 0xffaa7ee6, 0xbc2108cf, 0x15efe6e8,
7730ee4a969SHerbert Xu 0xe7bad99b, 0x6f4ace36, 0x9fead409, 0xb029d67c,
7740ee4a969SHerbert Xu 0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066,
7750ee4a969SHerbert Xu 0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8,
7760ee4a969SHerbert Xu 0x04f14a98, 0xec41f7da, 0xcd7f0e50, 0x91172ff6,
7770ee4a969SHerbert Xu 0x4d768dd6, 0xef434db0, 0xaacc544d, 0x96e4df04,
7780ee4a969SHerbert Xu 0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, 0x65467f51,
7790ee4a969SHerbert Xu 0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41,
7800ee4a969SHerbert Xu 0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347,
7810ee4a969SHerbert Xu 0xd79a8c61, 0xa1377a0c, 0xf8598e14, 0x13eb893c,
7820ee4a969SHerbert Xu 0xa9ceee27, 0x61b735c9, 0x1ce1ede5, 0x477a3cb1,
7830ee4a969SHerbert Xu 0xd29c59df, 0xf2553f73, 0x141879ce, 0xc773bf37,
7840ee4a969SHerbert Xu 0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db,
7850ee4a969SHerbert Xu 0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40,
7860ee4a969SHerbert Xu 0x1d1672c3, 0xe2bc0c25, 0x3c288b49, 0x0dff4195,
7870ee4a969SHerbert Xu 0xa8397101, 0x0c08deb3, 0xb4d89ce4, 0x566490c1,
7880ee4a969SHerbert Xu 0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257,
7890ee4a969SHerbert Xu }, {
7900ee4a969SHerbert Xu 0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27,
7910ee4a969SHerbert Xu 0x3bcb6bab, 0x1ff1459d, 0xacab58fa, 0x4b9303e3,
7920ee4a969SHerbert Xu 0x2055fa30, 0xadf66d76, 0x889176cc, 0xf5254c02,
7930ee4a969SHerbert Xu 0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, 0xb58fa362,
7940ee4a969SHerbert Xu 0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe,
7950ee4a969SHerbert Xu 0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3,
7960ee4a969SHerbert Xu 0x03e75f8f, 0x15959c92, 0xbfeb7a6d, 0x95da5952,
7970ee4a969SHerbert Xu 0xd42d83be, 0x58d32174, 0x492969e0, 0x8e44c8c9,
7980ee4a969SHerbert Xu 0x756a89c2, 0xf478798e, 0x996b3e58, 0x27dd71b9,
7990ee4a969SHerbert Xu 0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace,
8000ee4a969SHerbert Xu 0x63184adf, 0xe582311a, 0x97603351, 0x62457f53,
8010ee4a969SHerbert Xu 0xb1e07764, 0xbb84ae6b, 0xfe1ca081, 0xf9942b08,
8020ee4a969SHerbert Xu 0x70586848, 0x8f19fd45, 0x94876cde, 0x52b7f87b,
8030ee4a969SHerbert Xu 0xab23d373, 0x72e2024b, 0xe3578f1f, 0x662aab55,
8040ee4a969SHerbert Xu 0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837,
8050ee4a969SHerbert Xu 0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216,
8060ee4a969SHerbert Xu 0x8a2b1ccf, 0xa792b479, 0xf3f0f207, 0x4ea1e269,
8070ee4a969SHerbert Xu 0x65cdf4da, 0x06d5be05, 0xd11f6234, 0xc48afea6,
8080ee4a969SHerbert Xu 0x349d532e, 0xa2a055f3, 0x0532e18a, 0xa475ebf6,
8090ee4a969SHerbert Xu 0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e,
8100ee4a969SHerbert Xu 0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6,
8110ee4a969SHerbert Xu 0x91b58d54, 0x71055dc4, 0x046fd406, 0x60ff1550,
8120ee4a969SHerbert Xu 0x1924fb98, 0xd697e9bd, 0x89cc4340, 0x67779ed9,
8130ee4a969SHerbert Xu 0xb0bd42e8, 0x07888b89, 0xe7385b19, 0x79dbeec8,
8140ee4a969SHerbert Xu 0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000,
8150ee4a969SHerbert Xu 0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a,
8160ee4a969SHerbert Xu 0xfdfbff0e, 0x0f563885, 0x3d1ed5ae, 0x3627392d,
8170ee4a969SHerbert Xu 0x0a64d90f, 0x6821a65c, 0x9bd1545b, 0x243a2e36,
8180ee4a969SHerbert Xu 0x0cb1670a, 0x930fe757, 0xb4d296ee, 0x1b9e919b,
8190ee4a969SHerbert Xu 0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12,
8200ee4a969SHerbert Xu 0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b,
8210ee4a969SHerbert Xu 0x0e0b0d09, 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e,
8220ee4a969SHerbert Xu 0x578519f1, 0xaf4c0775, 0xeebbdd99, 0xa3fd607f,
8230ee4a969SHerbert Xu 0xf79f2601, 0x5cbcf572, 0x44c53b66, 0x5b347efb,
8240ee4a969SHerbert Xu 0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4,
8250ee4a969SHerbert Xu 0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6,
8260ee4a969SHerbert Xu 0x857d244a, 0xd2f83dbb, 0xae1132f9, 0xc76da129,
8270ee4a969SHerbert Xu 0x1d4b2f9e, 0xdcf330b2, 0x0dec5286, 0x77d0e3c1,
8280ee4a969SHerbert Xu 0x2b6c16b3, 0xa999b970, 0x11fa4894, 0x472264e9,
8290ee4a969SHerbert Xu 0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033,
8300ee4a969SHerbert Xu 0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4,
8310ee4a969SHerbert Xu 0xa6cf81f5, 0xa528de7a, 0xda268eb7, 0x3fa4bfad,
8320ee4a969SHerbert Xu 0x2ce49d3a, 0x500d9278, 0x6a9bcc5f, 0x5462467e,
8330ee4a969SHerbert Xu 0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, 0x82f5afc3,
8340ee4a969SHerbert Xu 0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225,
8350ee4a969SHerbert Xu 0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b,
8360ee4a969SHerbert Xu 0xcd097826, 0x6ef41859, 0xec01b79a, 0x83a89a4f,
8370ee4a969SHerbert Xu 0xe6656e95, 0xaa7ee6ff, 0x2108cfbc, 0xefe6e815,
8380ee4a969SHerbert Xu 0xbad99be7, 0x4ace366f, 0xead4099f, 0x29d67cb0,
8390ee4a969SHerbert Xu 0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2,
8400ee4a969SHerbert Xu 0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7,
8410ee4a969SHerbert Xu 0xf14a9804, 0x41f7daec, 0x7f0e50cd, 0x172ff691,
8420ee4a969SHerbert Xu 0x768dd64d, 0x434db0ef, 0xcc544daa, 0xe4df0496,
8430ee4a969SHerbert Xu 0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, 0x467f5165,
8440ee4a969SHerbert Xu 0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b,
8450ee4a969SHerbert Xu 0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6,
8460ee4a969SHerbert Xu 0x9a8c61d7, 0x377a0ca1, 0x598e14f8, 0xeb893c13,
8470ee4a969SHerbert Xu 0xceee27a9, 0xb735c961, 0xe1ede51c, 0x7a3cb147,
8480ee4a969SHerbert Xu 0x9c59dfd2, 0x553f73f2, 0x1879ce14, 0x73bf37c7,
8490ee4a969SHerbert Xu 0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44,
8500ee4a969SHerbert Xu 0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3,
8510ee4a969SHerbert Xu 0x1672c31d, 0xbc0c25e2, 0x288b493c, 0xff41950d,
8520ee4a969SHerbert Xu 0x397101a8, 0x08deb30c, 0xd89ce4b4, 0x6490c156,
8530ee4a969SHerbert Xu 0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8,
8540ee4a969SHerbert Xu }
8550ee4a969SHerbert Xu };
8560ee4a969SHerbert Xu
8571e25ca02SArd Biesheuvel static const u32 crypto_il_tab[4][256] ____cacheline_aligned = {
8580ee4a969SHerbert Xu {
8590ee4a969SHerbert Xu 0x00000052, 0x00000009, 0x0000006a, 0x000000d5,
8600ee4a969SHerbert Xu 0x00000030, 0x00000036, 0x000000a5, 0x00000038,
8610ee4a969SHerbert Xu 0x000000bf, 0x00000040, 0x000000a3, 0x0000009e,
8620ee4a969SHerbert Xu 0x00000081, 0x000000f3, 0x000000d7, 0x000000fb,
8630ee4a969SHerbert Xu 0x0000007c, 0x000000e3, 0x00000039, 0x00000082,
8640ee4a969SHerbert Xu 0x0000009b, 0x0000002f, 0x000000ff, 0x00000087,
8650ee4a969SHerbert Xu 0x00000034, 0x0000008e, 0x00000043, 0x00000044,
8660ee4a969SHerbert Xu 0x000000c4, 0x000000de, 0x000000e9, 0x000000cb,
8670ee4a969SHerbert Xu 0x00000054, 0x0000007b, 0x00000094, 0x00000032,
8680ee4a969SHerbert Xu 0x000000a6, 0x000000c2, 0x00000023, 0x0000003d,
8690ee4a969SHerbert Xu 0x000000ee, 0x0000004c, 0x00000095, 0x0000000b,
8700ee4a969SHerbert Xu 0x00000042, 0x000000fa, 0x000000c3, 0x0000004e,
8710ee4a969SHerbert Xu 0x00000008, 0x0000002e, 0x000000a1, 0x00000066,
8720ee4a969SHerbert Xu 0x00000028, 0x000000d9, 0x00000024, 0x000000b2,
8730ee4a969SHerbert Xu 0x00000076, 0x0000005b, 0x000000a2, 0x00000049,
8740ee4a969SHerbert Xu 0x0000006d, 0x0000008b, 0x000000d1, 0x00000025,
8750ee4a969SHerbert Xu 0x00000072, 0x000000f8, 0x000000f6, 0x00000064,
8760ee4a969SHerbert Xu 0x00000086, 0x00000068, 0x00000098, 0x00000016,
8770ee4a969SHerbert Xu 0x000000d4, 0x000000a4, 0x0000005c, 0x000000cc,
8780ee4a969SHerbert Xu 0x0000005d, 0x00000065, 0x000000b6, 0x00000092,
8790ee4a969SHerbert Xu 0x0000006c, 0x00000070, 0x00000048, 0x00000050,
8800ee4a969SHerbert Xu 0x000000fd, 0x000000ed, 0x000000b9, 0x000000da,
8810ee4a969SHerbert Xu 0x0000005e, 0x00000015, 0x00000046, 0x00000057,
8820ee4a969SHerbert Xu 0x000000a7, 0x0000008d, 0x0000009d, 0x00000084,
8830ee4a969SHerbert Xu 0x00000090, 0x000000d8, 0x000000ab, 0x00000000,
8840ee4a969SHerbert Xu 0x0000008c, 0x000000bc, 0x000000d3, 0x0000000a,
8850ee4a969SHerbert Xu 0x000000f7, 0x000000e4, 0x00000058, 0x00000005,
8860ee4a969SHerbert Xu 0x000000b8, 0x000000b3, 0x00000045, 0x00000006,
8870ee4a969SHerbert Xu 0x000000d0, 0x0000002c, 0x0000001e, 0x0000008f,
8880ee4a969SHerbert Xu 0x000000ca, 0x0000003f, 0x0000000f, 0x00000002,
8890ee4a969SHerbert Xu 0x000000c1, 0x000000af, 0x000000bd, 0x00000003,
8900ee4a969SHerbert Xu 0x00000001, 0x00000013, 0x0000008a, 0x0000006b,
8910ee4a969SHerbert Xu 0x0000003a, 0x00000091, 0x00000011, 0x00000041,
8920ee4a969SHerbert Xu 0x0000004f, 0x00000067, 0x000000dc, 0x000000ea,
8930ee4a969SHerbert Xu 0x00000097, 0x000000f2, 0x000000cf, 0x000000ce,
8940ee4a969SHerbert Xu 0x000000f0, 0x000000b4, 0x000000e6, 0x00000073,
8950ee4a969SHerbert Xu 0x00000096, 0x000000ac, 0x00000074, 0x00000022,
8960ee4a969SHerbert Xu 0x000000e7, 0x000000ad, 0x00000035, 0x00000085,
8970ee4a969SHerbert Xu 0x000000e2, 0x000000f9, 0x00000037, 0x000000e8,
8980ee4a969SHerbert Xu 0x0000001c, 0x00000075, 0x000000df, 0x0000006e,
8990ee4a969SHerbert Xu 0x00000047, 0x000000f1, 0x0000001a, 0x00000071,
9000ee4a969SHerbert Xu 0x0000001d, 0x00000029, 0x000000c5, 0x00000089,
9010ee4a969SHerbert Xu 0x0000006f, 0x000000b7, 0x00000062, 0x0000000e,
9020ee4a969SHerbert Xu 0x000000aa, 0x00000018, 0x000000be, 0x0000001b,
9030ee4a969SHerbert Xu 0x000000fc, 0x00000056, 0x0000003e, 0x0000004b,
9040ee4a969SHerbert Xu 0x000000c6, 0x000000d2, 0x00000079, 0x00000020,
9050ee4a969SHerbert Xu 0x0000009a, 0x000000db, 0x000000c0, 0x000000fe,
9060ee4a969SHerbert Xu 0x00000078, 0x000000cd, 0x0000005a, 0x000000f4,
9070ee4a969SHerbert Xu 0x0000001f, 0x000000dd, 0x000000a8, 0x00000033,
9080ee4a969SHerbert Xu 0x00000088, 0x00000007, 0x000000c7, 0x00000031,
9090ee4a969SHerbert Xu 0x000000b1, 0x00000012, 0x00000010, 0x00000059,
9100ee4a969SHerbert Xu 0x00000027, 0x00000080, 0x000000ec, 0x0000005f,
9110ee4a969SHerbert Xu 0x00000060, 0x00000051, 0x0000007f, 0x000000a9,
9120ee4a969SHerbert Xu 0x00000019, 0x000000b5, 0x0000004a, 0x0000000d,
9130ee4a969SHerbert Xu 0x0000002d, 0x000000e5, 0x0000007a, 0x0000009f,
9140ee4a969SHerbert Xu 0x00000093, 0x000000c9, 0x0000009c, 0x000000ef,
9150ee4a969SHerbert Xu 0x000000a0, 0x000000e0, 0x0000003b, 0x0000004d,
9160ee4a969SHerbert Xu 0x000000ae, 0x0000002a, 0x000000f5, 0x000000b0,
9170ee4a969SHerbert Xu 0x000000c8, 0x000000eb, 0x000000bb, 0x0000003c,
9180ee4a969SHerbert Xu 0x00000083, 0x00000053, 0x00000099, 0x00000061,
9190ee4a969SHerbert Xu 0x00000017, 0x0000002b, 0x00000004, 0x0000007e,
9200ee4a969SHerbert Xu 0x000000ba, 0x00000077, 0x000000d6, 0x00000026,
9210ee4a969SHerbert Xu 0x000000e1, 0x00000069, 0x00000014, 0x00000063,
9220ee4a969SHerbert Xu 0x00000055, 0x00000021, 0x0000000c, 0x0000007d,
9230ee4a969SHerbert Xu }, {
9240ee4a969SHerbert Xu 0x00005200, 0x00000900, 0x00006a00, 0x0000d500,
9250ee4a969SHerbert Xu 0x00003000, 0x00003600, 0x0000a500, 0x00003800,
9260ee4a969SHerbert Xu 0x0000bf00, 0x00004000, 0x0000a300, 0x00009e00,
9270ee4a969SHerbert Xu 0x00008100, 0x0000f300, 0x0000d700, 0x0000fb00,
9280ee4a969SHerbert Xu 0x00007c00, 0x0000e300, 0x00003900, 0x00008200,
9290ee4a969SHerbert Xu 0x00009b00, 0x00002f00, 0x0000ff00, 0x00008700,
9300ee4a969SHerbert Xu 0x00003400, 0x00008e00, 0x00004300, 0x00004400,
9310ee4a969SHerbert Xu 0x0000c400, 0x0000de00, 0x0000e900, 0x0000cb00,
9320ee4a969SHerbert Xu 0x00005400, 0x00007b00, 0x00009400, 0x00003200,
9330ee4a969SHerbert Xu 0x0000a600, 0x0000c200, 0x00002300, 0x00003d00,
9340ee4a969SHerbert Xu 0x0000ee00, 0x00004c00, 0x00009500, 0x00000b00,
9350ee4a969SHerbert Xu 0x00004200, 0x0000fa00, 0x0000c300, 0x00004e00,
9360ee4a969SHerbert Xu 0x00000800, 0x00002e00, 0x0000a100, 0x00006600,
9370ee4a969SHerbert Xu 0x00002800, 0x0000d900, 0x00002400, 0x0000b200,
9380ee4a969SHerbert Xu 0x00007600, 0x00005b00, 0x0000a200, 0x00004900,
9390ee4a969SHerbert Xu 0x00006d00, 0x00008b00, 0x0000d100, 0x00002500,
9400ee4a969SHerbert Xu 0x00007200, 0x0000f800, 0x0000f600, 0x00006400,
9410ee4a969SHerbert Xu 0x00008600, 0x00006800, 0x00009800, 0x00001600,
9420ee4a969SHerbert Xu 0x0000d400, 0x0000a400, 0x00005c00, 0x0000cc00,
9430ee4a969SHerbert Xu 0x00005d00, 0x00006500, 0x0000b600, 0x00009200,
9440ee4a969SHerbert Xu 0x00006c00, 0x00007000, 0x00004800, 0x00005000,
9450ee4a969SHerbert Xu 0x0000fd00, 0x0000ed00, 0x0000b900, 0x0000da00,
9460ee4a969SHerbert Xu 0x00005e00, 0x00001500, 0x00004600, 0x00005700,
9470ee4a969SHerbert Xu 0x0000a700, 0x00008d00, 0x00009d00, 0x00008400,
9480ee4a969SHerbert Xu 0x00009000, 0x0000d800, 0x0000ab00, 0x00000000,
9490ee4a969SHerbert Xu 0x00008c00, 0x0000bc00, 0x0000d300, 0x00000a00,
9500ee4a969SHerbert Xu 0x0000f700, 0x0000e400, 0x00005800, 0x00000500,
9510ee4a969SHerbert Xu 0x0000b800, 0x0000b300, 0x00004500, 0x00000600,
9520ee4a969SHerbert Xu 0x0000d000, 0x00002c00, 0x00001e00, 0x00008f00,
9530ee4a969SHerbert Xu 0x0000ca00, 0x00003f00, 0x00000f00, 0x00000200,
9540ee4a969SHerbert Xu 0x0000c100, 0x0000af00, 0x0000bd00, 0x00000300,
9550ee4a969SHerbert Xu 0x00000100, 0x00001300, 0x00008a00, 0x00006b00,
9560ee4a969SHerbert Xu 0x00003a00, 0x00009100, 0x00001100, 0x00004100,
9570ee4a969SHerbert Xu 0x00004f00, 0x00006700, 0x0000dc00, 0x0000ea00,
9580ee4a969SHerbert Xu 0x00009700, 0x0000f200, 0x0000cf00, 0x0000ce00,
9590ee4a969SHerbert Xu 0x0000f000, 0x0000b400, 0x0000e600, 0x00007300,
9600ee4a969SHerbert Xu 0x00009600, 0x0000ac00, 0x00007400, 0x00002200,
9610ee4a969SHerbert Xu 0x0000e700, 0x0000ad00, 0x00003500, 0x00008500,
9620ee4a969SHerbert Xu 0x0000e200, 0x0000f900, 0x00003700, 0x0000e800,
9630ee4a969SHerbert Xu 0x00001c00, 0x00007500, 0x0000df00, 0x00006e00,
9640ee4a969SHerbert Xu 0x00004700, 0x0000f100, 0x00001a00, 0x00007100,
9650ee4a969SHerbert Xu 0x00001d00, 0x00002900, 0x0000c500, 0x00008900,
9660ee4a969SHerbert Xu 0x00006f00, 0x0000b700, 0x00006200, 0x00000e00,
9670ee4a969SHerbert Xu 0x0000aa00, 0x00001800, 0x0000be00, 0x00001b00,
9680ee4a969SHerbert Xu 0x0000fc00, 0x00005600, 0x00003e00, 0x00004b00,
9690ee4a969SHerbert Xu 0x0000c600, 0x0000d200, 0x00007900, 0x00002000,
9700ee4a969SHerbert Xu 0x00009a00, 0x0000db00, 0x0000c000, 0x0000fe00,
9710ee4a969SHerbert Xu 0x00007800, 0x0000cd00, 0x00005a00, 0x0000f400,
9720ee4a969SHerbert Xu 0x00001f00, 0x0000dd00, 0x0000a800, 0x00003300,
9730ee4a969SHerbert Xu 0x00008800, 0x00000700, 0x0000c700, 0x00003100,
9740ee4a969SHerbert Xu 0x0000b100, 0x00001200, 0x00001000, 0x00005900,
9750ee4a969SHerbert Xu 0x00002700, 0x00008000, 0x0000ec00, 0x00005f00,
9760ee4a969SHerbert Xu 0x00006000, 0x00005100, 0x00007f00, 0x0000a900,
9770ee4a969SHerbert Xu 0x00001900, 0x0000b500, 0x00004a00, 0x00000d00,
9780ee4a969SHerbert Xu 0x00002d00, 0x0000e500, 0x00007a00, 0x00009f00,
9790ee4a969SHerbert Xu 0x00009300, 0x0000c900, 0x00009c00, 0x0000ef00,
9800ee4a969SHerbert Xu 0x0000a000, 0x0000e000, 0x00003b00, 0x00004d00,
9810ee4a969SHerbert Xu 0x0000ae00, 0x00002a00, 0x0000f500, 0x0000b000,
9820ee4a969SHerbert Xu 0x0000c800, 0x0000eb00, 0x0000bb00, 0x00003c00,
9830ee4a969SHerbert Xu 0x00008300, 0x00005300, 0x00009900, 0x00006100,
9840ee4a969SHerbert Xu 0x00001700, 0x00002b00, 0x00000400, 0x00007e00,
9850ee4a969SHerbert Xu 0x0000ba00, 0x00007700, 0x0000d600, 0x00002600,
9860ee4a969SHerbert Xu 0x0000e100, 0x00006900, 0x00001400, 0x00006300,
9870ee4a969SHerbert Xu 0x00005500, 0x00002100, 0x00000c00, 0x00007d00,
9880ee4a969SHerbert Xu }, {
9890ee4a969SHerbert Xu 0x00520000, 0x00090000, 0x006a0000, 0x00d50000,
9900ee4a969SHerbert Xu 0x00300000, 0x00360000, 0x00a50000, 0x00380000,
9910ee4a969SHerbert Xu 0x00bf0000, 0x00400000, 0x00a30000, 0x009e0000,
9920ee4a969SHerbert Xu 0x00810000, 0x00f30000, 0x00d70000, 0x00fb0000,
9930ee4a969SHerbert Xu 0x007c0000, 0x00e30000, 0x00390000, 0x00820000,
9940ee4a969SHerbert Xu 0x009b0000, 0x002f0000, 0x00ff0000, 0x00870000,
9950ee4a969SHerbert Xu 0x00340000, 0x008e0000, 0x00430000, 0x00440000,
9960ee4a969SHerbert Xu 0x00c40000, 0x00de0000, 0x00e90000, 0x00cb0000,
9970ee4a969SHerbert Xu 0x00540000, 0x007b0000, 0x00940000, 0x00320000,
9980ee4a969SHerbert Xu 0x00a60000, 0x00c20000, 0x00230000, 0x003d0000,
9990ee4a969SHerbert Xu 0x00ee0000, 0x004c0000, 0x00950000, 0x000b0000,
10000ee4a969SHerbert Xu 0x00420000, 0x00fa0000, 0x00c30000, 0x004e0000,
10010ee4a969SHerbert Xu 0x00080000, 0x002e0000, 0x00a10000, 0x00660000,
10020ee4a969SHerbert Xu 0x00280000, 0x00d90000, 0x00240000, 0x00b20000,
10030ee4a969SHerbert Xu 0x00760000, 0x005b0000, 0x00a20000, 0x00490000,
10040ee4a969SHerbert Xu 0x006d0000, 0x008b0000, 0x00d10000, 0x00250000,
10050ee4a969SHerbert Xu 0x00720000, 0x00f80000, 0x00f60000, 0x00640000,
10060ee4a969SHerbert Xu 0x00860000, 0x00680000, 0x00980000, 0x00160000,
10070ee4a969SHerbert Xu 0x00d40000, 0x00a40000, 0x005c0000, 0x00cc0000,
10080ee4a969SHerbert Xu 0x005d0000, 0x00650000, 0x00b60000, 0x00920000,
10090ee4a969SHerbert Xu 0x006c0000, 0x00700000, 0x00480000, 0x00500000,
10100ee4a969SHerbert Xu 0x00fd0000, 0x00ed0000, 0x00b90000, 0x00da0000,
10110ee4a969SHerbert Xu 0x005e0000, 0x00150000, 0x00460000, 0x00570000,
10120ee4a969SHerbert Xu 0x00a70000, 0x008d0000, 0x009d0000, 0x00840000,
10130ee4a969SHerbert Xu 0x00900000, 0x00d80000, 0x00ab0000, 0x00000000,
10140ee4a969SHerbert Xu 0x008c0000, 0x00bc0000, 0x00d30000, 0x000a0000,
10150ee4a969SHerbert Xu 0x00f70000, 0x00e40000, 0x00580000, 0x00050000,
10160ee4a969SHerbert Xu 0x00b80000, 0x00b30000, 0x00450000, 0x00060000,
10170ee4a969SHerbert Xu 0x00d00000, 0x002c0000, 0x001e0000, 0x008f0000,
10180ee4a969SHerbert Xu 0x00ca0000, 0x003f0000, 0x000f0000, 0x00020000,
10190ee4a969SHerbert Xu 0x00c10000, 0x00af0000, 0x00bd0000, 0x00030000,
10200ee4a969SHerbert Xu 0x00010000, 0x00130000, 0x008a0000, 0x006b0000,
10210ee4a969SHerbert Xu 0x003a0000, 0x00910000, 0x00110000, 0x00410000,
10220ee4a969SHerbert Xu 0x004f0000, 0x00670000, 0x00dc0000, 0x00ea0000,
10230ee4a969SHerbert Xu 0x00970000, 0x00f20000, 0x00cf0000, 0x00ce0000,
10240ee4a969SHerbert Xu 0x00f00000, 0x00b40000, 0x00e60000, 0x00730000,
10250ee4a969SHerbert Xu 0x00960000, 0x00ac0000, 0x00740000, 0x00220000,
10260ee4a969SHerbert Xu 0x00e70000, 0x00ad0000, 0x00350000, 0x00850000,
10270ee4a969SHerbert Xu 0x00e20000, 0x00f90000, 0x00370000, 0x00e80000,
10280ee4a969SHerbert Xu 0x001c0000, 0x00750000, 0x00df0000, 0x006e0000,
10290ee4a969SHerbert Xu 0x00470000, 0x00f10000, 0x001a0000, 0x00710000,
10300ee4a969SHerbert Xu 0x001d0000, 0x00290000, 0x00c50000, 0x00890000,
10310ee4a969SHerbert Xu 0x006f0000, 0x00b70000, 0x00620000, 0x000e0000,
10320ee4a969SHerbert Xu 0x00aa0000, 0x00180000, 0x00be0000, 0x001b0000,
10330ee4a969SHerbert Xu 0x00fc0000, 0x00560000, 0x003e0000, 0x004b0000,
10340ee4a969SHerbert Xu 0x00c60000, 0x00d20000, 0x00790000, 0x00200000,
10350ee4a969SHerbert Xu 0x009a0000, 0x00db0000, 0x00c00000, 0x00fe0000,
10360ee4a969SHerbert Xu 0x00780000, 0x00cd0000, 0x005a0000, 0x00f40000,
10370ee4a969SHerbert Xu 0x001f0000, 0x00dd0000, 0x00a80000, 0x00330000,
10380ee4a969SHerbert Xu 0x00880000, 0x00070000, 0x00c70000, 0x00310000,
10390ee4a969SHerbert Xu 0x00b10000, 0x00120000, 0x00100000, 0x00590000,
10400ee4a969SHerbert Xu 0x00270000, 0x00800000, 0x00ec0000, 0x005f0000,
10410ee4a969SHerbert Xu 0x00600000, 0x00510000, 0x007f0000, 0x00a90000,
10420ee4a969SHerbert Xu 0x00190000, 0x00b50000, 0x004a0000, 0x000d0000,
10430ee4a969SHerbert Xu 0x002d0000, 0x00e50000, 0x007a0000, 0x009f0000,
10440ee4a969SHerbert Xu 0x00930000, 0x00c90000, 0x009c0000, 0x00ef0000,
10450ee4a969SHerbert Xu 0x00a00000, 0x00e00000, 0x003b0000, 0x004d0000,
10460ee4a969SHerbert Xu 0x00ae0000, 0x002a0000, 0x00f50000, 0x00b00000,
10470ee4a969SHerbert Xu 0x00c80000, 0x00eb0000, 0x00bb0000, 0x003c0000,
10480ee4a969SHerbert Xu 0x00830000, 0x00530000, 0x00990000, 0x00610000,
10490ee4a969SHerbert Xu 0x00170000, 0x002b0000, 0x00040000, 0x007e0000,
10500ee4a969SHerbert Xu 0x00ba0000, 0x00770000, 0x00d60000, 0x00260000,
10510ee4a969SHerbert Xu 0x00e10000, 0x00690000, 0x00140000, 0x00630000,
10520ee4a969SHerbert Xu 0x00550000, 0x00210000, 0x000c0000, 0x007d0000,
10530ee4a969SHerbert Xu }, {
10540ee4a969SHerbert Xu 0x52000000, 0x09000000, 0x6a000000, 0xd5000000,
10550ee4a969SHerbert Xu 0x30000000, 0x36000000, 0xa5000000, 0x38000000,
10560ee4a969SHerbert Xu 0xbf000000, 0x40000000, 0xa3000000, 0x9e000000,
10570ee4a969SHerbert Xu 0x81000000, 0xf3000000, 0xd7000000, 0xfb000000,
10580ee4a969SHerbert Xu 0x7c000000, 0xe3000000, 0x39000000, 0x82000000,
10590ee4a969SHerbert Xu 0x9b000000, 0x2f000000, 0xff000000, 0x87000000,
10600ee4a969SHerbert Xu 0x34000000, 0x8e000000, 0x43000000, 0x44000000,
10610ee4a969SHerbert Xu 0xc4000000, 0xde000000, 0xe9000000, 0xcb000000,
10620ee4a969SHerbert Xu 0x54000000, 0x7b000000, 0x94000000, 0x32000000,
10630ee4a969SHerbert Xu 0xa6000000, 0xc2000000, 0x23000000, 0x3d000000,
10640ee4a969SHerbert Xu 0xee000000, 0x4c000000, 0x95000000, 0x0b000000,
10650ee4a969SHerbert Xu 0x42000000, 0xfa000000, 0xc3000000, 0x4e000000,
10660ee4a969SHerbert Xu 0x08000000, 0x2e000000, 0xa1000000, 0x66000000,
10670ee4a969SHerbert Xu 0x28000000, 0xd9000000, 0x24000000, 0xb2000000,
10680ee4a969SHerbert Xu 0x76000000, 0x5b000000, 0xa2000000, 0x49000000,
10690ee4a969SHerbert Xu 0x6d000000, 0x8b000000, 0xd1000000, 0x25000000,
10700ee4a969SHerbert Xu 0x72000000, 0xf8000000, 0xf6000000, 0x64000000,
10710ee4a969SHerbert Xu 0x86000000, 0x68000000, 0x98000000, 0x16000000,
10720ee4a969SHerbert Xu 0xd4000000, 0xa4000000, 0x5c000000, 0xcc000000,
10730ee4a969SHerbert Xu 0x5d000000, 0x65000000, 0xb6000000, 0x92000000,
10740ee4a969SHerbert Xu 0x6c000000, 0x70000000, 0x48000000, 0x50000000,
10750ee4a969SHerbert Xu 0xfd000000, 0xed000000, 0xb9000000, 0xda000000,
10760ee4a969SHerbert Xu 0x5e000000, 0x15000000, 0x46000000, 0x57000000,
10770ee4a969SHerbert Xu 0xa7000000, 0x8d000000, 0x9d000000, 0x84000000,
10780ee4a969SHerbert Xu 0x90000000, 0xd8000000, 0xab000000, 0x00000000,
10790ee4a969SHerbert Xu 0x8c000000, 0xbc000000, 0xd3000000, 0x0a000000,
10800ee4a969SHerbert Xu 0xf7000000, 0xe4000000, 0x58000000, 0x05000000,
10810ee4a969SHerbert Xu 0xb8000000, 0xb3000000, 0x45000000, 0x06000000,
10820ee4a969SHerbert Xu 0xd0000000, 0x2c000000, 0x1e000000, 0x8f000000,
10830ee4a969SHerbert Xu 0xca000000, 0x3f000000, 0x0f000000, 0x02000000,
10840ee4a969SHerbert Xu 0xc1000000, 0xaf000000, 0xbd000000, 0x03000000,
10850ee4a969SHerbert Xu 0x01000000, 0x13000000, 0x8a000000, 0x6b000000,
10860ee4a969SHerbert Xu 0x3a000000, 0x91000000, 0x11000000, 0x41000000,
10870ee4a969SHerbert Xu 0x4f000000, 0x67000000, 0xdc000000, 0xea000000,
10880ee4a969SHerbert Xu 0x97000000, 0xf2000000, 0xcf000000, 0xce000000,
10890ee4a969SHerbert Xu 0xf0000000, 0xb4000000, 0xe6000000, 0x73000000,
10900ee4a969SHerbert Xu 0x96000000, 0xac000000, 0x74000000, 0x22000000,
10910ee4a969SHerbert Xu 0xe7000000, 0xad000000, 0x35000000, 0x85000000,
10920ee4a969SHerbert Xu 0xe2000000, 0xf9000000, 0x37000000, 0xe8000000,
10930ee4a969SHerbert Xu 0x1c000000, 0x75000000, 0xdf000000, 0x6e000000,
10940ee4a969SHerbert Xu 0x47000000, 0xf1000000, 0x1a000000, 0x71000000,
10950ee4a969SHerbert Xu 0x1d000000, 0x29000000, 0xc5000000, 0x89000000,
10960ee4a969SHerbert Xu 0x6f000000, 0xb7000000, 0x62000000, 0x0e000000,
10970ee4a969SHerbert Xu 0xaa000000, 0x18000000, 0xbe000000, 0x1b000000,
10980ee4a969SHerbert Xu 0xfc000000, 0x56000000, 0x3e000000, 0x4b000000,
10990ee4a969SHerbert Xu 0xc6000000, 0xd2000000, 0x79000000, 0x20000000,
11000ee4a969SHerbert Xu 0x9a000000, 0xdb000000, 0xc0000000, 0xfe000000,
11010ee4a969SHerbert Xu 0x78000000, 0xcd000000, 0x5a000000, 0xf4000000,
11020ee4a969SHerbert Xu 0x1f000000, 0xdd000000, 0xa8000000, 0x33000000,
11030ee4a969SHerbert Xu 0x88000000, 0x07000000, 0xc7000000, 0x31000000,
11040ee4a969SHerbert Xu 0xb1000000, 0x12000000, 0x10000000, 0x59000000,
11050ee4a969SHerbert Xu 0x27000000, 0x80000000, 0xec000000, 0x5f000000,
11060ee4a969SHerbert Xu 0x60000000, 0x51000000, 0x7f000000, 0xa9000000,
11070ee4a969SHerbert Xu 0x19000000, 0xb5000000, 0x4a000000, 0x0d000000,
11080ee4a969SHerbert Xu 0x2d000000, 0xe5000000, 0x7a000000, 0x9f000000,
11090ee4a969SHerbert Xu 0x93000000, 0xc9000000, 0x9c000000, 0xef000000,
11100ee4a969SHerbert Xu 0xa0000000, 0xe0000000, 0x3b000000, 0x4d000000,
11110ee4a969SHerbert Xu 0xae000000, 0x2a000000, 0xf5000000, 0xb0000000,
11120ee4a969SHerbert Xu 0xc8000000, 0xeb000000, 0xbb000000, 0x3c000000,
11130ee4a969SHerbert Xu 0x83000000, 0x53000000, 0x99000000, 0x61000000,
11140ee4a969SHerbert Xu 0x17000000, 0x2b000000, 0x04000000, 0x7e000000,
11150ee4a969SHerbert Xu 0xba000000, 0x77000000, 0xd6000000, 0x26000000,
11160ee4a969SHerbert Xu 0xe1000000, 0x69000000, 0x14000000, 0x63000000,
11170ee4a969SHerbert Xu 0x55000000, 0x21000000, 0x0c000000, 0x7d000000,
11180ee4a969SHerbert Xu }
11190ee4a969SHerbert Xu };
112096e82e45SSebastian Siewior
112196e82e45SSebastian Siewior EXPORT_SYMBOL_GPL(crypto_ft_tab);
112296e82e45SSebastian Siewior EXPORT_SYMBOL_GPL(crypto_it_tab);
1123f8246af0SSebastian Siewior
11245427663fSSebastian Siewior /**
11255427663fSSebastian Siewior * crypto_aes_set_key - Set the AES key.
11265427663fSSebastian Siewior * @tfm: The %crypto_tfm that is used in the context.
11275427663fSSebastian Siewior * @in_key: The input key.
11285427663fSSebastian Siewior * @key_len: The size of the key.
11295427663fSSebastian Siewior *
1130674f368aSEric Biggers * This function uses aes_expand_key() to expand the key. &crypto_aes_ctx
1131674f368aSEric Biggers * _must_ be the private data embedded in @tfm which is retrieved with
1132674f368aSEric Biggers * crypto_tfm_ctx().
1133674f368aSEric Biggers *
1134674f368aSEric Biggers * Return: 0 on success; -EINVAL on failure (only happens for bad key lengths)
11355427663fSSebastian Siewior */
crypto_aes_set_key(struct crypto_tfm * tfm,const u8 * in_key,unsigned int key_len)11365427663fSSebastian Siewior int crypto_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
11375427663fSSebastian Siewior unsigned int key_len)
11385427663fSSebastian Siewior {
11395427663fSSebastian Siewior struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
11405427663fSSebastian Siewior
1141674f368aSEric Biggers return aes_expandkey(ctx, in_key, key_len);
11425427663fSSebastian Siewior }
114396e82e45SSebastian Siewior EXPORT_SYMBOL_GPL(crypto_aes_set_key);
1144f8246af0SSebastian Siewior
1145f8246af0SSebastian Siewior /* encrypt a block of text */
1146f8246af0SSebastian Siewior
1147be5fb270SSebastian Siewior #define f_rn(bo, bi, n, k) do { \
114896e82e45SSebastian Siewior bo[n] = crypto_ft_tab[0][byte(bi[n], 0)] ^ \
114996e82e45SSebastian Siewior crypto_ft_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
115096e82e45SSebastian Siewior crypto_ft_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
115196e82e45SSebastian Siewior crypto_ft_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
1152be5fb270SSebastian Siewior } while (0)
1153be5fb270SSebastian Siewior
1154be5fb270SSebastian Siewior #define f_nround(bo, bi, k) do {\
1155f8246af0SSebastian Siewior f_rn(bo, bi, 0, k); \
1156f8246af0SSebastian Siewior f_rn(bo, bi, 1, k); \
1157f8246af0SSebastian Siewior f_rn(bo, bi, 2, k); \
1158f8246af0SSebastian Siewior f_rn(bo, bi, 3, k); \
1159be5fb270SSebastian Siewior k += 4; \
1160be5fb270SSebastian Siewior } while (0)
1161f8246af0SSebastian Siewior
1162be5fb270SSebastian Siewior #define f_rl(bo, bi, n, k) do { \
116396e82e45SSebastian Siewior bo[n] = crypto_fl_tab[0][byte(bi[n], 0)] ^ \
116496e82e45SSebastian Siewior crypto_fl_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
116596e82e45SSebastian Siewior crypto_fl_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
116696e82e45SSebastian Siewior crypto_fl_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
1167be5fb270SSebastian Siewior } while (0)
1168be5fb270SSebastian Siewior
1169be5fb270SSebastian Siewior #define f_lround(bo, bi, k) do {\
1170f8246af0SSebastian Siewior f_rl(bo, bi, 0, k); \
1171f8246af0SSebastian Siewior f_rl(bo, bi, 1, k); \
1172f8246af0SSebastian Siewior f_rl(bo, bi, 2, k); \
1173be5fb270SSebastian Siewior f_rl(bo, bi, 3, k); \
1174be5fb270SSebastian Siewior } while (0)
1175f8246af0SSebastian Siewior
crypto_aes_encrypt(struct crypto_tfm * tfm,u8 * out,const u8 * in)1176724ecd3cSArd Biesheuvel static void crypto_aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1177f8246af0SSebastian Siewior {
117896e82e45SSebastian Siewior const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
1179f8246af0SSebastian Siewior u32 b0[4], b1[4];
118096e82e45SSebastian Siewior const u32 *kp = ctx->key_enc + 4;
118196e82e45SSebastian Siewior const int key_len = ctx->key_length;
1182f8246af0SSebastian Siewior
1183ec38a937SArd Biesheuvel b0[0] = ctx->key_enc[0] ^ get_unaligned_le32(in);
1184ec38a937SArd Biesheuvel b0[1] = ctx->key_enc[1] ^ get_unaligned_le32(in + 4);
1185ec38a937SArd Biesheuvel b0[2] = ctx->key_enc[2] ^ get_unaligned_le32(in + 8);
1186ec38a937SArd Biesheuvel b0[3] = ctx->key_enc[3] ^ get_unaligned_le32(in + 12);
1187f8246af0SSebastian Siewior
118896e82e45SSebastian Siewior if (key_len > 24) {
1189f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1190f8246af0SSebastian Siewior f_nround(b0, b1, kp);
1191f8246af0SSebastian Siewior }
1192f8246af0SSebastian Siewior
119396e82e45SSebastian Siewior if (key_len > 16) {
1194f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1195f8246af0SSebastian Siewior f_nround(b0, b1, kp);
1196f8246af0SSebastian Siewior }
1197f8246af0SSebastian Siewior
1198f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1199f8246af0SSebastian Siewior f_nround(b0, b1, kp);
1200f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1201f8246af0SSebastian Siewior f_nround(b0, b1, kp);
1202f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1203f8246af0SSebastian Siewior f_nround(b0, b1, kp);
1204f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1205f8246af0SSebastian Siewior f_nround(b0, b1, kp);
1206f8246af0SSebastian Siewior f_nround(b1, b0, kp);
1207f8246af0SSebastian Siewior f_lround(b0, b1, kp);
1208f8246af0SSebastian Siewior
1209ec38a937SArd Biesheuvel put_unaligned_le32(b0[0], out);
1210ec38a937SArd Biesheuvel put_unaligned_le32(b0[1], out + 4);
1211ec38a937SArd Biesheuvel put_unaligned_le32(b0[2], out + 8);
1212ec38a937SArd Biesheuvel put_unaligned_le32(b0[3], out + 12);
1213f8246af0SSebastian Siewior }
1214f8246af0SSebastian Siewior
1215f8246af0SSebastian Siewior /* decrypt a block of text */
1216f8246af0SSebastian Siewior
1217be5fb270SSebastian Siewior #define i_rn(bo, bi, n, k) do { \
121896e82e45SSebastian Siewior bo[n] = crypto_it_tab[0][byte(bi[n], 0)] ^ \
121996e82e45SSebastian Siewior crypto_it_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \
122096e82e45SSebastian Siewior crypto_it_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
122196e82e45SSebastian Siewior crypto_it_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \
1222be5fb270SSebastian Siewior } while (0)
1223be5fb270SSebastian Siewior
1224be5fb270SSebastian Siewior #define i_nround(bo, bi, k) do {\
1225f8246af0SSebastian Siewior i_rn(bo, bi, 0, k); \
1226f8246af0SSebastian Siewior i_rn(bo, bi, 1, k); \
1227f8246af0SSebastian Siewior i_rn(bo, bi, 2, k); \
1228f8246af0SSebastian Siewior i_rn(bo, bi, 3, k); \
122996e82e45SSebastian Siewior k += 4; \
1230be5fb270SSebastian Siewior } while (0)
1231f8246af0SSebastian Siewior
1232be5fb270SSebastian Siewior #define i_rl(bo, bi, n, k) do { \
123396e82e45SSebastian Siewior bo[n] = crypto_il_tab[0][byte(bi[n], 0)] ^ \
123496e82e45SSebastian Siewior crypto_il_tab[1][byte(bi[(n + 3) & 3], 1)] ^ \
123596e82e45SSebastian Siewior crypto_il_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
123696e82e45SSebastian Siewior crypto_il_tab[3][byte(bi[(n + 1) & 3], 3)] ^ *(k + n); \
1237be5fb270SSebastian Siewior } while (0)
1238be5fb270SSebastian Siewior
1239be5fb270SSebastian Siewior #define i_lround(bo, bi, k) do {\
1240f8246af0SSebastian Siewior i_rl(bo, bi, 0, k); \
1241f8246af0SSebastian Siewior i_rl(bo, bi, 1, k); \
1242f8246af0SSebastian Siewior i_rl(bo, bi, 2, k); \
1243be5fb270SSebastian Siewior i_rl(bo, bi, 3, k); \
1244be5fb270SSebastian Siewior } while (0)
1245f8246af0SSebastian Siewior
crypto_aes_decrypt(struct crypto_tfm * tfm,u8 * out,const u8 * in)1246724ecd3cSArd Biesheuvel static void crypto_aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1247f8246af0SSebastian Siewior {
124896e82e45SSebastian Siewior const struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
1249f8246af0SSebastian Siewior u32 b0[4], b1[4];
1250f8246af0SSebastian Siewior const int key_len = ctx->key_length;
125196e82e45SSebastian Siewior const u32 *kp = ctx->key_dec + 4;
1252f8246af0SSebastian Siewior
1253ec38a937SArd Biesheuvel b0[0] = ctx->key_dec[0] ^ get_unaligned_le32(in);
1254ec38a937SArd Biesheuvel b0[1] = ctx->key_dec[1] ^ get_unaligned_le32(in + 4);
1255ec38a937SArd Biesheuvel b0[2] = ctx->key_dec[2] ^ get_unaligned_le32(in + 8);
1256ec38a937SArd Biesheuvel b0[3] = ctx->key_dec[3] ^ get_unaligned_le32(in + 12);
1257f8246af0SSebastian Siewior
1258f8246af0SSebastian Siewior if (key_len > 24) {
1259f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1260f8246af0SSebastian Siewior i_nround(b0, b1, kp);
1261f8246af0SSebastian Siewior }
1262f8246af0SSebastian Siewior
1263f8246af0SSebastian Siewior if (key_len > 16) {
1264f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1265f8246af0SSebastian Siewior i_nround(b0, b1, kp);
1266f8246af0SSebastian Siewior }
1267f8246af0SSebastian Siewior
1268f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1269f8246af0SSebastian Siewior i_nround(b0, b1, kp);
1270f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1271f8246af0SSebastian Siewior i_nround(b0, b1, kp);
1272f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1273f8246af0SSebastian Siewior i_nround(b0, b1, kp);
1274f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1275f8246af0SSebastian Siewior i_nround(b0, b1, kp);
1276f8246af0SSebastian Siewior i_nround(b1, b0, kp);
1277f8246af0SSebastian Siewior i_lround(b0, b1, kp);
1278f8246af0SSebastian Siewior
1279ec38a937SArd Biesheuvel put_unaligned_le32(b0[0], out);
1280ec38a937SArd Biesheuvel put_unaligned_le32(b0[1], out + 4);
1281ec38a937SArd Biesheuvel put_unaligned_le32(b0[2], out + 8);
1282ec38a937SArd Biesheuvel put_unaligned_le32(b0[3], out + 12);
1283f8246af0SSebastian Siewior }
1284f8246af0SSebastian Siewior
1285f8246af0SSebastian Siewior static struct crypto_alg aes_alg = {
1286f8246af0SSebastian Siewior .cra_name = "aes",
1287f8246af0SSebastian Siewior .cra_driver_name = "aes-generic",
1288f8246af0SSebastian Siewior .cra_priority = 100,
1289f8246af0SSebastian Siewior .cra_flags = CRYPTO_ALG_TYPE_CIPHER,
1290f8246af0SSebastian Siewior .cra_blocksize = AES_BLOCK_SIZE,
129196e82e45SSebastian Siewior .cra_ctxsize = sizeof(struct crypto_aes_ctx),
1292f8246af0SSebastian Siewior .cra_module = THIS_MODULE,
1293f8246af0SSebastian Siewior .cra_u = {
1294f8246af0SSebastian Siewior .cipher = {
1295f8246af0SSebastian Siewior .cia_min_keysize = AES_MIN_KEY_SIZE,
1296f8246af0SSebastian Siewior .cia_max_keysize = AES_MAX_KEY_SIZE,
129796e82e45SSebastian Siewior .cia_setkey = crypto_aes_set_key,
1298724ecd3cSArd Biesheuvel .cia_encrypt = crypto_aes_encrypt,
1299724ecd3cSArd Biesheuvel .cia_decrypt = crypto_aes_decrypt
1300f8246af0SSebastian Siewior }
1301f8246af0SSebastian Siewior }
1302f8246af0SSebastian Siewior };
1303f8246af0SSebastian Siewior
aes_init(void)1304f8246af0SSebastian Siewior static int __init aes_init(void)
1305f8246af0SSebastian Siewior {
1306f8246af0SSebastian Siewior return crypto_register_alg(&aes_alg);
1307f8246af0SSebastian Siewior }
1308f8246af0SSebastian Siewior
aes_fini(void)1309f8246af0SSebastian Siewior static void __exit aes_fini(void)
1310f8246af0SSebastian Siewior {
1311f8246af0SSebastian Siewior crypto_unregister_alg(&aes_alg);
1312f8246af0SSebastian Siewior }
1313f8246af0SSebastian Siewior
1314c4741b23SEric Biggers subsys_initcall(aes_init);
1315f8246af0SSebastian Siewior module_exit(aes_fini);
1316f8246af0SSebastian Siewior
1317f8246af0SSebastian Siewior MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
1318f8246af0SSebastian Siewior MODULE_LICENSE("Dual BSD/GPL");
13195d26a105SKees Cook MODULE_ALIAS_CRYPTO("aes");
13203e14dcf7SMathias Krause MODULE_ALIAS_CRYPTO("aes-generic");
1321