open-standards/joule-code/joule-code-rs/crates/joule-code-collab/Cargo.toml
David Charlot 0a7fa2a993 joule-code: MLS group keying for the collaboration cluster (RFC 9420)
Adds the third federation layer above consensus + threshold-auth: the
collaborating set forms an MLS group (RFC 9420, via openmls) and derives a
shared group key with NO central server, so collaboration traffic is end-to-end
encrypted among members — the ownerless property.

tests/mls_keying.rs demonstrates it with three members: Alice founds the group
and adds Bob (both export the same group secret), then adds Carol (a new epoch;
Carol derives the same shared secret). It also asserts a member an epoch behind
derives a DIFFERENT secret — the forward-secret, epoch-bound property MLS gives.
openmls is a dev-dependency, so the library's runtime deps stay light.

So consensus (LockstepCluster, BFT), protected-op authorization (FROST t-of-n),
and group keying (MLS) are all implemented and tested. The one remaining
federation layer is the network transport (CommunicationOS/MoQT) — the wire
between members.

cargo test --workspace green; conformance pack still passes with no skips.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-05 03:27:02 -04:00

23 lines
850 B
TOML

[package]
name = "joule-code-collab"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
description = "Joule Code — federated collaboration interface + single-node reference cluster (SPEC §7, spec/collab.md). Research: the API and the ordered/deduped/signature-checked log shape; full BFT/MLS/FROST/CommunicationOS federation is future work."
[dependencies]
joule-code-schema.workspace = true
joule-code-cargo.workspace = true
thiserror.workspace = true
frost-ed25519 = "2"
[dev-dependencies]
ed25519-dalek.workspace = true
rand = "0.8"
# MLS group keying (RFC 9420) for the collaborating set — demonstrated in
# tests/mls_keying.rs. Dev-dep so the library's runtime deps stay light.
openmls = "0.6"
openmls_rust_crypto = "0.3"
openmls_basic_credential = "0.3"