Adam Ierymenko пре 5 година
родитељ
комит
71a2206c5d
2 измењених фајлова са 42 додато и 42 уклоњено
  1. 40 0
      core/AES.cpp
  2. 2 42
      core/AES.hpp

+ 40 - 0
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);
 	_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
 #endif // ZT_AES_AESNI
 
 
 } // namespace ZeroTier
 } // namespace ZeroTier

+ 2 - 42
core/AES.hpp

@@ -512,49 +512,9 @@ private:
 	} _k;
 	} _k;
 
 
 #ifdef ZT_AES_AESNI
 #ifdef ZT_AES_AESNI
-
 	void _init_aesni(const uint8_t key[32]) noexcept;
 	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
 #endif
 };
 };