-
start_point Stellt den Startpunkt der sicheren elliptischen Kurve ueber dem schnell implementierten Koerper $F_{47^{46}}$ mit integrierter Aretmetik.
from elliptic_curves_fq import start_point
Startpunkt = start_point()
print(Startpunkt.on_Curve())
privater_Schluessel = 1000000
oeffentlicher_Schluessel = Startpunkt * privater_Schluessel
test = oeffentlicher_Schluessel + Startpunkt
-
Fp: Stellt ein endlichen Koerper $F_p$ bereit und unterstuetzt arithmetische Operationen wie Addition, Subtraktion, Multiplikation, Division und Potenzieren durch Ueberschreiben der vorhandenen Operationen von Python.
- Parameter:
element
(int): Ein Element im endlichen Koerper.p
(int): Eine Primzahl, die den endlichen Koerper definiert.
from elliptic_curves_fq import Fp
p = 23
element = Fp(7, p)
print(element)
print(element + 20)
print(element - 10)
print(element ** 2)
-
get_irreductible_polynomial: Generiert ein irreduziblen Polynoms ueber einem endlichen Koerper $F_{p}$.
- Parameter:
p
(int): Die Primzahl, die den endlichen Koerper definiert.n
(int): Der Grad des Polynoms.
from elliptic_curves_fq import get_irreductible_polynomial
p = 17
n = 3
poly, attempts = get_irreductible_polynomial(p, n)
print(poly)
print(attempts)
-
Fpn: Ermoeglicht das Rechnen mit endlichen Koerpern $F_{p^n}$ und bietet Methoden wie Addition, Subtraktion, Multiplikation, Division und Potenzieren durch Ueberschreiben der vorhandenen Operationen von Python.
- Parameter:
p
(int): Eine Primzahl, die $F_p$ definiert.irreducible_poly
(list): Ein irreduzibles Polynom ueber diesem Koerper. Definiert den Koerper $F_{p^n}$element
(list): Ein Element von $F_{p^n}$.
from elliptic_curves_fq import Fpn
p = 17
irreducible_poly = [1, 1, 1, 2]
element = Fpn(p, irreducible_poly, [1, 2, 3])
print(element)
print(element + [5,4,3])
print(element * [2,1,3])
print(element ** 5)
-
curve: Ermoeglicht die Arbeit mit elliptischen Kurven ueber endlichen Koerpern $F_{p}$. Eine elliptische Kurve hat die folgende Form $$y^2 = x^3 + ax + b$$
- Parameter:
a
(int): Der Koeffizient 'a' der elliptischen Kurve.b
(int): Der Koeffizient 'b' der elliptischen Kurve.p
(int): Eine Primzahl, die den endlichen Koerper definiert.start_point
(list[int,int]): Ein Startpunkt auf der elliptischen Kurve.ord
(int): Die Ordnung der Kurve. Wenn die Ordnung nicht bestummen wurde: None
- Die Koeffizienten a und b werden direkt zu Objekten der Klasse Fp gemacht.
from elliptic_curves_fq import curve
p = 17
a = 12
b = 6
start_point = [8,11]
curve = curve(a, b, p, start_point, None)
print(curve)
-
curve_Fpn: Ermoeglicht die Arbeit mit elliptischen Kurven ueber endlichen Koerpern $F_{p^n}$.
- Parameter:
a
(list): Der Koeffizient 'a' der elliptischen Kurve.b
(list): Der Koeffizient 'b' der elliptischen Kurve.p
(int): Eine Primzahl, die die Basis fuer den endlichen Koerper $F_p$ ist.irreducible_poly
(list): Ein irreduzibles Polynom ueber $F_p$ , welches den Koerper $F_{p^n}$ definiert.start_point
(list[list,list]): Ein Startpunkt auf der elliptischen Kurve.ord
(int): Die Ordnung der Kurve.
- Die Koeffizienten a und b werden direkt zu Objekten der Klasse Fpn gemacht.
from elliptic_curves_fq import curve_Fpn
p = 17
irreducible_poly = [1, 1, 1, 2]
a = [1, 12, 8]
b = [2, 7, 6]
start_point = [[9, 10, 11],[7, 2, 4]]
curve = curve_Fpn(a, b, p, irreducible_poly, start_point, None)
print(curve)
-
get_random_curve :game_die:: Ermoeglicht das Erstellen einer neuen zufaelligen Kurve.
- Parameter:
p
(int): Eine Primzahl, die den endlichen Koerper definiert.degree
(int): Der Grad des irreduziblen Polynom fuer die Kurve.should_print
(bool): Ein Parameter, der bestimmt, ob die Kurve gedruckt werden soll.
from elliptic_curves_fq import get_randomcurve
p = 17
degree = 7
get_randomcurve(p,degree)
curve = get_randomcurve(p,degree,should_print=False)
start_point = curve.startpoint
-
Points: Ermoeglicht die Arithmetik elliptischer Kurve und unterstuetzt Operationen wie Punktaddition, Punktvervielfachung und andere Funktionen im Kontext elliptischer Kurven.
- Parameter:
curve
(object): Die elliptische Kurve, mit der der Punkt verbunden ist.point
(list): Ein Punkt auf der elliptischen Kurve.
- Der Attribute x und y vom Punkt werden direkt in Objekte der Klassen Fp respektive Fpn umgewandelt.
from elliptic_curves_fq import Points, curve_Fpn
curve = curve_Fpn([1, 12, 8], [2, 7, 6], 17, [1, 1, 1, 2], [[9, 10, 11],[7, 2, 4]], None)
point = curve.startpoint
point2 = Points([[3, 12, 16], [1, 4, 13]],curve)
print(point)
print(point2)
print(point + point2 )
print(point * 3500)
-
main_schoof : Zur Bestimmer Anzahl der Punkten auf einer bestimmten Kurve ueber dem Koerper $F_{47^{46}}$
- Parameter:
a
(numpy array): Paramter a der Kurveb
(numpy array): Paramter a der Kurvex
(numpy array): x Koordinate eines Puntes auf der Kurvey
(numpy array): y Koordinate eines Puntes auf der Kurve- cores (int): Zur verfuegung stehenden Cores zur paralelisierung. 8 reichen fuer die maximale Geschwindigkeit.
from elliptic_curves_fq import get_randomcurve, fast_schooftest_multy_process
import numpy as np
q = 47**46
Curve = get_randomcurve(47,[1]+ [0]*45 + [2])
a = np.array(Curve.a.value,dtype=int)
b = np.array(Curve.b.value,dtype=int)
x = np.array(Curve.startpoint.x.value,dtype=int)
y = np.array(Curve.startpoint.y.value,dtype=int)
print(fast_schooftest_multy_process.main_schoof(a,b,x,y,8))
-
Gespeicherte Kurven :floppy_disk::
Ich stelle Kurven zur Verfuegung, damit nicht immer eine neue ertsellt werden muss. Alle Kurven bis auf die Kurve P_192 wurden von mir generiert.
- P_192: Sichere NIST-Kurve ueber Fp mit p ungefaehr 2^192
- FBillionPowerTo20: Eigene Kurve ueber $F(p^n)$ mit p ungefaehr 1 Billion und n = 20.
- P991: Eigene Kurve ueber $F(991^3)$. Die Parameter sind zufaellig.
- P23: Eigene Kurve ueber $F(23^3)$. Die Parameter sind zufaellig.
- ord353: Eigene Kurve ueber $F(7^3)$. Die Ordnung der elliptischen Kurve ist 353 und somit prim. Jeder Punkt ist ein Generator.
- testcurvemod5: Eigene Kurve ueber $F(5^3)$.
- kurzmod5: Eigene kleinste moegliche Kurve ueber $F(5^2)$.
- Ascii: Eigene Kurve ueber $F(131^8)$.
- ten_power_12_power_150: Eine spezielle Kurve mit extrem hohen Werten mit p ungefaehr 1 Billion und n = 150
Die Kurven sind als Funktionen abgespeichert. Jede Funktion hier hat kein Argument, und man erhaelt die zugehoerige Kurve.