I don’t like Elixir after all, at least not for this kind of project.
My new MLS implementation is CMLS (written, like the name suggests, in C).
This is (or rather, is going to be) an implementation of the Messaging Layer Security (MLS) Protocol, as defined by the RFC 9420.
Because I always wanted an excuse to learn the language. Also, there is currently no MLS implementation for Elixir (2023-10-11).
- all types (structs, enums, opaques) of the RFC
- functions for array-based binary trees from Appendix C
- a HPKE library connected via NIFs
This project is designed to be used with Nix and optionally direnv
(Use nix-direnv for a faster, persistent devshell).
Enter a development shell automatically with direnv allow
or manually with nix develop
.
Run just
to show all tasks:
build
: hermetically builds the final self-contained binary using Nixcheck_use
: an internal check, don’t use this directlyclean
: remove unused dependenciesdocs
: generate HTML and EPUB project documentationhelp
: list all tasksrun
: run the project in the development environmentshell
: enter an interactive shell that runs the projecttest
: run the full testsuite (some code sanity checks, static analysis, regular & doctests). Note that the first start of the static analyser will take a long time.
To run a task, run just taskname
, e.g. just build
.
- a complete implementation of MLS, conforming to the RFC
- an example chat client & server using the implementation