pub fn curve_2_iso(p2: Point, e: MontCurve) -> MontCurve {
    // a2:=2*(1-2*x2^2);
    // b2:=x2*b;

    let (x2, _) = p2;
    let (_, b) = e;

    let t1 = fp2sqr(x2);
    let t1 = fp2add(t1, t1);
    let t1 = fp2sub(fp2one(), t1);
    let a2 = fp2add(t1, t1);
    let b2 = fp2mul(x2, b);
    (a2, b2)
}
/// Input: curve e and point p2 of order 2 on e
/// Output: codomain of the 2-isogeny corresponding to p2
curve e and point p2 of order 2 on e
Output: codomain of the 2-isogeny corresponding to p2
curve e and point p2 of order 2 on e Output : codomain of the 2 - isogeny corresponding to p2
pub fn curve_2_iso(p2: Point, e: MontCurve) -> MontCurve {
    // a2:=2*(1-2*x2^2);
    // b2:=x2*b;
    let (x2, _) = p2;
    let (_, b) = e;
    let t1 = fp2sqr(x2);
    let t1 = fp2add(t1, t1);
    let t1 = fp2sub(fp2one(), t1);
    let a2 = fp2add(t1, t1);
    let b2 = fp2mul(x2, b);
    (a2, b2)
}
pub fn curve_2_iso ( p2 : Point , e : MontCurve ) -> MontCurve { // a2:=2*(1-2*x2^2); // b2:=x2*b; let ( x2 , _ ) = p2 ; let ( _ , b ) = e ; let t1 = fp2sqr ( x2 ) ; let t1 = fp2add ( t1 , t1 ) ; let t1 = fp2sub ( fp2one ( ) , t1 ) ; let a2 = fp2add ( t1 , t1 ) ; let b2 = fp2mul ( x2 , b ) ; ( a2 , b2 ) }
Input: curve e and point p2 of order 2 on e
Output: codomain of the 2-isogeny corresponding to p2
Input : curve e and point p2 of order 2 on e Output : codomain of the 2 - isogeny corresponding to p2
p2
Point
e
MontCurve
p2
Point
e
MontCurve