Engine

Trait 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;

    // Required methods
    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>;

    // Provided method
    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§

Source

type G1: CurveProjective<Engine = Self, Base = Self::Fq, Scalar = Self::Fr, Affine = Self::G1Affine> + From<Self::G1Affine>

The projective representation of an element in G1.

Source

type G1Affine: CurveAffine<Engine = Self, Base = Self::Fq, Scalar = Self::Fr, Projective = Self::G1, Pair = Self::G2Affine, PairingResult = Self::Fqk> + From<Self::G1> + RawEncodable

The affine representation of an element in G1.

Source

type G2: CurveProjective<Engine = Self, Base = Self::Fqe, Scalar = Self::Fr, Affine = Self::G2Affine> + From<Self::G2Affine>

The projective representation of an element in G2.

Source

type G2Affine: CurveAffine<Engine = Self, Base = Self::Fqe, Scalar = Self::Fr, Projective = Self::G2, Pair = Self::G1Affine, PairingResult = Self::Fqk> + From<Self::G2>

The affine representation of an element in G2.

Source

type Fq: PrimeField + SqrtField

The base field that hosts G1.

Source

type Fqe: SqrtField

The extension field that hosts G2.

Source

type Fqk: Field

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

Required Methods§

Source

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)>,

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

Source

fn final_exponentiation(r: &Self::Fqk) -> Option<Self::Fqk>

Perform final exponentiation of the result of a miller loop.

Provided Methods§

Source

fn pairing<G1, G2>(p: G1, q: G2) -> Self::Fqk
where G1: Into<Self::G1Affine>, G2: Into<Self::G2Affine>,

Performs a complete pairing operation (p, q).

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§