/exmls

Elixir implementation of the MLS protocol

Primary LanguageElixirGNU Affero General Public License v3.0AGPL-3.0

NOTE - Abandoned

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

ExMLS - MLS in Elixir

This is (or rather, is going to be) an implementation of the Messaging Layer Security (MLS) Protocol, as defined by the RFC 9420.

Why Elixir?

Because I always wanted an excuse to learn the language. Also, there is currently no MLS implementation for Elixir (2023-10-11).

Current Status

  • all types (structs, enums, opaques) of the RFC
  • functions for array-based binary trees from Appendix C
  • a HPKE library connected via NIFs

How to use this project

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 Nix
  • check_use: an internal check, don’t use this directly
  • clean: remove unused dependencies
  • docs: generate HTML and EPUB project documentation
  • help: list all tasks
  • run: run the project in the development environment
  • shell: enter an interactive shell that runs the project
  • test: 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.

Ultimate goals

  • a complete implementation of MLS, conforming to the RFC
  • an example chat client & server using the implementation