A Python implementation of the OMEMO Multi-End Message and Object Encryption protocol.
A complete implementation of XEP-0384 on protocol-level, i.e. more than just the cryptography. python-omemo supports different versions of the specification through so-called backends. A backend for OMEMO in the
urn:xmpp:omemo:2 namespace (the most recent version of the specification) is available in the python-twomemo Python package. A backend for (legacy) OMEMO in the
eu.siacs.conversations.axolotl namespace is available in the python-oldmemo package. Multiple backends can be loaded and used at the same time, the library manages their coexistence transparently.
Install the latest release using pip (
pip install OMEMO) or manually from source by running
pip install . in the cloned repository.
Testing, Type Checks and Linting
python-omemo uses pytest as its testing framework, mypy for static type checks and both pylint and Flake8 for linting. All tests/checks can be run locally with the following commands:
$ pip install --upgrade pytest pytest-asyncio pytest-cov mypy pylint flake8 $ pip install --upgrade twisted twomemo[xml] oldmemo[xml] $ mypy --strict --disable-error-code str-bytes-safe omemo/ setup.py examples/ tests/ $ pylint omemo/ setup.py examples/ tests/ $ flake8 omemo/ setup.py examples/ tests/ $ pytest --cov=omemo --cov-report term-missing:skip-covered
Refer to the documentation on readthedocs.io, or build/view it locally in the
docs/ directory. To build the docs locally, install the requirements listed in
docs/requirements.txt, e.g. using
pip install -r docs/requirements.txt, and then run
make html from within the
docs/ directory. The documentation can then be found in
functionality.md file contains an overview of supported functionality/use cases, mostly targeted at developers.