Как добавить точки эллиптической кривой в Python?Python

Программы на Python
Ответить
Anonymous
 Как добавить точки эллиптической кривой в Python?

Сообщение Anonymous »

Я пытаюсь реализовать простую программу шифрования эллиптической кривой, но не могу получить ожидаемый результат удвоения и добавления точки P до 12P. Уравнение кривой:y^2 = x^3 +ax + b mod p. Согласно этому сайту 3P = [10, 6], когда P = [5, 1], а я получаю 3p = [10, 5]. Уравнения, которые я использую, можно найти в Википедии.
P = [5, 1]
prime = 17
a = 2
b = 2

def gcdExtended(a, b):
if a == 0:
return b, 0, 1
gcd, x1, y1 = gcdExtended(b % a, a)
x = y1 - (b // a) * x1
y = x1
return gcd, x, y

def double_point(point: list):
x = point[0]
y = point[1]

s = ((3*(x**2)+a) * (gcdExtended(2*y, prime)[1])) % prime

newx = (s**2 - x - x) % prime
newy = (s * (x - newx) - y) % prime

return [newx, newy]

def add_points(P: list, Q: list):
x1 = P[0]
y1 = P[1]
x2 = Q[0]
y2 = Q[1]

s = ((y2 - y1) * ((gcdExtended(x2-x1, prime))[1] % prime)) % prime

newx = (s**2 - x1 - x2) % prime
newy = (s * (x1 - newx) - y1) % prime

return [newx, newy]

Q = P
index = 2
while True:
if Q[0] == P[0] and Q[1] == P[1]:
print("doubling")
Q = double_point(P)
else:
print("adding")
Q = add_points(Q, P)

if index == 12 :
break

print(f"{index}P = {Q}")
index += 1


Подробнее здесь: https://stackoverflow.com/questions/652 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»