#!/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()