package mec

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Parameters

module Base : Ff_sig.PRIME
module Scalar : Ff_sig.PRIME
module Params : sig ... end

Signature

au^2 + v^2 = 1 + du^2v^2

include Mec_curve_sig.Ec_sig.BASE with type Base.t = Base.t with type Scalar.t = Scalar.t
exception Not_on_curve of Stdlib.Bytes.t
type t

Represents an element on the curve. In the case of a curve with a cofactor, the element is not necessarily in the prime subgroup.

val size_in_bytes : int

The size of a point representation, in bytes

module Scalar : Ff_sig.PRIME with type t = Scalar.t
module Base : Ff_sig.PRIME with type t = Base.t
val check_bytes : Stdlib.Bytes.t -> bool

Check if a point, represented as a byte array, is on the curve *

val of_bytes_opt : Stdlib.Bytes.t -> t option

Attempt to construct a point from a byte array

val of_bytes_exn : Stdlib.Bytes.t -> t

Attempt to construct a point from a byte array. Raise Not_on_curve if the point is not on the curve

val to_bytes : t -> Stdlib.Bytes.t

Return a representation in bytes

val zero : t

Zero of the elliptic curve

val one : t

A fixed generator of the elliptic curve

val is_zero : t -> bool

Return true if the given element is zero

val random : ?state:Stdlib.Random.State.t -> unit -> t

Generate a random element

val add : t -> t -> t

Return the addition of two element

val double : t -> t

Double the element

val negate : t -> t

Return the opposite of the element

val eq : t -> t -> bool

Return true if the two elements are algebraically the same

val mul : t -> Scalar.t -> t

Multiply an element by a scalar

val a : Base.t

The parameter a of the curve, from the equation a * u^2 + v^2 = 1 + d * u^2 * v^2

val d : Base.t

The parameter d of the curve, from the equation a * u^2 + v^2 = 1 + d * u^2 * v^2

val cofactor : Z.t

The cofactor of the curve. The parameter is used in is_small_order and in the random point generator.

val is_on_curve : u:Base.t -> v:Base.t -> bool

is_on_curve ~u ~v returns true if the coordinates (u, v) represents a point on the curve. It does not check the point is in the prime subgroup.

val is_in_prime_subgroup : u:Base.t -> v:Base.t -> bool

is_in_prime_subgroup ~u ~v returns true if the coordinates (u, v) represents a point in the prime subgroup. The coordinates must be a point on the curve

val get_u_coordinate : t -> Base.t

Return the affine coordinate u (such that au^2 + v^2 = 1 + d u^2 v^2

val get_v_coordinate : t -> Base.t

Return the affine coordinate u (such that au^2 + v^2 = 1 + d u^2 v^2

val to_montgomery_curve_parameters : unit -> (Base.t * Base.t * Z.t * (Base.t * Base.t)) option
val to_montgomery : t -> (Base.t * Base.t) option
val from_coordinates_opt : u:Base.t -> v:Base.t -> t option

Build a point from the affine coordinates. If the point is not on the curve and in the subgroup, returns None

val from_coordinates_exn : u:Base.t -> v:Base.t -> t

Build a point from the affine coordinates. If the point is not on the curve and in the subgroup, raise Not_on_curve.

val unsafe_from_coordinates : u:Base.t -> v:Base.t -> t

Build a point from the affine coordinates, without verifying the point is on the curve. Use with precaution.

OCaml

Innovation. Community. Security.