use ark_ec::{ models::{short_weierstrass::SWCurveConfig, CurveConfig}, short_weierstrass::{Affine, Projective}, }; use ark_ff::{AdditiveGroup, MontFp}; use crate::{Fq, Fr}; pub type G1Affine = Affine; pub type G1Projective = Projective; #[derive(Clone, Default, PartialEq, Eq)] pub struct Config; impl CurveConfig for Config { type BaseField = Fq; type ScalarField = Fr; /// COFACTOR = /// 124074696211871689196744963988542244365937182994917792082847997279938522233341057826255097957635256182243502012934844 #[rustfmt::skip] const COFACTOR: &'static [u64] = &[ 0x9fed0006fffaaabc, 0xfae29bffb34d7c0d, 0xc51e35fba8145036, 0x58c9927410ca3a62, 0x7772b64205a0bc67, 0x26212b5cf67cecaf, 0x3, ]; /// COFACTOR^(-1) mod r = /// 1707860402533867312515920333330662452399178546610458136488910471176197226039103222144872611321997303708365553992812 const COFACTOR_INV: Fr = MontFp!("1707860402533867312515920333330662452399178546610458136488910471176197226039103222144872611321997303708365553992812"); } impl SWCurveConfig for Config { /// COEFF_A = 0 const COEFF_A: Fq = Fq::ZERO; /// COEFF_B = 1 const COEFF_B: Fq = MontFp!("1"); /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y) const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y); #[inline(always)] fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField { use ark_ff::Zero; Self::BaseField::zero() } } /// G1_GENERATOR_X = /// 127687253511432941835499154999732953539969793860764514205013635996439242747457934431893570832266740963864950713809357287070846939000367049554519743864924323440810949629217677483481194663331926309250818003412838087592587472550707218 pub const G1_GENERATOR_X: Fq = MontFp!("127687253511432941835499154999732953539969793860764514205013635996439242747457934431893570832266740963864950713809357287070846939000367049554519743864924323440810949629217677483481194663331926309250818003412838087592587472550707218"); /// G1_GENERATOR_Y = /// 415570529523170147223250223671601071129165798689804006717876771297003017718159840368703823786319144396618898691682149260290217115399107531975419658973137909698922937988511368601419289861827304905241655385035120916874417442125721204 pub const G1_GENERATOR_Y: Fq = MontFp!("415570529523170147223250223671601071129165798689804006717876771297003017718159840368703823786319144396618898691682149260290217115399107531975419658973137909698922937988511368601419289861827304905241655385035120916874417442125721204");