Move a few things.

This commit is contained in:
Adam Ierymenko 2020-07-17 10:57:01 -07:00
parent 641d1a52c8
commit 71a2206c5d
No known key found for this signature in database
GPG key ID: C8877CF2D7A5D7F3
2 changed files with 42 additions and 42 deletions

View file

@ -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

View file

@ -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
};