# MLS Spec
[](https://crates.io/crates/mls-spec)
[](https://docs.rs/mls-spec)
## Description
This crate is a repository of MLS / RFC9420-related data structures.
It is designed to be used as a base for implementations, and contains all the wire-format related structures to be able to build a RFC9420-compliant implementation.
## Documentation
Here: [https://docs.rs/mls-spec](https://docs.rs/mls-spec)
## Details
All sensitive pieces of data are wrapped in a `SensitiveBytes` newtype, which takes care of being zeroization-on-drop
and has constant-time equality checks using `subtle` to make a best-effort attempt at protecting against side-channel attacks.
There's also some definitions for the follwing drafted extensions, enabled by the matching `feature`:
- [`draft-ietf-mls-extensions`](https://www.ietf.org/archive/id/draft-ietf-mls-extensions-06.html) @ draft-06
- `mls-extensions` has content-advertisement parsing, this pulls an additional dependency (`mediatype`) with this feature flag: `draft-ietf-mls-extensions-content-advertisement-parse`. If you do the MIME parsing yourself, you can ignore this flag.
- [`draft-mahy-mls-ratchet-tree-options`](https://www.ietf.org/archive/id/draft-mahy-mls-ratchet-tree-options-01.html) @ draft-01
- [`draft-mularczyk-mls-splitcommit`](https://www.ietf.org/archive/id/draft-mularczyk-mls-splitcommit-00.html) @ draft-00
- [`draft-kiefer-mls-light`](https://www.ietf.org/archive/id/draft-kiefer-mls-light-02.html) @ draft-02
The following drafts were modified by extrapolating the current status of `mls-extensions` and the current status of the respective drafts:
- The following are assumed that they will move from Safe Extensions to a Safe Applications Component and associated cryptographic operations (`DeriveExtensionSecret` => `DeriveApplicationSecret` etc)
- [`draft-kohbrok-mls-associated-parties`](https://www.ietf.org/archive/id/draft-kohbrok-mls-associated-parties-00.html) @ draft-00++
- [`draft-ietf-mls-combiner`](https://www.ietf.org/archive/id/draft-ietf-mls-combiner-00.html) @ draft-00++
- The following assumes that with the disappearance of Safe WireFormats & the introduction of WireFormat negociation through `[supported|required]_wire_formats`, those drafts will fall back to de facto WireFormats and have been modified in accordance
- [`draft-mahy-mls-semiprivatemessage`](https://www.ietf.org/archive/id/draft-mahy-mls-semiprivatemessage-04.html) @ draft-04++
- [`draft-pham-mls-additional-wire-formats`](https://www.ietf.org/archive/id/draft-pham-mls-additional-wire-formats-00.html) @ draft-00++
Additionally, this crate makes use of RustCrypto's `tls_codec` crate, and has a `mls-rs` compatibility layer (gated under the `mls-rs-compat` feature)
that allows to transcode `mls-spec` to `mls-rs` types and vice-versa.
## License
Licensed under either of these:
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
[https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0))
- MIT license ([LICENSE-MIT](LICENSE-MIT) or
[https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT))