[jdev] Announcing the release of python-omemo, with support for the new SCE-based OMEMO

Tim Henkes syndace at web.de
Fri Nov 11 14:49:17 UTC 2022

After years of development I am stoked to announce the release of
python-omemo - An open Python implementation of the OMEMO Multi-End
Message and Object Encryption protocol!

python-omemo [1] is an OMEMO implementation written from scratch with
support for both the currently widespread eu.siacs.conversations.axolotl
version of OMEMO [2] and the newest, SCE-based version under the
urn:xmpp:omemo:2 namespace [3].

Notably, python-omemo is an implementation of the OMEMO _protocol_ and
not just the cryptographic primitives, which means that many of the
small protocol flow details of the OMEMO specification are handled by
python-omemo as well.

Key properties of the library:

- Seamless support for both versions of the OMEMO specification at the
same time. The library transparently handles compatibility between the
two versions, i.e. identity keys, device ids and trust are shared
appropriately. The protocol version to encrypt a message with can either
be selected explicitly, or given as a priority, to e.g. use the new
OMEMO if available, and fall back to the old OMEMO if not.

- Handles bundle and device list, making sure the published data is
always in sync with the local data.

- Handles small protocol flow details, like sending automated empty
messages in response to a key exchange or to prevent staleness.

- Provides an easy way to integrate any sort of trust system - be it
simple manual trust, BTBV, TOFU or something more complex.

- Thin and straight-forward public API - OMEMO doesn't have to be
complicated :)

- Optionally reads/verifies and builds ElementTree XML structures for
you, so that you can keep your codebase even thinner.

- Clean, modern, fully-typed Python 3 with thorough API documentation.

- Very easy to get started with - provide a simple key-value storage,
implement some methods to upload/download bundles and device lists from
PEP, and you're pretty much set!

This library aims to enable client developers to equip their clients
with OMEMO support without understanding all of the nasty cryptography
or protocol flow details. Please give it a look, send me feedback and
consider it for your Python-based client :)

[1]: https://github.com/Syndace/python-omemo

[2]: https://xmpp.org/extensions/attic/xep-0384-0.3.0.html

[3]: https://xmpp.org/extensions/xep-0384.html

More information about the JDev mailing list