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]>
53 lines
2.3 KiB
TOML
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"] }
|