From 21c395201ae97010bc598fb8d29569b7c387c1f2 Mon Sep 17 00:00:00 2001 From: Jakub Adamski Date: Wed, 24 Nov 2021 23:47:52 +0100 Subject: [PATCH 1/3] miniprojekt2 --- miniprojekt2/1-ElGamal.py | 56 ++++++++++++++++++++++++++++++++++ miniprojekt2/2-RSA.py | 44 ++++++++++++++++++++++++++ miniprojekt2/4-faktoryzacja.py | 29 ++++++++++++++++++ zajecia3/rsa.py | 45 +-------------------------- 4 files changed, 130 insertions(+), 44 deletions(-) create mode 100644 miniprojekt2/1-ElGamal.py create mode 100644 miniprojekt2/2-RSA.py create mode 100644 miniprojekt2/4-faktoryzacja.py diff --git a/miniprojekt2/1-ElGamal.py b/miniprojekt2/1-ElGamal.py new file mode 100644 index 0000000..00d4804 --- /dev/null +++ b/miniprojekt2/1-ElGamal.py @@ -0,0 +1,56 @@ +import sys, random, math +sys.path.append("../") + +import functions.functions as fn + +# Generowanie kluczy +# 1. Znajdź liczbę pierwszą +p = None +while True: + a = random.getrandbits(512) + if (fn.fermat(100, a)): + p = a + break + +# 2. Znajdź generator g grupy fi(p) +# Generatorem grupy fi(p) jest dowolna liczba względnie pierwsza z p +# Jeśli p jest liczbą pierwszą to jest to dowolna liczba od 2 do p-1 + +g = random.randint(2, p-1) + + +# 3. Losuje liczbę naturalną 1 < x < p-1 +x = random.randint(2, p-2) + + +# 4. Obliczam +y = fn.potegowanieimod(g, x, p) + +print("\n\nKlucz publiczny = ( {}, {}, {} )\n\n".format(p, g, y)) +print("Klucz prywatny = ( {}, {} )\n\n".format(p, x)) + + + + +# Szyfrowanie +# 1. Ustalam M +m = 12345 +#m = random.randint(0, p-1) + + +# 2. Losuje liczbę naturalną 1 < z < p-1 +z = random.randint(2, p-2) + + +# 3. Oblicza c1 i c2 +c1 = fn.potegowanieimod(g, z, p) +c2 = fn.potegowanieimod(y, z, p) * m + +print("C = [ {}, {} ]\n\n".format(c1, c2)) + + +# Deszyfrowanie +d = int(c2 / fn.potegowanieimod(c1, x, p)) + + +print("WIADOMOŚĆ: {}\n\n".format(d)) \ No newline at end of file diff --git a/miniprojekt2/2-RSA.py b/miniprojekt2/2-RSA.py new file mode 100644 index 0000000..51a4ee3 --- /dev/null +++ b/miniprojekt2/2-RSA.py @@ -0,0 +1,44 @@ +# rsa +import sys, random +sys.path.append("../") + +import functions.functions as fn + + +#generowanie kluczy +pierwsze = [] +while True: + a = random.getrandbits(512) + if (fn.fermat(100, a)): + pierwsze.append(a) + if len(pierwsze) == 2: + break + +n = pierwsze[0] * pierwsze[1] +fi = (pierwsze[0] - 1) * (pierwsze[1] - 1) + +e = None +while True: + a = random.getrandbits(fi.bit_length() - 1) + if fn.fermat(100, a): + _, _, d = fn.euklides(a, fi) + if d == 1: + e = a + break + + +d = fn.odwrotnosc(e, fi) +print("\nKlucz publiczny: ({},\n {})".format(n, e)) +print("\nKlucz tajny: ({}, {})".format(n, d)) + + +#szyfrowanie +m = random.randint(1, 512) +print("\nWiadomośc: {}".format(m)) +c = fn.potegowanieimod(m, e, n) +print("\nSzyfrogram: {}".format(c)) + + +#odszyfrowanie +M = fn.potegowanieimod(c, d, n) +print("\nWiadomość odszyfrowana: {}\n".format(M)) \ No newline at end of file diff --git a/miniprojekt2/4-faktoryzacja.py b/miniprojekt2/4-faktoryzacja.py new file mode 100644 index 0000000..7286360 --- /dev/null +++ b/miniprojekt2/4-faktoryzacja.py @@ -0,0 +1,29 @@ +import random, math + +n = random.getrandbits(50) +print(n) + +k = 2 +pom = math.sqrt(n) +factors = [1] +i = 1 +d = -1 +while n > 1 and k <= pom: + while n % k == 0: + n = n // k + factors.append(k) + if k < 3: + k += 1 + else: + k = 6 * i + d + if d == 1: + d = -1 + i += 1 + else: + d = 1 + +if len(factors) == 0: + factors.append(n) + +print(factors) + diff --git a/zajecia3/rsa.py b/zajecia3/rsa.py index 51a4ee3..09720ec 100644 --- a/zajecia3/rsa.py +++ b/zajecia3/rsa.py @@ -1,44 +1 @@ -# rsa -import sys, random -sys.path.append("../") - -import functions.functions as fn - - -#generowanie kluczy -pierwsze = [] -while True: - a = random.getrandbits(512) - if (fn.fermat(100, a)): - pierwsze.append(a) - if len(pierwsze) == 2: - break - -n = pierwsze[0] * pierwsze[1] -fi = (pierwsze[0] - 1) * (pierwsze[1] - 1) - -e = None -while True: - a = random.getrandbits(fi.bit_length() - 1) - if fn.fermat(100, a): - _, _, d = fn.euklides(a, fi) - if d == 1: - e = a - break - - -d = fn.odwrotnosc(e, fi) -print("\nKlucz publiczny: ({},\n {})".format(n, e)) -print("\nKlucz tajny: ({}, {})".format(n, d)) - - -#szyfrowanie -m = random.randint(1, 512) -print("\nWiadomośc: {}".format(m)) -c = fn.potegowanieimod(m, e, n) -print("\nSzyfrogram: {}".format(c)) - - -#odszyfrowanie -M = fn.potegowanieimod(c, d, n) -print("\nWiadomość odszyfrowana: {}\n".format(M)) \ No newline at end of file +# jest w miniprojekt2 From f8aa89356720f935f72bda66130eb7d0bf68479d Mon Sep 17 00:00:00 2001 From: Jakub Adamski Date: Thu, 25 Nov 2021 16:56:33 +0100 Subject: [PATCH 2/3] miniprojekt wip --- functions/functions.py | 15 ++++++ miniprojekt2/dodawnaie.py | 22 +++++++++ miniprojekt2/krzywa.py | 15 ++++++ miniprojekt2/punkt.py | 17 +++++++ miniprojekt2/weryfikacja.py | 49 ++++++++++++++++++++ miniprojekt2/wielokrotnosc.py | 19 ++++++++ miniprojekt2/zadania.py | 36 ++++++++++++++ miniprojekt2/zaliczenie.py | 38 +++++++++++++++ {miniprojekt2 => zajecia3}/1-ElGamal.py | 0 {miniprojekt2 => zajecia3}/2-RSA.py | 0 {miniprojekt2 => zajecia3}/4-faktoryzacja.py | 0 zajecia3/rsa.py | 1 - 12 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 miniprojekt2/dodawnaie.py create mode 100644 miniprojekt2/krzywa.py create mode 100644 miniprojekt2/punkt.py create mode 100644 miniprojekt2/weryfikacja.py create mode 100644 miniprojekt2/wielokrotnosc.py create mode 100644 miniprojekt2/zadania.py create mode 100644 miniprojekt2/zaliczenie.py rename {miniprojekt2 => zajecia3}/1-ElGamal.py (100%) rename {miniprojekt2 => zajecia3}/2-RSA.py (100%) rename {miniprojekt2 => zajecia3}/4-faktoryzacja.py (100%) delete mode 100644 zajecia3/rsa.py diff --git a/functions/functions.py b/functions/functions.py index f4ce4c9..9a0ca3a 100644 --- a/functions/functions.py +++ b/functions/functions.py @@ -1,5 +1,19 @@ import random, copy + +#reszta kwadratowa +def resztaKwadratowa(a, p): + return potegowanieimod(a, int((p + 1) / 4), p) + + +#generuj liczbe pierwsza +def genPierwsza(bity): + while True: + a = random.getrandbits(bity) + if (fermat(100, a)): + return a + + #sprawdza czy liczby są pierwsze def fermat(dokladnosc, liczba): i = 0 @@ -11,6 +25,7 @@ def fermat(dokladnosc, liczba): return False return True + #x * u + N * v = d #Jeśli d == 1 to liczby są względnie pierwsze #d to NWD diff --git a/miniprojekt2/dodawnaie.py b/miniprojekt2/dodawnaie.py new file mode 100644 index 0000000..a18bdcf --- /dev/null +++ b/miniprojekt2/dodawnaie.py @@ -0,0 +1,22 @@ +import sys, random +sys.path.append("../") + +import functions.functions as fn + + +def dodawanie(punkt1, punkt2, p): + if punkt1 == None: + return punkt2 + if punkt2 == None: + return punkt1 + + l = ((punkt2[1] - punkt1[1]) * fn.odwrotnosc(punkt2[0] - punkt1[1], p) ) % p + x3 = (fn.potegowanieimod(l, 2, p) - punkt2[0] - punkt1[0]) % p + y3 = (l * (punkt1[0] - x3) - punkt1[1] ) % p + return (x3, y3) + +def podwojny(punkt, a, p): + l = ((3 * fn.potegowanieimod(punkt[0], 2, p) + a) * fn.odwrotnosc(2 * punkt[1], p) ) % p + x3 = (fn.potegowanieimod(l, 2, p) - (2 * punkt[0])) % p + y3 = ((l * (punkt[0] - x3)) - punkt[1] ) % p + return (x3, y3) \ No newline at end of file diff --git a/miniprojekt2/krzywa.py b/miniprojekt2/krzywa.py new file mode 100644 index 0000000..11d50a0 --- /dev/null +++ b/miniprojekt2/krzywa.py @@ -0,0 +1,15 @@ +import sys, random +sys.path.append("../") + +import functions.functions as fn + +def genKrzywa(): + p = fn.genPierwsza(300) + a = None + b = None + while True: + a = random.randint(0, p-1) + b = random.randint(0, p-1) + delta = (4 * fn.potegowanieimod(a, 3, p) + 27 * fn.potegowanieimod(b, 2, p) ) % p + if delta != 0: + return (a, b, p) \ No newline at end of file diff --git a/miniprojekt2/punkt.py b/miniprojekt2/punkt.py new file mode 100644 index 0000000..83a01de --- /dev/null +++ b/miniprojekt2/punkt.py @@ -0,0 +1,17 @@ +import sys, random, math +sys.path.append("../") +sys.path.append("./") + +import functions.functions as fn + + +def genPunkt(krzywa): + p = krzywa[2] + a = krzywa[0] + b = krzywa[1] + while True: + x = random.randint(0, p-1) + f = (fn.potegowanieimod(x, 3, p) + a * x + b) % p + if f / p != -1: + y = fn.resztaKwadratowa(f, p) + return (x, y) diff --git a/miniprojekt2/weryfikacja.py b/miniprojekt2/weryfikacja.py new file mode 100644 index 0000000..d5ad671 --- /dev/null +++ b/miniprojekt2/weryfikacja.py @@ -0,0 +1,49 @@ +import sys +sys.path.append("./") + + +import krzywa as krz +import punkt as pt +import dodawnaie as dod +import wielokrotnosc as wiel + + +#Losowa krzywa E : Y=X^3+AX+B mod p, gdzie +p=523133468360889049404922330981983268743289535618129665870465316487757998439707462631766351 +A=230494833619330872742071433259892253887918924949625621075110348455162899582640562756609713 +B=225785530019760328737805254637561350820485164307786402015943227616074411698429350907607751 +krzywa = (A, B, p) + +#Losowe punkty na krzywej E +#P=(x1,y1), Q=(x2,y2) +x1 =175757722742565321624944121270945167081993085306911405305303187535900979958321560252348498 +y1 =226448623369642016063981880559768023550784441813507797884241707518308435413329534175311217 +P = (x1, y1) +x2 =304223499801180221986968767003559465876563746859119614741554413137259445936662302970066936 +y2 =102134142598989436206400710402192938770351951638395982416611953688718767254279072458296380 +Q = (x2, y2) + +#Punkt -P=(x0,y0), gdzie +x0=175757722742565321624944121270945167081993085306911405305303187535900979958321560252348498 +y0=296684844991247033340940450422215245192505093804621867986223608969449563026377928456455134 + +#Suma punktów R=P+Q, R=(x3,y3), gdzie +x3=309247913243722349735615105023317652942369780988859181257617047802708085926167159989635057 +y3=56286298341270122874863929527351508051302994910793895678502472234843432931564818467195330 +dodawanie = dod.dodawanie(P, Q, p) +print("\nDodawanie: {}\n".format(dodawanie)) + +#Suma punktów S=P+P, S=(x4,y4), gdzie +x4=375245993831373348008207650671056348586612193401076181864749537869098009498477401148713884 +y4=87341294615819365102301001172231285456917076241094217329360106978400409261563949100144039 +podwojny = dod.podwojny(P, A, p) +print("\nPodwójny: {}\n".format(podwojny)) + +#Suma punktów T=P+(-P), T={O}. +#Obliczenie U=nP, U(x5,y5), gdzie +n=4879347923749729479274728427486284684682648644 +x5=376727840283116089359770933229860138351592734853415435564325838098166315053389243324176492 +y5=141067337441924393425295138662462090300703204905331212701080956044508288466652141335161785 + +wielokrotnosc = wiel.wielokrotnosc(krzywa, P, n) +print("\nWielokrotność: {}\n".format(wielokrotnosc)) \ No newline at end of file diff --git a/miniprojekt2/wielokrotnosc.py b/miniprojekt2/wielokrotnosc.py new file mode 100644 index 0000000..d655c73 --- /dev/null +++ b/miniprojekt2/wielokrotnosc.py @@ -0,0 +1,19 @@ +import sys, random +sys.path.append("../") +sys.path.append("./") + +import functions.functions as fn +import dodawnaie as dod + +def wielokrotnosc(krzywa, punkt, n): + q = punkt + a = krzywa[0] + p = krzywa[2] + r = None + while n > 0: + if n % 2 == 1: + r = dod.dodawanie(r, q, p) + n -= 1 + q = dod.podwojny(q, a, p) + n = n // 2 + return q diff --git a/miniprojekt2/zadania.py b/miniprojekt2/zadania.py new file mode 100644 index 0000000..926cac5 --- /dev/null +++ b/miniprojekt2/zadania.py @@ -0,0 +1,36 @@ +import sys +sys.path.append("./") + + +import krzywa as krz +import punkt as pt +import dodawnaie as dod +import wielokrotnosc as wiel + + +# zad 1 - generuj krzywą +krzywa = krz.genKrzywa() +print("\nE = ( A: {}, B: {}, p: {}\n".format(krzywa[0], krzywa[1], krzywa[2])) + + +# zad 2 - losowy punkt +punkt = pt.genPunkt(krzywa) +print("P = ( {}, {} )\n".format(punkt[0], punkt[1])) + + +# zad 3 - punkt przeciwny +p = krzywa[2] +przeciwny = (punkt[0], -punkt[1] % p ) +print("-P = ( {}, {} )\n".format(przeciwny[0], przeciwny[1])) + + +# zad 4 - dodawnaie punktów +punkt2 = pt.genPunkt(krzywa) +wynik = dod.dodawanie(punkt, punkt2, p) +print("R = ( {}, {} )\n".format(wynik[0], wynik[1])) + + +# zad 5 - n-ta wielokrotność punktu +n = 5 +wielokrotnosc = wiel.wielokrotnosc(krzywa, punkt, n) +print("{}P = ( {}, {} )\n".format(n, wielokrotnosc[0], wielokrotnosc[1])) \ No newline at end of file diff --git a/miniprojekt2/zaliczenie.py b/miniprojekt2/zaliczenie.py new file mode 100644 index 0000000..3356e7f --- /dev/null +++ b/miniprojekt2/zaliczenie.py @@ -0,0 +1,38 @@ +#Tylko deszyfrowanie ElGammal na krzywej + +import math +import sys +sys.path.append("./") + + +import dodawnaie as dod +import wielokrotnosc as wiel + + +def dekodowanieKrzywej(punkt, u): + return math.ceil(punkt[0] - 1 / u) + + + + +p=731308150714321957849734816484321327119306335527666142772981103429614098294367916616192051 +A=650436649561455070461892045239297273810338327060582149067290109178304889026764087827222303 +B=393651706462824198277343570733362683428089922651104369418553164436556395018275495301846803 +x3=34791770906820122752501140104306036053164090009865871144108139346780277134807427702262028 +y3=21066589872392983967815591132354523605031924537129956532523648621530097883764976935325171 +x4=186698539519726941523101574150863594380763252545073110418528772061794171311499124283340359 +y4=139702463401317072232031962287250501182328856243084829793001376804676448040153050195056294 +x=672066757942005027592684629780121319559766320138386156339177050193566909314907208798471016 + + + +c1 = (x3, y3) +c2 = (x4, y4) +krzywa = (A, B, p) + +wielokrotność = wiel.wielokrotnosc(krzywa, c1, x) +przeciwny = (wielokrotność[0], -wielokrotność[1] % p) +pm = dod.dodawanie(c2, przeciwny, p) +print(pm) + +#m = dekodowanieKrzywej(pm, ) \ No newline at end of file diff --git a/miniprojekt2/1-ElGamal.py b/zajecia3/1-ElGamal.py similarity index 100% rename from miniprojekt2/1-ElGamal.py rename to zajecia3/1-ElGamal.py diff --git a/miniprojekt2/2-RSA.py b/zajecia3/2-RSA.py similarity index 100% rename from miniprojekt2/2-RSA.py rename to zajecia3/2-RSA.py diff --git a/miniprojekt2/4-faktoryzacja.py b/zajecia3/4-faktoryzacja.py similarity index 100% rename from miniprojekt2/4-faktoryzacja.py rename to zajecia3/4-faktoryzacja.py diff --git a/zajecia3/rsa.py b/zajecia3/rsa.py deleted file mode 100644 index 09720ec..0000000 --- a/zajecia3/rsa.py +++ /dev/null @@ -1 +0,0 @@ -# jest w miniprojekt2 From e9542aa56aaa1315e07f6ca0037b3480bebb8d4d Mon Sep 17 00:00:00 2001 From: Jakub Adamski Date: Mon, 29 Nov 2021 20:07:54 +0100 Subject: [PATCH 3/3] miniprojekt2 fixes --- miniprojekt2/dodawnaie.py | 36 ++++++++++++++++++++++++----------- miniprojekt2/weryfikacja.py | 11 +++++++++-- miniprojekt2/wielokrotnosc.py | 14 +++++--------- miniprojekt2/zadania.py | 5 +++-- miniprojekt2/zaliczenie.py | 12 +++++++----- 5 files changed, 49 insertions(+), 29 deletions(-) diff --git a/miniprojekt2/dodawnaie.py b/miniprojekt2/dodawnaie.py index a18bdcf..4926374 100644 --- a/miniprojekt2/dodawnaie.py +++ b/miniprojekt2/dodawnaie.py @@ -4,19 +4,33 @@ sys.path.append("../") import functions.functions as fn -def dodawanie(punkt1, punkt2, p): +def dodawanie(punkt1, punkt2, krzywa): + a = krzywa[0] + p = krzywa[2] + if punkt1 == None: return punkt2 - if punkt2 == None: + + elif punkt2 == None: return punkt1 - l = ((punkt2[1] - punkt1[1]) * fn.odwrotnosc(punkt2[0] - punkt1[1], p) ) % p - x3 = (fn.potegowanieimod(l, 2, p) - punkt2[0] - punkt1[0]) % p - y3 = (l * (punkt1[0] - x3) - punkt1[1] ) % p - return (x3, y3) + elif punkt1[0] != punkt2[0]: + l = ((punkt2[1] - punkt1[1]) * fn.odwrotnosc((punkt2[0] - punkt1[0]) % p, p) ) % p + x3 = (fn.potegowanieimod(l, 2, p) - punkt1[0] - punkt2[0]) % p + y3 = (l * (punkt1[0] - x3) - punkt1[1] ) % p + return (x3, y3) -def podwojny(punkt, a, p): - l = ((3 * fn.potegowanieimod(punkt[0], 2, p) + a) * fn.odwrotnosc(2 * punkt[1], p) ) % p - x3 = (fn.potegowanieimod(l, 2, p) - (2 * punkt[0])) % p - y3 = ((l * (punkt[0] - x3)) - punkt[1] ) % p - return (x3, y3) \ No newline at end of file + elif punkt1[0] == punkt2[0] and punkt1[1] == punkt2[1]: + l = ((3 * fn.potegowanieimod(punkt1[0], 2, p) + a) * fn.odwrotnosc(2 * punkt1[1], p)) % p + x3 = (fn.potegowanieimod(l, 2, p) - 2 * punkt1[0]) % p + y3 = (l * (punkt1[0] - x3) - punkt1[1]) % p + return (x3, y3) + + elif punkt1[0] == przeciwny(punkt2)[0] and punkt1[1] == przeciwny(punkt2)[1]: + return None + + return (0, 0) + + +def przeciwny(punkt, p): + return (punkt[0], -punkt[1] % p) \ No newline at end of file diff --git a/miniprojekt2/weryfikacja.py b/miniprojekt2/weryfikacja.py index d5ad671..0132744 100644 --- a/miniprojekt2/weryfikacja.py +++ b/miniprojekt2/weryfikacja.py @@ -5,6 +5,7 @@ sys.path.append("./") import krzywa as krz import punkt as pt import dodawnaie as dod +import functions.functions as fn import wielokrotnosc as wiel @@ -23,20 +24,26 @@ x2 =3042234998011802219869687670035594658765637468591196147415544131372594459366 y2 =102134142598989436206400710402192938770351951638395982416611953688718767254279072458296380 Q = (x2, y2) +#OK #Punkt -P=(x0,y0), gdzie x0=175757722742565321624944121270945167081993085306911405305303187535900979958321560252348498 y0=296684844991247033340940450422215245192505093804621867986223608969449563026377928456455134 +przeciwny = dod.przeciwny(P, p) +print("-P = ( {}, {} )\n".format(przeciwny[0], przeciwny[1])) + #Suma punktów R=P+Q, R=(x3,y3), gdzie x3=309247913243722349735615105023317652942369780988859181257617047802708085926167159989635057 y3=56286298341270122874863929527351508051302994910793895678502472234843432931564818467195330 -dodawanie = dod.dodawanie(P, Q, p) + +dodawanie = dod.dodawanie(P, Q, krzywa) print("\nDodawanie: {}\n".format(dodawanie)) #Suma punktów S=P+P, S=(x4,y4), gdzie x4=375245993831373348008207650671056348586612193401076181864749537869098009498477401148713884 y4=87341294615819365102301001172231285456917076241094217329360106978400409261563949100144039 -podwojny = dod.podwojny(P, A, p) + +podwojny = dod.dodawanie(P, P, krzywa) print("\nPodwójny: {}\n".format(podwojny)) #Suma punktów T=P+(-P), T={O}. diff --git a/miniprojekt2/wielokrotnosc.py b/miniprojekt2/wielokrotnosc.py index d655c73..ef9286b 100644 --- a/miniprojekt2/wielokrotnosc.py +++ b/miniprojekt2/wielokrotnosc.py @@ -1,19 +1,15 @@ -import sys, random -sys.path.append("../") +import sys, random, copy sys.path.append("./") -import functions.functions as fn import dodawnaie as dod def wielokrotnosc(krzywa, punkt, n): q = punkt - a = krzywa[0] - p = krzywa[2] r = None while n > 0: - if n % 2 == 1: - r = dod.dodawanie(r, q, p) + if 1 == n % 2: + r = dod.dodawanie(r, q, krzywa) n -= 1 - q = dod.podwojny(q, a, p) + q = dod.dodawanie(q, q, krzywa) n = n // 2 - return q + return r diff --git a/miniprojekt2/zadania.py b/miniprojekt2/zadania.py index 926cac5..1445bcd 100644 --- a/miniprojekt2/zadania.py +++ b/miniprojekt2/zadania.py @@ -10,14 +10,13 @@ import wielokrotnosc as wiel # zad 1 - generuj krzywą krzywa = krz.genKrzywa() -print("\nE = ( A: {}, B: {}, p: {}\n".format(krzywa[0], krzywa[1], krzywa[2])) +print("\nE = ( A: {}, B: {}, p: {})\n".format(krzywa[0], krzywa[1], krzywa[2])) # zad 2 - losowy punkt punkt = pt.genPunkt(krzywa) print("P = ( {}, {} )\n".format(punkt[0], punkt[1])) - # zad 3 - punkt przeciwny p = krzywa[2] przeciwny = (punkt[0], -punkt[1] % p ) @@ -29,6 +28,8 @@ punkt2 = pt.genPunkt(krzywa) wynik = dod.dodawanie(punkt, punkt2, p) print("R = ( {}, {} )\n".format(wynik[0], wynik[1])) +pod = dod.podwojny(punkt, krzywa[0], p) +print("S = ( {}, {} )\n".format(pod[0], pod[1])) # zad 5 - n-ta wielokrotność punktu n = 5 diff --git a/miniprojekt2/zaliczenie.py b/miniprojekt2/zaliczenie.py index 3356e7f..5a74876 100644 --- a/miniprojekt2/zaliczenie.py +++ b/miniprojekt2/zaliczenie.py @@ -14,25 +14,27 @@ def dekodowanieKrzywej(punkt, u): - p=731308150714321957849734816484321327119306335527666142772981103429614098294367916616192051 A=650436649561455070461892045239297273810338327060582149067290109178304889026764087827222303 B=393651706462824198277343570733362683428089922651104369418553164436556395018275495301846803 +#C1=(x3,y3); +#C2=(x4,y4); x3=34791770906820122752501140104306036053164090009865871144108139346780277134807427702262028 y3=21066589872392983967815591132354523605031924537129956532523648621530097883764976935325171 x4=186698539519726941523101574150863594380763252545073110418528772061794171311499124283340359 y4=139702463401317072232031962287250501182328856243084829793001376804676448040153050195056294 x=672066757942005027592684629780121319559766320138386156339177050193566909314907208798471016 - - +#PM=(x5,y5) +x5=161527769144648125516616552305430215523209938960948885119763789863298885352623739933340770 +y5=535388071375765111892419320980278561695403441127487734617482964160721504503181645564425574 c1 = (x3, y3) c2 = (x4, y4) krzywa = (A, B, p) wielokrotność = wiel.wielokrotnosc(krzywa, c1, x) -przeciwny = (wielokrotność[0], -wielokrotność[1] % p) -pm = dod.dodawanie(c2, przeciwny, p) +przeciwny = dod.przeciwny(wielokrotność, p) +pm = dod.dodawanie(c2, przeciwny, krzywa) print(pm) #m = dekodowanieKrzywej(pm, ) \ No newline at end of file