VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Crypto/kuznyechik_simd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Crypto/kuznyechik_simd.c')
-rw-r--r--src/Crypto/kuznyechik_simd.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/Crypto/kuznyechik_simd.c b/src/Crypto/kuznyechik_simd.c
index 1c505db1..a7391908 100644
--- a/src/Crypto/kuznyechik_simd.c
+++ b/src/Crypto/kuznyechik_simd.c
@@ -9142,92 +9142,92 @@ VC_INLINE void scheduleDecryptionRoundKeysForGost15(
#define ROUND_ENC_1x(round_) { \
temporary1_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data_ = _mm_xor_si128(data_, temporary1_); \
applyLSTransformation(data_); \
}
#define ROUND_ENC_2x(round_) { \
temporary11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data1_ = _mm_xor_si128(data1_, temporary11_); \
data2_ = _mm_xor_si128(data2_, temporary11_); \
applyLSTransformation_2(data1_, data2_); \
}
#define ROUND_ENC_3x(round_) { \
temporary11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data1_ = _mm_xor_si128(data1_, temporary11_); \
data2_ = _mm_xor_si128(data2_, temporary11_); \
data3_ = _mm_xor_si128(data3_, temporary11_); \
applyLSTransformation_3(data1_, data2_, data3_); \
}
#define ROUND_ENC_4x(round_) { \
temporary11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data1_ = _mm_xor_si128(data1_, temporary11_); \
data2_ = _mm_xor_si128(data2_, temporary11_); \
data3_ = _mm_xor_si128(data3_, temporary11_); \
data4_ = _mm_xor_si128(data4_, temporary11_); \
applyLSTransformation_4(data1_, data2_, data3_,data4_); \
}
-void kuznyechik_encrypt_block_simd(byte* out, const byte* in, kuznyechik_kds* kds)
+void kuznyechik_encrypt_block_simd(uint8* out, const uint8* in, kuznyechik_kds* kds)
{
const uint_64t *roundKeys_ = (const uint_64t *) kds->rke;
__m128i data_;
__m128i temporary1_, temporary2_;
__m128i addresses1_, addresses2_;
int round_;
data_ = _mm_loadu_si128((const __m128i*) in);
#ifdef UNROLL_LOOPS
ROUND_ENC_1x (0);
ROUND_ENC_1x (1);
ROUND_ENC_1x (2);
ROUND_ENC_1x (3);
ROUND_ENC_1x (4);
ROUND_ENC_1x (5);
ROUND_ENC_1x (6);
ROUND_ENC_1x (7);
ROUND_ENC_1x (8);
round_ = 9;
#else
for (round_ = 0; round_ < 9; round_++)
ROUND_ENC_1x (round_);
#endif
temporary1_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]);
data_ = _mm_xor_si128(data_, temporary1_);
_mm_storeu_si128((__m128i*) out, data_);
}
-void kuznyechik_encrypt_blocks_simd(byte* out, const byte* in, size_t blocks, kuznyechik_kds* kds)
+void kuznyechik_encrypt_blocks_simd(uint8* out, const uint8* in, size_t blocks, kuznyechik_kds* kds)
{
const uint_64t *roundKeys_ = (const uint_64t *) kds->rke;
__m128i data1_, data2_, data3_, data4_;
__m128i temporary11_, temporary12_;
__m128i addresses11_, addresses12_;
__m128i temporary21_, temporary22_;
__m128i addresses21_, addresses22_;
__m128i temporary31_, temporary32_;
__m128i addresses31_, addresses32_;
__m128i temporary41_, temporary42_;
__m128i addresses41_, addresses42_;
int round_;
while (blocks >= 4)
{
data1_ = _mm_loadu_si128((const __m128i*) in);
data2_ = _mm_loadu_si128((const __m128i*) (in + 16));
data3_ = _mm_loadu_si128((const __m128i*) (in + 32));
data4_ = _mm_loadu_si128((const __m128i*) (in + 48));
#ifdef UNROLL_LOOPS
ROUND_ENC_4x (0);
ROUND_ENC_4x (1);
ROUND_ENC_4x (2);
ROUND_ENC_4x (3);
ROUND_ENC_4x (4);
ROUND_ENC_4x (5);
ROUND_ENC_4x (6);
ROUND_ENC_4x (7);
@@ -9320,97 +9320,97 @@ void kuznyechik_encrypt_blocks_simd(byte* out, const byte* in, size_t blocks, ku
#define ROUND_DEC_1X(round_) { \
applyInversedLSTransformation(data_); \
cache1_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data_ = _mm_xor_si128(data_, cache1_); \
}
#define ROUND_DEC_2X(round_) { \
applyInversedLSTransformation_2(data1_, data2_); \
cache11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data1_ = _mm_xor_si128(data1_, cache11_); \
data2_ = _mm_xor_si128(data2_, cache11_); \
}
#define ROUND_DEC_3X(round_) { \
applyInversedLSTransformation_3(data1_, data2_,data3_); \
cache11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data1_ = _mm_xor_si128(data1_, cache11_); \
data2_ = _mm_xor_si128(data2_, cache11_); \
data3_ = _mm_xor_si128(data3_, cache11_); \
}
#define ROUND_DEC_4X(round_) { \
applyInversedLSTransformation_4(data1_, data2_,data3_,data4_); \
cache11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[2 * round_]); \
data1_ = _mm_xor_si128(data1_, cache11_); \
data2_ = _mm_xor_si128(data2_, cache11_); \
data3_ = _mm_xor_si128(data3_, cache11_); \
data4_ = _mm_xor_si128(data4_, cache11_); \
}
-void kuznyechik_decrypt_block_simd(byte* out, const byte* in, kuznyechik_kds* kds)
+void kuznyechik_decrypt_block_simd(uint8* out, const uint8* in, kuznyechik_kds* kds)
{
const uint_64t *roundKeys_ = kds->rkd;
__m128i data_;
#ifndef UNROLL_LOOPS
int round_;
#endif
block_t temporary_;
int byteIndex_;
__m128i cache1_, cache2_;
__m128i addresses1_, addresses2_;
data_ = _mm_loadu_si128((const __m128i*) in);
applySTransformation(data_);
#ifdef UNROLL_LOOPS
ROUND_DEC_1X (9);
ROUND_DEC_1X (8);
ROUND_DEC_1X (7);
ROUND_DEC_1X (6);
ROUND_DEC_1X (5);
ROUND_DEC_1X (4);
ROUND_DEC_1X (3);
ROUND_DEC_1X (2);
ROUND_DEC_1X (1);
#else
for (round_ = NumberOfRounds - 1; round_ > 0; --round_)
ROUND_DEC_1X(round_);
#endif
applyInversedSTransformation(data_);
cache1_ = _mm_loadu_si128((const __m128i *) &roundKeys_[0]);
data_ = _mm_xor_si128(data_, cache1_);
_mm_storeu_si128((__m128i*) out, data_);
}
-void kuznyechik_decrypt_blocks_simd(byte* out, const byte* in, size_t blocks, kuznyechik_kds* kds)
+void kuznyechik_decrypt_blocks_simd(uint8* out, const uint8* in, size_t blocks, kuznyechik_kds* kds)
{
const uint_64t *roundKeys_ = kds->rkd;
__m128i data1_, data2_,data3_,data4_;
#ifndef UNROLL_LOOPS
int round_;
#endif
block_t temporary1_;
block_t temporary2_;
block_t temporary3_;
block_t temporary4_;
int byteIndex_;
__m128i cache11_, cache12_;
__m128i cache21_, cache22_;
__m128i cache31_, cache32_;
__m128i cache41_, cache42_;
__m128i addresses11_, addresses12_;
__m128i addresses21_, addresses22_;
__m128i addresses31_, addresses32_;
__m128i addresses41_, addresses42_;
while (blocks >= 4)
{
data1_ = _mm_loadu_si128((const __m128i*) in);
data2_ = _mm_loadu_si128((const __m128i*) (in + 16));
data3_ = _mm_loadu_si128((const __m128i*) (in + 32));
data4_ = _mm_loadu_si128((const __m128i*) (in + 48));
applySTransformation_4(data1_, data2_,data3_,data4_);
#ifdef UNROLL_LOOPS
@@ -9481,37 +9481,37 @@ void kuznyechik_decrypt_blocks_simd(byte* out, const byte* in, size_t blocks, ku
data2_ = _mm_loadu_si128((const __m128i*) (in + 16));
applySTransformation_2(data1_, data2_);
#ifdef UNROLL_LOOPS
ROUND_DEC_2X (9);
ROUND_DEC_2X (8);
ROUND_DEC_2X (7);
ROUND_DEC_2X (6);
ROUND_DEC_2X (5);
ROUND_DEC_2X (4);
ROUND_DEC_2X (3);
ROUND_DEC_2X (2);
ROUND_DEC_2X (1);
#else
for (round_ = NumberOfRounds - 1; round_ > 0; --round_)
ROUND_DEC_2X(round_);
#endif
applyInversedSTransformation_2(data1_,data2_);
cache11_ = _mm_loadu_si128((const __m128i *) &roundKeys_[0]);
data1_ = _mm_xor_si128(data1_, cache11_);
data2_ = _mm_xor_si128(data2_, cache11_);
_mm_storeu_si128((__m128i*) out, data1_);
_mm_storeu_si128((__m128i*) (out + 16), data2_);
}
else if (blocks)
kuznyechik_decrypt_block_simd (out, in, kds);
}
-void kuznyechik_set_key_simd(const byte* key, kuznyechik_kds *kds)
+void kuznyechik_set_key_simd(const uint8* key, kuznyechik_kds *kds)
{
scheduleEncryptionRoundKeysForGost15 (kds->rke, key);
scheduleDecryptionRoundKeysForGost15 (kds->rkd, key);
}
#endif