cryptotools/examples/elliptic/ecc_generator.py
2026-02-18 12:32:05 +01:00

66 lines
1.4 KiB
Python

#!/usr/bin/env python3
import matplotlib.pyplot as plt
from Cryptotools.Groups.elliptic import Elliptic
from Cryptotools.Groups.point import Point
# https://course.ece.cmu.edu/~ece733/lectures/21-intro-ecc.pdf
a = 3
b = 7
n = 53 # Must be prime number
E = Elliptic(n, a, b)
E.quadraticResidues()
Ep = E.pointsE()
#print(E.getQuadraticResidues())
# Now, we can make the Addition Table
#for p in Ep:
# for q in Ep:
# nP = E.add(p, q)
# print(f"({p.x}, {p.y}), ({q.x}, {q.y}) {nP.x, nP.y}")
# print()
#
#print()
# In cryptography, where is the public key and where is the private key on the elliptic curve ???
# For the graphic
MAX=n
fig, ax = plt.subplots()
ax.legend(fontsize=14)
ax.grid()
# We generate x for the graphic
x = list()
x = [i for i in range(0, MAX)]
# Drawing the point.
for p in Ep:
ax.plot(p.x, p.y, 'bo')
# Find the order of the Curve
order = E.findOrder()
cofactor = E.cofactor
print(f"Order: {order}")
print(f"Cofactor: {cofactor}")
# Lets make an example, here, G is the first element of all points (except the point at infinity)
G = Ep[1]
for i in range(1, 15):
P = E.scalar(G, i)
plt.plot(P.x, P.y, marker='o', color="red")
plt.annotate(f'P{i}', (P.x, P.y + 0.5))
# Check if the point exist in the curve
if E.pointExist(P):
print(f"The point P ({P.x}, {P.y}) lies on the Curve")
else:
print(f"The point P ({P.x}, {P.y}) doesn't lies on the Curve")
plt.show()