[T3] Definición de adición para curvas elípticas
Opened this issue · 1 comments
Hola! Que tengo una duda sobre la nomenclatura en el libro y como pasar esto a Python.
Por ejemplo, en el libro tenemos la siguiente expresión:
Esto correspondería a (s^2 - x1 -x2) mod p que en Python se programaría:
(s**2 -x1 - x2) % p o equivalentemente (s*s -x1 - x2) % p
Mi problema es con la siguiente expresión:
Aquí lo que yo entiendo es ((y2-y1)/(x2-x1)) mod p y se programaría ((y2-y1)/(x2-x1)) % p . Pero el problema es que esto te da como resultado una fracción por lo que escaparíamos del conjunto de los números enteros y no estaría en el grupo que definimos.
En internet encontré la misma expresión definida de la siguiente manera:
s = (y2 - y1) * pow(x2 - x1, -1, p)
que debería ser equivalente a decir (y2 - y1) / ((x2 - x1)mod p), pero por alguna razón esta expresión siempre me da números enteros y hace mucho más sentido.
Aún así, no estoy seguro que esta expresión sea correcta porque no logró hacer adición correctamente usando esta expresión.
Mi pregunta es, ¿Como programa las siguientes dos expresiones del libro en python?
La expresión ((y2-y1)/(x2-x1)) mod p
del libro es equivalente a ((y2-y1)*z) mod p
donde z
es el inverso de (x2 - x1)
en módulo p
. Vale decir, el libro usa el hecho de que u/v
es equivalente a u*v^(-1)
.
En la expresión s = (y2 - y1) * pow(x2 - x1, -1, p)
estás usando la equivalencia anterior, ya que pow(x2 - x1, -1, p)
calcula el inverso de (x2 - x1)
en módulo p
.
Saludos!