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.