7#include <botan/internal/poly_dbl.h>
9#include <botan/exceptn.h>
10#include <botan/internal/loadstor.h>
23enum class MinWeightPolynomial : uint64_t {
32template <
size_t LIMBS, MinWeightPolynomial P>
33void poly_double(uint8_t out[],
const uint8_t in[]) {
37 const uint64_t POLY =
static_cast<uint64_t
>(P);
39 const uint64_t
carry = POLY * (W[0] >> 63);
41 if constexpr(LIMBS > 0) {
42 for(
size_t i = 0; i != LIMBS - 1; ++i) {
43 W[i] = (W[i] << 1) ^ (W[i + 1] >> 63);
47 W[LIMBS - 1] = (W[LIMBS - 1] << 1) ^
carry;
52template <
size_t LIMBS, MinWeightPolynomial P>
53void poly_double_le(uint8_t out[],
const uint8_t in[]) {
57 const uint64_t POLY =
static_cast<uint64_t
>(P);
59 const uint64_t
carry = POLY * (W[LIMBS - 1] >> 63);
61 if constexpr(LIMBS > 0) {
62 for(
size_t i = 0; i != LIMBS - 1; ++i) {
63 W[LIMBS - 1 - i] = (W[LIMBS - 1 - i] << 1) ^ (W[LIMBS - 2 - i] >> 63);
67 W[0] = (W[0] << 1) ^
carry;
77 return poly_double<1, MinWeightPolynomial::P64>(out, in);
79 return poly_double<2, MinWeightPolynomial::P128>(out, in);
81 return poly_double<3, MinWeightPolynomial::P192>(out, in);
83 return poly_double<4, MinWeightPolynomial::P256>(out, in);
85 return poly_double<8, MinWeightPolynomial::P512>(out, in);
87 return poly_double<16, MinWeightPolynomial::P1024>(out, in);
96 return poly_double_le<1, MinWeightPolynomial::P64>(out, in);
98 return poly_double_le<2, MinWeightPolynomial::P128>(out, in);
100 return poly_double_le<3, MinWeightPolynomial::P192>(out, in);
102 return poly_double_le<4, MinWeightPolynomial::P256>(out, in);
104 return poly_double_le<8, MinWeightPolynomial::P512>(out, in);
106 return poly_double_le<16, MinWeightPolynomial::P1024>(out, in);
void copy_out_le(uint8_t out[], size_t out_bytes, const T in[])
constexpr T load_le(InR &&in_range)
void poly_double_n_le(uint8_t out[], const uint8_t in[], size_t n)
void carry(int64_t &h0, int64_t &h1)
void poly_double_n(uint8_t out[], const uint8_t in[], size_t n)
constexpr T load_be(InR &&in_range)
void copy_out_be(uint8_t out[], size_t out_bytes, const T in[])