miniprojekt2 fixes

This commit is contained in:
Jakub Adamski 2021-11-29 20:07:54 +01:00
parent f8aa893567
commit e9542aa56a
5 changed files with 49 additions and 29 deletions

View File

@ -4,19 +4,33 @@ sys.path.append("../")
import functions.functions as fn import functions.functions as fn
def dodawanie(punkt1, punkt2, p): def dodawanie(punkt1, punkt2, krzywa):
a = krzywa[0]
p = krzywa[2]
if punkt1 == None: if punkt1 == None:
return punkt2 return punkt2
if punkt2 == None:
elif punkt2 == None:
return punkt1 return punkt1
l = ((punkt2[1] - punkt1[1]) * fn.odwrotnosc(punkt2[0] - punkt1[1], p) ) % p elif punkt1[0] != punkt2[0]:
x3 = (fn.potegowanieimod(l, 2, p) - punkt2[0] - punkt1[0]) % p l = ((punkt2[1] - punkt1[1]) * fn.odwrotnosc((punkt2[0] - punkt1[0]) % p, p) ) % p
y3 = (l * (punkt1[0] - x3) - punkt1[1] ) % p x3 = (fn.potegowanieimod(l, 2, p) - punkt1[0] - punkt2[0]) % p
return (x3, y3) y3 = (l * (punkt1[0] - x3) - punkt1[1] ) % p
return (x3, y3)
def podwojny(punkt, a, p): elif punkt1[0] == punkt2[0] and punkt1[1] == punkt2[1]:
l = ((3 * fn.potegowanieimod(punkt[0], 2, p) + a) * fn.odwrotnosc(2 * punkt[1], p) ) % p l = ((3 * fn.potegowanieimod(punkt1[0], 2, p) + a) * fn.odwrotnosc(2 * punkt1[1], p)) % p
x3 = (fn.potegowanieimod(l, 2, p) - (2 * punkt[0])) % p x3 = (fn.potegowanieimod(l, 2, p) - 2 * punkt1[0]) % p
y3 = ((l * (punkt[0] - x3)) - punkt[1] ) % p y3 = (l * (punkt1[0] - x3) - punkt1[1]) % p
return (x3, y3) 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)

View File

@ -5,6 +5,7 @@ sys.path.append("./")
import krzywa as krz import krzywa as krz
import punkt as pt import punkt as pt
import dodawnaie as dod import dodawnaie as dod
import functions.functions as fn
import wielokrotnosc as wiel import wielokrotnosc as wiel
@ -23,20 +24,26 @@ x2 =3042234998011802219869687670035594658765637468591196147415544131372594459366
y2 =102134142598989436206400710402192938770351951638395982416611953688718767254279072458296380 y2 =102134142598989436206400710402192938770351951638395982416611953688718767254279072458296380
Q = (x2, y2) Q = (x2, y2)
#OK
#Punkt -P=(x0,y0), gdzie #Punkt -P=(x0,y0), gdzie
x0=175757722742565321624944121270945167081993085306911405305303187535900979958321560252348498 x0=175757722742565321624944121270945167081993085306911405305303187535900979958321560252348498
y0=296684844991247033340940450422215245192505093804621867986223608969449563026377928456455134 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 #Suma punktów R=P+Q, R=(x3,y3), gdzie
x3=309247913243722349735615105023317652942369780988859181257617047802708085926167159989635057 x3=309247913243722349735615105023317652942369780988859181257617047802708085926167159989635057
y3=56286298341270122874863929527351508051302994910793895678502472234843432931564818467195330 y3=56286298341270122874863929527351508051302994910793895678502472234843432931564818467195330
dodawanie = dod.dodawanie(P, Q, p)
dodawanie = dod.dodawanie(P, Q, krzywa)
print("\nDodawanie: {}\n".format(dodawanie)) print("\nDodawanie: {}\n".format(dodawanie))
#Suma punktów S=P+P, S=(x4,y4), gdzie #Suma punktów S=P+P, S=(x4,y4), gdzie
x4=375245993831373348008207650671056348586612193401076181864749537869098009498477401148713884 x4=375245993831373348008207650671056348586612193401076181864749537869098009498477401148713884
y4=87341294615819365102301001172231285456917076241094217329360106978400409261563949100144039 y4=87341294615819365102301001172231285456917076241094217329360106978400409261563949100144039
podwojny = dod.podwojny(P, A, p)
podwojny = dod.dodawanie(P, P, krzywa)
print("\nPodwójny: {}\n".format(podwojny)) print("\nPodwójny: {}\n".format(podwojny))
#Suma punktów T=P+(-P), T={O}. #Suma punktów T=P+(-P), T={O}.

