cipher: block cipher encryption modes

The crypto::cipher module provides block cipher encryption modes. The [[block]]
type provides an abstraction over a block cipher algorithm, and functions like
[[cbc_decryptor]] create encryptors or decryptors for specific block encryption
modes.

Block ciphers in Hare rely upon caller-provided buffer allocations, and do not
allocate memory at runtime. Consult the documentation for the underlying
algorithm, e.g. [[crypto::aes::]], for the appropriate buffer sizes to use.

This is a low-level module which implements cryptographic primitives. Direct use
of cryptographic primitives is not recommended for non-experts, as incorrect use
of these primitives can easily lead to the introduction of security
vulnerabilities. Non-experts are advised to use the high-level operations
available in the top-level [[crypto::]] module.

Be advised that Hare's cryptography implementations have not been audited.
