Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • js-nix
  • rav/simpler_megolm
  • dkasak/session-export-format-version-errata
  • dkasak/session-export-format
  • flake_add_checks
  • emscripten-backport
  • nix_flake_emscripten
  • expose_fixed_base64
  • fga/picke_unpickle_bindings_java
  • bca/update_fallback_bindings_ios
  • java_describe
  • openssl-libolm
  • bca/update_fallback_bindings_java
  • poljar/python-fallback-keys
  • gitlab-maven
  • mark_fallbacks_published
  • classic_import
  • wip-clang-format
  • public_serialize
  • 3.2.16
  • 3.2.15
  • 3.2.14
  • 3.2.13
  • 3.2.12
  • 3.2.11
  • 3.2.10
  • 3.2.9
  • 3.2.8
  • 3.2.7
  • 3.2.6
  • 3.2.5
  • 3.2.4
  • 3.2.3
  • 3.2.2
  • 3.2.1
  • 3.2.0
  • 3.1.5
  • 3.1.4
  • 3.1.3
40 results

README.rst

Blame
  • README.rst 2.51 KiB

    Olm

    An implementation of the cryptographic ratchet described by https://github.com/trevp/axolotl/wiki, written in C++11 and exposed as a C API

    The specification of the Olm ratchet can be found in docs/olm.rst or https://matrix.org/docs/spec/olm.html

    Building

    To build olm as a shared library run:

    make

    To run the tests run:

    make test

    To build the javascript bindings, install emscripten from http://kripken.github.io/emscripten-site/ and then run:

    make js
    npm pack javascript  # packages olm.js into olm-x.y.z.tgz

    Remember to make a tag after releasing a tarball:

    git tag x.y.z
    git push --tags

    Design

    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 ariases.

    Error Handling

    All C functions in the API for olm return olm_error() on error. This makes it easy to check for error conditions within the language bindings.

    Random Numbers

    Olm doesn't generate random numbers itself. Instead the caller must provide the random data. This makes it easier to port the library to different platforms since the caller can use whatever cryptographic random number generator their platform provides.

    Memory

    Olm avoids calling malloc or allocating memory on the heap itself. Instead the library calculates how much memory will be needed to hold the output and the caller supplies a buffer of the appropriate size.

    Output Encoding

    Binary output is encoded as base64 so that languages that prefer unicode strings will find it easier to handle the output.