Library
Module
Module type
Parameter
Class
Class type
Module type for prime field of the form GF(p) where p is prime
include BASE
val order : Z.t
The order of the finite field
check_bytes bs
returns true
if bs
is a correct byte representation of a field element
val zero : t
The neutral element for the addition
val one : t
The neutral element for the multiplication
val is_zero : t -> bool
is_zero x
returns true
if x
is the neutral element for the addition
val is_one : t -> bool
is_one x
returns true
if x
is the neutral element for the multiplication
val random : ?state:Stdlib.Random.State.t -> unit -> t
Use carefully! random ()
returns a random element of the field. A state for the PRNG can be given to initialize the PRNG in the requested state. If no state is given, no initialisation is performed
val non_null_random : ?state:Stdlib.Random.State.t -> unit -> t
Use carefully! non_null_random ()
returns a non null random element of the field. A state for the PRNG can be given to initialize the PRNG in the requested state. If no state is given, no initialisation is performed
negate x
returns -x mod order
. Equivalently, negate x
returns the unique y
such that x + y mod order = 0
val of_bytes_exn : Stdlib.Bytes.t -> t
From a predefined bytes representation, construct a value t. It is not required that to_bytes of_bytes_exn t = t. Raise Not_in_field
if the bytes do not represent an element in the field.
val of_bytes_opt : Stdlib.Bytes.t -> t option
From a predefined bytes representation, construct a value t. It is not required that to_bytes (Option.get (of_bytes_opt t)) = t. By default, little endian encoding is used and the given element is modulo the prime order
val to_bytes : t -> Stdlib.Bytes.t
Convert the value t to a bytes representation which can be used for hashing for instance. It is not required that to_bytes of_bytes_exn t = t. By default, little endian encoding is used, and length of the resulting bytes may vary depending on the order.
val factor_power_of_two : int * Z.t
Returns s, q
such that order - 1 = 2^s * q
val of_string : string -> t
Create a value t from a predefined string representation. It is not required that to_string of_string t = t. By default, decimal representation of the number is used, modulo the order of the field
val to_string : t -> string
String representation of a value t. It is not required that to_string of_string t = t. By default, decimal representation of the number is used
of_z x
builds an element t from the Zarith element x
. mod order
is applied if x >= order
to_z x
builds a Zarith element, using the decimal representation. Arithmetic on the result can be done using the modular functions on integers
Returns the Legendre symbol of the parameter. Note it does not work for p = 2
val is_quadratic_residue : t -> bool
is_quadratic_residue x
returns true
if x
is a quadratic residue i.e. if there exists n
such that n^2 mod p = 1