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");