42 lines
861 B
OCaml
42 lines
861 B
OCaml
|
|
module By = Digestif_by
|
||
|
|
module Bi = Digestif_bi
|
||
|
|
|
||
|
|
module type S = sig
|
||
|
|
type ctx
|
||
|
|
type kind = [ `SHA224 ]
|
||
|
|
|
||
|
|
val init : unit -> ctx
|
||
|
|
val unsafe_feed_bytes : ctx -> By.t -> int -> int -> unit
|
||
|
|
val unsafe_feed_bigstring : ctx -> Bi.t -> int -> int -> unit
|
||
|
|
val unsafe_get : ctx -> By.t
|
||
|
|
val dup : ctx -> ctx
|
||
|
|
end
|
||
|
|
|
||
|
|
module Unsafe : S = struct
|
||
|
|
type kind = [ `SHA224 ]
|
||
|
|
|
||
|
|
open Baijiu_sha256.Unsafe
|
||
|
|
|
||
|
|
type nonrec ctx = ctx
|
||
|
|
|
||
|
|
let init () =
|
||
|
|
let b = By.make 128 '\x00' in
|
||
|
|
{
|
||
|
|
size = 0L;
|
||
|
|
b;
|
||
|
|
h =
|
||
|
|
[|
|
||
|
|
0xc1059ed8l; 0x367cd507l; 0x3070dd17l; 0xf70e5939l; 0xffc00b31l;
|
||
|
|
0x68581511l; 0x64f98fa7l; 0xbefa4fa4l;
|
||
|
|
|];
|
||
|
|
}
|
||
|
|
|
||
|
|
let unsafe_get ctx =
|
||
|
|
let res = unsafe_get ctx in
|
||
|
|
By.sub res 0 28
|
||
|
|
|
||
|
|
let dup = dup
|
||
|
|
let unsafe_feed_bytes = unsafe_feed_bytes
|
||
|
|
let unsafe_feed_bigstring = unsafe_feed_bigstring
|
||
|
|
end
|