halo2curves/bls12381/
mod.rs

1mod engine;
2mod fq;
3mod fq12;
4mod fq2;
5mod fq6;
6mod fr;
7mod g1;
8mod g2;
9
10pub use engine::*;
11pub use fq::*;
12pub use fq12::*;
13pub use fq2::*;
14pub use fq6::*;
15pub use fr::*;
16pub use g1::*;
17pub use g2::*;
18
19const BLS_X: [u8; 64] = [
20    1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22];
23
24const ENDO_PARAMS: EndoParameters = EndoParameters {
25    // round(b2/n)
26    gamma2: [0x63f6e522f6cfee30u64, 0x7c6becf1e01faadd, 0x01, 0x0],
27    // round(-b1/n)
28    gamma1: [0x02u64, 0x0, 0x0, 0x0],
29    b1: [0x01u64, 0x0, 0x0, 0x0],
30    b2: [0x0000000100000000, 0xac45a4010001a402, 0x0, 0x0],
31};
32
33use ff::{PrimeField, WithSmallOrderMulGroup};
34
35use crate::arithmetic::{mul_512, sbb, CurveEndo, EndoParameters};
36crate::endo!(G1, Fr, ENDO_PARAMS);
37crate::endo!(G2, Fr, ENDO_PARAMS);