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