packages feed

cipher-aes 0.2.3 → 0.2.4

raw patch · 2 files changed

+18/−6 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

cbits/aes_x86ni.c view
@@ -42,15 +42,27 @@ #define ALIGN_UP(addr, size) (((addr) + ((size) - 1)) & (~((size) - 1))) #define ALIGNMENT(n) __attribute__((aligned(n))) -static __m128i aes_128_key_expansion(__m128i key, __m128i keygened, const uint8_t shuffle)+/* old GCC version doesn't cope with the shuffle parameters, that can take 2 values (0xff and 0xaa)+ * in our case, passed as argument despite being a immediate 8 bits constant anyway.+ * un-factorise aes_128_key_expansion into 2 version that have the shuffle parameter explicitly set */+static __m128i aes_128_key_expansion_ff(__m128i key, __m128i keygened) {-	keygened = _mm_shuffle_epi32(keygened, shuffle);+	keygened = _mm_shuffle_epi32(keygened, 0xff); 	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)); 	return _mm_xor_si128(key, keygened); } +static __m128i aes_128_key_expansion_aa(__m128i key, __m128i keygened)+{+	keygened = _mm_shuffle_epi32(keygened, 0xaa);+	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));+	return _mm_xor_si128(key, keygened);+}+ void aes_ni_init(aes_key *key, uint8_t *ikey, uint8_t size) { 	__m128i k[28];@@ -61,7 +73,7 @@ 	case 16: 		k[0] = _mm_loadu_si128((const __m128i*) ikey); -		#define AES_128_key_exp(K, RCON) aes_128_key_expansion(K, _mm_aeskeygenassist_si128(K, RCON), 0xff)+		#define AES_128_key_exp(K, RCON) aes_128_key_expansion_ff(K, _mm_aeskeygenassist_si128(K, RCON)) 		k[1]  = AES_128_key_exp(k[0], 0x01); 		k[2]  = AES_128_key_exp(k[1], 0x02); 		k[3]  = AES_128_key_exp(k[2], 0x04);@@ -90,8 +102,8 @@ 			_mm_storeu_si128(((__m128i *) out) + i, k[i]); 		break; 	case 32:-#define AES_256_key_exp_1(K1, K2, RCON) aes_128_key_expansion(K1, _mm_aeskeygenassist_si128(K2, RCON), 0xff)-#define AES_256_key_exp_2(K1, K2)       aes_128_key_expansion(K1, _mm_aeskeygenassist_si128(K2, 0x00), 0xaa)+#define AES_256_key_exp_1(K1, K2, RCON) aes_128_key_expansion_ff(K1, _mm_aeskeygenassist_si128(K2, RCON))+#define AES_256_key_exp_2(K1, K2)       aes_128_key_expansion_aa(K1, _mm_aeskeygenassist_si128(K2, 0x00)) 		k[0]  = _mm_loadu_si128((const __m128i*) ikey); 		k[1]  = _mm_loadu_si128((const __m128i*) (ikey+16)); 		k[2]  = AES_256_key_exp_1(k[0], k[1], 0x01);
cipher-aes.cabal view
@@ -1,5 +1,5 @@ Name:                cipher-aes-Version:             0.2.3+Version:             0.2.4 Description:     Fast AES cipher implementation with advanced mode of operations.     .