#!/usr/bin/env python3 import matplotlib.pyplot as plt from Cryptotools.Groups.curve import Curve from Cryptotools.Groups.point import Point a = 3 b = 8 curve = Curve(a, b, Curve.WEIERSTRASS) x = curve.x curve.generatePoints() y = curve.y yn = curve.yn points = curve.getPoints() P = points[10] nP = curve.scalar(P, 5) print(f"{nP.x} {nP.y}") # For testing, we may add n times with the addition operation for the Scalar Multiplication tmp = Point(0, 0) for i in range(5): tmp = curve.add(P, tmp) # Unfortunately, the result is approximatively the same # the multiplication need to be more accurate # if tmp == nP: # print(True) 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(nP.x, nP.y, marker='o', color="red") plt.annotate('nP', (nP.x, nP.y + 0.5)) plt.legend() plt.show()