Kryptografia/miniprojekt2/dodawnaie.py

36 lines
1012 B
Python
Raw Normal View History

2021-11-25 16:56:33 +01:00
import sys, random
sys.path.append("../")
import functions.functions as fn
2021-11-29 20:07:54 +01:00
def dodawanie(punkt1, punkt2, krzywa):
a = krzywa[0]
p = krzywa[2]
2021-11-25 16:56:33 +01:00
if punkt1 == None:
return punkt2
2021-11-29 20:07:54 +01:00
elif punkt2 == None:
2021-11-25 16:56:33 +01:00
return punkt1
2021-11-29 20:07:54 +01:00
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)
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)