Curvas elípticas

Operaciones con curvas elípticas sobre cuerpos de característica dos

Este módulo permite trabajar con curvas elípticas:

  • Supersingulares

  • No supersingulares

Además se definde la clase Char2Curve que implementa curvas no supersingulares usando las coordenadas de López-Dahab

Ejemplo de uso para definir la curva K409:

from ycurve.ecc.ecc import Char2NonSupersingularCurve
from ycurve.ecc.point import AffinePoint
from ycurve.ffields.ffield import F2m, coefs_pos_to_int

power = 409
irreducible = coefs_pos_to_int([409, 87, 0])

a = F2m(0, power, irreducible)
b = F2m(1, power, irreducible)

gx = F2m(k409_b_x, power, irreducible)
gy = F2m(k409_b_y, power, irreducible)

g = AffinePoint(gx, gy)
c = Char2NonSupersingularCurve(a, b)
c.set_order(0x7ffffffffffffffffffffffffffffffffffffffffffffffffffe5f83b2d4ea20400ec4557d5ed3e3e7ca5b4b5c83b8e01e5fcf)  # noqa: E501
c.set_base_point(g)

return (c, power, irreducible)

Lista de funciones y clases de curvas elípticas:

Curve

Interfaz para trabajar con curvas elípticas.

Char2NonSupersingularCurve

Curvas no supersingulares de la forma y^2 + xy = x^3 + ax^2 + b

Char2Curve

Curvas no supersingulares de la forma y^2 + xy = x^3 + ax^2 + b con coordenadas de Lopez Dahab

Char2SupersingularCurve

Curvas supersingulares de la forma y^2 + cy = x^3 + ax^2 + b

class Curve[fuente]

Interfaz para trabajar con curvas elípticas.

abstract double(p: ycurve.ecc.point.Point)ycurve.ecc.point.Point[fuente]

Realiza la operación 2P para un punto P de la curva

abstract add(p: ycurve.ecc.point.Point, q: ycurve.ecc.point.Point)ycurve.ecc.point.Point[fuente]

Realiza la operación P + Q para dos puntos P, Q de la curva

abstract contains(p: ycurve.ecc.point.Point)bool[fuente]

Comprueba si un punto P pertenece a la curva

scalar_mul(k: int, p: ycurve.ecc.point.Point)ycurve.ecc.point.Point[fuente]

Realiza la operación kP para un entero k y un punto P

class Char2NonSupersingularCurve(a: ycurve.ffields.ffield.F2m, b: ycurve.ffields.ffield.F2m)[fuente]

Curvas no supersingulares de la forma y^2 + xy = x^3 + ax^2 + b

Variables
  • a – Coeficiente a de la ecuación

  • b – Coeficiente b de la ecuación

contains(p: ycurve.ecc.point.Point)bool[fuente]

Comprueba si un punto P pertenece a la curva

add(p: ycurve.ecc.point.AffinePoint, q: ycurve.ecc.point.AffinePoint)ycurve.ecc.point.AffinePoint[fuente]

Realiza la operación P + Q para dos puntos P, Q de la curva

double(p: ycurve.ecc.point.AffinePoint)ycurve.ecc.point.AffinePoint[fuente]

Realiza la operación 2P para un punto P de la curva

class Char2Curve(a: ycurve.ffields.ffield.F2m, b: ycurve.ffields.ffield.F2m)[fuente]

Curvas no supersingulares de la forma y^2 + xy = x^3 + ax^2 + b con coordenadas de Lopez Dahab

Variables
  • a – Coeficiente a de la ecuación

  • b – Coeficiente b de la ecuación

double(p: ycurve.ecc.ldpoint.LDPointChar2)[fuente]

Realiza la operación 2P para un punto P de la curva

add(p: ycurve.ecc.ldpoint.LDPointChar2, q: ycurve.ecc.point.AffinePoint)ycurve.ecc.ldpoint.LDPointChar2[fuente]

Realiza la operación P + Q para dos puntos P, Q de la curva

class Char2SupersingularCurve(a: ycurve.ffields.ffield.F2m, b: ycurve.ffields.ffield.F2m, c: ycurve.ffields.ffield.F2m)[fuente]

Curvas supersingulares de la forma y^2 + cy = x^3 + ax^2 + b

Variables
  • a – Coeficiente a de la ecuación

  • b – Coeficiente b de la ecuación

  • c – Coeficiente c de la ecuación

add(p: ycurve.ecc.point.AffinePoint, q: ycurve.ecc.point.AffinePoint)ycurve.ecc.point.AffinePoint[fuente]

Realiza la operación P + Q para dos puntos P, Q de la curva

double(p: ycurve.ecc.point.AffinePoint)ycurve.ecc.point.AffinePoint[fuente]

Realiza la operación 2P para un punto P de la curva