Trait pairing_ce::Engine

source ·
pub trait Engine: ScalarEngine {
    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> + RawEncodable;
    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(r: &Self::Fqk) -> Option<Self::Fqk>; fn pairing<G1, G2>(p: G1, q: G2) -> Self::Fqk
    where
        G1: Into<Self::G1Affine>,
        G2: Into<Self::G2Affine>
, { ... } }
Expand description

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.

Required Associated Types§

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§