A proxy in front of any licence server: it decides each licence request from signed inputs, appends its signed receipt to a durable single-writer log before it answers, refuses without forwarding, forwards a granted content protection system's request and returns the licence unchanged, and answers a clear key with a 307 and a release ticket instead of relaying it. A replay sent while the first request is still being forwarded waits and is refused after it, so the log stays in decision order. The key server, run by the key holder, redeems each ticket once. CLI: serve, keyserver, keygen, pubkey, list (a commitment list from a CPIX document), entitle, sign-request, verify. tests/end_to_end.rs runs everything on loopback against a fixture licence server; smoke.sh runs the release binary. Co-Authored-By: Claude Opus 5.5 <[email protected]>
25 lines
1.1 KiB
TOML
25 lines
1.1 KiB
TOML
[package]
|
|
name = "wai-key-proxy"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
rust-version = "1.97"
|
|
license = "Apache-2.0"
|
|
description = "A signing proxy in front of any licence server (extensions/key-release.md): it decides every licence request from signed inputs, signs a release or refusal receipt for each, forwards only granted requests, answers a key delivered in the clear with a release ticket instead of relaying it, and holds no content key. With it, the key server that redeems those tickets."
|
|
repository = "https://git.transaction.science/Transaction-Science/open-standards"
|
|
publish = false
|
|
|
|
[dependencies]
|
|
axum = "0.8"
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "time", "sync", "signal", "io-util"] }
|
|
hyper = { version = "1", features = ["client", "http1"] }
|
|
hyper-util = { version = "0.1", features = ["tokio"] }
|
|
http-body-util = "0.1"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha2 = "0.10"
|
|
ed25519-dalek = "2"
|
|
getrandom = "0.4"
|
|
wai = { path = "../wai-rs", default-features = false, features = ["key_release"] }
|
|
|
|
[profile.release]
|
|
lto = "thin"
|