package bls12-381
include Bls12_381_gen.Elliptic_curve_sig.T with type Scalar.t = Fr.t
exception Not_on_curve of Bytes.t
module Scalar : Ff_sig.PRIME with type t = Fr.t
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 : Bytes.t -> bool
Check if a point, represented as a byte array, is on the curve *
Attempt to construct a point from a byte array of length size_in_bytes
.
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
Allocates a new point from a byte of length size_in_bytes / 2
array representing a point in compressed form.
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 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:Random.State.t -> unit -> t
Generate a random element. The element is on the curve and in the prime subgroup.
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.
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.
Create a point from the coordinates. If the point is not on the curve, None is return. The points must be given modulo the order of Fq. The points are in the form (c0, c1) where x = c1 * X + c0 and y = c1 * X + c0. To create the point at infinity, use zero ()