use crate::{Fq, FQ_ONE}; use ark_ff::{ biginteger::BigInteger768 as BigInteger, field_new, fields::fp2::{Fp2, Fp2Parameters}, }; pub type Fq2 = Fp2; pub struct Fq2Parameters; impl Fp2Parameters for Fq2Parameters { type Fp = Fq; // non_residue = 13 #[rustfmt::skip] const NONRESIDUE: Fq = field_new!(Fq, BigInteger([ 11881297496860141143, 13588356353764843511, 9969398190777826186, 17325157081734070311, 16341533986183788031, 8322434028726676858, 13631157743146294957, 8365783422740577875, 3010239015809771096, 11776256826687733591, 7214251687253691272, 268626707558702 ])); // qnr = (8, 1) const QUADRATIC_NONRESIDUE: (Self::Fp, Self::Fp) = ( field_new!( Fq, BigInteger([ 587330122779359758, 14352661462510473462, 17802452401246596498, 18018663494943049411, 17948754733747257098, 10253180574146027531, 6683223122694781837, 13573468617269213174, 5059368039312883748, 950479668716233863, 9936591501985804621, 88719447132658 ]) ), FQ_ONE, ); // Coefficients: // [1, 41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888253786114353726529584385201591605722013126468931404347949840543007986327743462853720628051692141265303114721689600] // see https://github.com/o1-labs/snarky/blob/2cf5ef3a14989e57c17518832b3c52590068fc48/src/camlsnark_c/libsnark-caml/depends/libff/libff/algebra/curves/mnt753/mnt4753/mnt4753_init.cpp const FROBENIUS_COEFF_FP2_C1: &'static [Self::Fp] = &[ FQ_ONE, field_new!( Fq, BigInteger([ 14260497802974073023, 5895249896161266456, 14682908860938702530, 17222385991615618722, 14621060510943733448, 10594887362868996148, 7477357615964975684, 12570239403004322603, 2180620924574446161, 12129628062772479841, 8853285699251153944, 362282887012814 ]) ), ]; }