#### mirage-crypto

Simple symmetric cryptography for the modern age
IN THIS PACKAGE
Module .
`type digest = Cstruct.t`
`type 'a iter = ( 'a -> unit ) -> unit`

A general (inner) iterator. It applies the provided function to a collection of elements.

For instance:

• `let iter_k : 'a -> 'a iter = fun x f -> f x`
• `let iter_pair : 'a * 'a -> 'a iter = fun (x, y) f = f x; f y`
• `let iter_list : 'a list -> 'a iter = fun xs f -> List.iter f xs`

## Hashing algorithms

`module type S = sig ... end`

A single hash algorithm.

`module MD5 : S`
`module SHA1 : S`
`module SHA224 : S`
`module SHA256 : S`
`module SHA384 : S`
`module SHA512 : S`

## Codes-based interface

`type hash = [ `
 `| ```MD5` `| ```SHA1` `| ```SHA224` `| ```SHA256` `| ```SHA384` `| ```SHA512`
` ]`

Algorithm codes.

`val hashes : hash list`

`hashes` is a list of all implemented hash algorithms.

`val module_of : [< hash ] -> (module S)`

`module_of hash` is the (first-class) module corresponding to the code `hash`.

This is the most convenient way to go from a code to a module.

## Hash functions

`val digest : [< hash ] -> Cstruct.t -> digest`

`digest algorithm bytes` is `algorithm` applied to `bytes`.

`val digesti : [< hash ] -> Cstruct.t iter -> digest`

`digesti algorithm iter` is `algorithm` applied to `iter`.

`val mac : [< hash ] -> key:Cstruct.t -> Cstruct.t -> digest`

`mac algorithm ~key bytes` is the mac `algorithm` applied to `bytes` under `key`.

`val maci : [< hash ] -> key:Cstruct.t -> Cstruct.t iter -> digest`

`maci algorithm ~key iter` is the mac `algorithm` applied to `iter` under `key`.

`val digest_size : [< hash ] -> int`

`digest_size algorithm` is the size of the `algorithm` in bytes.