Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pwang00
GitHub Repository: pwang00/Cryptographic-Attacks
Path: blob/master/Public Key/Notes/Elliptic Curves/Pairings/affine_to_projective.sage
336 views
1
def projective_sum(E, P, Q):
2
Xp, Yp, Zp = P
3
Xq, Yq, Zq = Q
4
5
if P != Q:
6
Xr = F((Xp*Zq - Xq*Zp)*(Zp*Zq * (Yp*Zq - Yq*Zp)^2 - (Xp*Zq - Xq*Zp)^2 * (Xp*Zq + Xq*Zp)))
7
Yr = F(Zp*Zq*(Xq*Yp - Xp*Yq)*(Xp*Zq - Xq*Zp)^2 - (Yp*Zq - Yq*Zp)*((Yp*Zq - Yq*Zp)^2 * Zp*Zq - (Xp*Zq + Xq*Zp)*(Xp*Zq - Xq*Zp)^2))
8
Zr = F(Zp*Zq * (Xp*Zq - Xq*Zp)^3)
9
else:
10
a = E.a4()
11
Xr = 2*Yp*Zp^5*a^2 + 12*Xp^2*Yp*Zp^3*a + 18*Xp^4*Yp*Zp - 16*Xp*Yp^3*Zp^2
12
Yr = -Zp^6*a^3 - 9*Xp^2*Zp^4*a^2 - 27*Xp^4*Zp^2*a + 12*Xp*Yp^2*Zp^3*a - 27*Xp^6 + 36*Xp^3*Yp^2*Zp - 8*Yp^4*Zp^2
13
Zr = 8*Yp^3*Zp^3
14
15
return (Xr/Zr, Yr/Zr)
16
17
if __name__ == "__main__":
18
F = GF(23)
19
E = EllipticCurve(F, [2, 1])
20
21
P = E((4, 2))
22
Q = E((4, 2))
23
R = P + Q
24
print(R)
25
26
Xp, Yp, Zp = P
27
Xq, Yq, Zq = Q
28
29
print(projective_sum(E, P, Q))
30
31
32