44 lines
898 B
Python
44 lines
898 B
Python
#!/usr/bin/env python3
|
|
|
|
from Cryptotools.Groups.point import Point
|
|
from Cryptotools.Groups.curve import Curve
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from math import sqrt
|
|
|
|
|
|
a = 3
|
|
b = 8
|
|
|
|
curve = Curve(a, b, Curve.WEIERSTRASS)
|
|
x = curve.x
|
|
curve.generatePoints()
|
|
y = curve.y
|
|
yn = curve.yn
|
|
points = curve.getPoints()
|
|
pointsReverse = curve.getPointsSym()
|
|
|
|
P = points[10]
|
|
Q = curve.find_reverse(P)
|
|
|
|
# We made the addition
|
|
# The result is the point at infinity
|
|
R = curve.add(P, Q)
|
|
print(f"{R.x} {R.y}")
|
|
|
|
|
|
plt.figure(figsize=(10, 6))
|
|
plt.plot(x, y, color='b', label=f'$y^2 = x^3 + {a}x + {b}$')
|
|
plt.plot(x, yn, color='b', )
|
|
plt.plot(P.x, P.y, marker='o', color="red")
|
|
plt.annotate('P', (P.x, P.y + 0.5))
|
|
|
|
plt.plot(Q.x, Q.y, marker='o', color="red")
|
|
plt.text(-1 , 11, f"R = infinity")
|
|
plt.annotate('Q', (Q.x, Q.y + 0.5))
|
|
|
|
|
|
plt.axline([P.x, P.y], [Q.x, Q.y], color="red")
|
|
plt.legend()
|
|
plt.show()
|