olm (olm and megolm cryptographic ratchets) An implementation of the Double Ratchet cryptographic ratchet described by https://whispersystems.org/docs/specifications/doubleratchet/, written in C and C++11 and exposed as a C API. The specification of the Olm ratchet can be found in olm.md. This library also includes an implementation of the Megolm cryptographic ratchet, as specified in megolm.md. Olm is designed to be easy port to different platforms and to be easy to write bindings for. It was originally implemented in C++, with a plain-C layer providing the public API. As development has progressed, it has become clear that C++ gives little advantage, and new functionality is being added in C, with C++ parts being rewritten as the need arises.