33 lines
1.7 KiB
Rust
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;
|