open-standards/joule-code/joule-code-rs/crates/joule-moq-mls/src/lib.rs

33 lines
1.7 KiB
Rust

//! **joule-moq-mls** — end-to-end encrypted WAI live rooms (WAI
//! `extensions/confidentiality.md`).
//!
//! A room's media objects are sealed by `joule-moq`'s `secure_objects` under keys this crate
//! derives from one MLS group (RFC 9420) per room:
//!
//! - [`record`]: the room's confidentiality record, `WRE1` (`wai.live.e2ee`, §3): the
//! authority's signed statement that the room is end-to-end encrypted, with which suites,
//! and never recorded.
//! - [`model`]: how the group follows the room (§5.4 to §5.6), as pure state: what the
//! clock owes after each lifecycle event, who commits, what a commit holds, the roster it
//! leaves. Members check every proposal and commit against it before applying them.
//! - [`group`]: the MLS binding. A [`group::RoomMember`] holds a leaf whose credential is
//! its principal's Ed25519 room key, checks and applies the group's messages, commits when
//! the rule names it, and enters each epoch's application secret
//! (`MLS-Exporter("wai live e2ee", room_id, 32)`) into its keyring; a [`group::Clock`] is
//! the group's one external sender, proposes every Add and Remove the room's lifecycle
//! calls for, and follows the group from its public handshake messages, holding no key.
//! - [`corpus`]: WAI `live-conformance/e2ee/vectors.json`, written from fixed seeds and
//! checked by the same code.
//!
//! What this crate does not do: carry MLS messages (a room's tracks or a room service do),
//! or decide who is present (the room's clock does, and this crate reads its events).
pub mod corpus;
pub mod group;
pub mod model;
pub mod record;
pub mod strict;
pub use group::{Clock, Commit, Error, Received, RoomMember, CIPHERSUITE};
pub use model::{Event, Room};
pub use record::Record;