• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

include/beecrypt/aes_le.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2003, 2005 Bob Deblier
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017  *
00018  */
00019 
00020 const uint32_t _aes_mask[4] = {
00021     0x000000ff,
00022     0x0000ff00,
00023     0x00ff0000,
00024     0xff000000
00025 };
00026 
00027 typedef struct
00028 {
00029     #if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
00030     const uint64_t t0[256];
00031     const uint64_t t1[256];
00032     const uint64_t t2[256];
00033     const uint64_t t3[256];
00034     #else
00035     const uint32_t t0[256];
00036     const uint32_t t1[256];
00037     const uint32_t t2[256];
00038     const uint32_t t3[256];
00039     #endif
00040     const uint32_t t4[256];
00041 } _table;
00042 
00043 const _table _aes_enc = {
00044     {   0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
00045         0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
00046         0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
00047         0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
00048         0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
00049         0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
00050         0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
00051         0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
00052         0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
00053         0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
00054         0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
00055         0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
00056         0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
00057         0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
00058         0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
00059         0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
00060         0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
00061         0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
00062         0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
00063         0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
00064         0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
00065         0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
00066         0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
00067         0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
00068         0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
00069         0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
00070         0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
00071         0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
00072         0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
00073         0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
00074         0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
00075         0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
00076         0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
00077         0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
00078         0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
00079         0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
00080         0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
00081         0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
00082         0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
00083         0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
00084         0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
00085         0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
00086         0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
00087         0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
00088         0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
00089         0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
00090         0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
00091         0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
00092         0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
00093         0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
00094         0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
00095         0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
00096         0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
00097         0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
00098         0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
00099         0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
00100         0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
00101         0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
00102         0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
00103         0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
00104         0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
00105         0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
00106         0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
00107         0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c },
00108     {   0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
00109         0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
00110         0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
00111         0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
00112         0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
00113         0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
00114         0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
00115         0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
00116         0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
00117         0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
00118         0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
00119         0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
00120         0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
00121         0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
00122         0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
00123         0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
00124         0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
00125         0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
00126         0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
00127         0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
00128         0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
00129         0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
00130         0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
00131         0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
00132         0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
00133         0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
00134         0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
00135         0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
00136         0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
00137         0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
00138         0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
00139         0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
00140         0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
00141         0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
00142         0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
00143         0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
00144         0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
00145         0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
00146         0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
00147         0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
00148         0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
00149         0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
00150         0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
00151         0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
00152         0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
00153         0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
00154         0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
00155         0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
00156         0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
00157         0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
00158         0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
00159         0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
00160         0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
00161         0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
00162         0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
00163         0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
00164         0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
00165         0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
00166         0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
00167         0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
00168         0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
00169         0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
00170         0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
00171         0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a },
00172     {   0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
00173         0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
00174         0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
00175         0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
00176         0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
00177         0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
00178         0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
00179         0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
00180         0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
00181         0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
00182         0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
00183         0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
00184         0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
00185         0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
00186         0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
00187         0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
00188         0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
00189         0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
00190         0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
00191         0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
00192         0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
00193         0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
00194         0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
00195         0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
00196         0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
00197         0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
00198         0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
00199         0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
00200         0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
00201         0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
00202         0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
00203         0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
00204         0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
00205         0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
00206         0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
00207         0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
00208         0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
00209         0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
00210         0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
00211         0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
00212         0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
00213         0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
00214         0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
00215         0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
00216         0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
00217         0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
00218         0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
00219         0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
00220         0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
00221         0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
00222         0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
00223         0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
00224         0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
00225         0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
00226         0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
00227         0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
00228         0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
00229         0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
00230         0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
00231         0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
00232         0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
00233         0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
00234         0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
00235         0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16 },
00236     {   0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
00237         0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
00238         0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
00239         0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
00240         0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
00241         0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
00242         0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
00243         0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
00244         0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
00245         0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
00246         0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
00247         0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
00248         0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
00249         0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
00250         0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
00251         0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
00252         0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
00253         0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
00254         0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
00255         0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
00256         0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
00257         0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
00258         0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
00259         0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
00260         0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
00261         0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
00262         0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
00263         0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
00264         0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
00265         0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
00266         0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
00267         0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
00268         0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
00269         0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
00270         0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
00271         0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
00272         0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
00273         0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
00274         0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
00275         0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
00276         0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
00277         0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
00278         0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
00279         0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
00280         0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
00281         0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
00282         0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
00283         0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
00284         0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
00285         0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
00286         0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
00287         0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
00288         0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
00289         0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
00290         0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
00291         0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
00292         0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
00293         0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
00294         0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
00295         0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
00296         0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
00297         0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
00298         0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
00299         0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616 },
00300     {   0x63636363, 0x7c7c7c7c, 0x77777777, 0x7b7b7b7b,
00301         0xf2f2f2f2, 0x6b6b6b6b, 0x6f6f6f6f, 0xc5c5c5c5,
00302         0x30303030, 0x01010101, 0x67676767, 0x2b2b2b2b,
00303         0xfefefefe, 0xd7d7d7d7, 0xabababab, 0x76767676,
00304         0xcacacaca, 0x82828282, 0xc9c9c9c9, 0x7d7d7d7d,
00305         0xfafafafa, 0x59595959, 0x47474747, 0xf0f0f0f0,
00306         0xadadadad, 0xd4d4d4d4, 0xa2a2a2a2, 0xafafafaf,
00307         0x9c9c9c9c, 0xa4a4a4a4, 0x72727272, 0xc0c0c0c0,
00308         0xb7b7b7b7, 0xfdfdfdfd, 0x93939393, 0x26262626,
00309         0x36363636, 0x3f3f3f3f, 0xf7f7f7f7, 0xcccccccc,
00310         0x34343434, 0xa5a5a5a5, 0xe5e5e5e5, 0xf1f1f1f1,
00311         0x71717171, 0xd8d8d8d8, 0x31313131, 0x15151515,
00312         0x04040404, 0xc7c7c7c7, 0x23232323, 0xc3c3c3c3,
00313         0x18181818, 0x96969696, 0x05050505, 0x9a9a9a9a,
00314         0x07070707, 0x12121212, 0x80808080, 0xe2e2e2e2,
00315         0xebebebeb, 0x27272727, 0xb2b2b2b2, 0x75757575,
00316         0x09090909, 0x83838383, 0x2c2c2c2c, 0x1a1a1a1a,
00317         0x1b1b1b1b, 0x6e6e6e6e, 0x5a5a5a5a, 0xa0a0a0a0,
00318         0x52525252, 0x3b3b3b3b, 0xd6d6d6d6, 0xb3b3b3b3,
00319         0x29292929, 0xe3e3e3e3, 0x2f2f2f2f, 0x84848484,
00320         0x53535353, 0xd1d1d1d1, 0x00000000, 0xedededed,
00321         0x20202020, 0xfcfcfcfc, 0xb1b1b1b1, 0x5b5b5b5b,
00322         0x6a6a6a6a, 0xcbcbcbcb, 0xbebebebe, 0x39393939,
00323         0x4a4a4a4a, 0x4c4c4c4c, 0x58585858, 0xcfcfcfcf,
00324         0xd0d0d0d0, 0xefefefef, 0xaaaaaaaa, 0xfbfbfbfb,
00325         0x43434343, 0x4d4d4d4d, 0x33333333, 0x85858585,
00326         0x45454545, 0xf9f9f9f9, 0x02020202, 0x7f7f7f7f,
00327         0x50505050, 0x3c3c3c3c, 0x9f9f9f9f, 0xa8a8a8a8,
00328         0x51515151, 0xa3a3a3a3, 0x40404040, 0x8f8f8f8f,
00329         0x92929292, 0x9d9d9d9d, 0x38383838, 0xf5f5f5f5,
00330         0xbcbcbcbc, 0xb6b6b6b6, 0xdadadada, 0x21212121,
00331         0x10101010, 0xffffffff, 0xf3f3f3f3, 0xd2d2d2d2,
00332         0xcdcdcdcd, 0x0c0c0c0c, 0x13131313, 0xecececec,
00333         0x5f5f5f5f, 0x97979797, 0x44444444, 0x17171717,
00334         0xc4c4c4c4, 0xa7a7a7a7, 0x7e7e7e7e, 0x3d3d3d3d,
00335         0x64646464, 0x5d5d5d5d, 0x19191919, 0x73737373,
00336         0x60606060, 0x81818181, 0x4f4f4f4f, 0xdcdcdcdc,
00337         0x22222222, 0x2a2a2a2a, 0x90909090, 0x88888888,
00338         0x46464646, 0xeeeeeeee, 0xb8b8b8b8, 0x14141414,
00339         0xdededede, 0x5e5e5e5e, 0x0b0b0b0b, 0xdbdbdbdb,
00340         0xe0e0e0e0, 0x32323232, 0x3a3a3a3a, 0x0a0a0a0a,
00341         0x49494949, 0x06060606, 0x24242424, 0x5c5c5c5c,
00342         0xc2c2c2c2, 0xd3d3d3d3, 0xacacacac, 0x62626262,
00343         0x91919191, 0x95959595, 0xe4e4e4e4, 0x79797979,
00344         0xe7e7e7e7, 0xc8c8c8c8, 0x37373737, 0x6d6d6d6d,
00345         0x8d8d8d8d, 0xd5d5d5d5, 0x4e4e4e4e, 0xa9a9a9a9,
00346         0x6c6c6c6c, 0x56565656, 0xf4f4f4f4, 0xeaeaeaea,
00347         0x65656565, 0x7a7a7a7a, 0xaeaeaeae, 0x08080808,
00348         0xbabababa, 0x78787878, 0x25252525, 0x2e2e2e2e,
00349         0x1c1c1c1c, 0xa6a6a6a6, 0xb4b4b4b4, 0xc6c6c6c6,
00350         0xe8e8e8e8, 0xdddddddd, 0x74747474, 0x1f1f1f1f,
00351         0x4b4b4b4b, 0xbdbdbdbd, 0x8b8b8b8b, 0x8a8a8a8a,
00352         0x70707070, 0x3e3e3e3e, 0xb5b5b5b5, 0x66666666,
00353         0x48484848, 0x03030303, 0xf6f6f6f6, 0x0e0e0e0e,
00354         0x61616161, 0x35353535, 0x57575757, 0xb9b9b9b9,
00355         0x86868686, 0xc1c1c1c1, 0x1d1d1d1d, 0x9e9e9e9e,
00356         0xe1e1e1e1, 0xf8f8f8f8, 0x98989898, 0x11111111,
00357         0x69696969, 0xd9d9d9d9, 0x8e8e8e8e, 0x94949494,
00358         0x9b9b9b9b, 0x1e1e1e1e, 0x87878787, 0xe9e9e9e9,
00359         0xcececece, 0x55555555, 0x28282828, 0xdfdfdfdf,
00360         0x8c8c8c8c, 0xa1a1a1a1, 0x89898989, 0x0d0d0d0d,
00361         0xbfbfbfbf, 0xe6e6e6e6, 0x42424242, 0x68686868,
00362         0x41414141, 0x99999999, 0x2d2d2d2d, 0x0f0f0f0f,
00363         0xb0b0b0b0, 0x54545454, 0xbbbbbbbb, 0x16161616 }
00364 };
00365 
00366 #if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
00367 # define _ae0 ((__m64*) _aes_enc.t0)
00368 # define _ae1 ((__m64*) _aes_enc.t1)
00369 # define _ae2 ((__m64*) _aes_enc.t2)
00370 # define _ae3 ((__m64*) _aes_enc.t3)
00371 # define _ae4 _aes_enc.t4
00372 #else
00373 # define _ae0 _aes_enc.t0
00374 # define _ae1 _aes_enc.t1
00375 # define _ae2 _aes_enc.t2
00376 # define _ae3 _aes_enc.t3
00377 # define _ae4 _aes_enc.t4
00378 #endif
00379 
00380 const _table _aes_dec = {
00381     {   0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a,
00382         0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b,
00383         0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5,
00384         0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5,
00385         0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d,
00386         0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b,
00387         0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295,
00388         0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e,
00389         0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927,
00390         0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d,
00391         0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362,
00392         0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9,
00393         0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52,
00394         0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566,
00395         0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3,
00396         0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed,
00397         0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e,
00398         0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4,
00399         0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4,
00400         0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd,
00401         0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d,
00402         0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060,
00403         0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967,
00404         0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879,
00405         0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000,
00406         0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c,
00407         0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36,
00408         0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624,
00409         0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b,
00410         0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c,
00411         0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12,
00412         0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14,
00413         0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3,
00414         0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b,
00415         0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8,
00416         0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684,
00417         0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7,
00418         0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177,
00419         0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947,
00420         0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322,
00421         0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498,
00422         0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f,
00423         0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54,
00424         0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382,
00425         0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf,
00426         0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb,
00427         0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83,
00428         0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef,
00429         0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029,
00430         0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235,
00431         0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733,
00432         0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117,
00433         0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4,
00434         0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546,
00435         0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb,
00436         0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d,
00437         0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb,
00438         0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a,
00439         0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773,
00440         0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478,
00441         0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2,
00442         0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff,
00443         0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664,
00444         0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0 },
00445     {   0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96,
00446         0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x03e34b93,
00447         0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525,
00448         0xd7e54ffc, 0xcb2ac5d7, 0x44352680, 0xa362b58f,
00449         0x5ab1de49, 0x1bba2567, 0x0eea4598, 0xc0fe5de1,
00450         0x752fc302, 0xf04c8112, 0x97468da3, 0xf9d36bc6,
00451         0x5f8f03e7, 0x9c921595, 0x7a6dbfeb, 0x595295da,
00452         0x83bed42d, 0x217458d3, 0x69e04929, 0xc8c98e44,
00453         0x89c2756a, 0x798ef478, 0x3e58996b, 0x71b927dd,
00454         0x4fe1beb6, 0xad88f017, 0xac20c966, 0x3ace7db4,
00455         0x4adf6318, 0x311ae582, 0x33519760, 0x7f536245,
00456         0x7764b1e0, 0xae6bbb84, 0xa081fe1c, 0x2b08f994,
00457         0x68487058, 0xfd458f19, 0x6cde9487, 0xf87b52b7,
00458         0xd373ab23, 0x024b72e2, 0x8f1fe357, 0xab55662a,
00459         0x28ebb207, 0xc2b52f03, 0x7bc5869a, 0x0837d3a5,
00460         0x872830f2, 0xa5bf23b2, 0x6a0302ba, 0x8216ed5c,
00461         0x1ccf8a2b, 0xb479a792, 0xf207f3f0, 0xe2694ea1,
00462         0xf4da65cd, 0xbe0506d5, 0x6234d11f, 0xfea6c48a,
00463         0x532e349d, 0x55f3a2a0, 0xe18a0532, 0xebf6a475,
00464         0xec830b39, 0xef6040aa, 0x9f715e06, 0x106ebd51,
00465         0x8a213ef9, 0x06dd963d, 0x053eddae, 0xbde64d46,
00466         0x8d5491b5, 0x5dc47105, 0xd406046f, 0x155060ff,
00467         0xfb981924, 0xe9bdd697, 0x434089cc, 0x9ed96777,
00468         0x42e8b0bd, 0x8b890788, 0x5b19e738, 0xeec879db,
00469         0x0a7ca147, 0x0f427ce9, 0x1e84f8c9, 0x00000000,
00470         0x86800983, 0xed2b3248, 0x70111eac, 0x725a6c4e,
00471         0xff0efdfb, 0x38850f56, 0xd5ae3d1e, 0x392d3627,
00472         0xd90f0a64, 0xa65c6821, 0x545b9bd1, 0x2e36243a,
00473         0x670a0cb1, 0xe757930f, 0x96eeb4d2, 0x919b1b9e,
00474         0xc5c0804f, 0x20dc61a2, 0x4b775a69, 0x1a121c16,
00475         0xba93e20a, 0x2aa0c0e5, 0xe0223c43, 0x171b121d,
00476         0x0d090e0b, 0xc78bf2ad, 0xa8b62db9, 0xa91e14c8,
00477         0x19f15785, 0x0775af4c, 0xdd99eebb, 0x607fa3fd,
00478         0x2601f79f, 0xf5725cbc, 0x3b6644c5, 0x7efb5b34,
00479         0x29438b76, 0xc623cbdc, 0xfcedb668, 0xf1e4b863,
00480         0xdc31d7ca, 0x85634210, 0x22971340, 0x11c68420,
00481         0x244a857d, 0x3dbbd2f8, 0x32f9ae11, 0xa129c76d,
00482         0x2f9e1d4b, 0x30b2dcf3, 0x52860dec, 0xe3c177d0,
00483         0x16b32b6c, 0xb970a999, 0x489411fa, 0x64e94722,
00484         0x8cfca8c4, 0x3ff0a01a, 0x2c7d56d8, 0x903322ef,
00485         0x4e4987c7, 0xd138d9c1, 0xa2ca8cfe, 0x0bd49836,
00486         0x81f5a6cf, 0xde7aa528, 0x8eb7da26, 0xbfad3fa4,
00487         0x9d3a2ce4, 0x9278500d, 0xcc5f6a9b, 0x467e5462,
00488         0x138df6c2, 0xb8d890e8, 0xf7392e5e, 0xafc382f5,
00489         0x805d9fbe, 0x93d0697c, 0x2dd56fa9, 0x1225cfb3,
00490         0x99acc83b, 0x7d1810a7, 0x639ce86e, 0xbb3bdb7b,
00491         0x7826cd09, 0x18596ef4, 0xb79aec01, 0x9a4f83a8,
00492         0x6e95e665, 0xe6ffaa7e, 0xcfbc2108, 0xe815efe6,
00493         0x9be7bad9, 0x366f4ace, 0x099fead4, 0x7cb029d6,
00494         0xb2a431af, 0x233f2a31, 0x94a5c630, 0x66a235c0,
00495         0xbc4e7437, 0xca82fca6, 0xd090e0b0, 0xd8a73315,
00496         0x9804f14a, 0xdaec41f7, 0x50cd7f0e, 0xf691172f,
00497         0xd64d768d, 0xb0ef434d, 0x4daacc54, 0x0496e4df,
00498         0xb5d19ee3, 0x886a4c1b, 0x1f2cc1b8, 0x5165467f,
00499         0xea5e9d04, 0x358c015d, 0x7487fa73, 0x410bfb2e,
00500         0x1d67b35a, 0xd2db9252, 0x5610e933, 0x47d66d13,
00501         0x61d79a8c, 0x0ca1377a, 0x14f8598e, 0x3c13eb89,
00502         0x27a9ceee, 0xc961b735, 0xe51ce1ed, 0xb1477a3c,
00503         0xdfd29c59, 0x73f2553f, 0xce141879, 0x37c773bf,
00504         0xcdf753ea, 0xaafd5f5b, 0x6f3ddf14, 0xdb447886,
00505         0xf3afca81, 0xc468b93e, 0x3424382c, 0x40a3c25f,
00506         0xc31d1672, 0x25e2bc0c, 0x493c288b, 0x950dff41,
00507         0x01a83971, 0xb30c08de, 0xe4b4d89c, 0xc1566490,
00508         0x84cb7b61, 0xb632d570, 0x5c6c4874, 0x57b8d042 },
00509     {   0xf45150a7, 0x417e5365, 0x171ac3a4, 0x273a965e,
00510         0xab3bcb6b, 0x9d1ff145, 0xfaacab58, 0xe34b9303,
00511         0x302055fa, 0x76adf66d, 0xcc889176, 0x02f5254c,
00512         0xe54ffcd7, 0x2ac5d7cb, 0x35268044, 0x62b58fa3,
00513         0xb1de495a, 0xba25671b, 0xea45980e, 0xfe5de1c0,
00514         0x2fc30275, 0x4c8112f0, 0x468da397, 0xd36bc6f9,
00515         0x8f03e75f, 0x9215959c, 0x6dbfeb7a, 0x5295da59,
00516         0xbed42d83, 0x7458d321, 0xe0492969, 0xc98e44c8,
00517         0xc2756a89, 0x8ef47879, 0x58996b3e, 0xb927dd71,
00518         0xe1beb64f, 0x88f017ad, 0x20c966ac, 0xce7db43a,
00519         0xdf63184a, 0x1ae58231, 0x51976033, 0x5362457f,
00520         0x64b1e077, 0x6bbb84ae, 0x81fe1ca0, 0x08f9942b,
00521         0x48705868, 0x458f19fd, 0xde94876c, 0x7b52b7f8,
00522         0x73ab23d3, 0x4b72e202, 0x1fe3578f, 0x55662aab,
00523         0xebb20728, 0xb52f03c2, 0xc5869a7b, 0x37d3a508,
00524         0x2830f287, 0xbf23b2a5, 0x0302ba6a, 0x16ed5c82,
00525         0xcf8a2b1c, 0x79a792b4, 0x07f3f0f2, 0x694ea1e2,
00526         0xda65cdf4, 0x0506d5be, 0x34d11f62, 0xa6c48afe,
00527         0x2e349d53, 0xf3a2a055, 0x8a0532e1, 0xf6a475eb,
00528         0x830b39ec, 0x6040aaef, 0x715e069f, 0x6ebd5110,
00529         0x213ef98a, 0xdd963d06, 0x3eddae05, 0xe64d46bd,
00530         0x5491b58d, 0xc471055d, 0x06046fd4, 0x5060ff15,
00531         0x981924fb, 0xbdd697e9, 0x4089cc43, 0xd967779e,
00532         0xe8b0bd42, 0x8907888b, 0x19e7385b, 0xc879dbee,
00533         0x7ca1470a, 0x427ce90f, 0x84f8c91e, 0x00000000,
00534         0x80098386, 0x2b3248ed, 0x111eac70, 0x5a6c4e72,
00535         0x0efdfbff, 0x850f5638, 0xae3d1ed5, 0x2d362739,
00536         0x0f0a64d9, 0x5c6821a6, 0x5b9bd154, 0x36243a2e,
00537         0x0a0cb167, 0x57930fe7, 0xeeb4d296, 0x9b1b9e91,
00538         0xc0804fc5, 0xdc61a220, 0x775a694b, 0x121c161a,
00539         0x93e20aba, 0xa0c0e52a, 0x223c43e0, 0x1b121d17,
00540         0x090e0b0d, 0x8bf2adc7, 0xb62db9a8, 0x1e14c8a9,
00541         0xf1578519, 0x75af4c07, 0x99eebbdd, 0x7fa3fd60,
00542         0x01f79f26, 0x725cbcf5, 0x6644c53b, 0xfb5b347e,
00543         0x438b7629, 0x23cbdcc6, 0xedb668fc, 0xe4b863f1,
00544         0x31d7cadc, 0x63421085, 0x97134022, 0xc6842011,
00545         0x4a857d24, 0xbbd2f83d, 0xf9ae1132, 0x29c76da1,
00546         0x9e1d4b2f, 0xb2dcf330, 0x860dec52, 0xc177d0e3,
00547         0xb32b6c16, 0x70a999b9, 0x9411fa48, 0xe9472264,
00548         0xfca8c48c, 0xf0a01a3f, 0x7d56d82c, 0x3322ef90,
00549         0x4987c74e, 0x38d9c1d1, 0xca8cfea2, 0xd498360b,
00550         0xf5a6cf81, 0x7aa528de, 0xb7da268e, 0xad3fa4bf,
00551         0x3a2ce49d, 0x78500d92, 0x5f6a9bcc, 0x7e546246,
00552         0x8df6c213, 0xd890e8b8, 0x392e5ef7, 0xc382f5af,
00553         0x5d9fbe80, 0xd0697c93, 0xd56fa92d, 0x25cfb312,
00554         0xacc83b99, 0x1810a77d, 0x9ce86e63, 0x3bdb7bbb,
00555         0x26cd0978, 0x596ef418, 0x9aec01b7, 0x4f83a89a,
00556         0x95e6656e, 0xffaa7ee6, 0xbc2108cf, 0x15efe6e8,
00557         0xe7bad99b, 0x6f4ace36, 0x9fead409, 0xb029d67c,
00558         0xa431afb2, 0x3f2a3123, 0xa5c63094, 0xa235c066,
00559         0x4e7437bc, 0x82fca6ca, 0x90e0b0d0, 0xa73315d8,
00560         0x04f14a98, 0xec41f7da, 0xcd7f0e50, 0x91172ff6,
00561         0x4d768dd6, 0xef434db0, 0xaacc544d, 0x96e4df04,
00562         0xd19ee3b5, 0x6a4c1b88, 0x2cc1b81f, 0x65467f51,
00563         0x5e9d04ea, 0x8c015d35, 0x87fa7374, 0x0bfb2e41,
00564         0x67b35a1d, 0xdb9252d2, 0x10e93356, 0xd66d1347,
00565         0xd79a8c61, 0xa1377a0c, 0xf8598e14, 0x13eb893c,
00566         0xa9ceee27, 0x61b735c9, 0x1ce1ede5, 0x477a3cb1,
00567         0xd29c59df, 0xf2553f73, 0x141879ce, 0xc773bf37,
00568         0xf753eacd, 0xfd5f5baa, 0x3ddf146f, 0x447886db,
00569         0xafca81f3, 0x68b93ec4, 0x24382c34, 0xa3c25f40,
00570         0x1d1672c3, 0xe2bc0c25, 0x3c288b49, 0x0dff4195,
00571         0xa8397101, 0x0c08deb3, 0xb4d89ce4, 0x566490c1,
00572         0xcb7b6184, 0x32d570b6, 0x6c48745c, 0xb8d04257 },
00573     {   0x5150a7f4, 0x7e536541, 0x1ac3a417, 0x3a965e27,
00574         0x3bcb6bab, 0x1ff1459d, 0xacab58fa, 0x4b9303e3,
00575         0x2055fa30, 0xadf66d76, 0x889176cc, 0xf5254c02,
00576         0x4ffcd7e5, 0xc5d7cb2a, 0x26804435, 0xb58fa362,
00577         0xde495ab1, 0x25671bba, 0x45980eea, 0x5de1c0fe,
00578         0xc302752f, 0x8112f04c, 0x8da39746, 0x6bc6f9d3,
00579         0x03e75f8f, 0x15959c92, 0xbfeb7a6d, 0x95da5952,
00580         0xd42d83be, 0x58d32174, 0x492969e0, 0x8e44c8c9,
00581         0x756a89c2, 0xf478798e, 0x996b3e58, 0x27dd71b9,
00582         0xbeb64fe1, 0xf017ad88, 0xc966ac20, 0x7db43ace,
00583         0x63184adf, 0xe582311a, 0x97603351, 0x62457f53,
00584         0xb1e07764, 0xbb84ae6b, 0xfe1ca081, 0xf9942b08,
00585         0x70586848, 0x8f19fd45, 0x94876cde, 0x52b7f87b,
00586         0xab23d373, 0x72e2024b, 0xe3578f1f, 0x662aab55,
00587         0xb20728eb, 0x2f03c2b5, 0x869a7bc5, 0xd3a50837,
00588         0x30f28728, 0x23b2a5bf, 0x02ba6a03, 0xed5c8216,
00589         0x8a2b1ccf, 0xa792b479, 0xf3f0f207, 0x4ea1e269,
00590         0x65cdf4da, 0x06d5be05, 0xd11f6234, 0xc48afea6,
00591         0x349d532e, 0xa2a055f3, 0x0532e18a, 0xa475ebf6,
00592         0x0b39ec83, 0x40aaef60, 0x5e069f71, 0xbd51106e,
00593         0x3ef98a21, 0x963d06dd, 0xddae053e, 0x4d46bde6,
00594         0x91b58d54, 0x71055dc4, 0x046fd406, 0x60ff1550,
00595         0x1924fb98, 0xd697e9bd, 0x89cc4340, 0x67779ed9,
00596         0xb0bd42e8, 0x07888b89, 0xe7385b19, 0x79dbeec8,
00597         0xa1470a7c, 0x7ce90f42, 0xf8c91e84, 0x00000000,
00598         0x09838680, 0x3248ed2b, 0x1eac7011, 0x6c4e725a,
00599         0xfdfbff0e, 0x0f563885, 0x3d1ed5ae, 0x3627392d,
00600         0x0a64d90f, 0x6821a65c, 0x9bd1545b, 0x243a2e36,
00601         0x0cb1670a, 0x930fe757, 0xb4d296ee, 0x1b9e919b,
00602         0x804fc5c0, 0x61a220dc, 0x5a694b77, 0x1c161a12,
00603         0xe20aba93, 0xc0e52aa0, 0x3c43e022, 0x121d171b,
00604         0x0e0b0d09, 0xf2adc78b, 0x2db9a8b6, 0x14c8a91e,
00605         0x578519f1, 0xaf4c0775, 0xeebbdd99, 0xa3fd607f,
00606         0xf79f2601, 0x5cbcf572, 0x44c53b66, 0x5b347efb,
00607         0x8b762943, 0xcbdcc623, 0xb668fced, 0xb863f1e4,
00608         0xd7cadc31, 0x42108563, 0x13402297, 0x842011c6,
00609         0x857d244a, 0xd2f83dbb, 0xae1132f9, 0xc76da129,
00610         0x1d4b2f9e, 0xdcf330b2, 0x0dec5286, 0x77d0e3c1,
00611         0x2b6c16b3, 0xa999b970, 0x11fa4894, 0x472264e9,
00612         0xa8c48cfc, 0xa01a3ff0, 0x56d82c7d, 0x22ef9033,
00613         0x87c74e49, 0xd9c1d138, 0x8cfea2ca, 0x98360bd4,
00614         0xa6cf81f5, 0xa528de7a, 0xda268eb7, 0x3fa4bfad,
00615         0x2ce49d3a, 0x500d9278, 0x6a9bcc5f, 0x5462467e,
00616         0xf6c2138d, 0x90e8b8d8, 0x2e5ef739, 0x82f5afc3,
00617         0x9fbe805d, 0x697c93d0, 0x6fa92dd5, 0xcfb31225,
00618         0xc83b99ac, 0x10a77d18, 0xe86e639c, 0xdb7bbb3b,
00619         0xcd097826, 0x6ef41859, 0xec01b79a, 0x83a89a4f,
00620         0xe6656e95, 0xaa7ee6ff, 0x2108cfbc, 0xefe6e815,
00621         0xbad99be7, 0x4ace366f, 0xead4099f, 0x29d67cb0,
00622         0x31afb2a4, 0x2a31233f, 0xc63094a5, 0x35c066a2,
00623         0x7437bc4e, 0xfca6ca82, 0xe0b0d090, 0x3315d8a7,
00624         0xf14a9804, 0x41f7daec, 0x7f0e50cd, 0x172ff691,
00625         0x768dd64d, 0x434db0ef, 0xcc544daa, 0xe4df0496,
00626         0x9ee3b5d1, 0x4c1b886a, 0xc1b81f2c, 0x467f5165,
00627         0x9d04ea5e, 0x015d358c, 0xfa737487, 0xfb2e410b,
00628         0xb35a1d67, 0x9252d2db, 0xe9335610, 0x6d1347d6,
00629         0x9a8c61d7, 0x377a0ca1, 0x598e14f8, 0xeb893c13,
00630         0xceee27a9, 0xb735c961, 0xe1ede51c, 0x7a3cb147,
00631         0x9c59dfd2, 0x553f73f2, 0x1879ce14, 0x73bf37c7,
00632         0x53eacdf7, 0x5f5baafd, 0xdf146f3d, 0x7886db44,
00633         0xca81f3af, 0xb93ec468, 0x382c3424, 0xc25f40a3,
00634         0x1672c31d, 0xbc0c25e2, 0x288b493c, 0xff41950d,
00635         0x397101a8, 0x08deb30c, 0xd89ce4b4, 0x6490c156,
00636         0x7b6184cb, 0xd570b632, 0x48745c6c, 0xd04257b8 },
00637     {   0x52525252, 0x09090909, 0x6a6a6a6a, 0xd5d5d5d5,
00638         0x30303030, 0x36363636, 0xa5a5a5a5, 0x38383838,
00639         0xbfbfbfbf, 0x40404040, 0xa3a3a3a3, 0x9e9e9e9e,
00640         0x81818181, 0xf3f3f3f3, 0xd7d7d7d7, 0xfbfbfbfb,
00641         0x7c7c7c7c, 0xe3e3e3e3, 0x39393939, 0x82828282,
00642         0x9b9b9b9b, 0x2f2f2f2f, 0xffffffff, 0x87878787,
00643         0x34343434, 0x8e8e8e8e, 0x43434343, 0x44444444,
00644         0xc4c4c4c4, 0xdededede, 0xe9e9e9e9, 0xcbcbcbcb,
00645         0x54545454, 0x7b7b7b7b, 0x94949494, 0x32323232,
00646         0xa6a6a6a6, 0xc2c2c2c2, 0x23232323, 0x3d3d3d3d,
00647         0xeeeeeeee, 0x4c4c4c4c, 0x95959595, 0x0b0b0b0b,
00648         0x42424242, 0xfafafafa, 0xc3c3c3c3, 0x4e4e4e4e,
00649         0x08080808, 0x2e2e2e2e, 0xa1a1a1a1, 0x66666666,
00650         0x28282828, 0xd9d9d9d9, 0x24242424, 0xb2b2b2b2,
00651         0x76767676, 0x5b5b5b5b, 0xa2a2a2a2, 0x49494949,
00652         0x6d6d6d6d, 0x8b8b8b8b, 0xd1d1d1d1, 0x25252525,
00653         0x72727272, 0xf8f8f8f8, 0xf6f6f6f6, 0x64646464,
00654         0x86868686, 0x68686868, 0x98989898, 0x16161616,
00655         0xd4d4d4d4, 0xa4a4a4a4, 0x5c5c5c5c, 0xcccccccc,
00656         0x5d5d5d5d, 0x65656565, 0xb6b6b6b6, 0x92929292,
00657         0x6c6c6c6c, 0x70707070, 0x48484848, 0x50505050,
00658         0xfdfdfdfd, 0xedededed, 0xb9b9b9b9, 0xdadadada,
00659         0x5e5e5e5e, 0x15151515, 0x46464646, 0x57575757,
00660         0xa7a7a7a7, 0x8d8d8d8d, 0x9d9d9d9d, 0x84848484,
00661         0x90909090, 0xd8d8d8d8, 0xabababab, 0x00000000,
00662         0x8c8c8c8c, 0xbcbcbcbc, 0xd3d3d3d3, 0x0a0a0a0a,
00663         0xf7f7f7f7, 0xe4e4e4e4, 0x58585858, 0x05050505,
00664         0xb8b8b8b8, 0xb3b3b3b3, 0x45454545, 0x06060606,
00665         0xd0d0d0d0, 0x2c2c2c2c, 0x1e1e1e1e, 0x8f8f8f8f,
00666         0xcacacaca, 0x3f3f3f3f, 0x0f0f0f0f, 0x02020202,
00667         0xc1c1c1c1, 0xafafafaf, 0xbdbdbdbd, 0x03030303,
00668         0x01010101, 0x13131313, 0x8a8a8a8a, 0x6b6b6b6b,
00669         0x3a3a3a3a, 0x91919191, 0x11111111, 0x41414141,
00670         0x4f4f4f4f, 0x67676767, 0xdcdcdcdc, 0xeaeaeaea,
00671         0x97979797, 0xf2f2f2f2, 0xcfcfcfcf, 0xcececece,
00672         0xf0f0f0f0, 0xb4b4b4b4, 0xe6e6e6e6, 0x73737373,
00673         0x96969696, 0xacacacac, 0x74747474, 0x22222222,
00674         0xe7e7e7e7, 0xadadadad, 0x35353535, 0x85858585,
00675         0xe2e2e2e2, 0xf9f9f9f9, 0x37373737, 0xe8e8e8e8,
00676         0x1c1c1c1c, 0x75757575, 0xdfdfdfdf, 0x6e6e6e6e,
00677         0x47474747, 0xf1f1f1f1, 0x1a1a1a1a, 0x71717171,
00678         0x1d1d1d1d, 0x29292929, 0xc5c5c5c5, 0x89898989,
00679         0x6f6f6f6f, 0xb7b7b7b7, 0x62626262, 0x0e0e0e0e,
00680         0xaaaaaaaa, 0x18181818, 0xbebebebe, 0x1b1b1b1b,
00681         0xfcfcfcfc, 0x56565656, 0x3e3e3e3e, 0x4b4b4b4b,
00682         0xc6c6c6c6, 0xd2d2d2d2, 0x79797979, 0x20202020,
00683         0x9a9a9a9a, 0xdbdbdbdb, 0xc0c0c0c0, 0xfefefefe,
00684         0x78787878, 0xcdcdcdcd, 0x5a5a5a5a, 0xf4f4f4f4,
00685         0x1f1f1f1f, 0xdddddddd, 0xa8a8a8a8, 0x33333333,
00686         0x88888888, 0x07070707, 0xc7c7c7c7, 0x31313131,
00687         0xb1b1b1b1, 0x12121212, 0x10101010, 0x59595959,
00688         0x27272727, 0x80808080, 0xecececec, 0x5f5f5f5f,
00689         0x60606060, 0x51515151, 0x7f7f7f7f, 0xa9a9a9a9,
00690         0x19191919, 0xb5b5b5b5, 0x4a4a4a4a, 0x0d0d0d0d,
00691         0x2d2d2d2d, 0xe5e5e5e5, 0x7a7a7a7a, 0x9f9f9f9f,
00692         0x93939393, 0xc9c9c9c9, 0x9c9c9c9c, 0xefefefef,
00693         0xa0a0a0a0, 0xe0e0e0e0, 0x3b3b3b3b, 0x4d4d4d4d,
00694         0xaeaeaeae, 0x2a2a2a2a, 0xf5f5f5f5, 0xb0b0b0b0,
00695         0xc8c8c8c8, 0xebebebeb, 0xbbbbbbbb, 0x3c3c3c3c,
00696         0x83838383, 0x53535353, 0x99999999, 0x61616161,
00697         0x17171717, 0x2b2b2b2b, 0x04040404, 0x7e7e7e7e,
00698         0xbabababa, 0x77777777, 0xd6d6d6d6, 0x26262626,
00699         0xe1e1e1e1, 0x69696969, 0x14141414, 0x63636363,
00700         0x55555555, 0x21212121, 0x0c0c0c0c, 0x7d7d7d7d }
00701 };
00702 
00703 #define _ad0 _aes_dec.t0
00704 #define _ad1 _aes_dec.t1
00705 #define _ad2 _aes_dec.t2
00706 #define _ad3 _aes_dec.t3
00707 #define _ad4 _aes_dec.t4
00708 
00709 static const uint32_t _arc[] = {
00710     0x00000001, 0x00000002, 0x00000004, 0x00000008,
00711     0x00000010, 0x00000020, 0x00000040, 0x00000080,
00712     0x0000001b, 0x00000036
00713 };
00714 
00715 #if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
00716 # define etfs(i) \
00717     i0 = _mm_cvtsi64_si32(s0); \
00718     i1 = _mm_cvtsi64_si32(s1); \
00719     i2 = _mm_cvtsi64_si32(s2); \
00720     i3 = _mm_cvtsi64_si32(s3); \
00721     t0 = _mm_xor_si64( \
00722             _mm_xor_si64( \
00723                 _mm_xor_si64(_ae0[(i0      ) & 0xff], \
00724                              _ae1[(i1 >>  8) & 0xff]), \
00725                 _mm_xor_si64(_ae2[(i2 >> 16) & 0xff], \
00726                              _ae3[(i3 >> 24)       ]) \
00727             ), _mm_cvtsi32_si64(rk[i+0])); \
00728     t1 = _mm_xor_si64( \
00729             _mm_xor_si64( \
00730                 _mm_xor_si64(_ae0[(i1      ) & 0xff], \
00731                              _ae1[(i2 >>  8) & 0xff]), \
00732                 _mm_xor_si64(_ae2[(i3 >> 16) & 0xff], \
00733                              _ae3[(i0 >> 24)       ]) \
00734             ), _mm_cvtsi32_si64(rk[i+1])); \
00735     t2 = _mm_xor_si64( \
00736             _mm_xor_si64( \
00737                 _mm_xor_si64(_ae0[(i2      ) & 0xff], \
00738                              _ae1[(i3 >>  8) & 0xff]), \
00739                 _mm_xor_si64(_ae2[(i0 >> 16) & 0xff], \
00740                               _ae3[(i1 >> 24)       ]) \
00741             ), _mm_cvtsi32_si64(rk[i+2])); \
00742     t3 = _mm_xor_si64( \
00743             _mm_xor_si64( \
00744                 _mm_xor_si64(_ae0[(i3      ) & 0xff], \
00745                              _ae1[(i0 >>  8) & 0xff]), \
00746                 _mm_xor_si64(_ae2[(i1 >> 16) & 0xff], \
00747                              _ae3[(i2 >> 24)       ]) \
00748             ), _mm_cvtsi32_si64(rk[i+3]));
00749 #else
00750 # define etfs(i) \
00751     t0 = \
00752         _ae0[(s0      ) & 0xff] ^ \
00753         _ae1[(s1 >>  8) & 0xff] ^ \
00754         _ae2[(s2 >> 16) & 0xff] ^ \
00755         _ae3[(s3 >> 24)       ] ^ \
00756         rk[i+0]; \
00757     t1 = \
00758         _ae0[(s1      ) & 0xff] ^ \
00759         _ae1[(s2 >>  8) & 0xff] ^ \
00760         _ae2[(s3 >> 16) & 0xff] ^ \
00761         _ae3[(s0 >> 24)       ] ^ \
00762         rk[i+1]; \
00763     t2 = \
00764         _ae0[(s2      ) & 0xff] ^ \
00765         _ae1[(s3 >>  8) & 0xff] ^ \
00766         _ae2[(s0 >> 16) & 0xff] ^ \
00767         _ae3[(s1 >> 24)       ] ^ \
00768         rk[i+2]; \
00769     t3 = \
00770         _ae0[(s3      ) & 0xff] ^ \
00771         _ae1[(s0 >>  8) & 0xff] ^ \
00772         _ae2[(s1 >> 16) & 0xff] ^ \
00773         _ae3[(s2 >> 24)       ] ^ \
00774         rk[i+3];
00775 #endif
00776 
00777 #if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
00778 # define esft(i) \
00779     i0 = _mm_cvtsi64_si32(t0); \
00780     i1 = _mm_cvtsi64_si32(t1); \
00781     i2 = _mm_cvtsi64_si32(t2); \
00782     i3 = _mm_cvtsi64_si32(t3); \
00783     s0 = _mm_xor_si64( \
00784             _mm_xor_si64( \
00785                 _mm_xor_si64(_ae0[(i0      ) & 0xff], \
00786                              _ae1[(i1 >>  8) & 0xff]), \
00787                 _mm_xor_si64(_ae2[(i2 >> 16) & 0xff], \
00788                              _ae3[(i3 >> 24)       ]) \
00789             ), _mm_cvtsi32_si64(rk[i+0])); \
00790     s1 = _mm_xor_si64( \
00791             _mm_xor_si64( \
00792                 _mm_xor_si64(_ae0[(i1      ) & 0xff], \
00793                              _ae1[(i2 >>  8) & 0xff]), \
00794                 _mm_xor_si64(_ae2[(i3 >> 16) & 0xff], \
00795                              _ae3[(i0 >> 24)       ]) \
00796             ), _mm_cvtsi32_si64(rk[i+1])); \
00797     s2 = _mm_xor_si64( \
00798             _mm_xor_si64( \
00799                 _mm_xor_si64(_ae0[(i2      ) & 0xff], \
00800                              _ae1[(i3 >>  8) & 0xff]), \
00801                 _mm_xor_si64(_ae2[(i0 >> 16) & 0xff], \
00802                              _ae3[(i1 >> 24)       ]) \
00803             ), _mm_cvtsi32_si64(rk[i+2])); \
00804     s3 = _mm_xor_si64( \
00805             _mm_xor_si64( \
00806                 _mm_xor_si64(_ae0[(i3      ) & 0xff], \
00807                              _ae1[(i0 >>  8) & 0xff]), \
00808                 _mm_xor_si64(_ae2[(i1 >> 16) & 0xff], \
00809                              _ae3[(i2 >> 24)       ]) \
00810             ), _mm_cvtsi32_si64(rk[i+3]));
00811 #else
00812 # define esft(i) \
00813     s0 = \
00814         _ae0[(t0      ) & 0xff] ^ \
00815         _ae1[(t1 >>  8) & 0xff] ^ \
00816         _ae2[(t2 >> 16) & 0xff] ^ \
00817         _ae3[(t3 >> 24)       ] ^ \
00818         rk[i+0]; \
00819     s1 = \
00820         _ae0[(t1      ) & 0xff] ^ \
00821         _ae1[(t2 >>  8) & 0xff] ^ \
00822         _ae2[(t3 >> 16) & 0xff] ^ \
00823         _ae3[(t0 >> 24)       ] ^ \
00824         rk[i+1]; \
00825     s2 = \
00826         _ae0[(t2      ) & 0xff] ^ \
00827         _ae1[(t3 >>  8) & 0xff] ^ \
00828         _ae2[(t0 >> 16) & 0xff] ^ \
00829         _ae3[(t1 >> 24)       ] ^ \
00830         rk[i+2]; \
00831     s3 = \
00832         _ae0[(t3      ) & 0xff] ^ \
00833         _ae1[(t0 >>  8) & 0xff] ^ \
00834         _ae2[(t1 >> 16) & 0xff] ^ \
00835         _ae3[(t2 >> 24)       ] ^ \
00836         rk[i+3];
00837 #endif
00838 
00839 #if defined(OPTIMIZE_MMX) && (defined(OPTIMIZE_I586) || defined(OPTIMIZE_I686))
00840 # define elr() \
00841     i0 = _mm_cvtsi64_si32(t0); \
00842     i1 = _mm_cvtsi64_si32(t1); \
00843     i2 = _mm_cvtsi64_si32(t2); \
00844     i3 = _mm_cvtsi64_si32(t3); \
00845     s0 = _mm_cvtsi32_si64( \
00846         (_ae4[(i0      ) & 0xff] & _aes_mask[0]) ^ \
00847         (_ae4[(i1 >>  8) & 0xff] & _aes_mask[1]) ^ \
00848         (_ae4[(i2 >> 16) & 0xff] & _aes_mask[2]) ^ \
00849         (_ae4[(i3 >> 24)       ] & _aes_mask[3]) ^ \
00850         rk[0]); \
00851     s1 = _mm_cvtsi32_si64( \
00852         (_ae4[(i1      ) & 0xff] & _aes_mask[0]) ^ \
00853         (_ae4[(i2 >>  8) & 0xff] & _aes_mask[1]) ^ \
00854         (_ae4[(i3 >> 16) & 0xff] & _aes_mask[2]) ^ \
00855         (_ae4[(i0 >> 24)       ] & _aes_mask[3]) ^ \
00856         rk[1]); \
00857     s2 = _mm_cvtsi32_si64( \
00858         (_ae4[(i2      ) & 0xff] & _aes_mask[0]) ^ \
00859         (_ae4[(i3 >>  8) & 0xff] & _aes_mask[1]) ^ \
00860         (_ae4[(i0 >> 16) & 0xff] & _aes_mask[2]) ^ \
00861         (_ae4[(i1 >> 24)       ] & _aes_mask[3]) ^ \
00862         rk[2]); \
00863     s3 = _mm_cvtsi32_si64( \
00864         (_ae4[(i3      ) & 0xff] & _aes_mask[0]) ^ \
00865         (_ae4[(i0 >>  8) & 0xff] & _aes_mask[1]) ^ \
00866         (_ae4[(i1 >> 16) & 0xff] & _aes_mask[2]) ^ \
00867         (_ae4[(i2 >> 24)       ] & _aes_mask[3]) ^ \
00868         rk[3]);
00869 #else
00870 # define elr() \
00871     s0 = \
00872         (_ae4[(t0      ) & 0xff] & _aes_mask[0]) ^ \
00873         (_ae4[(t1 >>  8) & 0xff] & _aes_mask[1]) ^ \
00874         (_ae4[(t2 >> 16) & 0xff] & _aes_mask[2]) ^ \
00875         (_ae4[(t3 >> 24)       ] & _aes_mask[3]) ^ \
00876         rk[0]; \
00877     s1 = \
00878         (_ae4[(t1      ) & 0xff] & _aes_mask[0]) ^ \
00879         (_ae4[(t2 >>  8) & 0xff] & _aes_mask[1]) ^ \
00880         (_ae4[(t3 >> 16) & 0xff] & _aes_mask[2]) ^ \
00881         (_ae4[(t0 >> 24)       ] & _aes_mask[3]) ^ \
00882         rk[1]; \
00883     s2 = \
00884         (_ae4[(t2      ) & 0xff] & _aes_mask[0]) ^ \
00885         (_ae4[(t3 >>  8) & 0xff] & _aes_mask[1]) ^ \
00886         (_ae4[(t0 >> 16) & 0xff] & _aes_mask[2]) ^ \
00887         (_ae4[(t1 >> 24)       ] & _aes_mask[3]) ^ \
00888         rk[2]; \
00889     s3 = \
00890         (_ae4[(t3      ) & 0xff] & _aes_mask[0]) ^ \
00891         (_ae4[(t0 >>  8) & 0xff] & _aes_mask[1]) ^ \
00892         (_ae4[(t1 >> 16) & 0xff] & _aes_mask[2]) ^ \
00893         (_ae4[(t2 >> 24)       ] & _aes_mask[3]) ^ \
00894         rk[3];
00895 #endif
00896 
00897 #define dtfs(i) \
00898     t0 = \
00899         _ad0[(s0      ) & 0xff] ^ \
00900         _ad1[(s3 >>  8) & 0xff] ^ \
00901         _ad2[(s2 >> 16) & 0xff] ^ \
00902         _ad3[(s1 >> 24)       ] ^ \
00903         rk[i+0]; \
00904     t1 = \
00905         _ad0[(s1      ) & 0xff] ^ \
00906         _ad1[(s0 >>  8) & 0xff] ^ \
00907         _ad2[(s3 >> 16) & 0xff] ^ \
00908         _ad3[(s2 >> 24)       ] ^ \
00909         rk[i+1]; \
00910     t2 = \
00911         _ad0[(s2      ) & 0xff] ^ \
00912         _ad1[(s1 >>  8) & 0xff] ^ \
00913         _ad2[(s0 >> 16) & 0xff] ^ \
00914         _ad3[(s3 >> 24)       ] ^ \
00915         rk[i+2]; \
00916     t3 = \
00917         _ad0[(s3      ) & 0xff] ^ \
00918         _ad1[(s2 >>  8) & 0xff] ^ \
00919         _ad2[(s1 >> 16) & 0xff] ^ \
00920         _ad3[(s0 >> 24)       ] ^ \
00921         rk[i+3];
00922 
00923 #define dsft(i) \
00924     s0 = \
00925         _ad0[(t0      ) & 0xff] ^ \
00926         _ad1[(t3 >>  8) & 0xff] ^ \
00927         _ad2[(t2 >> 16) & 0xff] ^ \
00928         _ad3[(t1 >> 24)       ] ^ \
00929         rk[i+0]; \
00930     s1 = \
00931         _ad0[(t1      ) & 0xff] ^ \
00932         _ad1[(t0 >>  8) & 0xff] ^ \
00933         _ad2[(t3 >> 16) & 0xff] ^ \
00934         _ad3[(t2 >> 24)       ] ^ \
00935         rk[i+1]; \
00936     s2 = \
00937         _ad0[(t2      ) & 0xff] ^ \
00938         _ad1[(t1 >>  8) & 0xff] ^ \
00939         _ad2[(t0 >> 16) & 0xff] ^ \
00940         _ad3[(t3 >> 24)       ] ^ \
00941         rk[i+2]; \
00942     s3 = \
00943         _ad0[(t3      ) & 0xff] ^ \
00944         _ad1[(t2 >>  8) & 0xff] ^ \
00945         _ad2[(t1 >> 16) & 0xff] ^ \
00946         _ad3[(t0 >> 24)       ] ^ \
00947         rk[i+3];
00948 
00949 #define dlr() \
00950     s0 = \
00951         (_ad4[(t0      ) & 0xff] & 0x000000ff) ^ \
00952         (_ad4[(t3 >>  8) & 0xff] & 0x0000ff00) ^ \
00953         (_ad4[(t2 >> 16) & 0xff] & 0x00ff0000) ^ \
00954         (_ad4[(t1 >> 24)       ] & 0xff000000) ^ \
00955         rk[0]; \
00956     s1 = \
00957         (_ad4[(t1      ) & 0xff] & 0x000000ff) ^ \
00958         (_ad4[(t0 >>  8) & 0xff] & 0x0000ff00) ^ \
00959         (_ad4[(t3 >> 16) & 0xff] & 0x00ff0000) ^ \
00960         (_ad4[(t2 >> 24)       ] & 0xff000000) ^ \
00961         rk[1]; \
00962     s2 = \
00963         (_ad4[(t2      ) & 0xff] & 0x000000ff) ^ \
00964         (_ad4[(t1 >>  8) & 0xff] & 0x0000ff00) ^ \
00965         (_ad4[(t0 >> 16) & 0xff] & 0x00ff0000) ^ \
00966         (_ad4[(t3 >> 24)       ] & 0xff000000) ^ \
00967         rk[2]; \
00968     s3 = \
00969         (_ad4[(t3      ) & 0xff] & 0x000000ff) ^ \
00970         (_ad4[(t2 >>  8) & 0xff] & 0x0000ff00) ^ \
00971         (_ad4[(t1 >> 16) & 0xff] & 0x00ff0000) ^ \
00972         (_ad4[(t0 >> 24)       ] & 0xff000000) ^ \
00973         rk[3];

Generated on Thu Jul 22 2010 for BeeCrypt by  doxygen 1.7.1