openvm_pairing_guest/halo2curves_shims/bn254/
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::bn256::{Fq, Fq12, Fq2};
13use openvm_algebra_guest::field::FieldExtension;
14
15use crate::pairing::{Evaluatable, EvaluatedLine, FromLineDType, UnevaluatedLine};
16
17impl FromLineDType<Fq2> for Fq12 {
18    fn from_evaluated_line_d_type(line: EvaluatedLine<Fq2>) -> Fq12 {
19        FieldExtension::<Fq2>::from_coeffs([
20            Fq2::one(),
21            line.b,
22            Fq2::zero(),
23            line.c,
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}