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)