aes_x86core.c 35.9 KB
Newer Older
#else
			t[i] = tpe ^ (tpd >> 16) ^ (tpd << 16) ^ 
				(tp9 >> 24) ^ (tp9 << 8) ^
				(tpb >> 8) ^ (tpb << 24);
#endif
			t[i] ^= rk[i];
		}
	}
#else
	t[0] =	Td0[(s0      ) & 0xff] ^
		Td1[(s3 >>  8) & 0xff] ^
		Td2[(s2 >> 16) & 0xff] ^
		Td3[(s1 >> 24)       ] ^
		rk[0];
	t[1] =	Td0[(s1      ) & 0xff] ^
		Td1[(s0 >>  8) & 0xff] ^
		Td2[(s3 >> 16) & 0xff] ^
		Td3[(s2 >> 24)       ] ^
		rk[1];
	t[2] =	Td0[(s2      ) & 0xff] ^
		Td1[(s1 >>  8) & 0xff] ^
		Td2[(s0 >> 16) & 0xff] ^
		Td3[(s3 >> 24)       ] ^
		rk[2];
	t[3] =	Td0[(s3      ) & 0xff] ^
		Td1[(s2 >>  8) & 0xff] ^
		Td2[(s1 >> 16) & 0xff] ^
		Td3[(s0 >> 24)       ] ^
		rk[3];
#endif
	s0 = t[0]; s1 = t[1]; s2 = t[2]; s3 = t[3];
    }
    /*
	 * apply last round and
	 * map cipher state to byte array block:
	 */
	prefetch256(Td4);

	*(u32*)(out+0) =
		(Td4[(s0      ) & 0xff])	^
		(Td4[(s3 >>  8) & 0xff] <<  8) ^
		(Td4[(s2 >> 16) & 0xff] << 16) ^
		(Td4[(s1 >> 24)       ] << 24) ^
		rk[0];
	*(u32*)(out+4) =
		(Td4[(s1      ) & 0xff])	 ^
		(Td4[(s0 >>  8) & 0xff] <<  8) ^
		(Td4[(s3 >> 16) & 0xff] << 16) ^
		(Td4[(s2 >> 24)       ] << 24) ^
		rk[1];
	*(u32*)(out+8) =
		(Td4[(s2      ) & 0xff])	 ^
		(Td4[(s1 >>  8) & 0xff] <<  8) ^
		(Td4[(s0 >> 16) & 0xff] << 16) ^
		(Td4[(s3 >> 24)       ] << 24) ^
		rk[2];
	*(u32*)(out+12) =
		(Td4[(s3      ) & 0xff])	 ^
		(Td4[(s2 >>  8) & 0xff] <<  8) ^
		(Td4[(s1 >> 16) & 0xff] << 16) ^
		(Td4[(s0 >> 24)       ] << 24) ^
		rk[3];
}