50 lines
1.9 KiB
C
50 lines
1.9 KiB
C
|
#ifndef ISOGENY_H_
|
||
|
#define ISOGENY_H_
|
||
|
|
||
|
// Computes [2^e](X:Z) on Montgomery curve with projective
|
||
|
// constant via e repeated doublings.
|
||
|
void xDBLe(
|
||
|
const point_proj_t P, point_proj_t Q, const f2elm_t A24plus,
|
||
|
const f2elm_t C24, size_t e);
|
||
|
// Simultaneous doubling and differential addition.
|
||
|
void xDBLADD(
|
||
|
point_proj_t P, point_proj_t Q, const f2elm_t xPQ,
|
||
|
const f2elm_t A24);
|
||
|
// Tripling of a Montgomery point in projective coordinates (X:Z).
|
||
|
void xTPL(
|
||
|
const point_proj_t P, point_proj_t Q, const f2elm_t A24minus,
|
||
|
const f2elm_t A24plus);
|
||
|
// Computes [3^e](X:Z) on Montgomery curve with projective constant
|
||
|
// via e repeated triplings.
|
||
|
void xTPLe(
|
||
|
const point_proj_t P, point_proj_t Q, const f2elm_t A24minus,
|
||
|
const f2elm_t A24plus, size_t e);
|
||
|
// Given the x-coordinates of P, Q, and R, returns the value A
|
||
|
// corresponding to the Montgomery curve E_A: y^2=x^3+A*x^2+x such that R=Q-P on E_A.
|
||
|
void get_A(
|
||
|
const f2elm_t xP, const f2elm_t xQ, const f2elm_t xR, f2elm_t A);
|
||
|
// Computes the j-invariant of a Montgomery curve with projective constant.
|
||
|
void j_inv(
|
||
|
const f2elm_t A, const f2elm_t C, f2elm_t jinv);
|
||
|
// Computes the corresponding 4-isogeny of a projective Montgomery
|
||
|
// point (X4:Z4) of order 4.
|
||
|
void get_4_isog(
|
||
|
const point_proj_t P, f2elm_t A24plus, f2elm_t C24, f2elm_t* coeff);
|
||
|
// Computes the corresponding 3-isogeny of a projective Montgomery
|
||
|
// point (X3:Z3) of order 3.
|
||
|
void get_3_isog(
|
||
|
const point_proj_t P, f2elm_t A24minus, f2elm_t A24plus,
|
||
|
f2elm_t* coeff);
|
||
|
// Computes the 3-isogeny R=phi(X:Z), given projective point (X3:Z3)
|
||
|
// of order 3 on a Montgomery curve and a point P with coefficients given in coeff.
|
||
|
void eval_3_isog(
|
||
|
point_proj_t Q, f2elm_t* coeff);
|
||
|
// Evaluates the isogeny at the point (X:Z) in the domain of the isogeny.
|
||
|
void eval_4_isog(
|
||
|
point_proj_t P, f2elm_t* coeff);
|
||
|
// 3-way simultaneous inversion
|
||
|
void inv_3_way(
|
||
|
f2elm_t z1, f2elm_t z2, f2elm_t z3);
|
||
|
|
||
|
#endif // ISOGENY_H_
|