11template <
typename quadratic_field,
typename base_field,
typename Fq12Params>
class field12 {
13 constexpr field12(
const base_field&
a = base_field::zero(),
const base_field&
b = base_field::zero())
56 static constexpr field12 zero() {
return { base_field::zero(), base_field::zero() }; };
57 static constexpr field12 one() {
return { base_field::one(), base_field::zero() }; };
62 base_field::mul_by_non_residue(
a.c2),
86 base_field T0 =
c0 * other.
c0;
87 base_field T1 =
c1 * other.
c1;
88 base_field T2 =
c0 +
c1;
89 base_field T3 = other.
c0 + other.
c1;
128 quadratic_field d0 =
c0.c0 * ell.
o;
129 quadratic_field d2 =
c0.c2 * ell.
vv;
130 quadratic_field d4 =
c1.c1 * ell.
vw;
131 quadratic_field t2 =
c0.c0 +
c1.c1;
132 quadratic_field t1 =
c0.c0 +
c0.c2;
133 quadratic_field s0 =
c0.c1 +
c1.c0;
136 quadratic_field s1 =
c0.c1 * ell.
vv;
137 quadratic_field t3 = s1 + d4;
138 quadratic_field t4 = base_field::mul_by_non_residue(t3);
144 t4 = base_field::mul_by_non_residue(t3);
149 quadratic_field t0 = ell.
o + ell.
vv;
159 t1 = ell.
vv + ell.
vw;
163 t4 = base_field::mul_by_non_residue(t3);
170 t4 = base_field::mul_by_non_residue(t3);
185 base_field T0 =
c0 +
c1;
250 base_field::random_element(
engine),
251 base_field::random_element(
engine),
271 [[nodiscard]]
constexpr bool is_zero()
const {
return c0.is_zero() &&
c1.is_zero(); }
constexpr field12 operator-(const field12 &other) const
static constexpr field12 zero()
constexpr field12 cyclotomic_squared() const
constexpr field12 operator*=(const field12 &other)
constexpr field12 & operator=(field12 &&other) noexcept
constexpr bool operator==(const field12 &other) const
constexpr field12 operator+(const field12 &other) const
constexpr field12 frobenius_map_three() const
constexpr field12 invert() const
constexpr field12(field12 &&other) noexcept
constexpr field12 operator/(const field12 &other) const
static constexpr field12 random_element(numeric::RNG *engine=nullptr)
constexpr bool is_zero() const
constexpr field12 unitary_inverse() const
constexpr field12(const field12 &other)
constexpr field12(const base_field &a=base_field::zero(), const base_field &b=base_field::zero())
constexpr field12 operator+=(const field12 &other)
constexpr field12 operator/=(const field12 &other)
constexpr void self_sparse_mul(const ell_coeffs &ell)
constexpr field12 & operator=(const field12 &other) noexcept
static constexpr field12 one()
constexpr ~field12() noexcept=default
constexpr field12 from_montgomery_form()
constexpr field12 sqr() const
constexpr field12 operator-=(const field12 &other)
static constexpr base_field mul_by_non_residue(const base_field &a)
constexpr field12 operator*(const field12 &other) const
constexpr field12 frobenius_map_two() const
constexpr field12 frobenius_map_one() const
constexpr field12 to_montgomery_form()
Entry point for Barretenberg command-line interface.