17template <
class base_field,
class Params>
struct alignas(32)
field2 {
19 static constexpr size_t PUBLIC_INPUTS_SIZE = base_field::PUBLIC_INPUTS_SIZE + base_field::PUBLIC_INPUTS_SIZE;
21 constexpr field2(
const base_field&
a = base_field::zero(),
const base_field&
b = base_field::zero())
62 static constexpr
field2 zero() {
return field2{ base_field::zero(), base_field::zero() }; }
63 static constexpr field2 one() {
return field2{ base_field::one(), base_field::zero() }; }
67 return field2{ Params::twist_mul_by_q_x_0, Params::twist_mul_by_q_x_1 };
71 return field2{ Params::twist_mul_by_q_y_0, Params::twist_mul_by_q_y_1 };
75 return field2{ Params::twist_cube_root_0, Params::twist_cube_root_1 };
82 constexpr
field2 operator/(const
field2& other) const noexcept;
84 constexpr
field2 operator*=(const
field2& other) noexcept;
85 constexpr
field2 operator+=(const
field2& other) noexcept;
86 constexpr
field2 operator-=(const
field2& other) noexcept;
87 constexpr
field2 operator/=(const
field2& other) noexcept;
96 constexpr bool operator!=(
const field2& other)
const noexcept {
return !(*
this == other); }
101 constexpr
field2 pow(uint64_t exponent) const noexcept;
118 [[nodiscard]] constexpr
bool is_msb_set() const noexcept;
121 [[nodiscard]] constexpr
bool is_zero() const noexcept;
130 base_field::serialize_to_buffer(
value.c1,
buffer +
sizeof(base_field));
135 field2 result{ base_field::zero(), base_field::zero() };
136 result.
c0 = base_field::serialize_from_buffer(
buffer);
137 result.c1 = base_field::serialize_from_buffer(
buffer +
sizeof(base_field));
144 os <<
a.c0 <<
" , " <<
a.c1;
uint8_t buffer[RANDOM_BUFFER_SIZE]
Entry point for Barretenberg command-line interface.
void read(B &it, field2< base_field, Params > &value)
void write(B &buf, field2< base_field, Params > const &value)
void read(auto &it, msgpack_concepts::HasMsgPack auto &obj)
Automatically derived read for any object that defines .msgpack() (implicitly defined by MSGPACK_FIEL...
void write(auto &buf, const msgpack_concepts::HasMsgPack auto &obj)
Automatically derived write for any object that defines .msgpack() (implicitly defined by MSGPACK_FIE...
constexpr void self_set_msb() noexcept
constexpr void self_conditional_negate(uint64_t predicate) noexcept
static field2 serialize_from_buffer(uint8_t *buffer)
constexpr void self_to_montgomery_form() noexcept
constexpr bool operator!=(const field2 &other) const noexcept
constexpr bool operator==(const field2 &other) const noexcept
constexpr field2 sqr() const noexcept
static constexpr field2 twist_mul_by_q_y()
constexpr field2 to_montgomery_form() const noexcept
constexpr void self_from_montgomery_form() noexcept
constexpr field2 mul_by_fq(const base_field &a) const noexcept
constexpr void self_reduce_once() noexcept
constexpr void self_neg() noexcept
static constexpr field2 one()
constexpr field2 operator-() const noexcept
constexpr field2 operator+(const field2 &other) const noexcept
static constexpr size_t PUBLIC_INPUTS_SIZE
static constexpr field2 twist_mul_by_q_x()
static constexpr field2 zero()
constexpr field2(const field2 &other) noexcept
constexpr void self_frobenius_map() noexcept
constexpr field2 & operator=(const field2 &other) noexcept
constexpr field2 invert() const noexcept
static constexpr uint256_t modulus
static constexpr field2 twist_coeff_b()
constexpr bool is_msb_set() const noexcept
static field2 random_element(numeric::RNG *engine=nullptr)
constexpr field2 from_montgomery_form() const noexcept
static constexpr field2 cube_root_of_unity()
constexpr bool is_zero() const noexcept
constexpr field2(const base_field &a=base_field::zero(), const base_field &b=base_field::zero())
friend std::ostream & operator<<(std::ostream &os, const field2 &a)
constexpr void self_sqr() noexcept
constexpr field2 pow(const uint256_t &exponent) const noexcept
constexpr field2 & operator=(field2 &&other) noexcept
constexpr field2 reduce_once() const noexcept
static void serialize_to_buffer(const field2 &value, uint8_t *buffer)
constexpr field2(field2 &&other) noexcept
constexpr uint64_t is_msb_set_word() const noexcept
constexpr field2 operator*(const field2 &other) const noexcept
constexpr field2 frobenius_map() const noexcept
constexpr ~field2() noexcept=default