package bls12-381
Library
Module
Module type
Parameter
Class
Class type
include Ff_sig.PRIME
val zero : t
val one : t
val is_zero : t -> bool
val is_one : t -> bool
val random : ?state:Stdlib.Random.State.t -> unit -> t
val non_null_random : ?state:Stdlib.Random.State.t -> unit -> t
val of_bytes_exn : Stdlib.Bytes.t -> t
val of_bytes_opt : Stdlib.Bytes.t -> t option
val to_bytes : t -> Stdlib.Bytes.t
val of_string : string -> t
val to_string : t -> string
val of_z : Z.t -> t
val to_z : t -> Z.t
val legendre_symbol : t -> Z.t
val is_quadratic_residue : t -> bool
Check if a point, represented as a byte array, is in the field *
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. A new array of size n
is allocated and is returned. The parameters are not modified.
fft_inplace ~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 must be in the same size than the domain. It does not return anything but modified the points directly. It does only perform one allocation of a scalar for the FFT. It is recommended to use this function if side-effect is acceptable.
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. A new array of size n
is allocated and is returned. The parameters are not modified.
ifft_inplace ~domain ~points
is the same than ifft
but modifies the array points
instead of returning a new array
add_inplace res a b
is the same than add
but writes the result in res
. No allocation happens.
sub_inplace res a b
is the same than sub
but writes the result in res
. No allocation happens.
mul_inplace res a b
is the same than sub
but writes the result in res
. No allocation happens.
inverse_exn_inplace res a
is the same than inverse_exn
but writes the result in res
. No allocation happens.
double_inplace res a
is the same than double
but writes the result in res
. No allocation happens.
square_inplace res a
is the same than square
but writes the result in res
. No allocation happens.
negate_inplace res a
is the same than negate
but writes the result in res
. No allocation happens.
add_bulk xs
returns the sum of the elements of xs
by performing only one allocation for the output. This method is recommended to save the allocation overhead of using n
times add
.
mul_bulk xs
returns the product of the elements of xs
by performing only one allocation for the output. This method is recommended to save the allocation overhead of using n
times mul
.
compare a b
compares the elements a
and b
based on their bytes representation
inner_product_exn a b
returns the inner product of a
and b
, i.e. sum(a_i * b_i)
. Raise Invalid_argument
if the arguments are not of the same length. Only two allocations are used.
Same than inner_product_exn
but returns an option instead of raising an exception.
val of_int : int -> t
of_int x
is equivalent to of_z (Z.of_int x)
. If x
is is negative, returns the element order - |x|
.