Пример #1
0
inline void AES_128_Key_Expansion(const unsigned char *userkey, void *key) {
	__m128i x0, x1, x2;
	__m128i *kp = (__m128i *) key;
	kp[0] = x0 = _mm_loadu_si128((__m128i *) userkey);
	x2 = _mm_setzero_si128();
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 1);
	kp[1] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 2);
	kp[2] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 4);
	kp[3] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 8);
	kp[4] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 16);
	kp[5] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 32);
	kp[6] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 64);
	kp[7] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 128);
	kp[8] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 27);
	kp[9] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 54);
	kp[10] = x0;
}
Пример #2
0
void AES_128_Key_Expansion(const unsigned char *userkey, AES_KEY *aesKey)
{
    block x0,x1,x2;
    //block *kp = (block *)&aesKey;
	aesKey->rd_key[0] = x0 = _mm_loadu_si128((block*)userkey);
    x2 = _mm_setzero_si128();
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 1);   aesKey->rd_key[1] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 2);   aesKey->rd_key[2] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 4);   aesKey->rd_key[3] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 8);   aesKey->rd_key[4] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 16);  aesKey->rd_key[5] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 32);  aesKey->rd_key[6] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 64);  aesKey->rd_key[7] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 128); aesKey->rd_key[8] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 27);  aesKey->rd_key[9] = x0;
	EXPAND_ASSIST(x0, x1, x2, x0, 255, 54);  aesKey->rd_key[10] = x0;
}
Пример #3
0
/*
** AES-256 key schedule
*/
__inline__ static void AES_256_Key_Expansion(
	const unsigned char *userKey,
	__m128i *key)
{
	__m128i x0, x1, x2, x3, *kp = key;
	kp[0] = x0 = _mm_loadu_si128((__m128i*)userKey);
	kp[1] = x3 = _mm_loadu_si128((__m128i*)(userKey + 16));
	x2 = _mm_setzero_si128();
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 1);  kp[2] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 1);  kp[3] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 2);  kp[4] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 2);  kp[5] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 4);  kp[6] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 4);  kp[7] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 8);  kp[8] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 8);  kp[9] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 16); kp[10] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 16); kp[11] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 32); kp[12] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 32); kp[13] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 64); kp[14] = x0;
}
Пример #4
0
void AES_256_Key_Expansion(const unsigned char *userkey, AES_KEY *aesKey)
{
	__m128i x0, x1, x2, x3;/* , *kp = (block *)&aesKey;*/
	aesKey->rd_key[0] = x0 = _mm_loadu_si128((block*)userkey);
	aesKey->rd_key[1] = x3 = _mm_loadu_si128((block*)(userkey + 16));
    x2 = _mm_setzero_si128();
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 1);  aesKey->rd_key[2] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 1);  aesKey->rd_key[3] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 2);  aesKey->rd_key[4] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 2);  aesKey->rd_key[5] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 4);  aesKey->rd_key[6] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 4);  aesKey->rd_key[7] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 8);  aesKey->rd_key[8] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 8);  aesKey->rd_key[9] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 16); aesKey->rd_key[10] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 16); aesKey->rd_key[11] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 32); aesKey->rd_key[12] = x0;
	EXPAND_ASSIST(x3, x1, x2, x0, 170, 32); aesKey->rd_key[13] = x3;
	EXPAND_ASSIST(x0, x1, x2, x3, 255, 64); aesKey->rd_key[14] = x0;
}