pub struct Isogeny {
pub domain: Curve,
pub codomain: Curve,
pub degree: u64,
/* private fields */
}Expand description
A separable isogeny φ: E → E' of odd prime degree ℓ, built from a kernel generator by Vélu’s
formulas. Stores the codomain and, for each kernel representative Q (one per ± pair), the Vélu
quantities (xQ, vQ = 6xQ²+2a, uQ = 4yQ²) used to evaluate φ.
Fields§
§domain: Curve§codomain: Curve§degree: u64Implementations§
Source§impl Isogeny
impl Isogeny
Sourcepub fn from_kernel(curve: &Curve, gen: &Point, ell: u64) -> Option<Isogeny>
pub fn from_kernel(curve: &Curve, gen: &Point, ell: u64) -> Option<Isogeny>
Build the ℓ-isogeny with kernel ⟨gen⟩ by Vélu’s formulas (ℓ an odd prime, gen of order
exactly ℓ). The codomain is y² = x³ + (a − 5v)x + (b − 7w) where v = Σ vQ, w = Σ (uQ + xQ·vQ)
over the (ℓ−1)/2 kernel representatives. None unless ℓ is an odd prime and gen has order ℓ.
Sourcepub fn eval(&self, pt: &Point) -> Point
pub fn eval(&self, pt: &Point) -> Point
Evaluate φ at a point. Kernel points map to the identity. For P = (x, y) ∉ ker, the x-map is
X = x + Σ [ vQ/(x−xQ) + uQ/(x−xQ)² ] and — since a normalized isogeny pulls back the invariant
differential (φ*(dX/Y) = dx/y) — the y-coordinate is Y = y · X'(x) = y·[1 − Σ (vQ/(x−xQ)² + 2uQ/(x−xQ)³)].