Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/42loco42/exmls

Elixir implementation of the MLS protocol
https://github.com/42loco42/exmls

e2ee elixir elixir-library end-to-end-encryption message-layer-security mls

Last synced: about 2 months ago
JSON representation

Elixir implementation of the MLS protocol

Awesome Lists containing this project

README

        

* NOTE - Abandoned
I don't like Elixir after all, at least not for this kind of project.

My new MLS implementation is [[https://github.com/42LoCo42/cmls][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 [[https://www.rfc-editor.org/rfc/rfc9420][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 [[https://www.rfc-editor.org/rfc/rfc9420#appendix-C][Appendix C]]
- a [[https://github.com/oktaysm/hpke][HPKE library]] connected via [[file:nif/nif.c][NIFs]]

** How to use this project
This project is designed to be used with [[https://nixos.org][Nix]] and optionally [[https://github.com/direnv/direnv][direnv]]
(Use [[https://github.com/nix-community/nix-direnv][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