diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/AESNI.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/AESNI.c b/src/AESNI.c index 50f0cd6..3f1e061 100644 --- a/src/AESNI.c +++ b/src/AESNI.c @@ -75,13 +75,11 @@ static void* aligned_malloc_wrapper(size_t alignment, size_t size) /* Helper functions to expand keys */ -static __m128i aes128_keyexpand(__m128i key, __m128i keygened, int shuf) +static __m128i aes128_keyexpand(__m128i key) { key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - keygened = _mm_shuffle_epi32(keygened, shuf); - return _mm_xor_si128(key, keygened); + return _mm_xor_si128(key, _mm_slli_si128(key, 4)); } static __m128i aes192_keyexpand_2(__m128i key, __m128i key2) @@ -91,11 +89,14 @@ static __m128i aes192_keyexpand_2(__m128i key, __m128i key2) return _mm_xor_si128(key, key2); } -#define KEYEXP128(K, I) aes128_keyexpand(K, _mm_aeskeygenassist_si128(K, I), 0xff) -#define KEYEXP192(K1, K2, I) aes128_keyexpand(K1, _mm_aeskeygenassist_si128(K2, I), 0x55) +#define KEYEXP128_H(K1, K2, I, S) _mm_xor_si128(aes128_keyexpand(K1), \ + _mm_shuffle_epi32(_mm_aeskeygenassist_si128(K2, I), S)) + +#define KEYEXP128(K, I) KEYEXP128_H(K, K, I, 0xff) +#define KEYEXP192(K1, K2, I) KEYEXP128_H(K1, K2, I, 0x55) #define KEYEXP192_2(K1, K2) aes192_keyexpand_2(K1, K2) -#define KEYEXP256(K1, K2, I) aes128_keyexpand(K1, _mm_aeskeygenassist_si128(K2, I), 0xff) -#define KEYEXP256_2(K1, K2) aes128_keyexpand(K1, _mm_aeskeygenassist_si128(K2, 0x00), 0xaa) +#define KEYEXP256(K1, K2, I) KEYEXP128_H(K1, K2, I, 0xff) +#define KEYEXP256_2(K1, K2) KEYEXP128_H(K1, K2, 0x00, 0xaa) /* Encryption key setup */ static void aes_key_setup_enc(__m128i rk[], const u8* cipherKey, int keylen) |