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
12// Make public for use by tests in guest-libs/pairing/
13pub mod test_utils;
14
15use halo2curves_axiom::bn256::{Fq, Fq12, Fq2};
16use openvm_algebra_guest::field::FieldExtension;
17
18use crate::pairing::{Evaluatable, EvaluatedLine, FromLineDType, UnevaluatedLine};
19
20impl FromLineDType<Fq2> for Fq12 {
21    fn from_evaluated_line_d_type(line: EvaluatedLine<Fq2>) -> Fq12 {
22        FieldExtension::<Fq2>::from_coeffs([
23            Fq2::one(),
24            line.b,
25            Fq2::zero(),
26            line.c,
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}