* 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.kivili...@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


_______________________________________________
Gcrypt-devel mailing list
Gcrypt-devel@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to