A room service that carries the room's messages in one order (confidentiality §5.1) is how a browser member is reached. A member that applied its own commit before the carrier ordered it could fork from a commit another member made for the same epoch, so: - stage_create / stage_commit hold the member's GroupInfo or commit until the carrier returns it (receive applies it then, checked as every member checks it); another's first, or a refusal, withdraws it. create and commit still apply at once. - before its Welcome a principal follows the group from its public handshake messages, as the clock does (the code is now shared), so its model knows whether a group exists and who is in it; a Welcome for another and a GroupInfo of a group it holds are ignored. - feature js: openmls's js (getrandom 0.4 wasm_js, web-time) and getrandom 0.2's js for the crypto provider's generator; the crate builds for wasm32-unknown-unknown. Tests: a room carried in one order (create, follow, commit, Welcome, removal), two commits for one epoch where the carrier's first wins, a commit overtaken by another, and a staged create the carrier refuses. Co-Authored-By: Claude Opus 5.5 <[email protected]>
37 lines
1.9 KiB
TOML
37 lines
1.9 KiB
TOML
[package]
|
|
name = "joule-moq-mls"
|
|
version = "0.1.0"
|
|
description = "End-to-end encrypted WAI live rooms: one MLS group (RFC 9420) per room, its membership driven by the room's grants and lifecycle, the room's clock as the group's external sender and a committer every member computes alike, and each epoch's per-sender keys for joule-moq's sealed objects (draft-ietf-moq-secure-objects-01). With the room's confidentiality record and the corpus generator of WAI live-conformance/e2ee."
|
|
edition = "2024"
|
|
rust-version = "1.97"
|
|
license = "Apache-2.0"
|
|
repository = "https://git.transaction.science/Transaction-Science/open-standards"
|
|
|
|
[[bin]]
|
|
name = "joule_moq_e2ee_vectors"
|
|
path = "src/bin/joule_moq_e2ee_vectors.rs"
|
|
|
|
[dependencies]
|
|
joule-moq = { path = "../joule-moq", default-features = false, features = ["secure-objects"] }
|
|
# MLS (RFC 9420), MIT, pinned exactly: the group, its key schedule and exporter, external
|
|
# proposals, and the public view of a group a non-member keeps.
|
|
openmls = "=0.9.1"
|
|
openmls_rust_crypto = "=0.6.0"
|
|
openmls_traits = "=0.6.0"
|
|
tls_codec = "0.5"
|
|
ed25519-dalek = "2"
|
|
sha2 = "0.10"
|
|
blake3 = "1"
|
|
hex = "0.4"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
# For wasm32-unknown-unknown (feature `js`): getrandom 0.2's browser backend, which the
|
|
# crypto provider's own generator draws from (openmls's `js` gives getrandom 0.4 its own).
|
|
getrandom_02 = { package = "getrandom", version = "0.2", features = ["js"], optional = true }
|
|
|
|
[features]
|
|
# A member in a browser: secure randomness and the clock from the page's JavaScript APIs
|
|
# (openmls's `js`: getrandom 0.4's `wasm_js` backend and `web-time`), and the same for the
|
|
# crypto provider's generator. Nothing else changes, and the crate builds for
|
|
# wasm32-unknown-unknown with it.
|
|
js = ["openmls/js", "dep:getrandom_02"]
|