Go to the first, previous, next, last section, table of contents.
 ecm_add_ff(p1,p2,ec)

 ecm_sub_ff(p1,p2,ec)

 ecm_chsgn_ff(p1)

:: Addition, Subtraction and additive inverse for points on an elliptic curve.
 return

vector or 0
 p1,p2

vector of length 3 or 0
 ec

vector of length 2

Let p1, p2 be points on the elliptic curve represented by
ec over the current base field.
ecm_add_ff(p1,p2,ec), ecm_sub_ff(p1,p2,ec)
and ecm_chsgn_ff(p1) returns
p1+p2, p1p2 and p1 respectively.

If the current base field is a prime field of odd order, then
ec represents y^2=x^3+ec[0]x+ec[1].
If the characteristic of the current base field is 2,
then ec represents y^2+xy=x^3+ec[0]x^2+ec[1].

The point at infinity is represented by 0.

If an argument denoting a point is a vector of length 3,
then it is the projective coordinate. In such a case
the third coordinate must not be 0.

If the result is a vector of length 3, then the third coordinate
is not equal to 0 but not necessarily 1. To get the result by
the affine coordinate, the first and the second coordinates should
be divided by the third coordinate.

The check whether the arguments are on the curve is omitted.
[0] setmod_ff(1125899906842679)$
[1] EC=newvect(2,[ptolmp(1),ptolmp(1)])$
[2] Pt1=newvect(3,[1,412127497938252,1])$
[3] Pt2=newvect(3,[6,252647084363045,1])$
[4] Pt3=ecm_add_ff(Pt1,Pt2,EC);
[ 560137044461222 184453736165476 125 ]
[5] F=y^2(x^3+EC[0]*x+EC[1])$
[6] subst(F,x,Pt3[0]/Pt3[2],y,Pt3[1]/Pt3[2]);
0
[7] ecm_add_ff(Pt3,ecm_chsgn_ff(Pt3),EC);
0
[8] D=ecm_sub_ff(Pt3,Pt2,EC);
[ 886545905133065 119584559149586 886545905133065 ]
[9] D[0]/D[2]==Pt1[0]/Pt1[2];
1
[10] D[1]/D[2]==Pt1[1]/Pt1[2];
1
 References

section
setmod_ff
Go to the first, previous, next, last section, table of contents.