aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/crypto_native
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2020-01-29 10:31:26 +0100
committerDamjan Marion <dmarion@me.com>2020-01-30 10:10:06 +0000
commit78b58f65f1c94d7a5efbf191b4a6e8b6cc12ae66 (patch)
tree8bbe3016a856434923f4cbf754be84a8578a3334 /src/plugins/crypto_native
parent27d12d30cdf5af37fad0e14db0877ca716af2115 (diff)
crypto-native: don't expand aes-cbc keys twice
Type: refactor Change-Id: If0d9ec70f9e8c228c39505864a4a73bf94b67479 Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/plugins/crypto_native')
-rw-r--r--src/plugins/crypto_native/aes.h15
-rw-r--r--src/plugins/crypto_native/aes_cbc.c3
2 files changed, 7 insertions, 11 deletions
diff --git a/src/plugins/crypto_native/aes.h b/src/plugins/crypto_native/aes.h
index d0923913034..d1b3104d981 100644
--- a/src/plugins/crypto_native/aes.h
+++ b/src/plugins/crypto_native/aes.h
@@ -196,23 +196,20 @@ aes_key_expand (__m128i * k, u8 * key, aes_key_size_t ks)
static_always_inline void
-aes_key_enc_to_dec (__m128i * k, aes_key_size_t ks)
+aes_key_enc_to_dec (__m128i * ke, __m128i * kd, aes_key_size_t ks)
{
int rounds = AES_KEY_ROUNDS (ks);
- __m128i r;
- r = k[rounds];
- k[rounds] = k[0];
- k[0] = r;
+ kd[rounds] = ke[0];
+ kd[0] = ke[rounds];
for (int i = 1; i < (rounds / 2); i++)
{
- r = k[rounds - i];
- k[rounds - i] = _mm_aesimc_si128 (k[i]);
- k[i] = _mm_aesimc_si128 (r);
+ kd[rounds - i] = _mm_aesimc_si128 (ke[i]);
+ kd[i] = _mm_aesimc_si128 (ke[rounds - i]);
}
- k[rounds / 2] = _mm_aesimc_si128 (k[rounds / 2]);
+ kd[rounds / 2] = _mm_aesimc_si128 (ke[rounds / 2]);
}
#endif /* __aesni_h__ */
diff --git a/src/plugins/crypto_native/aes_cbc.c b/src/plugins/crypto_native/aes_cbc.c
index c814b13725f..e60f53db92b 100644
--- a/src/plugins/crypto_native/aes_cbc.c
+++ b/src/plugins/crypto_native/aes_cbc.c
@@ -407,8 +407,7 @@ aesni_cbc_key_exp (vnet_crypto_key_t * key, aes_key_size_t ks)
aes_cbc_key_data_t *kd;
kd = clib_mem_alloc_aligned (sizeof (*kd), CLIB_CACHE_LINE_BYTES);
aes_key_expand (e, key->data, ks);
- aes_key_expand (d, key->data, ks);
- aes_key_enc_to_dec (d, ks);
+ aes_key_enc_to_dec (e, d, ks);
for (int i = 0; i < AES_KEY_ROUNDS (ks) + 1; i++)
{
#if __VAES__