open-standards/joule-code/joule-code-rs/crates/joule-moq/Cargo.toml
Transaction Science 16388181ff joule-moq: secure_objects (WIP): seal and open per draft-ietf-moq-secure-objects-01 on -22 objects
Feature secure-objects: the AEADs of the SFrame suites, RFC 9605 SFrame for
its vectors, the Key ID property, the plaintext and its Encrypted Properties
List, key/salt/nonce/AAD, and a room member's keyring with the receiving
checks of WAI confidentiality §6. The published vectors of RFC 9605 and of
the draft's Appendix B are in wai/live-conformance/e2ee/.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 20:26:20 -04:00

64 lines
3.1 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 }
# End-to-end sealed objects (feature `secure-objects`): RustCrypto's AES-GCM, AES-CTR,
# HMAC and HKDF, all Apache-2.0 OR MIT, at the versions this workspace's lock already
# holds. No default features: nothing here draws randomness.
aes-gcm = { version = "0.10", default-features = false, features = ["aes", "alloc"], optional = true }
aes = { version = "0.8", optional = true }
ctr = { version = "0.9", optional = true }
hmac = { version = "0.12", optional = true }
hkdf = { version = "0.12", 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"]
# Sealing and opening objects end to end (WAI confidentiality §4, §6): no runtime, so it
# builds for wasm32-unknown-unknown beside the codec.
secure-objects = ["dep:aes-gcm", "dep:aes", "dep:ctr", "dep:hmac", "dep:hkdf"]
[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"] }