y^2=x^3+a*x+b
Jacobian coordinates [database entry] represent x y as X Y Z satisfying the following equations:
x=X/Z^2 y=Y/Z^3
Operation | Assumptions | Cost | Readdition cost |
---|---|---|---|
addition | Z1=1 and Z2=1 | 4M + 2S | 4M + 2S |
addition | Z1=Z2 | 5M + 2S | 5M + 2S |
addition | Z2=1 | 7M + 4S | 7M + 4S |
addition | Z2=1 | 8M + 3S | 8M + 3S |
addition | Z2=1 | 8M + 3S | 8M + 3S |
addition | Z2=1 | 8M + 3S | 8M + 3S |
addition | 11M + 5S | 10M + 4S | |
addition | 12M + 4S | 11M + 3S | |
addition | 12M + 4S | 11M + 3S | |
addition | half*2=1 | 12M + 4S + 1*half | 11M + 3S + 1*half |
addition | 8M + 6S + 2^3 | 8M + 5S + 1^3 | |
addition | 10M + 5S + 3^3 | 10M + 4S + 2^3 | |
addition | 10M + 5S + 4^3 | 10M + 4S + 3^3 | |
doubling | Z1=1 | 1M + 5S | |
doubling | 1M + 8S + 1*a | ||
doubling | 3M + 6S + 1*a | ||
doubling | half*2=1 | 3M + 6S + 1*half + 1*a | |
doubling | 3M + 3S + 2^4 + 1*a | ||
doubling | 3M + 3S + 2^4 + 1*a | ||
tripling | 5M + 10S + 1*a | ||
tripling | 8M + 7S + 1*a | ||
tripling | 9M + 5S + 1^3 + 2^4 + 1*a | ||
scaling | 1I + 3M + 1S |
H = X2-X1 HH = H^2 I = 4*HH J = H*I r = 2*(Y2-Y1) V = X1*I X3 = r^2-J-2*V Y3 = r*(V-X3)-2*Y1*J Z3 = 2*H
A = (X2-X1)^2 B = X1*A C = X2*A D = (Y2-Y1)^2 X3 = D-B-C Y3 = (Y2-Y1)*(B-X3)-Y1*(C-B) Z3 = Z1*(X2-X1)
Z1Z1 = Z1^2 U2 = X2*Z1Z1 S2 = Y2*Z1*Z1Z1 H = U2-X1 HH = H^2 I = 4*HH J = H*I r = 2*(S2-Y1) V = X1*I X3 = r^2-J-2*V Y3 = r*(V-X3)-2*Y1*J Z3 = (Z1+H)^2-Z1Z1-HH
T1 = Z1^2 T2 = T1*Z1 T1 = T1*X2 T2 = T2*Y2 T1 = T1-X1 T2 = T2-Y1 Z3 = Z1*T1 T3 = T1^2 T4 = T3*T1 T3 = T3*X1 T1 = 2*T3 X3 = T2^2 X3 = X3-T1 X3 = X3-T4 T3 = T3-X3 T3 = T3*T2 T4 = T4*Y1 Y3 = T3-T4
T1 = Z1^2 T2 = T1*Z1 T1 = T1*X2 T2 = T2*Y2 T1 = X1-T1 T2 = T2-Y1 Z3 = Z1*T1 T4 = T1^2 T1 = T1*T4 T4 = T4*X1 X3 = T2^2 X3 = X3+T1 Y3 = T1*Y1 T1 = 2*T4 X3 = X3-T1 T4 = X3-T4 T4 = T4*T2 Y3 = T4-Y3
Z1Z1 = Z1^2 U2 = X2*Z1Z1 S2 = Y2*Z1*Z1Z1 H = U2-X1 I = (2*H)^2 J = H*I r = 2*(S2-Y1) V = X1*I X3 = r^2-J-2*V Y3 = r*(V-X3)-2*Y1*J Z3 = 2*Z1*H
Z1Z1 = Z1^2 Z2Z2 = Z2^2 U1 = X1*Z2Z2 U2 = X2*Z1Z1 S1 = Y1*Z2*Z2Z2 S2 = Y2*Z1*Z1Z1 H = U2-U1 I = (2*H)^2 J = H*I r = 2*(S2-S1) V = U1*I X3 = r^2-J-2*V Y3 = r*(V-X3)-2*S1*J Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H
Z1Z1 = Z1^2 Z2Z2 = Z2^2 U1 = X1*Z2Z2 U2 = X2*Z1Z1 S1 = Y1*Z2*Z2Z2 S2 = Y2*Z1*Z1Z1 H = U2-U1 HH = H^2 HHH = H*HH r = S2-S1 V = U1*HH X3 = r^2-HHH-2*V Y3 = r*(V-X3)-S1*HHH Z3 = Z1*Z2*H
ZZ1 = Z1^2 ZZZ1 = Z1*ZZ1 ZZ2 = Z2^2 ZZZ2 = Z2*ZZ2 A = X1*ZZ2 B = X2*ZZ1-A c = Y1*ZZZ2 d = Y2*ZZZ1-c e = B^2 f = B*e g = A*e h = Z1*Z2 f2g = 2*g+f X3 = d^2-f2g Z3 = B*h gx = g-X3 Y3 = d*gx-c*f
R1 = X1 R2 = Y1 R3 = Z1 R4 = X2 R5 = Y2 R6 = Z2 R7 = R6^2 R1 = R1*R7 R7 = R6*R7 R2 = R2*R7 R7 = R3^2 R8 = R4*R7 R7 = R3*R7 R7 = R5*R7 R2 = R2-R7 R7 = 2*R7 R7 = R2+R7 R1 = R1-R8 R8 = 2*R8 R8 = R1+R8 R3 = R3*R6 R3 = R3*R1 R7 = R7*R1 R1 = R1^2 R8 = R8*R1 R7 = R7*R1 R1 = R2^2 R1 = R1-R8 R8 = R8-R1 R8 = R8-R1 R8 = R8*R2 R2 = R8-R7 R2 = half*R2 X3 = R1 Y3 = R2 Z3 = R3
U1 = X1*Z2^2 U2 = X2*Z1^2 S1 = Y1*Z2^3 S2 = Y2*Z1^3 P = U2-U1 R = S2-S1 X3 = R^2-(U1+U2)*P^2 Y3 = (R*(-2*R^2+3*P^2*(U1+U2))-P^3*(S1+S2))/2 Z3 = Z1*Z2*P
U1 = X1*Z2^2 U2 = X2*Z1^2 S1 = Y1*Z2^3 S2 = Y2*Z1^3 P = U2-U1 R = S2-S1 X3 = R^2-(U1+U2)*P^2 Y3 = R*(U1*P^2-X3)-S1*P^3 Z3 = Z1*Z2*P
U1 = X1*Z2^2 U2 = X2*Z1^2 S1 = Y1*Z2^3 S2 = Y2*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 = Z1*Z2*H
XX = X1^2 YY = Y1^2 YYYY = YY^2 S = 2*((X1+YY)^2-XX-YYYY) M = 3*XX+a T = M^2-2*S X3 = T Y3 = M*(S-T)-8*YYYY Z3 = 2*Y1
XX = X1^2 YY = Y1^2 YYYY = YY^2 ZZ = Z1^2 S = 2*((X1+YY)^2-XX-YYYY) M = 3*XX+a*ZZ^2 T = M^2-2*S X3 = T Y3 = M*(S-T)-8*YYYY Z3 = (Y1+Z1)^2-YY-ZZ
XX = X1^2 YY = Y1^2 ZZ = Z1^2 S = 4*X1*YY M = 3*XX+a*ZZ^2 T = M^2-2*S X3 = T Y3 = M*(S-T)-8*YY^2 Z3 = 2*Y1*Z1
R1 = X1 R2 = Y1 R3 = Z1 R4 = R3^2 R3 = R2*R3 R3 = 2*R3 R4 = R4^2 R4 = a*R4 R5 = R1^2 R4 = R4+R5 R5 = 2*R5 R4 = R4+R5 R2 = 2*R2 R2 = R2^2 R5 = R2^2 R5 = half*R5 R2 = R2*R1 R1 = R4^2 R1 = R1-R2 R1 = R1-R2 R2 = R2-R1 R2 = R2*R4 R2 = R2-R5 X3 = R1 Y3 = R2 Z3 = R3
S = 4*X1*Y1^2 M = 3*X1^2+a*Z1^4 T = M^2-2*S X3 = T Y3 = M*(S-T)-8*Y1^4 Z3 = 2*Y1*Z1
S = 4*X1*Y1^2 M = 3*X1^2+a*Z1^4 T = M^2-2*S X3 = T Y3 = M*(S-T)-8*Y1^4 Z3 = 2*Y1*Z1
XX = X1^2 YY = Y1^2 ZZ = Z1^2 YYYY = YY^2 M = 3*XX+a*ZZ^2 MM = M^2 E = 6*((X1+YY)^2-XX-YYYY)-MM EE = E^2 T = 16*YYYY U = (M+E)^2-MM-EE-T X3 = 4*(X1*EE-4*YY*U) Y3 = 8*Y1*(U*(T-U)-E*EE) Z3 = (Z1+E)^2-ZZ-EE
ZZ = Z1^2 YY = Y1^2 C = 2*YY M = 3*X1^2+a*ZZ^2 E = 6*X1*C-M^2 EE = E^2 T = 2*C^2 U = M*E-T U4 = 4*U X3 = X1*EE-C*U4 Y3 = Y1*(U4*(T-U)-E*EE) Z3 = Z1*E
M = 3*X1^2+a*Z1^4 E = 12*X1*Y1^2-M^2 T = 8*Y1^4 X3 = 8*Y1^2*(T-M*E)+X1*E^2 Y3 = Y1*(4*(M*E-T)*(2*T-M*E)-E^3) Z3 = Z1*E
A = 1/Z1
AA = A^2
X3 = X1*AA
Y3 = Y1*AA*A
Z3 = 1