mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-09 14:48:08 -05:00
32 lines
696 B
Python
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)
|
|
|