12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879includeDigestmoduletypeS=sigtypet=stringvalhash_length:intvalcompare:t->t->intvalequal:t->t->boolvalstring:string->tvalbytes:bytes->tvalsubstring:string->int->int->tvalsubbytes:bytes->int->int->tvalchannel:in_channel->int->tvalfile:string->tvaloutput:out_channel->t->unitvalinput:in_channel->tvalto_hex:t->stringvalof_hex:string->tendmoduleMD5:S=structlethash_length=16includeDigest(*
let equal : t -> t -> bool = ( = )
*)(*
let bytes = string
let subbytes = substring
let compare = compare
*)letof_hex=from_hex(*
let of_hex s =
if String.length s <> 32 then invalid_arg "Digest.from_hex";
let digit c =
match c with
| '0'..'9' -> Char.code c - Char.code '0'
| 'A'..'F' -> Char.code c - Char.code 'A' + 10
| 'a'..'f' -> Char.code c - Char.code 'a' + 10
| _ -> raise (Invalid_argument "Digest.from_hex")
in
let byte i = digit s.[i] lsl 4 + digit s.[i+1] in
let result = String.create 16 in
for i = 0 to 15 do
String.set result i (Char.chr (byte (2 * i)));
done;
result
*)endincludeMD5externalchannel:in_channel->int->t="caml_md5_chan"(*
let from_hex = of_hex
*)moduleBLAKE2(X:sigvalhash_length:intend):S=structincludeMD5lethash_length=X.hash_lengthendmoduleBLAKE128=BLAKE2(structlethash_length=16end)moduleBLAKE256=BLAKE2(structlethash_length=32end)moduleBLAKE512=BLAKE2(structlethash_length=64end)