crypto::chacha provides an implementation of the Chacha20 and XChacha20 stream
ciphers.

Use [[chacha20]] to create a stream and either [[chacha20_init]] or
[[xchacha20_init]] to set key and nonce of the appropriate size, [[NONCESIZE]]
for chacha20 or [[XNONCESIZE]] for XChacha20. After calling the appropriate
init function, [[crypto::cipher::stream_xor]] may be used to encrypt blocks.
The stream must be finished with [[crypto::cipher::finish]] to wipe sensitive
data from memory.

Writing blocks of length [[BLOCKSIZE]] is not required. However, seeking the
key stream with [[setctr]] only operates in units of [[BLOCKSIZE]].

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.
