sage: 2+2 4 sage: k=GF(17) sage: k Finite Field of size 17 sage: 10+15 25 sage: k(10+15) 8 sage: x=k(2) sage: y=k(5) sage: x+y*y 10 sage: P=[x,y] sage: P [2, 5] sage: d=(x^2+y^2-1)/(x^2*y^2) sage: d 3 sage: d^8 16 sage: def oncurve(P): ....: x1=P[0] ....: y1=P[1] ....: return x1^2+y1^2 == 1 + d*x1^2*y1^2 ....: sage: oncurve(P) True sage: oncurve([3,4]) True sage: oncurve([3,5]) False sage: oncurve([3,6]) False sage: oncurve([3,7]) False sage: def ed(P1,P2): ....: x1=P1[0] ....: y1=P1[1] ....: x2=P2[0] ....: y2=P2[1] ....: x3=(x1*y2+x2*y1)/(1+d*x1*x2*y1*y2) ....: y3=(y1*y2-x1*x2)/(1-d*x1*x2*y1*y2) ....: return [x3,y3] ....: sage: ed(P,P) [13, 3] sage: P2=ed(P,P) sage: oncurve(P2) True sage: P3=ed(P2,P) sage: P4=ed(P3,P) sage: P5=ed(P4,P) sage: P6=ed(P5,P) sage: P [2, 5] sage: P2 [13, 3] sage: P3 [7, 10] sage: P4 [14, 4] sage: P5 [12, 15] sage: P6 [16, 0] sage: ed(P6,P6) [0, 16] sage: P12=ed(P6,P6) sage: P24=ed(P12,P12) sage: P24 [0, 1] sage: ed(P2,P3) [12, 15] sage: P5 [12, 15] sage: ed(P3,P3) [16, 0] sage: