pub struct IsogenyMap<'a, Domain: SWCurveConfig, Codomain: SWCurveConfig<BaseField = <Domain as CurveConfig>::BaseField>> {
pub x_map_numerator: &'a [<Domain as CurveConfig>::BaseField],
pub x_map_denominator: &'a [<Codomain as CurveConfig>::BaseField],
pub y_map_numerator: &'a [<Domain as CurveConfig>::BaseField],
pub y_map_denominator: &'a [<Codomain as CurveConfig>::BaseField],
}
Expand description
IsogenyMap
defines an isogeny between curves of
form Phi(x, y) := (a(x), b(x)*y). The
xcoordinate of the codomain point only depends on the
x-coordinate of the domain point, and the
y-coordinate of the codomain point is a multiple of the
y-coordinate of the domain point. The multiplier depends on the
x`-coordinate of the domain point.
All isogeny maps of curves of short Weierstrass form can be written in this way. See
[[Ga18]]. Theorem 9.7.5 for details.
We assume that Domain
and Codomain
have the same BaseField
but we use both
BaseField<Domain>
and BaseField<Codomain>
in our fields’ definitions to avoid
using PhantomData
- [[Ga18]] Galbraith, S. D. (2018). Mathematics of public key cryptography.
Fields§
§x_map_numerator: &'a [<Domain as CurveConfig>::BaseField]
§x_map_denominator: &'a [<Codomain as CurveConfig>::BaseField]
§y_map_numerator: &'a [<Domain as CurveConfig>::BaseField]
§y_map_denominator: &'a [<Codomain as CurveConfig>::BaseField]
Auto Trait Implementations§
impl<'a, Domain, Codomain> Freeze for IsogenyMap<'a, Domain, Codomain>
impl<'a, Domain, Codomain> RefUnwindSafe for IsogenyMap<'a, Domain, Codomain>
impl<'a, Domain, Codomain> Send for IsogenyMap<'a, Domain, Codomain>
impl<'a, Domain, Codomain> Sync for IsogenyMap<'a, Domain, Codomain>
impl<'a, Domain, Codomain> Unpin for IsogenyMap<'a, Domain, Codomain>
impl<'a, Domain, Codomain> UnwindSafe for IsogenyMap<'a, Domain, Codomain>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more