package ff-pbt

  1. Overview
  2. Docs
exception Not_in_field of Bytes.t
type t
val order : Z.t

The order of the finite field

val size_in_bytes : int

minimal number of bytes required to encode a value of the field.

val check_bytes : Bytes.t -> bool

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

val add : t -> t -> t

add a b returns a + b mod order

val (+) : t -> t -> t

Infix operator for add

val mul : t -> t -> t

mul a b returns a * b mod order

val (*) : t -> t -> t

Infix operator for mul

val eq : t -> t -> bool

eq a b returns true if a = b mod order, else false

val (=) : t -> t -> bool

Infix operator for eq

val negate : t -> t

negate x returns -x mod order. Equivalently, negate x returns the unique y such that x + y mod order = 0

val (-) : t -> t

Infix operator for negate

val inverse_exn : t -> t

inverse_exn x returns x^-1 if x is not 0, else raise Division_by_zero

val inverse_opt : t -> t option

inverse_opt x returns x^-1 if x is not 0 as an option, else None

val div_exn : t -> t -> t

div_exn a b returns a * b^-1. Raise Division_by_zero if b = zero

val div_opt : t -> t -> t option

div_opt a b returns a * b^-1 as an option. Return None if b = zero

val (/) : t -> t -> t

Infix operator for div_exn

val square : t -> t

square x returns x^2

val double : t -> t

double x returns 2x

val pow : t -> Z.t -> t

pow x n returns x^n

val (**) : t -> Z.t -> t

Infix operator for pow

val of_bytes_exn : 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 : 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 -> 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.

OCaml

Innovation. Community. Security.