52 #ifndef LIBGARBLE_AES_H 53 #define LIBGARBLE_AES_H 59 #define EXPAND_ASSIST(v1,v2,v3,v4,shuff_const,aes_const) \ 60 v2 = _mm_aeskeygenassist_si128(v4,aes_const); \ 61 v3 = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(v3), \ 62 _mm_castsi128_ps(v1), 16)); \ 63 v1 = _mm_xor_si128(v1,v3); \ 64 v3 = _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(v3), \ 65 _mm_castsi128_ps(v1), 140)); \ 66 v1 = _mm_xor_si128(v1,v3); \ 67 v2 = _mm_shuffle_epi32(v2,shuff_const); \ 68 v1 = _mm_xor_si128(v1,v2) 76 x2 = _mm_setzero_si128();
101 AES_ecb_encrypt_blks(
block *blks,
unsigned int nblks,
const AES_KEY *key)
103 for (
unsigned int i = 0; i < nblks; ++i)
104 blks[i] = _mm_xor_si128(blks[i], key->
rd_key[0]);
105 for (
unsigned int j = 1; j < key->
rounds; ++j)
106 for (
unsigned int i = 0; i < nblks; ++i)
107 blks[i] = _mm_aesenc_si128(blks[i], key->
rd_key[j]);
108 for (
unsigned int i = 0; i < nblks; ++i)
109 blks[i] = _mm_aesenclast_si128(blks[i], key->
rd_key[key->
rounds]);
117 #if (OCB_KEY_LEN == 0) 122 dkey->
rd_key[i--] = _mm_aesimc_si128(ekey->
rd_key[j++]);
130 AES_set_encrypt_key(userkey, &temp_key);
131 AES_set_decrypt_key_fast(key, &temp_key);
135 AES_ecb_decrypt_blks(
block *blks,
unsigned nblks,
const AES_KEY *key)
137 unsigned i, j, rnds = key->
rounds;
138 for (i = 0; i < nblks; ++i)
139 blks[i] = _mm_xor_si128(blks[i], key->
rd_key[0]);
140 for (j = 1; j < rnds; ++j)
141 for (i = 0; i < nblks; ++i)
142 blks[i] = _mm_aesdec_si128(blks[i], key->
rd_key[j]);
143 for (i = 0; i < nblks; ++i)
144 blks[i] = _mm_aesdeclast_si128(blks[i], key->
rd_key[j]);
__m128i block
Definition: block.h:8
unsigned int rounds
Definition: aes.h:57
#define EXPAND_ASSIST(v1, v2, v3, v4, shuff_const, aes_const)
Definition: aes.h:59
block rd_key[11]
Definition: aes.h:57