Digestif (and Rakia) provid some hashes functions in OCaml. Rakia provides
theses functions by a C stub and Digestif is a pure implementation in OCaml of
theses hashes. So these hashes functions can be used in an
Obviously, Rakia is more faster than Digestif (the hot loop was implemented in
C) but it's possible than Rakia can't compile in your architecture. In this
case, it's better to use Digestif or send a PR to fix Rakia.
Home page: http://din.osau.re/
Contact: Romain Calascibetta
We provide an interface with no dependancy (only with
Bigarray, available by
the OCaml distribution). You can choose between the
Bytes module or the
Bigstring module. You can't remove the dependancy with
Bigarray because the
context of the hash function is internally a
We provide the same interface:
type t type ctx type buffer val init : unit -> ctx val feed : ctx -> buffer -> unit val get : ctx -> t val digest : buffer -> t val digestv : buffer list -> t val hmac : key:buffer -> buffer -> t val hmacv : key:buffer -> buffer list -> t val compare : t -> t -> int val eq : t -> t -> bool val neq : t -> t -> bool val pp : Format.formatter -> t -> unit val of_hex : buffer -> t val to_hex : t -> buffer
buffer can be a
Bytes.t or a
Bigstring.t. We have an imperative and a
functionnal way to produce a hash.
t is not equivalent between the module
Bytes and the module
At this time, we implemented these hashes:
If you want an other hash function, you can ask in the issue.
OCaml >= 4.03.0 (may be less but need test)
Bigarray module (provided by the standard library of OCaml)
ocamlfindto build the project
If you want to compile the test program, you need:
All credits appear in the begin of files and this library is motivated by two reasons:
delete the dependancy with
nocryptoif you don't use the encryption (and common) part
aggregate all hashes functions in one library
We deleted the
cstruct hard dependancy (from
nocrypto) and provide a
interface to compute with the
Bytes.t. We add the
blake2b implementation too
and we have the plan to provide the hash function in pure OCaml and other hashes
functions. Finally, you can use
digestif together (no clash
name in the C stub, don't worry).
So, yes, it's redundant but deal with it!
build & >= "0.11.0"
>= "4.03.0" & < "4.08.0"