7#include <botan/internal/shacal2.h>
9#include <botan/internal/simd_avx2.h>
49void BOTAN_FN_ISA_AVX2 SHACAL2::avx2_encrypt_8(
const uint8_t in[], uint8_t out[])
const {
66 for(
size_t r = 0; r != 64; r += 8) {
67 SHACAL2_Fwd(A, B, C, D, E, F, G, H, m_RK[r + 0]);
68 SHACAL2_Fwd(H, A, B, C, D, E, F, G, m_RK[r + 1]);
69 SHACAL2_Fwd(G, H, A, B, C, D, E, F, m_RK[r + 2]);
70 SHACAL2_Fwd(F, G, H, A, B, C, D, E, m_RK[r + 3]);
71 SHACAL2_Fwd(E, F, G, H, A, B, C, D, m_RK[r + 4]);
72 SHACAL2_Fwd(D, E, F, G, H, A, B, C, m_RK[r + 5]);
73 SHACAL2_Fwd(C, D, E, F, G, H, A, B, m_RK[r + 6]);
74 SHACAL2_Fwd(B, C, D, E, F, G, H, A, m_RK[r + 7]);
92void BOTAN_FN_ISA_AVX2 SHACAL2::avx2_decrypt_8(
const uint8_t in[], uint8_t out[])
const {
93 using namespace SHACAL2_AVX2_F;
109 for(
size_t r = 0; r != 64; r += 8) {
110 SHACAL2_Rev(B, C, D, E, F, G, H, A, m_RK[63 - r]);
111 SHACAL2_Rev(C, D, E, F, G, H, A, B, m_RK[62 - r]);
112 SHACAL2_Rev(D, E, F, G, H, A, B, C, m_RK[61 - r]);
113 SHACAL2_Rev(E, F, G, H, A, B, C, D, m_RK[60 - r]);
114 SHACAL2_Rev(F, G, H, A, B, C, D, E, m_RK[59 - r]);
115 SHACAL2_Rev(G, H, A, B, C, D, E, F, m_RK[58 - r]);
116 SHACAL2_Rev(H, A, B, C, D, E, F, G, m_RK[57 - r]);
117 SHACAL2_Rev(A, B, C, D, E, F, G, H, m_RK[56 - r]);
123 B.store_be(out + 32);
124 C.store_be(out + 64);
125 D.store_be(out + 96);
127 E.store_be(out + 128);
128 F.store_be(out + 160);
129 G.store_be(out + 192);
130 H.store_be(out + 224);
SIMD_8x32 BOTAN_FN_ISA_AVX2 sigma0() const noexcept
SIMD_8x32 BOTAN_FN_ISA_AVX2 sigma1() const noexcept
static BOTAN_FN_ISA_AVX2 void reset_registers() noexcept
static BOTAN_FN_ISA_AVX2 void transpose(SIMD_8x32 &B0, SIMD_8x32 &B1, SIMD_8x32 &B2, SIMD_8x32 &B3) noexcept
static BOTAN_FN_ISA_AVX2 void zero_registers() noexcept
static BOTAN_FN_ISA_AVX2 SIMD_8x32 majority(const SIMD_8x32 &x, const SIMD_8x32 &y, const SIMD_8x32 &z) noexcept
BOTAN_FN_ISA_AVX2 void store_be(uint8_t out[]) const noexcept
static BOTAN_FN_ISA_AVX2 SIMD_8x32 splat(uint32_t B) noexcept
static BOTAN_FN_ISA_AVX2 SIMD_8x32 choose(const SIMD_8x32 &mask, const SIMD_8x32 &a, const SIMD_8x32 &b) noexcept
static BOTAN_FN_ISA_AVX2 SIMD_8x32 load_be(const uint8_t *in) noexcept
#define BOTAN_FORCE_INLINE