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