`Hmac_drbg.H`

`val empty : t`

`empty`

is the hash of the empty string.

`feed t msg`

adds the information in `msg`

to `t`

.

`feed`

is analogous to appending: `feed (feed t msg1) msg2 = feed t (Cstruct.append msg1 msg2)`

.

`val get : t -> Mirage_crypto.Hash.digest`

`get t`

is the digest corresponding to `t`

.

`val hmac_empty : key:Cstruct.t -> hmac`

`hmac ~key`

is the hmac of the empty string using key `key`

.

`val hmac_get : hmac -> Mirage_crypto.Hash.digest`

`hmac_get hmac`

is the hmac corresponding to `hmac`

.

Functions that operate on data stored in a single chunk.

`val digest : Cstruct.t -> Mirage_crypto.Hash.digest`

`digest msg`

is the digest of `msg`

.

`digest msg = get (feed empty msg)`

`val hmac : key:Cstruct.t -> Cstruct.t -> Mirage_crypto.Hash.digest`

`hmac ~key bytes`

is the authentication code for `bytes`

under the secret `key`

, generated using the standard HMAC construction over this hash algorithm.

Functions that operate on arbitrary iterators. They can serve as a basis for other, more specialized aggregate hashing operations.

These functions are a little faster than using `feed`

directly.

`val feedi : t -> Cstruct.t Mirage_crypto.Hash.iter -> t`

```
feedi t iter =
(let r = ref t in iter (fun msg -> r := feed !r msg); !r)
```

`val digesti : Cstruct.t Mirage_crypto.Hash.iter -> Mirage_crypto.Hash.digest`

`digesti iter = feedi empty iter |> get`

```
val hmaci :
key:Cstruct.t ->
Cstruct.t Mirage_crypto.Hash.iter ->
Mirage_crypto.Hash.digest
```

See `hmac`

.