use crate::{
impl_traits,
provider::{
msm::{msm, msm_small},
traits::{DlogGroup, DlogGroupExt},
},
traits::{Group, PrimeFieldExt, transcript::TranscriptReprTrait},
};
use digest::{ExtendableOutput, Update};
use ff::FromUniformBytes;
use halo2curves::{
CurveAffine, CurveExt,
bn256::{G1 as Bn256G1, G1Affine as Bn256G1Affine},
group::{Curve, Group as AnotherGroup, cofactor::CofactorCurveAffine},
};
use num_bigint::BigInt;
use num_integer::Integer;
use num_traits::{Num, ToPrimitive};
use rayon::prelude::*;
use sha3::Shake256;
use std::io::Read;
pub mod types {
pub use halo2curves::bn256::{Fq as Base, Fr as Scalar, G1 as Point, G1Affine as Affine};
}
impl_traits!(
types,
Bn256G1,
Bn256G1Affine,
"30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001",
"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47"
);
crate::impl_field_reduction_constants!(types::Scalar);
crate::impl_montgomery_limbs!(types::Scalar);
impl<G: Group> TranscriptReprTrait<G> for types::Base {
fn to_transcript_bytes(&self) -> Vec<u8> {
self.to_bytes().into_iter().rev().collect()
}
}
#[cfg(test)]
mod big_num_tests {
crate::test_field_reduction_constants!(scalar_frc, crate::provider::bn254::types::Scalar);
crate::test_montgomery!(scalar_mont, crate::provider::bn254::types::Scalar);
crate::test_delayed_reduction!(scalar_dr, crate::provider::bn254::types::Scalar);
}