MPHELL
4.0.0

Let be a Weierstrass elliptic curve under affine coordinates. Under Projective coordinates becomes . The triple (X, Y, Z) represents the affine point (X / Z, Y / Z)
Under Jacobian coordinates becomes . The triple (X, Y, Z) represents the affine point (X / Z^2, Y / Z^3).
The main references for the formulas are
Let
This formula is from [CMO98] and referenced as the "Eliminating common subexpressions from 1998 Cohen/Miyaji/Ono" in the website https://hyperelliptic.org/ .
The point P3 = (X3,Y3,Z3) = P1 + P2 is given by
using 12 multiplications, 2 squares and 6 additions and 1 times 2.
This formula is referenced as the "dbl2007bl" from [BL07] in the website https://hyperelliptic.org/ .
The point P3 = (X3,Y3,Z3) = 2P1 is given by
using 5 multiplications + 6 squares + 7 additions + 3 times 2 + 1 times 3 + 1 times a:
if we use the formula "dbl2007bl2" from [BL07] in the website https://hyperelliptic.org/ .
using 7 multiplications + 3 squares + 5 additions + 4 times 2 + 1 times 3
This formula is referenced as the "add2007bl" from [BL07] in the website https://hyperelliptic.org/ .
using 11 multiplications + 6 squares + 1*a + 10 additions + 4 times 2 + 1 times 4.
This formula is an adaptation from the one used by ippcrypto , the beginning is the same than 2007 Bernstein/Lange" from [BL07] but using less addition.
The point P3 = (X3,Y3,Z3) = P1 + P2 is given by
using 12 multiplications + 4 squares + 6 additions + 1 times 2
This formula is an adaptation from the one used by ippcrypto , it uses less additions than the ones referenced by "2007 Bernstein/Lange" and "2001 Bernstein"
The point P3 = (X3,Y3,Z3) = 2P1 is given by
using 5 multiplications + 3 squares + 5 additions + 4 times 2 + 1 times 3 when and
7 multiplications + 3 squares + 4 additions + 4 times 2 + 1 times 3 when
When elliptic curve points share the same zcoordinate, a faster arithmetic (CoZ) can be used.
All the algorithm of CoZ arithmetic implemented in MPHELL can be found in the paper [GJM10] and all those algorithms take in inputs points with the same Z coordinate.
The points P3 = (X3,Y3,Z3) = P1 + P2 and update the point P1 such that Z1 = Z3.
This operation is called ZADDU and costs 5 multiplications + 2 squares + 7 additions and can be found precisely in [GJM10,§2.2 algorithm 1].
The point P3 = (X3,Y3,Z3) = P1 + P2 and the point P4 = (X4,Y4,Z4) = P1P2 such that Z4 = Z3.
This operation is called ZADDC and costs 6 multiplications + 3 squares + 11 additions and can be found in [GJM, §4 algorithm 6].
The points P3 = (X3,Y3,Z3) = 2*P1 and the point P4 such that P1 = P4 and Z4 = Z3 and assume that P1>z==1.
This operation is called DBLU and costs 1 multiplication + 5 squares + 6 additions + 3 times 2 + 1 times 3 +1 times 8 and can be found in [GJM10, §4.3]
The points P3 = (X3,Y3,Z3) = 2 P1 + P2 and update P2 such that Z2 = Z3.
This operation is called ZDAU and costs 9 multiplications + 7 squares + 22 additions + 1 time 2 + 1 times 4 and can be found in [GJM, §4.4 algorithm 9].
The unified multiplication currently used in MPHELL can be found in the paper: Speeding up Elliptic Curve Scalar Multiplicationwithout Precomputation.
By Kwang Ho Kim, Junyop Choe, Song Yun Kim, and Namsu Kim and Sekung Hong.