Documentation
<h1 align="center">
 <a href="https://rmls.io"><img src="https://raw.githubusercontent.com/webrtc-rs/rmls/master/doc/logo.png" alt="rmls.io"></a>
 <br>
</h1>
<p align="center">
 <a href="https://github.com/webrtc-rs/rmls/actions">
  <img src="https://github.com/webrtc-rs/rmls/workflows/cargo/badge.svg">
 </a>
 <a href="https://codecov.io/gh/webrtc-rs/rmls"> 
  <img src="https://codecov.io/gh/webrtc-rs/rmls/branch/master/graph/badge.svg">
 </a>
 <a href="https://deps.rs/repo/github/webrtc-rs/rmls">
  <img src="https://deps.rs/repo/github/webrtc-rs/rmls/status.svg">
 </a>
 <a href="https://crates.io/crates/rmls">
  <img src="https://img.shields.io/crates/v/rmls.svg">
 </a>
 <a href="https://docs.rs/rmls">
  <img src="https://docs.rs/rmls/badge.svg">
 </a>
 <a href="https://doc.rust-lang.org/1.6.0/complement-project-faq.html#why-dual-mitasl2-license">
  <img src="https://img.shields.io/badge/license-MIT%2FApache--2.0-blue" alt="License: MIT/Apache 2.0">
 </a>
 <a href="https://discord.gg/4Ju8UHdXMs">
  <img src="https://img.shields.io/discord/800204819540869120?logo=discord" alt="Discord">
 </a>
 <a href="https://twitter.com/WebRTCrs">
  <img src="https://img.shields.io/twitter/url/https/twitter.com/webrtcrs.svg?style=social&label=%40WebRTCrs" alt="Twitter">
 </a>
</p>
<p align="center">
 Messaging Layer Security in Rust
</p>


<details>
<summary><b>Table of Content</b></summary>

- [Overview]#overview
- [Supported CipherSuites]#supported-ciphersuites
- [Cryptography Dependecies]#cryptography-dependencies
- [Open Source License]#open-source-license
- [Contributing]#contributing

</details>


## Overview

*RMLS* is a Rust implementation of the Messaging Layer Security (MLS) protocol, as specified in [RFC 9420](https://datatracker.ietf.org/doc/html/rfc9420).
Messaging Layer Security (MLS) is a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and 
post-compromise security (PCS) for groups in size ranging from two to thousands.

## Supported CipherSuites

- MLS_128_HPKEX25519_AES128GCM_SHA256_Ed25519
- MLS_128_DHKEMP256_AES128GCM_SHA256_P256
- MLS_128_HPKEX25519_CHACHA20POLY1305_SHA256_Ed25519

## Cryptography Dependencies

*RMLS* does not implement its own cryptographic primitives. Instead, it relies
on existing implementations of the cryptographic primitives, i.e., [ring](https://github.com/briansmith/ring) or [RustCrypto](https://github.com/RustCrypto). There
are two cryptography providers implemented right now:

- [ring]https://github.com/briansmith/ring based crypto provider
- [RustCrypto]https://github.com/RustCrypto based crypto provider 

Other cryptography providers, like [openssl](https://github.com/sfackler/rust-openssl) or [boring](https://github.com/cloudflare/boring), are also possible, see [CryptoProvider Trait](https://github.com/webrtc-rs/rmls/blob/bca90809d1f7b1db2b8dbab2b6df3125df8f3cfc/src/crypto/provider/mod.rs#L51) for more
details.

## Open Source License

Dual licensing under both MIT and Apache-2.0 is the currently accepted standard by the Rust language community and has been used for both the compiler and many public libraries since (see <https://doc.rust-lang.org/1.6.0/complement-project-faq.html#why-dual-mitasl2-license>). In order to match the community standards, webrtc-rs is using the dual MIT+Apache-2.0 license.

## Contributing

Contributors or Pull Requests are Welcome!!!