Prime Curve Chudnovsky Coordinates
Introduction
'Chudnovsky Coordinates' are used to represent elliptic curve points
on prime curves y^2 = x^3 + ax + b. They give a speed benefit over
Affine Coordinates when
the cost for field inversions is significantly higher than field
multiplications. In 'Chudnovsky Coordinates' the quintuple (X, Y, Z,
Z^2, Z^3) represents the affine point (X / Z^2, Y / Z^3).
Point Doubling (5M + 6S or 5M + 4S)
Let (X, Y, Z, Z^2, Z^3) be a point (unequal to the 'point at
infinity') represented in 'Chudnovsky Coordinates'. Then its double
(X', Y', Z', Z'^2, Z'^3) can be calculated by
if (Y == 0)
return POINT_AT_INFINITY
S = 4*X*Y^2
M = 3*X^2 + a*(Z^2)^2
X' = M^2 - 2*S
Y' = M*(S - X') - 8*Y^4
Z' = 2*Y*Z
Z'^2 = Z'^2
Z'^3 = Z'^2 * Z'
return (X', Y', Z', Z'^2, Z'^3)
Note: if a = -3, then M can also be calculated as M = 3*(X + Z^2)*(X -
Z^2), saving 2 field squarings.
Point Addition (11M + 3S)
Let (X1, Y1, Z1, Z1^2, Z1^3) and (X2, Y2, Z2, Z2^2, Z2^3) be two
points (both unequal to the 'point at infinity') represented in
'Chudnovsky Coordinates'. Then the sum (X3, Y3, Z3, Z3^2, Z3^3) can
be calculated by
U1 = X1*Z2^2
U2 = X2*Z1^2
S1 = Y1*Z2^3
S2 = Y2*Z1^3
if (U1 == U2)
if (S1 != S2)
return POINT_AT_INFINITY
else
return POINT_DOUBLE(X1, Y1, Z1, Z1^2, Z1^3)
H = U2 - U1
R = S2 - S1
X3 = R^2 - H^3 - 2*U1*H^2
Y3 = R*(U1*H^2 - X3) - S1*H^3
Z3 = H*Z1*Z2
Z3^2 = Z3^2
Z3^3 = Z3^2 * Z3
return (X3, Y3, Z3, Z3^2, Z3^3)
Mixed Addition (with affine point) (8M + 3S)
Let (X1, Y1, Z1, Z1^2, Z1^3) be a point represented in 'Chudnovsky
Coordinates' and (X2, Y2) a point in
Affine Coordinates
(both unequal to the 'point at infinity'). A formula to add those
points can be readily derived from the regular chudnovsky point
addition by replacing each occurance of "Z2" by
"1" (and thereby dropping three field multiplications).
Mixed Addition (with jacobian point) (11M + 3S)
See
Jacobian
Coordinates for further details.