36 lines
1012 B
Python
36 lines
1012 B
Python
import sys, random
|
|
sys.path.append("../")
|
|
|
|
import functions.functions as fn
|
|
|
|
|
|
def dodawanie(punkt1, punkt2, krzywa):
|
|
a = krzywa[0]
|
|
p = krzywa[2]
|
|
|
|
if punkt1 == None:
|
|
return punkt2
|
|
|
|
elif punkt2 == None:
|
|
return punkt1
|
|
|
|
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) |