Module B0_std.Hash

Hash values and functions.

The property we want from these functions is speed and collision resistance. Build correctness depends on the latter.

Hash values

type t

The type for hash values. All hash functions use this representation. It is not possible to distinguish them, except for their length which might vary, or not.

val nil : t

nil is the only hash value of length 0.

val length : t -> int

length h is the length of h in bytes.

Predicate and comparisons

val is_nil : t -> bool

is_nil h is true iff h is nil.

val equal : t -> t -> bool

equal h0 h1 is true iff h0 and h1 are equal.

val compare : t -> t -> int

compare h0 h1 is a total order on hashes compatible with equal.

Converting

val to_bytes : t -> string

to_bytes h is the sequence of bytes of h.

val of_bytes : string -> t

of_bytes s is the sequences of bytes of s as a hash value.

val to_hex : t -> string

to_hex h is String.Ascii.to_hex (to_bytes h).

val of_hex : string -> (t, int) Stdlib.result

of_hex s is Result.map of_bytes (String.Ascii.of_hex s).

val pp : t Fmt.t

pp formats using to_hex or, if the hash is nil, formats "nil".

Hash functions

module type T = sig ... end

The type for hash functions.

module Murmur3_128 : T

Murmur3_128 is the MurmurHash3 128-bit hash.

module Xxh_64 : T

Xxh_64 is the xxHash 64-bit hash.

val funs : unit -> (module T) list

funs () is the list of available hash functions.

val add_fun : (module T) -> unit

add_fun m adds m to the list returned by funs.

val get_fun : string -> ((module T), string) Stdlib.result

get_fun id is the hash function with identifier id or an error message.