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
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)
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)

View File

@ -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}.

View File

@ -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

View File

@ -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

View File

@ -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, )