From e9542aa56aaa1315e07f6ca0037b3480bebb8d4d Mon Sep 17 00:00:00 2001 From: Jakub Adamski Date: Mon, 29 Nov 2021 20:07:54 +0100 Subject: [PATCH] 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