87 void set_point_at_infinity(
const bool_t& is_infinity);
112 for (
auto scalar : scalars) {
113 cycle_scalars.emplace_back(scalar);
125 void assert_equal(cycle_group& other, std::string
const& msg =
"cycle_group::assert_equal");
241 return os <<
"{ " << v.
x <<
", " << v.
y <<
" }";
element class. Implements ecc group arithmetic using Jacobian coordinates See https://hyperelliptic....
group class. Represents an elliptic curve group element. Group is parametrised by Fq and Fr
group_elements::affine_element< Fq, Fr, Params > affine_element
group_elements::element< Fq, Fr, Params > element
constexpr uint64_t get_msb() const
Implements boolean logic in-circuit.
void set_origin_tag(const OriginTag &new_tag) const
void set_free_witness_tag()
void unset_free_witness_tag()
OriginTag get_origin_tag() const
cycle_group represents a group Element of the proving system's embedded curve, i.e....
cycle_group dbl(const std::optional< AffineElement > hint=std::nullopt) const
Evaluates a point doubling using Ultra ECC double gate (if non-constant)
static cycle_group from_constant_witness(Builder *_context, const AffineElement &_in)
Converts a native AffineElement into a witness, but constrains the witness values to be known constan...
stdlib::bool_t< Builder > bool_t
cycle_group & operator*=(const cycle_scalar &scalar)
void standardize()
Convert the point to standard form.
cycle_group unconditional_add(const cycle_group &other, const std::optional< AffineElement > hint=std::nullopt) const
void validate_on_curve() const
On-curve check.
cycle_group get_standard_form()
Convert the point to standard form.
bool_t operator==(cycle_group &other)
cycle_group & operator-=(const cycle_group &other)
static cycle_group conditional_assign(const bool_t &predicate, const cycle_group &lhs, const cycle_group &rhs)
void unset_free_witness_tag()
Unset the free witness flag for the cycle_group's tags.
static cycle_group reconstruct_from_public(const std::span< const field_t, 2 > &limbs)
Reconstruct a cycle_group from limbs (generally stored in the public inputs)
cycle_group checked_unconditional_subtract(const cycle_group &other, const std::optional< AffineElement > hint=std::nullopt) const
Will evaluate ECC point subtraction over *this and other.
cycle_group _unconditional_add_or_subtract(const cycle_group &other, bool is_addition, const std::optional< AffineElement > hint) const
Will evaluate ECC point addition or subtraction over *this and other.
static cycle_group from_witness(Builder *_context, const AffineElement &_in)
Converts an AffineElement into a circuit witness.
cycle_group operator-() const
Negates a point.
static cycle_group one(Builder *_context)
Construct a constant cycle_group representation of Group::one.
void set_free_witness_tag()
Set the free witness flag for the cycle_group's tags.
void set_origin_tag(OriginTag tag) const
Set the origin tag for x, y and _is_infinity members of cycle_group.
crypto::GeneratorContext< Curve > GeneratorContext
cycle_group operator/(const cycle_group &other) const
cycle_group & operator+=(const cycle_group &other)
bb::grumpkin::g1::affine_element AffineElement
static cycle_group constant_infinity(Builder *_context=nullptr)
Construct a constant point at infinity.
bool is_constant_point_at_infinity() const
bool_t is_point_at_infinity() const
static batch_mul_internal_output _variable_base_batch_mul_internal(std::span< cycle_scalar > scalars, std::span< cycle_group > base_points, std::span< AffineElement const > offset_generators, bool unconditional_add)
Internal logic to perform a variable-base batch mul using the Straus MSM algorithm.
stdlib::bigfield< Builder, bb::fq::Params > BigScalarField
static constexpr size_t ROM_TABLE_BITS
static constexpr size_t NUM_BITS_FULL_FIELD_SIZE
stdlib::field_t< Builder > field_t
cycle_group(Builder *_context=nullptr)
Construct a new constant point at infinity cycle group object.
static constexpr size_t PUBLIC_INPUTS_SIZE
AffineElement get_value() const
OriginTag get_origin_tag() const
Get the origin tag of cycle_group (a merege of origin tags of x, y and _is_infinity members)
cycle_group operator*(const cycle_scalar &scalar) const
static batch_mul_internal_output _fixed_base_batch_mul_internal(std::span< cycle_scalar > scalars, std::span< AffineElement > base_points)
Internal algorithm to perform a fixed-base batch mul.
void assert_equal(cycle_group &other, std::string const &msg="cycle_group::assert_equal")
cycle_group operator+(const cycle_group &other) const
Will evaluate ECC point addition over *this and other.
::bb::stdlib::cycle_scalar< Builder > cycle_scalar
cycle_group unconditional_subtract(const cycle_group &other, const std::optional< AffineElement > hint=std::nullopt) const
Builder * get_context() const
cycle_group checked_unconditional_add(const cycle_group &other, const std::optional< AffineElement > hint=std::nullopt) const
Will evaluate ECC point addition over *this and other.
uint32_t set_public()
Set the witness indices representing the cycle_group to public.
static constexpr std::string_view OFFSET_GENERATOR_DOMAIN_SEPARATOR
static cycle_group batch_mul(const std::vector< cycle_group > &base_points, const std::vector< BigScalarField > &scalars, GeneratorContext context={})
Represents a member of the Grumpkin curve scalar field (i.e. BN254 base field).
uint32_t set_public() const
void unset_free_witness_tag() const
Unset the free witness flag for the field element's tag.
OriginTag get_origin_tag() const
void set_free_witness_tag()
Set the free witness flag for the field element's tag.
void set_origin_tag(const OriginTag &new_tag) const
straus_lookup_table computes a lookup table of size 1 << table_bits
straus_scalar_slices decomposes an input scalar into bit-slices of size table_bits....
bb::group< bb::fr, bb::fq, G1Params > g1
std::ostream & operator<<(std::ostream &os, uint256_t const &a)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
This file contains part of the logic for the Origin Tag mechanism that tracks the use of in-circuit p...
static constexpr uint256_t modulus
Stores temporary variables produced by internal multiplication algorithms.
AffineElement offset_generator_delta