From 71a2206c5dc3a36ed729bccfacab9514b591867c Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 17 Jul 2020 10:57:01 -0700 Subject: [PATCH] Move a few things. --- core/AES.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ core/AES.hpp | 44 ++------------------------------------------ 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/core/AES.cpp b/core/AES.cpp index 07ab0cd25..2ced6f5f9 100644 --- a/core/AES.cpp +++ b/core/AES.cpp @@ -1215,6 +1215,46 @@ void AES::_init_aesni(const uint8_t key[32]) noexcept _k.ni.h2[3] = _mm_xor_si128(_mm_shuffle_epi32(hhhh, 78), hhhh); } +void AES::_encrypt_aesni(const void *const in, void *const out) const noexcept +{ + __m128i tmp = _mm_loadu_si128((const __m128i *)in); + tmp = _mm_xor_si128(tmp, _k.ni.k[0]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[1]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[2]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[3]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[4]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[5]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[6]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[7]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[8]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[9]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[10]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[11]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[12]); + tmp = _mm_aesenc_si128(tmp, _k.ni.k[13]); + _mm_storeu_si128((__m128i *)out, _mm_aesenclast_si128(tmp, _k.ni.k[14])); +} + +void AES::_decrypt_aesni(const void *in, void *out) const noexcept +{ + __m128i tmp = _mm_loadu_si128((const __m128i *)in); + tmp = _mm_xor_si128(tmp, _k.ni.k[14]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[15]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[16]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[17]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[18]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[19]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[20]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[21]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[22]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[23]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[24]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[25]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[26]); + tmp = _mm_aesdec_si128(tmp, _k.ni.k[27]); + _mm_storeu_si128((__m128i *)out, _mm_aesdeclast_si128(tmp, _k.ni.k[0])); +} + #endif // ZT_AES_AESNI } // namespace ZeroTier diff --git a/core/AES.hpp b/core/AES.hpp index 940add70f..44143c20a 100644 --- a/core/AES.hpp +++ b/core/AES.hpp @@ -512,49 +512,9 @@ private: } _k; #ifdef ZT_AES_AESNI - void _init_aesni(const uint8_t key[32]) noexcept; - - ZT_INLINE void _encrypt_aesni(const void *const in, void *const out) const noexcept - { - __m128i tmp = _mm_loadu_si128((const __m128i *)in); - tmp = _mm_xor_si128(tmp, _k.ni.k[0]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[1]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[2]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[3]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[4]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[5]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[6]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[7]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[8]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[9]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[10]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[11]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[12]); - tmp = _mm_aesenc_si128(tmp, _k.ni.k[13]); - _mm_storeu_si128((__m128i *)out, _mm_aesenclast_si128(tmp, _k.ni.k[14])); - } - - ZT_INLINE void _decrypt_aesni(const void *in, void *out) const noexcept - { - __m128i tmp = _mm_loadu_si128((const __m128i *)in); - tmp = _mm_xor_si128(tmp, _k.ni.k[14]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[15]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[16]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[17]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[18]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[19]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[20]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[21]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[22]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[23]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[24]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[25]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[26]); - tmp = _mm_aesdec_si128(tmp, _k.ni.k[27]); - _mm_storeu_si128((__m128i *)out, _mm_aesdeclast_si128(tmp, _k.ni.k[0])); - } - + void _encrypt_aesni(const void *const in, void *const out) const noexcept; + void _decrypt_aesni(const void *in, void *out) const noexcept; #endif };