8#include <botan/internal/ghash.h>
10#include <botan/internal/isa_extn.h>
11#include <botan/internal/simd_2x64.h>
16void GHASH::ghash_multiply_vperm(uint8_t x[16],
const uint64_t HM[256],
const uint8_t input_bytes[],
size_t blocks) {
19 const auto* HM_mm =
reinterpret_cast<const SIMD_2x64::native_simd_type*
>(HM);
22 for(
size_t b = 0; b != blocks; ++b) {
28 for(
size_t i = 0; i != 64; i += 2) {
34 const auto XMASK1 = X.shr<63>() + ones;
36 const auto XMASK2 = X.shr<63>() + ones;
48 X.reverse_all_bytes().store_le(x);
SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 reverse_all_bytes() const
SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 swap_lanes() const
SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 andc(const SIMD_2x64 &other) const noexcept
static SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 all_ones()
static SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 load_le(const void *in)
static SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 interleave_high(const SIMD_2x64 &a, const SIMD_2x64 &b)
static SIMD_2x64 BOTAN_FN_ISA_SIMD_2X64 interleave_low(const SIMD_2x64 &a, const SIMD_2x64 &b)