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; }
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; }
/* ** 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; }
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; }