7#include <botan/internal/serpent.h>
9#include <botan/internal/serpent_sbox.h>
10#include <botan/internal/simd_avx512.h>
269void BOTAN_FN_ISA_AVX512 Serpent::avx512_encrypt_16(
const uint8_t in[16 * 16], uint8_t out[16 * 16])
const {
270 using namespace Botan::Serpent_F;
279 const Key_Inserter key_xor(m_round_key.data());
281 key_xor(0, B0, B1, B2, B3);
284 key_xor(1, B0, B1, B2, B3);
287 key_xor(2, B0, B1, B2, B3);
290 key_xor(3, B0, B1, B2, B3);
293 key_xor(4, B0, B1, B2, B3);
296 key_xor(5, B0, B1, B2, B3);
299 key_xor(6, B0, B1, B2, B3);
302 key_xor(7, B0, B1, B2, B3);
306 key_xor(8, B0, B1, B2, B3);
309 key_xor(9, B0, B1, B2, B3);
312 key_xor(10, B0, B1, B2, B3);
315 key_xor(11, B0, B1, B2, B3);
318 key_xor(12, B0, B1, B2, B3);
321 key_xor(13, B0, B1, B2, B3);
324 key_xor(14, B0, B1, B2, B3);
327 key_xor(15, B0, B1, B2, B3);
331 key_xor(16, B0, B1, B2, B3);
334 key_xor(17, B0, B1, B2, B3);
337 key_xor(18, B0, B1, B2, B3);
340 key_xor(19, B0, B1, B2, B3);
343 key_xor(20, B0, B1, B2, B3);
346 key_xor(21, B0, B1, B2, B3);
349 key_xor(22, B0, B1, B2, B3);
352 key_xor(23, B0, B1, B2, B3);
356 key_xor(24, B0, B1, B2, B3);
359 key_xor(25, B0, B1, B2, B3);
362 key_xor(26, B0, B1, B2, B3);
365 key_xor(27, B0, B1, B2, B3);
368 key_xor(28, B0, B1, B2, B3);
371 key_xor(29, B0, B1, B2, B3);
374 key_xor(30, B0, B1, B2, B3);
377 key_xor(31, B0, B1, B2, B3);
379 key_xor(32, B0, B1, B2, B3);
390void BOTAN_FN_ISA_AVX512 Serpent::avx512_decrypt_16(
const uint8_t in[16 * 16], uint8_t out[16 * 16])
const {
391 using namespace Botan::Serpent_F;
400 const Key_Inserter key_xor(m_round_key.data());
402 key_xor(32, B0, B1, B2, B3);
404 key_xor(31, B0, B1, B2, B3);
407 key_xor(30, B0, B1, B2, B3);
410 key_xor(29, B0, B1, B2, B3);
413 key_xor(28, B0, B1, B2, B3);
416 key_xor(27, B0, B1, B2, B3);
419 key_xor(26, B0, B1, B2, B3);
422 key_xor(25, B0, B1, B2, B3);
425 key_xor(24, B0, B1, B2, B3);
429 key_xor(23, B0, B1, B2, B3);
432 key_xor(22, B0, B1, B2, B3);
435 key_xor(21, B0, B1, B2, B3);
438 key_xor(20, B0, B1, B2, B3);
441 key_xor(19, B0, B1, B2, B3);
444 key_xor(18, B0, B1, B2, B3);
447 key_xor(17, B0, B1, B2, B3);
450 key_xor(16, B0, B1, B2, B3);
454 key_xor(15, B0, B1, B2, B3);
457 key_xor(14, B0, B1, B2, B3);
460 key_xor(13, B0, B1, B2, B3);
463 key_xor(12, B0, B1, B2, B3);
466 key_xor(11, B0, B1, B2, B3);
469 key_xor(10, B0, B1, B2, B3);
472 key_xor(9, B0, B1, B2, B3);
475 key_xor(8, B0, B1, B2, B3);
479 key_xor(7, B0, B1, B2, B3);
482 key_xor(6, B0, B1, B2, B3);
485 key_xor(5, B0, B1, B2, B3);
488 key_xor(4, B0, B1, B2, B3);
491 key_xor(3, B0, B1, B2, B3);
494 key_xor(2, B0, B1, B2, B3);
497 key_xor(1, B0, B1, B2, B3);
500 key_xor(0, B0, B1, B2, B3);
static BOTAN_FN_ISA_AVX512 void transpose(SIMD_16x32 &B0, SIMD_16x32 &B1, SIMD_16x32 &B2, SIMD_16x32 &B3)
BOTAN_FN_ISA_AVX512 void store_le(uint8_t out[]) const
static BOTAN_FN_ISA_AVX512 SIMD_16x32 ternary_fn(const SIMD_16x32 &a, const SIMD_16x32 &b, const SIMD_16x32 &c)
static BOTAN_FN_ISA_AVX512 SIMD_16x32 load_le(const uint8_t *in)
static BOTAN_FN_ISA_AVX512 void zero_registers()
#define BOTAN_FORCE_INLINE
BOTAN_FORCE_INLINE void transform(T &B0, T &B1, T &B2, T &B3)
BOTAN_FORCE_INLINE void SBoxD5(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxD4(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE0(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE1(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE3(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxD0(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE5(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxD6(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxD3(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void i_transform(T &B0, T &B1, T &B2, T &B3)
BOTAN_FORCE_INLINE void SBoxD2(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE6(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE2(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE4(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxD1(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxE7(T &a, T &b, T &c, T &d)
BOTAN_FORCE_INLINE void SBoxD7(T &a, T &b, T &c, T &d)