1 /* 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> (conv 13 * 14 * This program is free software; you can redi 15 * it under the terms of the GNU General Publi 16 * the Free Software Foundation; either versio 17 * (at your option) any later version. 18 * 19 * ------------------------------------------- 20 * Copyright (c) 2002, Dr Brian Gladman <brg@g 21 * All rights reserved. 22 * 23 * LICENSE TERMS 24 * 25 * The free distribution and use of this softw 26 * form is allowed (with or without changes) p 27 * 28 * 1. distributions of this source code incl 29 * notice, this list of conditions and th 30 * 31 * 2. distributions in binary form include t 32 * notice, this list of conditions and th 33 * in the documentation and/or other asso 34 * 35 * 3. the copyright holder's name is not use 36 * built using this software without spec 37 * 38 * ALTERNATIVELY, provided that this notice is 39 * may be distributed under the terms of the G 40 * in which case the provisions of the GPL app 41 * 42 * DISCLAIMER 43 * 44 * This software is provided 'as is' with no e 45 * in respect of its properties, including, bu 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 59 static inline u8 byte(const u32 x, const unsig 60 { 61 return x >> (n << 3); 62 } 63 64 /* cacheline-aligned to facilitate prefetching 65 __visible const u32 crypto_ft_tab[4][256] ____ 66 { 67 0xa56363c6, 0x847c7cf8, 0x9977 68 0x0df2f2ff, 0xbd6b6bd6, 0xb16f 69 0x50303060, 0x03010102, 0xa967 70 0x19fefee7, 0x62d7d7b5, 0xe6ab 71 0x45caca8f, 0x9d82821f, 0x40c9 72 0x15fafaef, 0xeb5959b2, 0xc947 73 0xecadad41, 0x67d4d4b3, 0xfda2 74 0xbf9c9c23, 0xf7a4a453, 0x9672 75 0xc2b7b775, 0x1cfdfde1, 0xae93 76 0x5a36366c, 0x413f3f7e, 0x02f7 77 0x5c343468, 0xf4a5a551, 0x34e5 78 0x937171e2, 0x73d8d8ab, 0x5331 79 0x0c040408, 0x52c7c795, 0x6523 80 0x28181830, 0xa1969637, 0x0f05 81 0x0907070e, 0x36121224, 0x9b80 82 0x26ebebcd, 0x6927274e, 0xcdb2 83 0x1b090912, 0x9e83831d, 0x742c 84 0x2d1b1b36, 0xb26e6edc, 0xee5a 85 0xf65252a4, 0x4d3b3b76, 0x61d6 86 0x7b292952, 0x3ee3e3dd, 0x712f 87 0xf55353a6, 0x68d1d1b9, 0x0000 88 0x60202040, 0x1ffcfce3, 0xc8b1 89 0xbe6a6ad4, 0x46cbcb8d, 0xd9be 90 0xde4a4a94, 0xd44c4c98, 0xe858 91 0x6bd0d0bb, 0x2aefefc5, 0xe5aa 92 0xc5434386, 0xd74d4d9a, 0x5533 93 0xcf45458a, 0x10f9f9e9, 0x0602 94 0xf05050a0, 0x443c3c78, 0xba9f 95 0xf35151a2, 0xfea3a35d, 0xc040 96 0xad92923f, 0xbc9d9d21, 0x4838 97 0xdfbcbc63, 0xc1b6b677, 0x75da 98 0x30101020, 0x1affffe5, 0x0ef3 99 0x4ccdcd81, 0x140c0c18, 0x3513 100 0xe15f5fbe, 0xa2979735, 0xcc44 101 0x57c4c493, 0xf2a7a755, 0x827e 102 0xac6464c8, 0xe75d5dba, 0x2b19 103 0xa06060c0, 0x98818119, 0xd14f 104 0x66222244, 0x7e2a2a54, 0xab90 105 0xca46468c, 0x29eeeec7, 0xd3b8 106 0x79dedea7, 0xe25e5ebc, 0x1d0b 107 0x3be0e0db, 0x56323264, 0x4e3a 108 0xdb494992, 0x0a06060c, 0x6c24 109 0x5dc2c29f, 0x6ed3d3bd, 0xefac 110 0xa8919139, 0xa4959531, 0x37e4 111 0x32e7e7d5, 0x43c8c88b, 0x5937 112 0x8c8d8d01, 0x64d5d5b1, 0xd24e 113 0xb46c6cd8, 0xfa5656ac, 0x07f4 114 0xaf6565ca, 0x8e7a7af4, 0xe9ae 115 0xd5baba6f, 0x887878f0, 0x6f25 116 0x241c1c38, 0xf1a6a657, 0xc7b4 117 0x23e8e8cb, 0x7cdddda1, 0x9c74 118 0xdd4b4b96, 0xdcbdbd61, 0x868b 119 0x907070e0, 0x423e3e7c, 0xc4b5 120 0xd8484890, 0x05030306, 0x01f6 121 0xa36161c2, 0x5f35356a, 0xf957 122 0x91868617, 0x58c1c199, 0x271d 123 0x38e1e1d9, 0x13f8f8eb, 0xb398 124 0xbb6969d2, 0x70d9d9a9, 0x898e 125 0xb69b9b2d, 0x221e1e3c, 0x9287 126 0x49cece87, 0xff5555aa, 0x7828 127 0x8f8c8c03, 0xf8a1a159, 0x8089 128 0xdabfbf65, 0x31e6e6d7, 0xc642 129 0xc3414182, 0xb0999929, 0x772d 130 0xcbb0b07b, 0xfc5454a8, 0xd6bb 131 }, { 132 0x6363c6a5, 0x7c7cf884, 0x7777 133 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6f 134 0x30306050, 0x01010203, 0x6767 135 0xfefee719, 0xd7d7b562, 0xabab 136 0xcaca8f45, 0x82821f9d, 0xc9c9 137 0xfafaef15, 0x5959b2eb, 0x4747 138 0xadad41ec, 0xd4d4b367, 0xa2a2 139 0x9c9c23bf, 0xa4a453f7, 0x7272 140 0xb7b775c2, 0xfdfde11c, 0x9393 141 0x36366c5a, 0x3f3f7e41, 0xf7f7 142 0x3434685c, 0xa5a551f4, 0xe5e5 143 0x7171e293, 0xd8d8ab73, 0x3131 144 0x0404080c, 0xc7c79552, 0x2323 145 0x18183028, 0x969637a1, 0x0505 146 0x07070e09, 0x12122436, 0x8080 147 0xebebcd26, 0x27274e69, 0xb2b2 148 0x0909121b, 0x83831d9e, 0x2c2c 149 0x1b1b362d, 0x6e6edcb2, 0x5a5a 150 0x5252a4f6, 0x3b3b764d, 0xd6d6 151 0x2929527b, 0xe3e3dd3e, 0x2f2f 152 0x5353a6f5, 0xd1d1b968, 0x0000 153 0x20204060, 0xfcfce31f, 0xb1b1 154 0x6a6ad4be, 0xcbcb8d46, 0xbebe 155 0x4a4a94de, 0x4c4c98d4, 0x5858 156 0xd0d0bb6b, 0xefefc52a, 0xaaaa 157 0x434386c5, 0x4d4d9ad7, 0x3333 158 0x45458acf, 0xf9f9e910, 0x0202 159 0x5050a0f0, 0x3c3c7844, 0x9f9f 160 0x5151a2f3, 0xa3a35dfe, 0x4040 161 0x92923fad, 0x9d9d21bc, 0x3838 162 0xbcbc63df, 0xb6b677c1, 0xdada 163 0x10102030, 0xffffe51a, 0xf3f3 164 0xcdcd814c, 0x0c0c1814, 0x1313 165 0x5f5fbee1, 0x979735a2, 0x4444 166 0xc4c49357, 0xa7a755f2, 0x7e7e 167 0x6464c8ac, 0x5d5dbae7, 0x1919 168 0x6060c0a0, 0x81811998, 0x4f4f 169 0x22224466, 0x2a2a547e, 0x9090 170 0x46468cca, 0xeeeec729, 0xb8b8 171 0xdedea779, 0x5e5ebce2, 0x0b0b 172 0xe0e0db3b, 0x32326456, 0x3a3a 173 0x494992db, 0x06060c0a, 0x2424 174 0xc2c29f5d, 0xd3d3bd6e, 0xacac 175 0x919139a8, 0x959531a4, 0xe4e4 176 0xe7e7d532, 0xc8c88b43, 0x3737 177 0x8d8d018c, 0xd5d5b164, 0x4e4e 178 0x6c6cd8b4, 0x5656acfa, 0xf4f4 179 0x6565caaf, 0x7a7af48e, 0xaeae 180 0xbaba6fd5, 0x7878f088, 0x2525 181 0x1c1c3824, 0xa6a657f1, 0xb4b4 182 0xe8e8cb23, 0xdddda17c, 0x7474 183 0x4b4b96dd, 0xbdbd61dc, 0x8b8b 184 0x7070e090, 0x3e3e7c42, 0xb5b5 185 0x484890d8, 0x03030605, 0xf6f6 186 0x6161c2a3, 0x35356a5f, 0x5757 187 0x86861791, 0xc1c19958, 0x1d1d 188 0xe1e1d938, 0xf8f8eb13, 0x9898 189 0x6969d2bb, 0xd9d9a970, 0x8e8e 190 0x9b9b2db6, 0x1e1e3c22, 0x8787 191 0xcece8749, 0x5555aaff, 0x2828 192 0x8c8c038f, 0xa1a159f8, 0x8989 193 0xbfbf65da, 0xe6e6d731, 0x4242 194 0x414182c3, 0x999929b0, 0x2d2d 195 0xb0b07bcb, 0x5454a8fc, 0xbbbb 196 }, { 197 0x63c6a563, 0x7cf8847c, 0x77ee 198 0xf2ff0df2, 0x6bd6bd6b, 0x6fde 199 0x30605030, 0x01020301, 0x67ce 200 0xfee719fe, 0xd7b562d7, 0xab4d 201 0xca8f45ca, 0x821f9d82, 0xc989 202 0xfaef15fa, 0x59b2eb59, 0x478e 203 0xad41ecad, 0xd4b367d4, 0xa25f 204 0x9c23bf9c, 0xa453f7a4, 0x72e4 205 0xb775c2b7, 0xfde11cfd, 0x933d 206 0x366c5a36, 0x3f7e413f, 0xf7f5 207 0x34685c34, 0xa551f4a5, 0xe5d1 208 0x71e29371, 0xd8ab73d8, 0x3162 209 0x04080c04, 0xc79552c7, 0x2346 210 0x18302818, 0x9637a196, 0x050a 211 0x070e0907, 0x12243612, 0x801b 212 0xebcd26eb, 0x274e6927, 0xb27f 213 0x09121b09, 0x831d9e83, 0x2c58 214 0x1b362d1b, 0x6edcb26e, 0x5ab4 215 0x52a4f652, 0x3b764d3b, 0xd6b7 216 0x29527b29, 0xe3dd3ee3, 0x2f5e 217 0x53a6f553, 0xd1b968d1, 0x0000 218 0x20406020, 0xfce31ffc, 0xb179 219 0x6ad4be6a, 0xcb8d46cb, 0xbe67 220 0x4a94de4a, 0x4c98d44c, 0x58b0 221 0xd0bb6bd0, 0xefc52aef, 0xaa4f 222 0x4386c543, 0x4d9ad74d, 0x3366 223 0x458acf45, 0xf9e910f9, 0x0204 224 0x50a0f050, 0x3c78443c, 0x9f25 225 0x51a2f351, 0xa35dfea3, 0x4080 226 0x923fad92, 0x9d21bc9d, 0x3870 227 0xbc63dfbc, 0xb677c1b6, 0xdaaf 228 0x10203010, 0xffe51aff, 0xf3fd 229 0xcd814ccd, 0x0c18140c, 0x1326 230 0x5fbee15f, 0x9735a297, 0x4488 231 0xc49357c4, 0xa755f2a7, 0x7efc 232 0x64c8ac64, 0x5dbae75d, 0x1932 233 0x60c0a060, 0x81199881, 0x4f9e 234 0x22446622, 0x2a547e2a, 0x903b 235 0x468cca46, 0xeec729ee, 0xb86b 236 0xdea779de, 0x5ebce25e, 0x0b16 237 0xe0db3be0, 0x32645632, 0x3a74 238 0x4992db49, 0x060c0a06, 0x2448 239 0xc29f5dc2, 0xd3bd6ed3, 0xac43 240 0x9139a891, 0x9531a495, 0xe4d3 241 0xe7d532e7, 0xc88b43c8, 0x376e 242 0x8d018c8d, 0xd5b164d5, 0x4e9c 243 0x6cd8b46c, 0x56acfa56, 0xf4f3 244 0x65caaf65, 0x7af48e7a, 0xae47 245 0xba6fd5ba, 0x78f08878, 0x254a 246 0x1c38241c, 0xa657f1a6, 0xb473 247 0xe8cb23e8, 0xdda17cdd, 0x74e8 248 0x4b96dd4b, 0xbd61dcbd, 0x8b0d 249 0x70e09070, 0x3e7c423e, 0xb571 250 0x4890d848, 0x03060503, 0xf6f7 251 0x61c2a361, 0x356a5f35, 0x57ae 252 0x86179186, 0xc19958c1, 0x1d3a 253 0xe1d938e1, 0xf8eb13f8, 0x982b 254 0x69d2bb69, 0xd9a970d9, 0x8e07 255 0x9b2db69b, 0x1e3c221e, 0x8715 256 0xce8749ce, 0x55aaff55, 0x2850 257 0x8c038f8c, 0xa159f8a1, 0x8909 258 0xbf65dabf, 0xe6d731e6, 0x4284 259 0x4182c341, 0x9929b099, 0x2d5a 260 0xb07bcbb0, 0x54a8fc54, 0xbb6d 261 }, { 262 0xc6a56363, 0xf8847c7c, 0xee99 263 0xff0df2f2, 0xd6bd6b6b, 0xdeb1 264 0x60503030, 0x02030101, 0xcea9 265 0xe719fefe, 0xb562d7d7, 0x4de6 266 0x8f45caca, 0x1f9d8282, 0x8940 267 0xef15fafa, 0xb2eb5959, 0x8ec9 268 0x41ecadad, 0xb367d4d4, 0x5ffd 269 0x23bf9c9c, 0x53f7a4a4, 0xe496 270 0x75c2b7b7, 0xe11cfdfd, 0x3dae 271 0x6c5a3636, 0x7e413f3f, 0xf502 272 0x685c3434, 0x51f4a5a5, 0xd134 273 0xe2937171, 0xab73d8d8, 0x6253 274 0x080c0404, 0x9552c7c7, 0x4665 275 0x30281818, 0x37a19696, 0x0a0f 276 0x0e090707, 0x24361212, 0x1b9b 277 0xcd26ebeb, 0x4e692727, 0x7fcd 278 0x121b0909, 0x1d9e8383, 0x5874 279 0x362d1b1b, 0xdcb26e6e, 0xb4ee 280 0xa4f65252, 0x764d3b3b, 0xb761 281 0x527b2929, 0xdd3ee3e3, 0x5e71 282 0xa6f55353, 0xb968d1d1, 0x0000 283 0x40602020, 0xe31ffcfc, 0x79c8 284 0xd4be6a6a, 0x8d46cbcb, 0x67d9 285 0x94de4a4a, 0x98d44c4c, 0xb0e8 286 0xbb6bd0d0, 0xc52aefef, 0x4fe5 287 0x86c54343, 0x9ad74d4d, 0x6655 288 0x8acf4545, 0xe910f9f9, 0x0406 289 0xa0f05050, 0x78443c3c, 0x25ba 290 0xa2f35151, 0x5dfea3a3, 0x80c0 291 0x3fad9292, 0x21bc9d9d, 0x7048 292 0x63dfbcbc, 0x77c1b6b6, 0xaf75 293 0x20301010, 0xe51affff, 0xfd0e 294 0x814ccdcd, 0x18140c0c, 0x2635 295 0xbee15f5f, 0x35a29797, 0x88cc 296 0x9357c4c4, 0x55f2a7a7, 0xfc82 297 0xc8ac6464, 0xbae75d5d, 0x322b 298 0xc0a06060, 0x19988181, 0x9ed1 299 0x44662222, 0x547e2a2a, 0x3bab 300 0x8cca4646, 0xc729eeee, 0x6bd3 301 0xa779dede, 0xbce25e5e, 0x161d 302 0xdb3be0e0, 0x64563232, 0x744e 303 0x92db4949, 0x0c0a0606, 0x486c 304 0x9f5dc2c2, 0xbd6ed3d3, 0x43ef 305 0x39a89191, 0x31a49595, 0xd337 306 0xd532e7e7, 0x8b43c8c8, 0x6e59 307 0x018c8d8d, 0xb164d5d5, 0x9cd2 308 0xd8b46c6c, 0xacfa5656, 0xf307 309 0xcaaf6565, 0xf48e7a7a, 0x47e9 310 0x6fd5baba, 0xf0887878, 0x4a6f 311 0x38241c1c, 0x57f1a6a6, 0x73c7 312 0xcb23e8e8, 0xa17cdddd, 0xe89c 313 0x96dd4b4b, 0x61dcbdbd, 0x0d86 314 0xe0907070, 0x7c423e3e, 0x71c4 315 0x90d84848, 0x06050303, 0xf701 316 0xc2a36161, 0x6a5f3535, 0xaef9 317 0x17918686, 0x9958c1c1, 0x3a27 318 0xd938e1e1, 0xeb13f8f8, 0x2bb3 319 0xd2bb6969, 0xa970d9d9, 0x0789 320 0x2db69b9b, 0x3c221e1e, 0x1592 321 0x8749cece, 0xaaff5555, 0x5078 322 0x038f8c8c, 0x59f8a1a1, 0x0980 323 0x65dabfbf, 0xd731e6e6, 0x84c6 324 0x82c34141, 0x29b09999, 0x5a77 325 0x7bcbb0b0, 0xa8fc5454, 0x6dd6 326 } 327 }; 328 329 static const u32 crypto_fl_tab[4][256] ____cac 330 { 331 0x00000063, 0x0000007c, 0x0000 332 0x000000f2, 0x0000006b, 0x0000 333 0x00000030, 0x00000001, 0x0000 334 0x000000fe, 0x000000d7, 0x0000 335 0x000000ca, 0x00000082, 0x0000 336 0x000000fa, 0x00000059, 0x0000 337 0x000000ad, 0x000000d4, 0x0000 338 0x0000009c, 0x000000a4, 0x0000 339 0x000000b7, 0x000000fd, 0x0000 340 0x00000036, 0x0000003f, 0x0000 341 0x00000034, 0x000000a5, 0x0000 342 0x00000071, 0x000000d8, 0x0000 343 0x00000004, 0x000000c7, 0x0000 344 0x00000018, 0x00000096, 0x0000 345 0x00000007, 0x00000012, 0x0000 346 0x000000eb, 0x00000027, 0x0000 347 0x00000009, 0x00000083, 0x0000 348 0x0000001b, 0x0000006e, 0x0000 349 0x00000052, 0x0000003b, 0x0000 350 0x00000029, 0x000000e3, 0x0000 351 0x00000053, 0x000000d1, 0x0000 352 0x00000020, 0x000000fc, 0x0000 353 0x0000006a, 0x000000cb, 0x0000 354 0x0000004a, 0x0000004c, 0x0000 355 0x000000d0, 0x000000ef, 0x0000 356 0x00000043, 0x0000004d, 0x0000 357 0x00000045, 0x000000f9, 0x0000 358 0x00000050, 0x0000003c, 0x0000 359 0x00000051, 0x000000a3, 0x0000 360 0x00000092, 0x0000009d, 0x0000 361 0x000000bc, 0x000000b6, 0x0000 362 0x00000010, 0x000000ff, 0x0000 363 0x000000cd, 0x0000000c, 0x0000 364 0x0000005f, 0x00000097, 0x0000 365 0x000000c4, 0x000000a7, 0x0000 366 0x00000064, 0x0000005d, 0x0000 367 0x00000060, 0x00000081, 0x0000 368 0x00000022, 0x0000002a, 0x0000 369 0x00000046, 0x000000ee, 0x0000 370 0x000000de, 0x0000005e, 0x0000 371 0x000000e0, 0x00000032, 0x0000 372 0x00000049, 0x00000006, 0x0000 373 0x000000c2, 0x000000d3, 0x0000 374 0x00000091, 0x00000095, 0x0000 375 0x000000e7, 0x000000c8, 0x0000 376 0x0000008d, 0x000000d5, 0x0000 377 0x0000006c, 0x00000056, 0x0000 378 0x00000065, 0x0000007a, 0x0000 379 0x000000ba, 0x00000078, 0x0000 380 0x0000001c, 0x000000a6, 0x0000 381 0x000000e8, 0x000000dd, 0x0000 382 0x0000004b, 0x000000bd, 0x0000 383 0x00000070, 0x0000003e, 0x0000 384 0x00000048, 0x00000003, 0x0000 385 0x00000061, 0x00000035, 0x0000 386 0x00000086, 0x000000c1, 0x0000 387 0x000000e1, 0x000000f8, 0x0000 388 0x00000069, 0x000000d9, 0x0000 389 0x0000009b, 0x0000001e, 0x0000 390 0x000000ce, 0x00000055, 0x0000 391 0x0000008c, 0x000000a1, 0x0000 392 0x000000bf, 0x000000e6, 0x0000 393 0x00000041, 0x00000099, 0x0000 394 0x000000b0, 0x00000054, 0x0000 395 }, { 396 0x00006300, 0x00007c00, 0x0000 397 0x0000f200, 0x00006b00, 0x0000 398 0x00003000, 0x00000100, 0x0000 399 0x0000fe00, 0x0000d700, 0x0000 400 0x0000ca00, 0x00008200, 0x0000 401 0x0000fa00, 0x00005900, 0x0000 402 0x0000ad00, 0x0000d400, 0x0000 403 0x00009c00, 0x0000a400, 0x0000 404 0x0000b700, 0x0000fd00, 0x0000 405 0x00003600, 0x00003f00, 0x0000 406 0x00003400, 0x0000a500, 0x0000 407 0x00007100, 0x0000d800, 0x0000 408 0x00000400, 0x0000c700, 0x0000 409 0x00001800, 0x00009600, 0x0000 410 0x00000700, 0x00001200, 0x0000 411 0x0000eb00, 0x00002700, 0x0000 412 0x00000900, 0x00008300, 0x0000 413 0x00001b00, 0x00006e00, 0x0000 414 0x00005200, 0x00003b00, 0x0000 415 0x00002900, 0x0000e300, 0x0000 416 0x00005300, 0x0000d100, 0x0000 417 0x00002000, 0x0000fc00, 0x0000 418 0x00006a00, 0x0000cb00, 0x0000 419 0x00004a00, 0x00004c00, 0x0000 420 0x0000d000, 0x0000ef00, 0x0000 421 0x00004300, 0x00004d00, 0x0000 422 0x00004500, 0x0000f900, 0x0000 423 0x00005000, 0x00003c00, 0x0000 424 0x00005100, 0x0000a300, 0x0000 425 0x00009200, 0x00009d00, 0x0000 426 0x0000bc00, 0x0000b600, 0x0000 427 0x00001000, 0x0000ff00, 0x0000 428 0x0000cd00, 0x00000c00, 0x0000 429 0x00005f00, 0x00009700, 0x0000 430 0x0000c400, 0x0000a700, 0x0000 431 0x00006400, 0x00005d00, 0x0000 432 0x00006000, 0x00008100, 0x0000 433 0x00002200, 0x00002a00, 0x0000 434 0x00004600, 0x0000ee00, 0x0000 435 0x0000de00, 0x00005e00, 0x0000 436 0x0000e000, 0x00003200, 0x0000 437 0x00004900, 0x00000600, 0x0000 438 0x0000c200, 0x0000d300, 0x0000 439 0x00009100, 0x00009500, 0x0000 440 0x0000e700, 0x0000c800, 0x0000 441 0x00008d00, 0x0000d500, 0x0000 442 0x00006c00, 0x00005600, 0x0000 443 0x00006500, 0x00007a00, 0x0000 444 0x0000ba00, 0x00007800, 0x0000 445 0x00001c00, 0x0000a600, 0x0000 446 0x0000e800, 0x0000dd00, 0x0000 447 0x00004b00, 0x0000bd00, 0x0000 448 0x00007000, 0x00003e00, 0x0000 449 0x00004800, 0x00000300, 0x0000 450 0x00006100, 0x00003500, 0x0000 451 0x00008600, 0x0000c100, 0x0000 452 0x0000e100, 0x0000f800, 0x0000 453 0x00006900, 0x0000d900, 0x0000 454 0x00009b00, 0x00001e00, 0x0000 455 0x0000ce00, 0x00005500, 0x0000 456 0x00008c00, 0x0000a100, 0x0000 457 0x0000bf00, 0x0000e600, 0x0000 458 0x00004100, 0x00009900, 0x0000 459 0x0000b000, 0x00005400, 0x0000 460 }, { 461 0x00630000, 0x007c0000, 0x0077 462 0x00f20000, 0x006b0000, 0x006f 463 0x00300000, 0x00010000, 0x0067 464 0x00fe0000, 0x00d70000, 0x00ab 465 0x00ca0000, 0x00820000, 0x00c9 466 0x00fa0000, 0x00590000, 0x0047 467 0x00ad0000, 0x00d40000, 0x00a2 468 0x009c0000, 0x00a40000, 0x0072 469 0x00b70000, 0x00fd0000, 0x0093 470 0x00360000, 0x003f0000, 0x00f7 471 0x00340000, 0x00a50000, 0x00e5 472 0x00710000, 0x00d80000, 0x0031 473 0x00040000, 0x00c70000, 0x0023 474 0x00180000, 0x00960000, 0x0005 475 0x00070000, 0x00120000, 0x0080 476 0x00eb0000, 0x00270000, 0x00b2 477 0x00090000, 0x00830000, 0x002c 478 0x001b0000, 0x006e0000, 0x005a 479 0x00520000, 0x003b0000, 0x00d6 480 0x00290000, 0x00e30000, 0x002f 481 0x00530000, 0x00d10000, 0x0000 482 0x00200000, 0x00fc0000, 0x00b1 483 0x006a0000, 0x00cb0000, 0x00be 484 0x004a0000, 0x004c0000, 0x0058 485 0x00d00000, 0x00ef0000, 0x00aa 486 0x00430000, 0x004d0000, 0x0033 487 0x00450000, 0x00f90000, 0x0002 488 0x00500000, 0x003c0000, 0x009f 489 0x00510000, 0x00a30000, 0x0040 490 0x00920000, 0x009d0000, 0x0038 491 0x00bc0000, 0x00b60000, 0x00da 492 0x00100000, 0x00ff0000, 0x00f3 493 0x00cd0000, 0x000c0000, 0x0013 494 0x005f0000, 0x00970000, 0x0044 495 0x00c40000, 0x00a70000, 0x007e 496 0x00640000, 0x005d0000, 0x0019 497 0x00600000, 0x00810000, 0x004f 498 0x00220000, 0x002a0000, 0x0090 499 0x00460000, 0x00ee0000, 0x00b8 500 0x00de0000, 0x005e0000, 0x000b 501 0x00e00000, 0x00320000, 0x003a 502 0x00490000, 0x00060000, 0x0024 503 0x00c20000, 0x00d30000, 0x00ac 504 0x00910000, 0x00950000, 0x00e4 505 0x00e70000, 0x00c80000, 0x0037 506 0x008d0000, 0x00d50000, 0x004e 507 0x006c0000, 0x00560000, 0x00f4 508 0x00650000, 0x007a0000, 0x00ae 509 0x00ba0000, 0x00780000, 0x0025 510 0x001c0000, 0x00a60000, 0x00b4 511 0x00e80000, 0x00dd0000, 0x0074 512 0x004b0000, 0x00bd0000, 0x008b 513 0x00700000, 0x003e0000, 0x00b5 514 0x00480000, 0x00030000, 0x00f6 515 0x00610000, 0x00350000, 0x0057 516 0x00860000, 0x00c10000, 0x001d 517 0x00e10000, 0x00f80000, 0x0098 518 0x00690000, 0x00d90000, 0x008e 519 0x009b0000, 0x001e0000, 0x0087 520 0x00ce0000, 0x00550000, 0x0028 521 0x008c0000, 0x00a10000, 0x0089 522 0x00bf0000, 0x00e60000, 0x0042 523 0x00410000, 0x00990000, 0x002d 524 0x00b00000, 0x00540000, 0x00bb 525 }, { 526 0x63000000, 0x7c000000, 0x7700 527 0xf2000000, 0x6b000000, 0x6f00 528 0x30000000, 0x01000000, 0x6700 529 0xfe000000, 0xd7000000, 0xab00 530 0xca000000, 0x82000000, 0xc900 531 0xfa000000, 0x59000000, 0x4700 532 0xad000000, 0xd4000000, 0xa200 533 0x9c000000, 0xa4000000, 0x7200 534 0xb7000000, 0xfd000000, 0x9300 535 0x36000000, 0x3f000000, 0xf700 536 0x34000000, 0xa5000000, 0xe500 537 0x71000000, 0xd8000000, 0x3100 538 0x04000000, 0xc7000000, 0x2300 539 0x18000000, 0x96000000, 0x0500 540 0x07000000, 0x12000000, 0x8000 541 0xeb000000, 0x27000000, 0xb200 542 0x09000000, 0x83000000, 0x2c00 543 0x1b000000, 0x6e000000, 0x5a00 544 0x52000000, 0x3b000000, 0xd600 545 0x29000000, 0xe3000000, 0x2f00 546 0x53000000, 0xd1000000, 0x0000 547 0x20000000, 0xfc000000, 0xb100 548 0x6a000000, 0xcb000000, 0xbe00 549 0x4a000000, 0x4c000000, 0x5800 550 0xd0000000, 0xef000000, 0xaa00 551 0x43000000, 0x4d000000, 0x3300 552 0x45000000, 0xf9000000, 0x0200 553 0x50000000, 0x3c000000, 0x9f00 554 0x51000000, 0xa3000000, 0x4000 555 0x92000000, 0x9d000000, 0x3800 556 0xbc000000, 0xb6000000, 0xda00 557 0x10000000, 0xff000000, 0xf300 558 0xcd000000, 0x0c000000, 0x1300 559 0x5f000000, 0x97000000, 0x4400 560 0xc4000000, 0xa7000000, 0x7e00 561 0x64000000, 0x5d000000, 0x1900 562 0x60000000, 0x81000000, 0x4f00 563 0x22000000, 0x2a000000, 0x9000 564 0x46000000, 0xee000000, 0xb800 565 0xde000000, 0x5e000000, 0x0b00 566 0xe0000000, 0x32000000, 0x3a00 567 0x49000000, 0x06000000, 0x2400 568 0xc2000000, 0xd3000000, 0xac00 569 0x91000000, 0x95000000, 0xe400 570 0xe7000000, 0xc8000000, 0x3700 571 0x8d000000, 0xd5000000, 0x4e00 572 0x6c000000, 0x56000000, 0xf400 573 0x65000000, 0x7a000000, 0xae00 574 0xba000000, 0x78000000, 0x2500 575 0x1c000000, 0xa6000000, 0xb400 576 0xe8000000, 0xdd000000, 0x7400 577 0x4b000000, 0xbd000000, 0x8b00 578 0x70000000, 0x3e000000, 0xb500 579 0x48000000, 0x03000000, 0xf600 580 0x61000000, 0x35000000, 0x5700 581 0x86000000, 0xc1000000, 0x1d00 582 0xe1000000, 0xf8000000, 0x9800 583 0x69000000, 0xd9000000, 0x8e00 584 0x9b000000, 0x1e000000, 0x8700 585 0xce000000, 0x55000000, 0x2800 586 0x8c000000, 0xa1000000, 0x8900 587 0xbf000000, 0xe6000000, 0x4200 588 0x41000000, 0x99000000, 0x2d00 589 0xb0000000, 0x54000000, 0xbb00 590 } 591 }; 592 593 __visible const u32 crypto_it_tab[4][256] ____ 594 { 595 0x50a7f451, 0x5365417e, 0xc3a4 596 0xcb6bab3b, 0xf1459d1f, 0xab58 597 0x55fa3020, 0xf66d76ad, 0x9176 598 0xfcd7e54f, 0xd7cb2ac5, 0x8044 599 0x495ab1de, 0x671bba25, 0x980e 600 0x02752fc3, 0x12f04c81, 0xa397 601 0xe75f8f03, 0x959c9215, 0xeb7a 602 0x2d83bed4, 0xd3217458, 0x2969 603 0x6a89c275, 0x78798ef4, 0x6b3e 604 0xb64fe1be, 0x17ad88f0, 0x66ac 605 0x184adf63, 0x82311ae5, 0x6033 606 0xe07764b1, 0x84ae6bbb, 0x1ca0 607 0x58684870, 0x19fd458f, 0x876c 608 0x23d373ab, 0xe2024b72, 0x578f 609 0x0728ebb2, 0x03c2b52f, 0x9a7b 610 0xf2872830, 0xb2a5bf23, 0xba6a 611 0x2b1ccf8a, 0x92b479a7, 0xf0f2 612 0xcdf4da65, 0xd5be0506, 0x1f62 613 0x9d532e34, 0xa055f3a2, 0x32e1 614 0x39ec830b, 0xaaef6040, 0x069f 615 0xf98a213e, 0x3d06dd96, 0xae05 616 0xb58d5491, 0x055dc471, 0x6fd4 617 0x24fb9819, 0x97e9bdd6, 0xcc43 618 0xbd42e8b0, 0x888b8907, 0x385b 619 0x470a7ca1, 0xe90f427c, 0xc91e 620 0x83868009, 0x48ed2b32, 0xac70 621 0xfbff0efd, 0x5638850f, 0x1ed5 622 0x64d90f0a, 0x21a65c68, 0xd154 623 0xb1670a0c, 0x0fe75793, 0xd296 624 0x4fc5c080, 0xa220dc61, 0x694b 625 0x0aba93e2, 0xe52aa0c0, 0x43e0 626 0x0b0d090e, 0xadc78bf2, 0xb9a8 627 0x8519f157, 0x4c0775af, 0xbbdd 628 0x9f2601f7, 0xbcf5725c, 0xc53b 629 0x7629438b, 0xdcc623cb, 0x68fc 630 0xcadc31d7, 0x10856342, 0x4022 631 0x7d244a85, 0xf83dbbd2, 0x1132 632 0x4b2f9e1d, 0xf330b2dc, 0xec52 633 0x6c16b32b, 0x99b970a9, 0xfa48 634 0xc48cfca8, 0x1a3ff0a0, 0xd82c 635 0xc74e4987, 0xc1d138d9, 0xfea2 636 0xcf81f5a6, 0x28de7aa5, 0x268e 637 0xe49d3a2c, 0x0d927850, 0x9bcc 638 0xc2138df6, 0xe8b8d890, 0x5ef7 639 0xbe805d9f, 0x7c93d069, 0xa92d 640 0x3b99acc8, 0xa77d1810, 0x6e63 641 0x097826cd, 0xf418596e, 0x01b7 642 0x656e95e6, 0x7ee6ffaa, 0x08cf 643 0xd99be7ba, 0xce366f4a, 0xd409 644 0xafb2a431, 0x31233f2a, 0x3094 645 0x37bc4e74, 0xa6ca82fc, 0xb0d0 646 0x4a9804f1, 0xf7daec41, 0x0e50 647 0x8dd64d76, 0x4db0ef43, 0x544d 648 0xe3b5d19e, 0x1b886a4c, 0xb81f 649 0x04ea5e9d, 0x5d358c01, 0x7374 650 0x5a1d67b3, 0x52d2db92, 0x3356 651 0x8c61d79a, 0x7a0ca137, 0x8e14 652 0xee27a9ce, 0x35c961b7, 0xede5 653 0x59dfd29c, 0x3f73f255, 0x79ce 654 0xeacdf753, 0x5baafd5f, 0x146f 655 0x81f3afca, 0x3ec468b9, 0x2c34 656 0x72c31d16, 0x0c25e2bc, 0x8b49 657 0x7101a839, 0xdeb30c08, 0x9ce4 658 0x6184cb7b, 0x70b632d5, 0x745c 659 }, { 660 0xa7f45150, 0x65417e53, 0xa417 661 0x6bab3bcb, 0x459d1ff1, 0x58fa 662 0xfa302055, 0x6d76adf6, 0x76cc 663 0xd7e54ffc, 0xcb2ac5d7, 0x4435 664 0x5ab1de49, 0x1bba2567, 0x0eea 665 0x752fc302, 0xf04c8112, 0x9746 666 0x5f8f03e7, 0x9c921595, 0x7a6d 667 0x83bed42d, 0x217458d3, 0x69e0 668 0x89c2756a, 0x798ef478, 0x3e58 669 0x4fe1beb6, 0xad88f017, 0xac20 670 0x4adf6318, 0x311ae582, 0x3351 671 0x7764b1e0, 0xae6bbb84, 0xa081 672 0x68487058, 0xfd458f19, 0x6cde 673 0xd373ab23, 0x024b72e2, 0x8f1f 674 0x28ebb207, 0xc2b52f03, 0x7bc5 675 0x872830f2, 0xa5bf23b2, 0x6a03 676 0x1ccf8a2b, 0xb479a792, 0xf207 677 0xf4da65cd, 0xbe0506d5, 0x6234 678 0x532e349d, 0x55f3a2a0, 0xe18a 679 0xec830b39, 0xef6040aa, 0x9f71 680 0x8a213ef9, 0x06dd963d, 0x053e 681 0x8d5491b5, 0x5dc47105, 0xd406 682 0xfb981924, 0xe9bdd697, 0x4340 683 0x42e8b0bd, 0x8b890788, 0x5b19 684 0x0a7ca147, 0x0f427ce9, 0x1e84 685 0x86800983, 0xed2b3248, 0x7011 686 0xff0efdfb, 0x38850f56, 0xd5ae 687 0xd90f0a64, 0xa65c6821, 0x545b 688 0x670a0cb1, 0xe757930f, 0x96ee 689 0xc5c0804f, 0x20dc61a2, 0x4b77 690 0xba93e20a, 0x2aa0c0e5, 0xe022 691 0x0d090e0b, 0xc78bf2ad, 0xa8b6 692 0x19f15785, 0x0775af4c, 0xdd99 693 0x2601f79f, 0xf5725cbc, 0x3b66 694 0x29438b76, 0xc623cbdc, 0xfced 695 0xdc31d7ca, 0x85634210, 0x2297 696 0x244a857d, 0x3dbbd2f8, 0x32f9 697 0x2f9e1d4b, 0x30b2dcf3, 0x5286 698 0x16b32b6c, 0xb970a999, 0x4894 699 0x8cfca8c4, 0x3ff0a01a, 0x2c7d 700 0x4e4987c7, 0xd138d9c1, 0xa2ca 701 0x81f5a6cf, 0xde7aa528, 0x8eb7 702 0x9d3a2ce4, 0x9278500d, 0xcc5f 703 0x138df6c2, 0xb8d890e8, 0xf739 704 0x805d9fbe, 0x93d0697c, 0x2dd5 705 0x99acc83b, 0x7d1810a7, 0x639c 706 0x7826cd09, 0x18596ef4, 0xb79a 707 0x6e95e665, 0xe6ffaa7e, 0xcfbc 708 0x9be7bad9, 0x366f4ace, 0x099f 709 0xb2a431af, 0x233f2a31, 0x94a5 710 0xbc4e7437, 0xca82fca6, 0xd090 711 0x9804f14a, 0xdaec41f7, 0x50cd 712 0xd64d768d, 0xb0ef434d, 0x4daa 713 0xb5d19ee3, 0x886a4c1b, 0x1f2c 714 0xea5e9d04, 0x358c015d, 0x7487 715 0x1d67b35a, 0xd2db9252, 0x5610 716 0x61d79a8c, 0x0ca1377a, 0x14f8 717 0x27a9ceee, 0xc961b735, 0xe51c 718 0xdfd29c59, 0x73f2553f, 0xce14 719 0xcdf753ea, 0xaafd5f5b, 0x6f3d 720 0xf3afca81, 0xc468b93e, 0x3424 721 0xc31d1672, 0x25e2bc0c, 0x493c 722 0x01a83971, 0xb30c08de, 0xe4b4 723 0x84cb7b61, 0xb632d570, 0x5c6c 724 }, { 725 0xf45150a7, 0x417e5365, 0x171a 726 0xab3bcb6b, 0x9d1ff145, 0xfaac 727 0x302055fa, 0x76adf66d, 0xcc88 728 0xe54ffcd7, 0x2ac5d7cb, 0x3526 729 0xb1de495a, 0xba25671b, 0xea45 730 0x2fc30275, 0x4c8112f0, 0x468d 731 0x8f03e75f, 0x9215959c, 0x6dbf 732 0xbed42d83, 0x7458d321, 0xe049 733 0xc2756a89, 0x8ef47879, 0x5899 734 0xe1beb64f, 0x88f017ad, 0x20c9 735 0xdf63184a, 0x1ae58231, 0x5197 736 0x64b1e077, 0x6bbb84ae, 0x81fe 737 0x48705868, 0x458f19fd, 0xde94 738 0x73ab23d3, 0x4b72e202, 0x1fe3 739 0xebb20728, 0xb52f03c2, 0xc586 740 0x2830f287, 0xbf23b2a5, 0x0302 741 0xcf8a2b1c, 0x79a792b4, 0x07f3 742 0xda65cdf4, 0x0506d5be, 0x34d1 743 0x2e349d53, 0xf3a2a055, 0x8a05 744 0x830b39ec, 0x6040aaef, 0x715e 745 0x213ef98a, 0xdd963d06, 0x3edd 746 0x5491b58d, 0xc471055d, 0x0604 747 0x981924fb, 0xbdd697e9, 0x4089 748 0xe8b0bd42, 0x8907888b, 0x19e7 749 0x7ca1470a, 0x427ce90f, 0x84f8 750 0x80098386, 0x2b3248ed, 0x111e 751 0x0efdfbff, 0x850f5638, 0xae3d 752 0x0f0a64d9, 0x5c6821a6, 0x5b9b 753 0x0a0cb167, 0x57930fe7, 0xeeb4 754 0xc0804fc5, 0xdc61a220, 0x775a 755 0x93e20aba, 0xa0c0e52a, 0x223c 756 0x090e0b0d, 0x8bf2adc7, 0xb62d 757 0xf1578519, 0x75af4c07, 0x99ee 758 0x01f79f26, 0x725cbcf5, 0x6644 759 0x438b7629, 0x23cbdcc6, 0xedb6 760 0x31d7cadc, 0x63421085, 0x9713 761 0x4a857d24, 0xbbd2f83d, 0xf9ae 762 0x9e1d4b2f, 0xb2dcf330, 0x860d 763 0xb32b6c16, 0x70a999b9, 0x9411 764 0xfca8c48c, 0xf0a01a3f, 0x7d56 765 0x4987c74e, 0x38d9c1d1, 0xca8c 766 0xf5a6cf81, 0x7aa528de, 0xb7da 767 0x3a2ce49d, 0x78500d92, 0x5f6a 768 0x8df6c213, 0xd890e8b8, 0x392e 769 0x5d9fbe80, 0xd0697c93, 0xd56f 770 0xacc83b99, 0x1810a77d, 0x9ce8 771 0x26cd0978, 0x596ef418, 0x9aec 772 0x95e6656e, 0xffaa7ee6, 0xbc21 773 0xe7bad99b, 0x6f4ace36, 0x9fea 774 0xa431afb2, 0x3f2a3123, 0xa5c6 775 0x4e7437bc, 0x82fca6ca, 0x90e0 776 0x04f14a98, 0xec41f7da, 0xcd7f 777 0x4d768dd6, 0xef434db0, 0xaacc 778 0xd19ee3b5, 0x6a4c1b88, 0x2cc1 779 0x5e9d04ea, 0x8c015d35, 0x87fa 780 0x67b35a1d, 0xdb9252d2, 0x10e9 781 0xd79a8c61, 0xa1377a0c, 0xf859 782 0xa9ceee27, 0x61b735c9, 0x1ce1 783 0xd29c59df, 0xf2553f73, 0x1418 784 0xf753eacd, 0xfd5f5baa, 0x3ddf 785 0xafca81f3, 0x68b93ec4, 0x2438 786 0x1d1672c3, 0xe2bc0c25, 0x3c28 787 0xa8397101, 0x0c08deb3, 0xb4d8 788 0xcb7b6184, 0x32d570b6, 0x6c48 789 }, { 790 0x5150a7f4, 0x7e536541, 0x1ac3 791 0x3bcb6bab, 0x1ff1459d, 0xacab 792 0x2055fa30, 0xadf66d76, 0x8891 793 0x4ffcd7e5, 0xc5d7cb2a, 0x2680 794 0xde495ab1, 0x25671bba, 0x4598 795 0xc302752f, 0x8112f04c, 0x8da3 796 0x03e75f8f, 0x15959c92, 0xbfeb 797 0xd42d83be, 0x58d32174, 0x4929 798 0x756a89c2, 0xf478798e, 0x996b 799 0xbeb64fe1, 0xf017ad88, 0xc966 800 0x63184adf, 0xe582311a, 0x9760 801 0xb1e07764, 0xbb84ae6b, 0xfe1c 802 0x70586848, 0x8f19fd45, 0x9487 803 0xab23d373, 0x72e2024b, 0xe357 804 0xb20728eb, 0x2f03c2b5, 0x869a 805 0x30f28728, 0x23b2a5bf, 0x02ba 806 0x8a2b1ccf, 0xa792b479, 0xf3f0 807 0x65cdf4da, 0x06d5be05, 0xd11f 808 0x349d532e, 0xa2a055f3, 0x0532 809 0x0b39ec83, 0x40aaef60, 0x5e06 810 0x3ef98a21, 0x963d06dd, 0xddae 811 0x91b58d54, 0x71055dc4, 0x046f 812 0x1924fb98, 0xd697e9bd, 0x89cc 813 0xb0bd42e8, 0x07888b89, 0xe738 814 0xa1470a7c, 0x7ce90f42, 0xf8c9 815 0x09838680, 0x3248ed2b, 0x1eac 816 0xfdfbff0e, 0x0f563885, 0x3d1e 817 0x0a64d90f, 0x6821a65c, 0x9bd1 818 0x0cb1670a, 0x930fe757, 0xb4d2 819 0x804fc5c0, 0x61a220dc, 0x5a69 820 0xe20aba93, 0xc0e52aa0, 0x3c43 821 0x0e0b0d09, 0xf2adc78b, 0x2db9 822 0x578519f1, 0xaf4c0775, 0xeebb 823 0xf79f2601, 0x5cbcf572, 0x44c5 824 0x8b762943, 0xcbdcc623, 0xb668 825 0xd7cadc31, 0x42108563, 0x1340 826 0x857d244a, 0xd2f83dbb, 0xae11 827 0x1d4b2f9e, 0xdcf330b2, 0x0dec 828 0x2b6c16b3, 0xa999b970, 0x11fa 829 0xa8c48cfc, 0xa01a3ff0, 0x56d8 830 0x87c74e49, 0xd9c1d138, 0x8cfe 831 0xa6cf81f5, 0xa528de7a, 0xda26 832 0x2ce49d3a, 0x500d9278, 0x6a9b 833 0xf6c2138d, 0x90e8b8d8, 0x2e5e 834 0x9fbe805d, 0x697c93d0, 0x6fa9 835 0xc83b99ac, 0x10a77d18, 0xe86e 836 0xcd097826, 0x6ef41859, 0xec01 837 0xe6656e95, 0xaa7ee6ff, 0x2108 838 0xbad99be7, 0x4ace366f, 0xead4 839 0x31afb2a4, 0x2a31233f, 0xc630 840 0x7437bc4e, 0xfca6ca82, 0xe0b0 841 0xf14a9804, 0x41f7daec, 0x7f0e 842 0x768dd64d, 0x434db0ef, 0xcc54 843 0x9ee3b5d1, 0x4c1b886a, 0xc1b8 844 0x9d04ea5e, 0x015d358c, 0xfa73 845 0xb35a1d67, 0x9252d2db, 0xe933 846 0x9a8c61d7, 0x377a0ca1, 0x598e 847 0xceee27a9, 0xb735c961, 0xe1ed 848 0x9c59dfd2, 0x553f73f2, 0x1879 849 0x53eacdf7, 0x5f5baafd, 0xdf14 850 0xca81f3af, 0xb93ec468, 0x382c 851 0x1672c31d, 0xbc0c25e2, 0x288b 852 0x397101a8, 0x08deb30c, 0xd89c 853 0x7b6184cb, 0xd570b632, 0x4874 854 } 855 }; 856 857 static const u32 crypto_il_tab[4][256] ____cac 858 { 859 0x00000052, 0x00000009, 0x0000 860 0x00000030, 0x00000036, 0x0000 861 0x000000bf, 0x00000040, 0x0000 862 0x00000081, 0x000000f3, 0x0000 863 0x0000007c, 0x000000e3, 0x0000 864 0x0000009b, 0x0000002f, 0x0000 865 0x00000034, 0x0000008e, 0x0000 866 0x000000c4, 0x000000de, 0x0000 867 0x00000054, 0x0000007b, 0x0000 868 0x000000a6, 0x000000c2, 0x0000 869 0x000000ee, 0x0000004c, 0x0000 870 0x00000042, 0x000000fa, 0x0000 871 0x00000008, 0x0000002e, 0x0000 872 0x00000028, 0x000000d9, 0x0000 873 0x00000076, 0x0000005b, 0x0000 874 0x0000006d, 0x0000008b, 0x0000 875 0x00000072, 0x000000f8, 0x0000 876 0x00000086, 0x00000068, 0x0000 877 0x000000d4, 0x000000a4, 0x0000 878 0x0000005d, 0x00000065, 0x0000 879 0x0000006c, 0x00000070, 0x0000 880 0x000000fd, 0x000000ed, 0x0000 881 0x0000005e, 0x00000015, 0x0000 882 0x000000a7, 0x0000008d, 0x0000 883 0x00000090, 0x000000d8, 0x0000 884 0x0000008c, 0x000000bc, 0x0000 885 0x000000f7, 0x000000e4, 0x0000 886 0x000000b8, 0x000000b3, 0x0000 887 0x000000d0, 0x0000002c, 0x0000 888 0x000000ca, 0x0000003f, 0x0000 889 0x000000c1, 0x000000af, 0x0000 890 0x00000001, 0x00000013, 0x0000 891 0x0000003a, 0x00000091, 0x0000 892 0x0000004f, 0x00000067, 0x0000 893 0x00000097, 0x000000f2, 0x0000 894 0x000000f0, 0x000000b4, 0x0000 895 0x00000096, 0x000000ac, 0x0000 896 0x000000e7, 0x000000ad, 0x0000 897 0x000000e2, 0x000000f9, 0x0000 898 0x0000001c, 0x00000075, 0x0000 899 0x00000047, 0x000000f1, 0x0000 900 0x0000001d, 0x00000029, 0x0000 901 0x0000006f, 0x000000b7, 0x0000 902 0x000000aa, 0x00000018, 0x0000 903 0x000000fc, 0x00000056, 0x0000 904 0x000000c6, 0x000000d2, 0x0000 905 0x0000009a, 0x000000db, 0x0000 906 0x00000078, 0x000000cd, 0x0000 907 0x0000001f, 0x000000dd, 0x0000 908 0x00000088, 0x00000007, 0x0000 909 0x000000b1, 0x00000012, 0x0000 910 0x00000027, 0x00000080, 0x0000 911 0x00000060, 0x00000051, 0x0000 912 0x00000019, 0x000000b5, 0x0000 913 0x0000002d, 0x000000e5, 0x0000 914 0x00000093, 0x000000c9, 0x0000 915 0x000000a0, 0x000000e0, 0x0000 916 0x000000ae, 0x0000002a, 0x0000 917 0x000000c8, 0x000000eb, 0x0000 918 0x00000083, 0x00000053, 0x0000 919 0x00000017, 0x0000002b, 0x0000 920 0x000000ba, 0x00000077, 0x0000 921 0x000000e1, 0x00000069, 0x0000 922 0x00000055, 0x00000021, 0x0000 923 }, { 924 0x00005200, 0x00000900, 0x0000 925 0x00003000, 0x00003600, 0x0000 926 0x0000bf00, 0x00004000, 0x0000 927 0x00008100, 0x0000f300, 0x0000 928 0x00007c00, 0x0000e300, 0x0000 929 0x00009b00, 0x00002f00, 0x0000 930 0x00003400, 0x00008e00, 0x0000 931 0x0000c400, 0x0000de00, 0x0000 932 0x00005400, 0x00007b00, 0x0000 933 0x0000a600, 0x0000c200, 0x0000 934 0x0000ee00, 0x00004c00, 0x0000 935 0x00004200, 0x0000fa00, 0x0000 936 0x00000800, 0x00002e00, 0x0000 937 0x00002800, 0x0000d900, 0x0000 938 0x00007600, 0x00005b00, 0x0000 939 0x00006d00, 0x00008b00, 0x0000 940 0x00007200, 0x0000f800, 0x0000 941 0x00008600, 0x00006800, 0x0000 942 0x0000d400, 0x0000a400, 0x0000 943 0x00005d00, 0x00006500, 0x0000 944 0x00006c00, 0x00007000, 0x0000 945 0x0000fd00, 0x0000ed00, 0x0000 946 0x00005e00, 0x00001500, 0x0000 947 0x0000a700, 0x00008d00, 0x0000 948 0x00009000, 0x0000d800, 0x0000 949 0x00008c00, 0x0000bc00, 0x0000 950 0x0000f700, 0x0000e400, 0x0000 951 0x0000b800, 0x0000b300, 0x0000 952 0x0000d000, 0x00002c00, 0x0000 953 0x0000ca00, 0x00003f00, 0x0000 954 0x0000c100, 0x0000af00, 0x0000 955 0x00000100, 0x00001300, 0x0000 956 0x00003a00, 0x00009100, 0x0000 957 0x00004f00, 0x00006700, 0x0000 958 0x00009700, 0x0000f200, 0x0000 959 0x0000f000, 0x0000b400, 0x0000 960 0x00009600, 0x0000ac00, 0x0000 961 0x0000e700, 0x0000ad00, 0x0000 962 0x0000e200, 0x0000f900, 0x0000 963 0x00001c00, 0x00007500, 0x0000 964 0x00004700, 0x0000f100, 0x0000 965 0x00001d00, 0x00002900, 0x0000 966 0x00006f00, 0x0000b700, 0x0000 967 0x0000aa00, 0x00001800, 0x0000 968 0x0000fc00, 0x00005600, 0x0000 969 0x0000c600, 0x0000d200, 0x0000 970 0x00009a00, 0x0000db00, 0x0000 971 0x00007800, 0x0000cd00, 0x0000 972 0x00001f00, 0x0000dd00, 0x0000 973 0x00008800, 0x00000700, 0x0000 974 0x0000b100, 0x00001200, 0x0000 975 0x00002700, 0x00008000, 0x0000 976 0x00006000, 0x00005100, 0x0000 977 0x00001900, 0x0000b500, 0x0000 978 0x00002d00, 0x0000e500, 0x0000 979 0x00009300, 0x0000c900, 0x0000 980 0x0000a000, 0x0000e000, 0x0000 981 0x0000ae00, 0x00002a00, 0x0000 982 0x0000c800, 0x0000eb00, 0x0000 983 0x00008300, 0x00005300, 0x0000 984 0x00001700, 0x00002b00, 0x0000 985 0x0000ba00, 0x00007700, 0x0000 986 0x0000e100, 0x00006900, 0x0000 987 0x00005500, 0x00002100, 0x0000 988 }, { 989 0x00520000, 0x00090000, 0x006a 990 0x00300000, 0x00360000, 0x00a5 991 0x00bf0000, 0x00400000, 0x00a3 992 0x00810000, 0x00f30000, 0x00d7 993 0x007c0000, 0x00e30000, 0x0039 994 0x009b0000, 0x002f0000, 0x00ff 995 0x00340000, 0x008e0000, 0x0043 996 0x00c40000, 0x00de0000, 0x00e9 997 0x00540000, 0x007b0000, 0x0094 998 0x00a60000, 0x00c20000, 0x0023 999 0x00ee0000, 0x004c0000, 0x0095 1000 0x00420000, 0x00fa0000, 0x00c 1001 0x00080000, 0x002e0000, 0x00a 1002 0x00280000, 0x00d90000, 0x002 1003 0x00760000, 0x005b0000, 0x00a 1004 0x006d0000, 0x008b0000, 0x00d 1005 0x00720000, 0x00f80000, 0x00f 1006 0x00860000, 0x00680000, 0x009 1007 0x00d40000, 0x00a40000, 0x005 1008 0x005d0000, 0x00650000, 0x00b 1009 0x006c0000, 0x00700000, 0x004 1010 0x00fd0000, 0x00ed0000, 0x00b 1011 0x005e0000, 0x00150000, 0x004 1012 0x00a70000, 0x008d0000, 0x009 1013 0x00900000, 0x00d80000, 0x00a 1014 0x008c0000, 0x00bc0000, 0x00d 1015 0x00f70000, 0x00e40000, 0x005 1016 0x00b80000, 0x00b30000, 0x004 1017 0x00d00000, 0x002c0000, 0x001 1018 0x00ca0000, 0x003f0000, 0x000 1019 0x00c10000, 0x00af0000, 0x00b 1020 0x00010000, 0x00130000, 0x008 1021 0x003a0000, 0x00910000, 0x001 1022 0x004f0000, 0x00670000, 0x00d 1023 0x00970000, 0x00f20000, 0x00c 1024 0x00f00000, 0x00b40000, 0x00e 1025 0x00960000, 0x00ac0000, 0x007 1026 0x00e70000, 0x00ad0000, 0x003 1027 0x00e20000, 0x00f90000, 0x003 1028 0x001c0000, 0x00750000, 0x00d 1029 0x00470000, 0x00f10000, 0x001 1030 0x001d0000, 0x00290000, 0x00c 1031 0x006f0000, 0x00b70000, 0x006 1032 0x00aa0000, 0x00180000, 0x00b 1033 0x00fc0000, 0x00560000, 0x003 1034 0x00c60000, 0x00d20000, 0x007 1035 0x009a0000, 0x00db0000, 0x00c 1036 0x00780000, 0x00cd0000, 0x005 1037 0x001f0000, 0x00dd0000, 0x00a 1038 0x00880000, 0x00070000, 0x00c 1039 0x00b10000, 0x00120000, 0x001 1040 0x00270000, 0x00800000, 0x00e 1041 0x00600000, 0x00510000, 0x007 1042 0x00190000, 0x00b50000, 0x004 1043 0x002d0000, 0x00e50000, 0x007 1044 0x00930000, 0x00c90000, 0x009 1045 0x00a00000, 0x00e00000, 0x003 1046 0x00ae0000, 0x002a0000, 0x00f 1047 0x00c80000, 0x00eb0000, 0x00b 1048 0x00830000, 0x00530000, 0x009 1049 0x00170000, 0x002b0000, 0x000 1050 0x00ba0000, 0x00770000, 0x00d 1051 0x00e10000, 0x00690000, 0x001 1052 0x00550000, 0x00210000, 0x000 1053 }, { 1054 0x52000000, 0x09000000, 0x6a0 1055 0x30000000, 0x36000000, 0xa50 1056 0xbf000000, 0x40000000, 0xa30 1057 0x81000000, 0xf3000000, 0xd70 1058 0x7c000000, 0xe3000000, 0x390 1059 0x9b000000, 0x2f000000, 0xff0 1060 0x34000000, 0x8e000000, 0x430 1061 0xc4000000, 0xde000000, 0xe90 1062 0x54000000, 0x7b000000, 0x940 1063 0xa6000000, 0xc2000000, 0x230 1064 0xee000000, 0x4c000000, 0x950 1065 0x42000000, 0xfa000000, 0xc30 1066 0x08000000, 0x2e000000, 0xa10 1067 0x28000000, 0xd9000000, 0x240 1068 0x76000000, 0x5b000000, 0xa20 1069 0x6d000000, 0x8b000000, 0xd10 1070 0x72000000, 0xf8000000, 0xf60 1071 0x86000000, 0x68000000, 0x980 1072 0xd4000000, 0xa4000000, 0x5c0 1073 0x5d000000, 0x65000000, 0xb60 1074 0x6c000000, 0x70000000, 0x480 1075 0xfd000000, 0xed000000, 0xb90 1076 0x5e000000, 0x15000000, 0x460 1077 0xa7000000, 0x8d000000, 0x9d0 1078 0x90000000, 0xd8000000, 0xab0 1079 0x8c000000, 0xbc000000, 0xd30 1080 0xf7000000, 0xe4000000, 0x580 1081 0xb8000000, 0xb3000000, 0x450 1082 0xd0000000, 0x2c000000, 0x1e0 1083 0xca000000, 0x3f000000, 0x0f0 1084 0xc1000000, 0xaf000000, 0xbd0 1085 0x01000000, 0x13000000, 0x8a0 1086 0x3a000000, 0x91000000, 0x110 1087 0x4f000000, 0x67000000, 0xdc0 1088 0x97000000, 0xf2000000, 0xcf0 1089 0xf0000000, 0xb4000000, 0xe60 1090 0x96000000, 0xac000000, 0x740 1091 0xe7000000, 0xad000000, 0x350 1092 0xe2000000, 0xf9000000, 0x370 1093 0x1c000000, 0x75000000, 0xdf0 1094 0x47000000, 0xf1000000, 0x1a0 1095 0x1d000000, 0x29000000, 0xc50 1096 0x6f000000, 0xb7000000, 0x620 1097 0xaa000000, 0x18000000, 0xbe0 1098 0xfc000000, 0x56000000, 0x3e0 1099 0xc6000000, 0xd2000000, 0x790 1100 0x9a000000, 0xdb000000, 0xc00 1101 0x78000000, 0xcd000000, 0x5a0 1102 0x1f000000, 0xdd000000, 0xa80 1103 0x88000000, 0x07000000, 0xc70 1104 0xb1000000, 0x12000000, 0x100 1105 0x27000000, 0x80000000, 0xec0 1106 0x60000000, 0x51000000, 0x7f0 1107 0x19000000, 0xb5000000, 0x4a0 1108 0x2d000000, 0xe5000000, 0x7a0 1109 0x93000000, 0xc9000000, 0x9c0 1110 0xa0000000, 0xe0000000, 0x3b0 1111 0xae000000, 0x2a000000, 0xf50 1112 0xc8000000, 0xeb000000, 0xbb0 1113 0x83000000, 0x53000000, 0x990 1114 0x17000000, 0x2b000000, 0x040 1115 0xba000000, 0x77000000, 0xd60 1116 0xe1000000, 0x69000000, 0x140 1117 0x55000000, 0x21000000, 0x0c0 1118 } 1119 }; 1120 1121 EXPORT_SYMBOL_GPL(crypto_ft_tab); 1122 EXPORT_SYMBOL_GPL(crypto_it_tab); 1123 1124 /** 1125 * crypto_aes_set_key - Set the AES key. 1126 * @tfm: The %crypto_tfm that is used 1127 * @in_key: The input key. 1128 * @key_len: The size of the key. 1129 * 1130 * This function uses aes_expand_key() to exp 1131 * _must_ be the private data embedded in @tf 1132 * crypto_tfm_ctx(). 1133 * 1134 * Return: 0 on success; -EINVAL on failure ( 1135 */ 1136 int crypto_aes_set_key(struct crypto_tfm *tfm 1137 unsigned int key_len) 1138 { 1139 struct crypto_aes_ctx *ctx = crypto_t 1140 1141 return aes_expandkey(ctx, in_key, key 1142 } 1143 EXPORT_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], 1149 crypto_ft_tab[1][byte(bi[(n + 1150 crypto_ft_tab[2][byte(bi[(n + 1151 crypto_ft_tab[3][byte(bi[(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], 1164 crypto_fl_tab[1][byte(bi[(n + 1165 crypto_fl_tab[2][byte(bi[(n + 1166 crypto_fl_tab[3][byte(bi[(n + 1167 } while (0) 1168 1169 #define f_lround(bo, bi, k) do {\ 1170 f_rl(bo, bi, 0, k); \ 1171 f_rl(bo, bi, 1, k); \ 1172 f_rl(bo, bi, 2, k); \ 1173 f_rl(bo, bi, 3, k); \ 1174 } while (0) 1175 1176 static void crypto_aes_encrypt(struct crypto_ 1177 { 1178 const struct crypto_aes_ctx *ctx = cr 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_unalign 1184 b0[1] = ctx->key_enc[1] ^ get_unalign 1185 b0[2] = ctx->key_enc[2] ^ get_unalign 1186 b0[3] = ctx->key_enc[3] ^ get_unalign 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], 1219 crypto_it_tab[1][byte(bi[(n + 1220 crypto_it_tab[2][byte(bi[(n + 1221 crypto_it_tab[3][byte(bi[(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], 1234 crypto_il_tab[1][byte(bi[(n + 3) & 3] 1235 crypto_il_tab[2][byte(bi[(n + 2) & 3] 1236 crypto_il_tab[3][byte(bi[(n + 1) & 3] 1237 } while (0) 1238 1239 #define i_lround(bo, bi, k) do {\ 1240 i_rl(bo, bi, 0, k); \ 1241 i_rl(bo, bi, 1, k); \ 1242 i_rl(bo, bi, 2, k); \ 1243 i_rl(bo, bi, 3, k); \ 1244 } while (0) 1245 1246 static void crypto_aes_decrypt(struct crypto_ 1247 { 1248 const struct crypto_aes_ctx *ctx = cr 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_unalign 1254 b0[1] = ctx->key_dec[1] ^ get_unalign 1255 b0[2] = ctx->key_dec[2] ^ get_unalign 1256 b0[3] = ctx->key_dec[3] ^ get_unalign 1257 1258 if (key_len > 24) { 1259 i_nround(b1, b0, kp); 1260 i_nround(b0, b1, kp); 1261 } 1262 1263 if (key_len > 16) { 1264 i_nround(b1, b0, kp); 1265 i_nround(b0, b1, kp); 1266 } 1267 1268 i_nround(b1, b0, kp); 1269 i_nround(b0, b1, kp); 1270 i_nround(b1, b0, kp); 1271 i_nround(b0, b1, kp); 1272 i_nround(b1, b0, kp); 1273 i_nround(b0, b1, kp); 1274 i_nround(b1, b0, kp); 1275 i_nround(b0, b1, kp); 1276 i_nround(b1, b0, kp); 1277 i_lround(b0, b1, kp); 1278 1279 put_unaligned_le32(b0[0], out); 1280 put_unaligned_le32(b0[1], out + 4); 1281 put_unaligned_le32(b0[2], out + 8); 1282 put_unaligned_le32(b0[3], out + 12); 1283 } 1284 1285 static struct crypto_alg aes_alg = { 1286 .cra_name = "aes" 1287 .cra_driver_name = "aes- 1288 .cra_priority = 100, 1289 .cra_flags = CRYPT 1290 .cra_blocksize = AES_B 1291 .cra_ctxsize = sizeo 1292 .cra_module = THIS_ 1293 .cra_u = { 1294 .cipher = { 1295 .cia_min_keysize 1296 .cia_max_keysize 1297 .cia_setkey 1298 .cia_encrypt 1299 .cia_decrypt 1300 } 1301 } 1302 }; 1303 1304 static int __init aes_init(void) 1305 { 1306 return crypto_register_alg(&aes_alg); 1307 } 1308 1309 static void __exit aes_fini(void) 1310 { 1311 crypto_unregister_alg(&aes_alg); 1312 } 1313 1314 subsys_initcall(aes_init); 1315 module_exit(aes_fini); 1316 1317 MODULE_DESCRIPTION("Rijndael (AES) Cipher Alg 1318 MODULE_LICENSE("Dual BSD/GPL"); 1319 MODULE_ALIAS_CRYPTO("aes"); 1320 MODULE_ALIAS_CRYPTO("aes-generic"); 1321
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.