openvm_pairing_guest/halo2curves_shims/bls12_381/
mod.rs

1mod curve;
2mod final_exp;
3mod line;
4mod miller_loop;
5
6pub use curve::*;
7pub use line::*;
8
9#[cfg(test)]
10pub mod tests;
11
12use halo2curves_axiom::bls12_381::{Fq, Fq12, Fq2};
13use openvm_algebra_guest::field::FieldExtension;
14
15use crate::pairing::{Evaluatable, EvaluatedLine, FromLineMType, UnevaluatedLine};
16
17impl FromLineMType<Fq2> for Fq12 {
18    fn from_evaluated_line_m_type(line: EvaluatedLine<Fq2>) -> Fq12 {
19        Fq12::from_coeffs([
20            line.c,
21            Fq2::zero(),
22            line.b,
23            Fq2::one(),
24            Fq2::zero(),
25            Fq2::zero(),
26        ])
27    }
28}
29
30impl Evaluatable<Fq, Fq2> for UnevaluatedLine<Fq2> {
31    fn evaluate(&self, xy_frac: &(Fq, Fq)) -> EvaluatedLine<Fq2> {
32        let (x_over_y, y_inv) = xy_frac;
33        EvaluatedLine {
34            b: self.b.mul_base(x_over_y),
35            c: self.c.mul_base(y_inv),
36        }
37    }
38}