The Cryptokit library for Objective Caml provides a variety of
cryptographic primitives that can be used to implement cryptographic
protocols in security-sensitive applications. The primitives provided
include:
* Symmetric-key cryptography: AES, Chacha20, DES, Triple-DES, Blowfish,
ARCfour, in ECB, CBC, CFB, OFB and counter modes.
* Authenticated encryption: AES-GCM, Chacha20-Poly1305.
* Public-key cryptography: RSA encryption and signature; Diffie-Hellman
key agreement.
* Hash functions and MACs: SHA-3, SHA-2, BLAKE2, BLAKE3, RIPEMD-160;
MACs based on AES and DES; SipHash. (SHA-1 and MD5, despite being
broken, are also provided for historical value.)
* Random number generation.
* Encodings and compression: base 64, hexadecimal, Zlib compression.
Additional ciphers and hashes can easily be used in conjunction with
the library. In particular, basic mechanisms such as chaining modes,
output buffering, and padding are provided by generic classes that can
easily be composed with user-provided ciphers. More generally, the
library promotes a "Lego"-like style of constructing and composing
transformations over character streams.