A Dart implementation of the cryptography needed for OMEMO 0.8.3.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
PapaTutuWawa 04bb70d657
ci/woodpecker/push/woodpecker Pipeline was successful Details
ci/woodpecker/tag/woodpecker Pipeline was successful Details
release: Tag 0.4.3
2 months ago
.github feat: Add funding 3 months ago
example fix: Use stanza receival timestamps to guard against stale kex messages 6 months ago
lib style: Cleanup 2 months ago
protobuf wip: Add the basics for the Double Ratchet 8 months ago
test style: Cleanup 2 months ago
.gitignore chore: Commit the protobuf artifacts 6 months ago
.gitlint style: Fix linter warnings 7 months ago
.pubignore chore: Let pub ignore the protobuf build artifacts 6 months ago
.woodpecker.yml ci: Fix issue with duplicate naming 6 months ago
CHANGELOG.md release: Tag 0.4.3 2 months ago
LICENSE release: Make pub happy 8 months ago
README.md release: Tag 0.4.3 2 months ago
analysis_options.yaml style: Fix style issues 3 months ago
flake.lock refactor: Clean up the X3DH implementation 8 months ago
flake.nix wip: Add the basics for the Double Ratchet 8 months ago
pubspec.yaml release: Tag 0.4.3 2 months ago



omemo_dart is a Dart library to help developers of Dart/Flutter XMPP clients to implement OMEMO in its newest version - currently 0.8.3.

The library provides an implementation of the X3DH key exchange, the Double Ratchet with the OMEMO 0.8.3 specific ENCRYPT, DECRYPT and KDF_* functions and a very high-level OmemoSessionManager that manages all Double Ratchet sessions and provides a clean and simple interface for encrypting a message for all known Ratchet sessions we have with a user.

This library also has no dependency on any XMPP library. omemo_dart instead defines an intermediary format for the required data that you, the user, will need to transform to and from the stanza format of your preferred XMPP library yourself.

Important Notes

  • Please note that this library has not been audited for its security! Use at your own risk!
  • This library is not tested with other implementations of OMEMO 0.8.3 as I do not know of any client implementing spec compliant OMEMO 0.8.3. It does, however, work with itself.


Include omemo_dart in your pubspec.yaml like this:

# [...]

    hosted: https://git.polynom.me/api/packages/PapaTutuWawa/pub
    version: ^0.4.3
  # [...]

# [...]


Due to issues with protobuf, omemo_dart reimplements the Protobuf encoding for the required OMEMO messages. As such, protobuf is only a dependency for testing that the serialisation and deserialisation of the custom implementation. In order to run tests, you need the Protbuf compiler. After that, making sure that the Dart Protobuf compiler addon and the Protobuf compiler itself is in your PATH, run protoc -I=./protobuf/ --dart_out=lib/protobuf/ ./protobuf/schema.proto in the repository's root to generate the real Protobuf bindings.

When submitting a PR, please run the linter using dart analyze and make sure that all tests still pass using dart test.

To ensure uniform commit message formatting, please also use gitlint to lint your commit messages' formatting.


Licensed under the MIT license.



If you like what I do and you want to support me, feel free to donate to me on Ko-Fi.