Trait pairing::Engine [] [src]

pub trait Engine: Sized + 'static + Clone {
    type Fr: PrimeField + SqrtField;
    type G1: CurveProjective<Engine = Self, Base = Self::Fq, Scalar = Self::Fr, Affine = Self::G1Affine> + From<Self::G1Affine>;
    type G1Affine: CurveAffine<Engine = Self, Base = Self::Fq, Scalar = Self::Fr, Projective = Self::G1, Pair = Self::G2Affine, PairingResult = Self::Fqk> + From<Self::G1>;
    type G2: CurveProjective<Engine = Self, Base = Self::Fqe, Scalar = Self::Fr, Affine = Self::G2Affine> + From<Self::G2Affine>;
    type G2Affine: CurveAffine<Engine = Self, Base = Self::Fqe, Scalar = Self::Fr, Projective = Self::G2, Pair = Self::G1Affine, PairingResult = Self::Fqk> + From<Self::G2>;
    type Fq: PrimeField + SqrtField;
    type Fqe: SqrtField;
    type Fqk: Field;
    fn miller_loop<'a, I>(i: I) -> Self::Fqk
    where
        I: IntoIterator<Item = &'a (&'a <Self::G1Affine as CurveAffine>::Prepared, &'a <Self::G2Affine as CurveAffine>::Prepared)>
;
fn final_exponentiation(_: &Self::Fqk) -> Option<Self::Fqk>; fn pairing<G1, G2>(p: G1, q: G2) -> Self::Fqk
    where
        G1: Into<Self::G1Affine>,
        G2: Into<Self::G2Affine>
, { ... } }

An "engine" is a collection of types (fields, elliptic curve groups, etc.) with well-defined relationships. In particular, the G1/G2 curve groups are of prime order r, and are equipped with a bilinear pairing function.

Associated Types

This is the scalar field of the G1/G2 groups.

The projective representation of an element in G1.

The affine representation of an element in G1.

The projective representation of an element in G2.

The affine representation of an element in G2.

The base field that hosts G1.

The extension field that hosts G2.

The extension field that hosts the target group of the pairing.

Required Methods

Perform a miller loop with some number of (G1, G2) pairs.

Perform final exponentiation of the result of a miller loop.

Provided Methods

Performs a complete pairing operation (p, q).

Implementors