package bls12-381-gen

  1. Overview
  2. Docs
exception Not_on_curve of Stdlib.Bytes.t
type t

The type of the element in the elliptic curve

val size_in_bytes : int

The size of a point representation, in bytes

val empty : unit -> t

Create an empty value to store an element of the curve. DO NOT USE THIS TO DO COMPUTATIONS WITH, UNDEFINED BEHAVIORS MAY HAPPEN

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 of length size_in_bytes.

val of_bytes_exn : Stdlib.Bytes.t -> t

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

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

Allocates a new point from a byte of length size_in_bytes / 2 array representing a point in compressed form.

val of_compressed_bytes_exn : Stdlib.Bytes.t -> t

Allocates a new point from a byte array of length size_in_bytes / 2 representing a point in compressed form. 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 to_compressed_bytes : t -> Stdlib.Bytes.t

Return a compressed bytes representation

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. The element is on the curve and in the prime subgroup.

val add : t -> t -> t

Return the addition of two element

val double : t -> t

double g returns 2g

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 fft : domain:Scalar.t array -> points:t list -> t list

fft ~domain ~points performs a Fourier transform on points using domain The domain should be of the form w^{i} where w is a principal root of unity. If the domain is of size n, w must be a n-th principal root of unity. The number of points can be smaller than the domain size, but not larger. The complexity is in O(n log(m)) where n is the domain size and m the number of points.

val ifft : domain:Scalar.t array -> points:t list -> t list

ifft ~domain ~points performs an inverse Fourier transform on points using domain. The domain should be of the form w^{-i} (i.e the "inverse domain") where w is a principal root of unity. If the domain is of size n, w must be a n-th principal root of unity. The domain size must be exactly the same than the number of points. The complexity is O(n log(n)) where n is the domain size.