9#include "../../common/assert.hpp"
36template <
typename Fq_,
typename Fr_,
typename Params>
class group {
44 static constexpr bool has_a = Params::has_a;
88 const size_t num_generators,
89 const size_t starting_index = 0)
93 std::vector<uint8_t> generator_preimage;
94 generator_preimage.reserve(64);
96 for (
size_t i = 0; i < 32; ++i) {
97 generator_preimage.emplace_back(0);
99 for (
size_t i = starting_index; i < starting_index + num_generators; ++i) {
100 auto generator_index =
static_cast<uint32_t
>(i);
101 uint32_t mask = 0xff;
102 generator_preimage[32] =
static_cast<uint8_t
>(generator_index >> 24);
103 generator_preimage[33] =
static_cast<uint8_t
>((generator_index >> 16) & mask);
104 generator_preimage[34] =
static_cast<uint8_t
>((generator_index >> 8) & mask);
105 generator_preimage[35] =
static_cast<uint8_t
>(generator_index & mask);
112 const size_t num_generators,
113 const size_t starting_index = 0)
115 std::vector<uint8_t> domain_bytes;
116 for (
char i : domain_separator) {
117 domain_bytes.emplace_back(
static_cast<unsigned char>(i));
130#include "group_impl_int128.tcc"
132#include "group_impl_asm.tcc"
static constexpr affine_element hash_to_curve(const std::vector< uint8_t > &seed, uint8_t attempt_count=0) noexcept
Hash a seed buffer into a point.
constexpr affine_element set_infinity() const noexcept
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
BB_INLINE constexpr element set_infinity() const noexcept
group class. Represents an elliptic curve group element. Group is parametrised by Fq and Fr
static constexpr element one
static constexpr affine_element affine_one
static constexpr element point_at_infinity
static constexpr Fq curve_b
static std::vector< affine_element > derive_generators(const std::string_view &domain_separator, const size_t num_generators, const size_t starting_index=0)
static constexpr bool USE_ENDOMORPHISM
static constexpr Fq curve_a
static constexpr bool has_a
static constexpr affine_element affine_point_at_infinity
static std::vector< affine_element > derive_generators(const std::vector< uint8_t > &domain_separator_bytes, const size_t num_generators, const size_t starting_index=0)
Derives generator points via hash-to-curve.
static BB_INLINE void conditional_negate_affine(const affine_element *src, affine_element *dest, uint64_t predicate)
Entry point for Barretenberg command-line interface.
constexpr std::array< uint8_t, BLAKE3_OUT_LEN > blake3s_constexpr(const uint8_t *input, size_t input_size)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
static constexpr field one()