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, ECDSA 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.)
* Key derivation: KDF1, KDF2, KDF3, PBKDF2.
* Random number generation.
* Encodings and compression: base 64, hexadecimal, Zlib compression.
* Elliptic curves (only in Weierstrass form at this point).
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.