experimental hashing with oxcaml
1(** SHA256 hardware-accelerated implementation using AMD SHA-NI instructions *)
2
3open Bigarray
4
5(** {1 Types} *)
6
7(** SHA256 state (8 x int32) *)
8type state = (int32, int32_elt, c_layout) Array1.t
9
10(** SHA256 digest (32 bytes) *)
11type digest = (int, int8_unsigned_elt, c_layout) Array1.t
12
13(** Input data buffer *)
14type buffer = (int, int8_unsigned_elt, c_layout) Array1.t
15
16(** {1 Low-level interface} *)
17
18(** Initialize a new SHA256 state *)
19val init : unit -> state
20
21(** Process a single 512-bit (64 byte) block. Buffer must be exactly 64 bytes. *)
22val process_block : state -> buffer -> unit
23
24(** Finalize the hash computation with padding and return digest *)
25val finalize : state -> buffer -> int64 -> digest
26
27(** {1 High-level interface} *)
28
29(** Compute SHA256 hash in one shot (fastest for single use) *)
30val oneshot : buffer -> int64 -> digest
31
32(** Compute SHA256 hash from bytes *)
33val hash_bytes : bytes -> digest
34
35(** Compute SHA256 hash from string *)
36val hash_string : string -> digest
37
38(** {1 Utilities} *)
39
40(** Convert digest to hexadecimal string *)
41val digest_to_hex : digest -> string
42
43(** Convert digest to bytes *)
44val digest_to_bytes : digest -> bytes
45
46(** Compare two digests for equality *)
47val digest_equal : digest -> digest -> bool