sig
  type t = string
  val compare : Digest.t -> Digest.t -> int
  val equal : Digest.t -> Digest.t -> bool
  val string : string -> Digest.t
  val bytes : bytes -> Digest.t
  val substring : string -> int -> int -> Digest.t
  val subbytes : bytes -> int -> int -> Digest.t
  val channel : Stdlib.in_channel -> int -> Digest.t
  val file : string -> Digest.t
  val output : Stdlib.out_channel -> Digest.t -> unit
  val input : Stdlib.in_channel -> Digest.t
  val to_hex : Digest.t -> string
  val of_hex : string -> Digest.t
  val from_hex : string -> Digest.t
  module type S =
    sig
      type t = string
      val hash_length : int
      val compare : Digest.S.t -> Digest.S.t -> int
      val equal : Digest.S.t -> Digest.S.t -> bool
      val string : string -> Digest.S.t
      val bytes : bytes -> Digest.S.t
      val substring : string -> int -> int -> Digest.S.t
      val subbytes : bytes -> int -> int -> Digest.S.t
      val channel : Stdlib.in_channel -> int -> Digest.S.t
      val file : string -> Digest.S.t
      val output : Stdlib.out_channel -> Digest.S.t -> unit
      val input : Stdlib.in_channel -> Digest.S.t
      val to_hex : Digest.S.t -> string
      val of_hex : string -> Digest.S.t
    end
  module BLAKE128 : S
  module BLAKE256 : S
  module BLAKE512 : S
  module MD5 : S
end