View File

@ -1,19 +1,15 @@
import sys, random import sys, random, copy
sys.path.append("../")
sys.path.append("./") sys.path.append("./")
import functions.functions as fn
import dodawnaie as dod import dodawnaie as dod
def wielokrotnosc(krzywa, punkt, n): def wielokrotnosc(krzywa, punkt, n):
q = punkt q = punkt
a = krzywa[0]
p = krzywa[2]
r = None r = None
while n > 0: while n > 0:
if n % 2 == 1: if 1 == n % 2:
r = dod.dodawanie(r, q, p) r = dod.dodawanie(r, q, krzywa)
n -= 1 n -= 1
q = dod.podwojny(q, a, p) q = dod.dodawanie(q, q, krzywa)
n = n // 2 n = n // 2
return q return r

View File

@ -10,14 +10,13 @@ import wielokrotnosc as wiel
# zad 1 - generuj krzywą # zad 1 - generuj krzywą
krzywa = krz.genKrzywa() 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 # zad 2 - losowy punkt
punkt = pt.genPunkt(krzywa) punkt = pt.genPunkt(krzywa)
print("P = ( {}, {} )\n".format(punkt[0], punkt[1])) print("P = ( {}, {} )\n".format(punkt[0], punkt[1]))
# zad 3 - punkt przeciwny # zad 3 - punkt przeciwny
p = krzywa[2] p = krzywa[2]
przeciwny = (punkt[0], -punkt[1] % p ) przeciwny = (punkt[0], -punkt[1] % p )
@ -29,6 +28,8 @@ punkt2 = pt.genPunkt(krzywa)
wynik = dod.dodawanie(punkt, punkt2, p) wynik = dod.dodawanie(punkt, punkt2, p)
print("R = ( {}, {} )\n".format(wynik[0], wynik[1])) 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 # zad 5 - n-ta wielokrotność punktu
n = 5 n = 5

View File

@ -14,25 +14,27 @@ def dekodowanieKrzywej(punkt, u):
p=731308150714321957849734816484321327119306335527666142772981103429614098294367916616192051 p=731308150714321957849734816484321327119306335527666142772981103429614098294367916616192051
A=650436649561455070461892045239297273810338327060582149067290109178304889026764087827222303 A=650436649561455070461892045239297273810338327060582149067290109178304889026764087827222303
B=393651706462824198277343570733362683428089922651104369418553164436556395018275495301846803 B=393651706462824198277343570733362683428089922651104369418553164436556395018275495301846803
#C1=(x3,y3);
#C2=(x4,y4);
x3=34791770906820122752501140104306036053164090009865871144108139346780277134807427702262028 x3=34791770906820122752501140104306036053164090009865871144108139346780277134807427702262028
y3=21066589872392983967815591132354523605031924537129956532523648621530097883764976935325171 y3=21066589872392983967815591132354523605031924537129956532523648621530097883764976935325171
x4=186698539519726941523101574150863594380763252545073110418528772061794171311499124283340359 x4=186698539519726941523101574150863594380763252545073110418528772061794171311499124283340359
y4=139702463401317072232031962287250501182328856243084829793001376804676448040153050195056294 y4=139702463401317072232031962287250501182328856243084829793001376804676448040153050195056294
x=672066757942005027592684629780121319559766320138386156339177050193566909314907208798471016 x=672066757942005027592684629780121319559766320138386156339177050193566909314907208798471016
#PM=(x5,y5)
x5=161527769144648125516616552305430215523209938960948885119763789863298885352623739933340770
y5=535388071375765111892419320980278561695403441127487734617482964160721504503181645564425574
c1 = (x3, y3) c1 = (x3, y3)
c2 = (x4, y4) c2 = (x4, y4)
krzywa = (A, B, p) krzywa = (A, B, p)
wielokrotność = wiel.wielokrotnosc(krzywa, c1, x) wielokrotność = wiel.wielokrotnosc(krzywa, c1, x)
przeciwny = (wielokrotność[0], -wielokrotność[1] % p) przeciwny = dod.przeciwny(wielokrotność, p)
pm = dod.dodawanie(c2, przeciwny, p) pm = dod.dodawanie(c2, przeciwny, krzywa)
print(pm) print(pm)
#m = dekodowanieKrzywej(pm, ) #m = dekodowanieKrzywej(pm, )