openvm_pairing_guest::pairing

Trait PairingCheck

Source
pub trait PairingCheck {
    type Fp: Field;
    type Fp2: Field + FieldExtension<Self::Fp> + ComplexConjugate;
    type Fp12: FieldExtension<Self::Fp2> + ComplexConjugate;

    // Required methods
    fn pairing_check_hint(
        P: &[AffinePoint<Self::Fp>],
        Q: &[AffinePoint<Self::Fp2>],
    ) -> (Self::Fp12, Self::Fp12);
    fn pairing_check(
        P: &[AffinePoint<Self::Fp>],
        Q: &[AffinePoint<Self::Fp2>],
    ) -> Result<(), PairingCheckError>;
}

Required Associated Types§

Required Methods§

Source

fn pairing_check_hint( P: &[AffinePoint<Self::Fp>], Q: &[AffinePoint<Self::Fp2>], ) -> (Self::Fp12, Self::Fp12)

Given points P[], Q[], computes the multi-Miller loop and then returns the final exponentiation hint from Novakovic-Eagon https://eprint.iacr.org/2024/640.pdf.

Output is c (residue witness inverse) and u (cubic nonresidue power).

Source

fn pairing_check( P: &[AffinePoint<Self::Fp>], Q: &[AffinePoint<Self::Fp2>], ) -> Result<(), PairingCheckError>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§