revm_precompile/
bls12_381.rs1use crate::Precompile;
4
5#[allow(dead_code)]
6pub(crate) mod arkworks;
7
8cfg_if::cfg_if! {
9    if #[cfg(feature = "blst")]{
10        pub(crate) mod blst;
11        pub(crate) use blst as crypto_backend;
12    } else {
13        pub(crate) use arkworks as crypto_backend;
14    }
15}
16
17use crate::bls12_381_const::{FP_LENGTH, SCALAR_LENGTH};
19pub type G1Point = ([u8; FP_LENGTH], [u8; FP_LENGTH]);
21pub type G2Point = (
23    [u8; FP_LENGTH],
24    [u8; FP_LENGTH],
25    [u8; FP_LENGTH],
26    [u8; FP_LENGTH],
27);
28pub type G1PointScalar = (G1Point, [u8; SCALAR_LENGTH]);
30pub type G2PointScalar = (G2Point, [u8; SCALAR_LENGTH]);
32type PairingPair = (G1Point, G2Point);
33
34pub mod g1_add;
35pub mod g1_msm;
36pub mod g2_add;
37pub mod g2_msm;
38pub mod map_fp2_to_g2;
39pub mod map_fp_to_g1;
40pub mod pairing;
41mod utils;
42
43pub fn precompiles() -> impl Iterator<Item = Precompile> {
45    [
46        g1_add::PRECOMPILE,
47        g1_msm::PRECOMPILE,
48        g2_add::PRECOMPILE,
49        g2_msm::PRECOMPILE,
50        pairing::PRECOMPILE,
51        map_fp_to_g1::PRECOMPILE,
52        map_fp2_to_g2::PRECOMPILE,
53    ]
54    .into_iter()
55}