Files
darkfi/script/research/ec/pairing/3.1.3-divlines.sage
2022-07-20 12:18:38 +02:00

32 lines
696 B
Python

q = 47
Fq = GF(q)
E = EllipticCurve(Fq, (0, 5))
R.<x, y> = PolynomialRing(Fq)
def add(P, Q):
Px, Py = P[0], P[1]
Qx, Qy = Q[0], Q[1]
# We don't handle this case yet :p
assert Px != Qx
gradient = (Qy - Py) / (Qx - Px)
intersect = Py - gradient * Px
f = y - gradient * x - intersect
assert f(Px, Py) == 0
assert f(Qx, Qy) == 0
R = P + Q
Rx, Ry = R[0], R[1]
assert f(Rx, -Ry) == 0
g = x - Rx
assert g(Rx, Ry) == g(Rx, -Ry) == 0
return f / g
P = E(33, 9)
Q = E(34, 39)
# div(f) = [P] + [Q] - [P + Q] - [∞] ∈ Pic(E)
# = ([P] + [Q] - 2[∞]) - ([P + Q] - [∞])
# => [P] + [Q] - 2[∞] ~ [P + Q] - [∞]
f = add(P, Q)
print(f)