⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hostap_crypt_ccmp.c

📁 IEEE 802.11a/b/g linux2.4/2.6 驱动程序源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,	0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,	0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,	0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,	0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,	0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,	0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,	0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,	0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,	0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,	0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,	0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,	0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,	0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,	0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,	0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,	0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,	0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,	0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,	0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,	0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,	0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,	0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,	0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,	0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,	0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,	0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,	0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,	0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,	0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,	0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,	0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,	0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,	0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,	0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,	0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,	0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,	0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,	0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,	0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,	0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,	0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,	0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,	0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,	0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,	0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,};static const u32 Te4[256] = {	0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU,	0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U,	0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU,	0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U,	0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU,	0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U,	0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU,	0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U,	0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U,	0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU,	0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U,	0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U,	0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U,	0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU,	0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U,	0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U,	0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU,	0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U,	0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U,	0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U,	0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU,	0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU,	0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U,	0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU,	0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU,	0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U,	0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU,	0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U,	0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU,	0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U,	0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U,	0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U,	0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU,	0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U,	0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU,	0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U,	0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU,	0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U,	0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U,	0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU,	0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU,	0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU,	0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U,	0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U,	0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU,	0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U,	0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU,	0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U,	0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU,	0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U,	0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU,	0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU,	0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U,	0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU,	0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U,	0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU,	0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U,	0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U,	0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U,	0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU,	0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU,	0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U,	0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU,	0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U,};static const u32 rcon[] = {	0x01000000, 0x02000000, 0x04000000, 0x08000000,	0x10000000, 0x20000000, 0x40000000, 0x80000000,	0x1B000000, 0x36000000,};#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))#define PUTU32(ct, st) { \(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }/** * Expand the cipher key into the encryption key schedule. * * @return	the number of rounds for the given cipher key size. */void rijndaelKeySetupEnc(u32 rk[/*44*/], const u8 cipherKey[]){	int i;	u32 temp;	rk[0] = GETU32(cipherKey     );	rk[1] = GETU32(cipherKey +  4);	rk[2] = GETU32(cipherKey +  8);	rk[3] = GETU32(cipherKey + 12);	for (i = 0; i < 10; i++) {		temp  = rk[3];		rk[4] = rk[0] ^			(Te4[(temp >> 16) & 0xff] & 0xff000000) ^			(Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^			(Te4[(temp      ) & 0xff] & 0x0000ff00) ^			(Te4[(temp >> 24)       ] & 0x000000ff) ^			rcon[i];		rk[5] = rk[1] ^ rk[4];		rk[6] = rk[2] ^ rk[5];		rk[7] = rk[3] ^ rk[6];		rk += 4;	}}void rijndaelEncrypt(const u32 rk[/*44*/], const u8 pt[16], u8 ct[16]){	u32 s0, s1, s2, s3, t0, t1, t2, t3;	int Nr = 10;#ifndef FULL_UNROLL	int r;#endif /* ?FULL_UNROLL */	/*	 * map byte array block to cipher state	 * and add initial round key:	 */	s0 = GETU32(pt     ) ^ rk[0];	s1 = GETU32(pt +  4) ^ rk[1];	s2 = GETU32(pt +  8) ^ rk[2];	s3 = GETU32(pt + 12) ^ rk[3];#ifdef FULL_UNROLL    /* round 1: */   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5];   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6];   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7];   	/* round 2: */   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8];   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9];   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10];   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11];    /* round 3: */   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12];   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13];   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14];   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15];   	/* round 4: */   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16];   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17];   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18];   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19];    /* round 5: */   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20];   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21];   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22];   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23];   	/* round 6: */   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24];   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25];   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26];   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27];    /* round 7: */   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28];   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29];   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31];   	/* round 8: */   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32];   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33];   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34];   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35];    /* round 9: */   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36];   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37];   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38];   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39];    rk += Nr << 2;#else  /* !FULL_UNROLL */    /*	 * Nr - 1 full rounds:	 */    r = Nr >> 1;    for (;;) {        t0 =            Te0[(s0 >> 24)       ] ^            Te1[(s1 >> 16) & 0xff] ^            Te2[(s2 >>  8) & 0xff] ^            Te3[(s3      ) & 0xff] ^            rk[4];        t1 =            Te0[(s1 >> 24)       ] ^            Te1[(s2 >> 16) & 0xff] ^            Te2[(s3 >>  8) & 0xff] ^            Te3[(s0      ) & 0xff] ^            rk[5];        t2 =            Te0[(s2 >> 24)       ] ^            Te1[(s3 >> 16) & 0xff] ^            Te2[(s0 >>  8) & 0xff] ^            Te3[(s1      ) & 0xff] ^            rk[6];        t3 =            Te0[(s3 >> 24)       ] ^            Te1[(s0 >> 16) & 0xff] ^            Te2[(s1 >>  8) & 0xff] ^            Te3[(s2      ) & 0xff] ^            rk[7];        rk += 8;        if (--r == 0) {            break;        }        s0 =            Te0[(t0 >> 24)       ] ^            Te1[(t1 >> 16) & 0xff] ^            Te2[(t2 >>  8) & 0xff] ^            Te3[(t3      ) & 0xff] ^            rk[0];        s1 =            Te0[(t1 >> 24)       ] ^            Te1[(t2 >> 16) & 0xff] ^            Te2[(t3 >>  8) & 0xff] ^            Te3[(t0      ) & 0xff] ^            rk[1];        s2 =            Te0[(t2 >> 24)       ] ^            Te1[(t3 >> 16) & 0xff] ^            Te2[(t0 >>  8) & 0xff] ^            Te3[(t1      ) & 0xff] ^            rk[2];        s3 =            Te0[(t3 >> 24)       ] ^            Te1[(t0 >> 16) & 0xff] ^            Te2[(t1 >>  8) & 0xff] ^            Te3[(t2      ) & 0xff] ^            rk[3];    }#endif /* ?FULL_UNROLL */    /*	 * apply last round and	 * map cipher state to byte array block:	 */	s0 =		(Te4[(t0 >> 24)       ] & 0xff000000) ^		(Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^		(Te4[(t2 >>  8) & 0xff] & 0x0000ff00) ^		(Te4[(t3      ) & 0xff] & 0x000000ff) ^		rk[0];	PUTU32(ct     , s0);	s1 =		(Te4[(t1 >> 24)       ] & 0xff000000) ^		(Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^		(Te4[(t3 >>  8) & 0xff] & 0x0000ff00) ^		(Te4[(t0      ) & 0xff] & 0x000000ff) ^		rk[1];	PUTU32(ct +  4, s1);	s2 =		(Te4[(t2 >> 24)       ] & 0xff000000) ^		(Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^		(Te4[(t0 >>  8) & 0xff] & 0x0000ff00) ^		(Te4[(t1      ) & 0xff] & 0x000000ff) ^		rk[2];	PUTU32(ct +  8, s2);	s3 =		(Te4[(t3 >> 24)       ] & 0xff000000) ^		(Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^		(Te4[(t1 >>  8) & 0xff] & 0x0000ff00) ^		(Te4[(t2      ) & 0xff] & 0x000000ff) ^		rk[3];	PUTU32(ct + 12, s3);}/* ---- end public domain AES implementation ------------------------------- */#define hostap_ccmp_aes_encrypt(t, a, b) rijndaelEncrypt(t, a, b)#define crypto_cipher_setkey(t, k, l) rijndaelKeySetupEnc(t, k)#endif /* HOSTAP_USE_CRYPTO_API */static void * hostap_ccmp_init(int key_idx){	struct hostap_ccmp_data *priv;#ifdef NEW_MODULE_CODE	if (!try_module_get(THIS_MODULE))		return NULL;#else	MOD_INC_USE_COUNT;#endif	priv = (struct hostap_ccmp_data *) kmalloc(sizeof(*priv), GFP_ATOMIC);	if (priv == NULL) {		goto fail;	}	memset(priv, 0, sizeof(*priv));	priv->key_idx = key_idx;#ifdef HOSTAP_USE_CRYPTO_API	priv->tfm = crypto_alloc_tfm("aes", 0);	if (priv->tfm == NULL) {		printk(KERN_DEBUG "hostap_crypt_ccmp: could not allocate "		       "crypto API aes\n");		goto fail;	}#endif /* HOSTAP_USE_CRYPTO_API */	return priv;fail:	if (priv) {#ifdef HOSTAP_USE_CRYPTO_API		if (priv->tfm)			crypto_free_tfm(priv->tfm);#endif /* HOSTAP_USE_CRYPTO_API */		kfree(priv);	}#ifdef NEW_MODULE_CODE	module_put(THIS_MODULE);#else	MOD_DEC_USE_COUNT;#endif	return NULL;}static void hostap_ccmp_deinit(void *priv){#ifdef HOSTAP_USE_CRYPTO_API	struct hostap_ccmp_data *_priv = priv;	if (_priv && _priv->tfm)		crypto_free_tfm(_priv->tfm);#endif /* HOSTAP_USE_CRYPTO_API */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -