openvm_pairing_guest/halo2curves_shims/bls12_381/
test_utils.rs1use core::mem::transmute;
2
3use halo2curves_axiom::bls12_381::{Fq12, MillerLoopResult};
4use hex_literal::hex;
5use lazy_static::lazy_static;
6use num_bigint::BigUint;
7use num_traits::Pow;
8use openvm_algebra_guest::ExpBytes;
9
10lazy_static! {
11 pub static ref BLS12_381_MODULUS: BigUint = BigUint::from_bytes_be(&hex!(
12 "1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab"
13 ));
14 pub static ref BLS12_381_ORDER: BigUint = BigUint::from_bytes_be(&hex!(
15 "73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001"
16 ));
17}
18
19pub fn final_exp(f: Fq12) -> Fq12 {
21 let p = BLS12_381_MODULUS.clone();
22 let r = BLS12_381_ORDER.clone();
23 let exp: BigUint = (p.pow(12u32) - BigUint::from(1u32)) / r;
24 ExpBytes::exp_bytes(&f, true, &exp.to_bytes_be())
25}
26
27pub fn assert_miller_results_eq(a: MillerLoopResult, b: Fq12) {
29 let a = unsafe { transmute::<MillerLoopResult, Fq12>(a) };
32 assert_eq!(final_exp(a), final_exp(b));
33}