open-standards/joule-code/joule-code-rs/crates/joule-moq/Cargo.toml
Transaction Science 75a4e7e3f2 WIP: proof of possession in joule-moq, the relay, its client and the browser client
joule-moq: grant_proof (the WRP1 record, check_proof, the SETUP options and helpers,
grant_digest_and_principal, base64url) and a strict Ed25519 check shared with the
receipts. The relay sends its SETUP first with a fresh GRANT_CHALLENGE, checks every
grant its rules mark proof against the client's GRANT_PROOF before serving any
request, and closes a session that presents one without a proof that passes with
UNAUTHORIZED; the transports give it the target the client addressed. Its test client
presents grants with proofs; tests/grant_proof.rs. The web client presents its grant
with a proof signed in wasm, the per-participant secret gone.

Not yet built or run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 15:40:46 -04:00

53 lines
2.3 KiB
TOML

[package]
name = "joule-moq"
version = "0.3.0"
description = "MoQT (Media over QUIC Transport, draft-ietf-moq-transport-22) wire protocol + JWP receipt extension for CommunicationOS broadcast media. Trait surface lets the Realtime stack publish, subscribe, and relay tracks with object-level signed provenance and joule receipts."
edition = "2024"
rust-version = "1.97"
license = "Apache-2.0"
repository = "https://github.com/transaction-science/open-standards"
[dependencies]
bytes = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "2"
blake3 = "1"
ed25519-dalek = { version = "2", features = ["serde", "rand_core"] }
# SHA-256 for a room grant's digest (WAI live-rooms §4.2), the one a proof names.
sha2 = "0.10"
# The async surface's dependencies (feature `runtime`).
jwp = { path = "../jwp", optional = true }
async-trait = { version = "0.1", optional = true }
tracing = { version = "0.1", optional = true }
tokio = { version = "1", features = ["sync", "rt", "macros", "io-util", "net", "time"], optional = true }
uuid = { version = "1", features = ["v4", "v5", "v7", "serde", "js"], optional = true }
chrono = { version = "0.4", features = ["serde"], optional = true }
rand_core_06 = { package = "rand_core", version = "0.6", features = ["getrandom"], optional = true }
futures = { version = "0.3", optional = true }
[features]
default = ["runtime"]
# The async surface: the endpoint traits, the in-memory mock, and (with `quic`) the QUIC
# transport, on tokio and the JWP framing crate. Without it the crate is the -22 codec,
# the carriage of objects and receipts, the receipts and the session's setup rules, with
# no runtime and no native dependency, and it builds for wasm32-unknown-unknown
# (`joule-moq-web` builds it so).
runtime = ["dep:jwp", "dep:async-trait", "dep:tracing", "dep:tokio", "dep:uuid", "dep:chrono", "dep:rand_core_06", "dep:futures"]
quic = ["runtime", "dep:quinn", "dep:rustls", "dep:rcgen"]
[dependencies.quinn]
version = "0.11"
optional = true
[dependencies.rustls]
version = "0.23"
features = ["ring", "std"]
optional = true
[dependencies.rcgen]
version = "0.14"
optional = true
[dev-dependencies]
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread"] }