[PATCH] serpent-avx512-x86: fix CBC and CFB decryption with clang-18
Jussi Kivilinna
jussi.kivilinna at iki.fi
Tue Apr 30 21:23:58 CEST 2024
* cipher/serpent-avx512-x86.c (serpent_avx512_blk32): Avoid
'_mm512_castsi128_si512' usage to prevent non-initialized
vector register parts getting XOR into calculations for
CBC and CFB decryption.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
cipher/serpent-avx512-x86.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/cipher/serpent-avx512-x86.c b/cipher/serpent-avx512-x86.c
index 762c09e1..5b5c2483 100644
--- a/cipher/serpent-avx512-x86.c
+++ b/cipher/serpent-avx512-x86.c
@@ -758,10 +758,10 @@ serpent_avx512_blk32(const void *c, unsigned char *output,
case CFB_DEC:
{
- __m128i viv = _mm_loadu_si128((const void *)iv);
+ __m128i viv;
vin[0] = _mm512_maskz_loadu_epi32(_cvtu32_mask16(0xfff0),
input - 1 * 64 + 48)
- ^ _mm512_castsi128_si512(viv);
+ ^ _mm512_maskz_loadu_epi32(_cvtu32_mask16(0x000f), iv);
vin[1] = _mm512_loadu_epi32(input + 0 * 64 + 48);
vin[2] = _mm512_loadu_epi32(input + 1 * 64 + 48);
vin[3] = _mm512_loadu_epi32(input + 2 * 64 + 48);
@@ -852,10 +852,10 @@ serpent_avx512_blk32(const void *c, unsigned char *output,
case CBC_DEC:
{
- __m128i viv = _mm_loadu_si128((const void *)iv);
+ __m128i viv;
vout[0] ^= _mm512_maskz_loadu_epi32(_cvtu32_mask16(0xfff0),
input - 1 * 64 + 48)
- ^ _mm512_castsi128_si512(viv);
+ ^ _mm512_maskz_loadu_epi32(_cvtu32_mask16(0x000f), iv);
vout[1] ^= _mm512_loadu_epi32(input + 0 * 64 + 48);
vout[2] ^= _mm512_loadu_epi32(input + 1 * 64 + 48);
vout[3] ^= _mm512_loadu_epi32(input + 2 * 64 + 48);
--
2.43.0
More information about the Gcrypt-devel
mailing list