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),
88 base_field T0 =
c0 * other.
c0;
89 base_field T1 =
c1 * other.
c1;
90 base_field T2 =
c0 +
c1;
91 base_field T3 = other.
c0 + other.
c1;
144 quadratic_field A0 = ell.
o *
c0.c0;
145 quadratic_field A1 = ell.
o *
c0.c1;
146 quadratic_field A2 = ell.
o *
c0.c2;
147 base_field A{ A0, A1, A2 };
148 base_field B =
c1.sparse_mul(ell.
w, ell.
vw);
149 base_field E = (
c0 +
c1).sparse_mul(ell.
o + ell.
w, ell.
vw);
150 base_field F = E - (A + B);
151 base_field
G{ base_field::mul_by_non_residue(B.c2), B.c0, B.c1 };
152 base_field H = A +
G;
160 base_field T0 =
c0 +
c1;
220 base_field::random_element(
engine),
221 base_field::random_element(
engine),
242 [[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 field12 operator-() const
constexpr bool is_zero() const
constexpr void self_sqr()
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)
Multiply the element by a sparse element of the form ell.o + ell.w * w + ell.vw * wv.
constexpr void self_neg()
constexpr field12 & operator=(const field12 &other) noexcept
static constexpr field12 one()
constexpr ~field12() noexcept=default
constexpr field12 sqr() const
constexpr field12 operator-=(const field12 &other)
static constexpr base_field mul_by_non_residue(const base_field &a)
constexpr field12 from_montgomery_form() const
constexpr field12 operator*(const field12 &other) const
constexpr field12 frobenius_map_two() const
constexpr field12 frobenius_map_one() const
constexpr field12 to_montgomery_form()
#define G(r, i, a, b, c, d)
Entry point for Barretenberg command-line interface.