package bls12-381

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type
include Ff_sig.PRIME
exception Not_in_field of Stdlib.Bytes.t
type t
val order : Z.t
val size_in_bytes : int
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 add : t -> t -> t
val (+) : t -> t -> t
val sub : t -> t -> t
val mul : t -> t -> t
val (*) : t -> t -> t
val eq : t -> t -> bool
val (=) : t -> t -> bool
val negate : t -> t
val (-) : t -> t
val inverse_exn : t -> t
val inverse_opt : t -> t option
val div_exn : t -> t -> t
val div_opt : t -> t -> t option
val (/) : t -> t -> t
val square : t -> t
val double : t -> t
val pow : t -> Z.t -> t
val (**) : t -> Z.t -> 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 factor_power_of_two : int * Z.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
val sqrt_opt : t -> t option
val size_in_memory : int

Actual number of bytes allocated for a value of type t

val check_bytes : Stdlib.Bytes.t -> bool

Check if a point, represented as a byte array, is in the field *

val fft : domain:t array -> points:t array -> t array

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.

val fft_inplace : domain:t array -> points:t array -> unit

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.

val ifft : domain:t array -> points:t array -> t array

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.

val ifft_inplace : domain:t array -> points:t array -> unit

ifft_inplace ~domain ~points is the same than ifft but modifies the array points instead of returning a new array

val add_inplace : t -> t -> t -> unit

add_inplace res a b is the same than add but writes the result in res. No allocation happens.

val sub_inplace : t -> t -> t -> unit

sub_inplace res a b is the same than sub but writes the result in res. No allocation happens.

val mul_inplace : t -> t -> t -> unit

mul_inplace res a b is the same than sub but writes the result in res. No allocation happens.

val inverse_exn_inplace : t -> t -> unit

inverse_exn_inplace res a is the same than inverse_exn but writes the result in res. No allocation happens.

val double_inplace : t -> t -> unit

double_inplace res a is the same than double but writes the result in res. No allocation happens.

val square_inplace : t -> t -> unit

square_inplace res a is the same than square but writes the result in res. No allocation happens.

val negate_inplace : t -> t -> unit

negate_inplace res a is the same than negate but writes the result in res. No allocation happens.

val copy : t -> t

copy x return a fresh copy of x

val memcpy : t -> t -> unit

memcpy a b overwrites the content of a with the content of b.

val add_bulk : t list -> t

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.

val mul_bulk : t list -> t

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.

val compare : t -> t -> int

compare a b compares the elements a and b based on their bytes representation

val inner_product_exn : t array -> t array -> t

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.

val inner_product_opt : t array -> t array -> t option

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|.

OCaml

Innovation. Community. Security.