11template <
typename base_field,
typename Fq6Params>
class field6 {
13 constexpr field6(
const base_field&
a = base_field::zero(),
14 const base_field&
b = base_field::zero(),
15 const base_field& c = base_field::zero())
58 static constexpr
field6 zero() {
return { base_field::zero(), base_field::zero(), base_field::zero() }; };
59 static constexpr field6 one() {
return { base_field::one(), base_field::zero(), base_field::zero() }; };
61 static constexpr base_field
mul_by_non_residue(
const base_field&
a) {
return Fq6Params::mul_by_non_residue(
a); }
95 base_field T0 =
c0 * other.
c0;
96 base_field T1 =
c1 * other.
c1;
97 base_field T2 =
c2 * other.
c2;
99 base_field T3 = (
c0 +
c2) * (other.
c0 + other.
c2);
100 base_field T4 = (
c0 +
c1) * (other.
c0 + other.
c1);
101 base_field T5 = (
c1 +
c2) * (other.
c1 + other.
c2);
116 base_field S0 =
c0.
sqr();
117 base_field S1 =
c0 *
c1;
120 base_field S3 =
c1 *
c2;
122 base_field S4 =
c2.
sqr();
126 S1 + S2 + S3 - S0 - S4,
164 base_field C2 =
c1.sqr() - (
c0 *
c2);
180 Fq6Params::frobenius_coeffs_c1_3 *
c1.frobenius_map(),
181 Fq6Params::frobenius_coeffs_c2_3 *
c2.frobenius_map(),
187 return {
c0, Fq6Params::frobenius_coeffs_c1_2 *
c1, Fq6Params::frobenius_coeffs_c2_2 *
c2 };
194 Fq6Params::frobenius_coeffs_c1_1 *
c1.frobenius_map(),
195 Fq6Params::frobenius_coeffs_c2_1 *
c2.frobenius_map(),
202 base_field::random_element(
engine),
203 base_field::random_element(
engine),
204 base_field::random_element(
engine),
226 [[nodiscard]]
constexpr bool is_zero()
const {
return c0.is_zero() &&
c1.is_zero() &&
c2.is_zero(); }
constexpr bool operator==(const field6 &other) const
constexpr field6 frobenius_map_one() const
constexpr field6 operator-() const
constexpr field6 mul_by_fq2(const base_field &other) const
constexpr field6 sqr() const
static constexpr base_field mul_by_non_residue(const base_field &a)
constexpr field6 operator-(const field6 &other) const
constexpr field6 frobenius_map_two() const
constexpr field6 & operator=(field6 &&other) noexcept
constexpr field6(const field6 &other)
constexpr field6 to_montgomery_form() const
static constexpr field6 one()
constexpr field6 operator-=(const field6 &other)
constexpr field6 operator*(const field6 &other) const
constexpr bool is_zero() const
constexpr field6 frobenius_map_three() const
constexpr field6 operator+(const field6 &other) const
constexpr field6 operator/(const field6 &other) const
static constexpr field6 random_element(numeric::RNG *engine=nullptr)
constexpr field6 operator/=(const field6 &other)
constexpr field6 operator+=(const field6 &other)
constexpr field6 invert() const
constexpr field6 & operator=(const field6 &other) noexcept
constexpr field6(field6 &&other) noexcept
static constexpr field6 zero()
constexpr ~field6() noexcept=default
constexpr field6 from_montgomery_form() const
constexpr field6(const base_field &a=base_field::zero(), const base_field &b=base_field::zero(), const base_field &c=base_field::zero())
constexpr field6 operator*=(const field6 &other)
Entry point for Barretenberg command-line interface.