arnaucube
arnaucube/ark-curves-cherry-pickedPublic Self-hosted repository
ark-curves-cherry-picked/bw6_767/src/curves/g1.rs
bw6_767/src/curves/g1.rsRaw
 1use ark_ec::{
 2    models::{short_weierstrass::SWCurveConfig, CurveConfig},
 3    short_weierstrass::{Affine, Projective},
 4};
 5use ark_ff::{AdditiveGroup, MontFp};
 6
 7use crate::{Fq, Fr};
 8
 9pub type G1Affine = Affine<Config>;
10pub type G1Projective = Projective<Config>;
11
12#[derive(Clone, Default, PartialEq, Eq)]
13pub struct Config;
14
15impl CurveConfig for Config {
16    type BaseField = Fq;
17    type ScalarField = Fr;
18
19    /// COFACTOR =
20    /// 124074696211871689196744963988542244365937182994917792082847997279938522233341057826255097957635256182243502012934844
21    #[rustfmt::skip]
22    const COFACTOR: &'static [u64] = &[
23        0x9fed0006fffaaabc,
24        0xfae29bffb34d7c0d,
25        0xc51e35fba8145036,
26        0x58c9927410ca3a62,
27        0x7772b64205a0bc67,
28        0x26212b5cf67cecaf,
29        0x3,
30    ];
31
32    /// COFACTOR^(-1) mod r =
33    /// 1707860402533867312515920333330662452399178546610458136488910471176197226039103222144872611321997303708365553992812
34    const COFACTOR_INV: Fr = MontFp!("1707860402533867312515920333330662452399178546610458136488910471176197226039103222144872611321997303708365553992812");
35}
36
37impl SWCurveConfig for Config {
38    /// COEFF_A = 0
39    const COEFF_A: Fq = Fq::ZERO;
40
41    /// COEFF_B = 1
42    const COEFF_B: Fq = MontFp!("1");
43
44    /// AFFINE_GENERATOR_COEFFS = (G1_GENERATOR_X, G1_GENERATOR_Y)
45    const GENERATOR: G1Affine = G1Affine::new_unchecked(G1_GENERATOR_X, G1_GENERATOR_Y);
46    #[inline(always)]
47    fn mul_by_a(_elem: Self::BaseField) -> Self::BaseField {
48        use ark_ff::Zero;
49        Self::BaseField::zero()
50    }
51}
52
53/// G1_GENERATOR_X =
54/// 127687253511432941835499154999732953539969793860764514205013635996439242747457934431893570832266740963864950713809357287070846939000367049554519743864924323440810949629217677483481194663331926309250818003412838087592587472550707218
55pub const G1_GENERATOR_X: Fq = MontFp!("127687253511432941835499154999732953539969793860764514205013635996439242747457934431893570832266740963864950713809357287070846939000367049554519743864924323440810949629217677483481194663331926309250818003412838087592587472550707218");
56
57/// G1_GENERATOR_Y =
58/// 415570529523170147223250223671601071129165798689804006717876771297003017718159840368703823786319144396618898691682149260290217115399107531975419658973137909698922937988511368601419289861827304905241655385035120916874417442125721204
59pub const G1_GENERATOR_Y: Fq = MontFp!("415570529523170147223250223671601071129165798689804006717876771297003017718159840368703823786319144396618898691682149260290217115399107531975419658973137909698922937988511368601419289861827304905241655385035120916874417442125721204");