open-standards/joule-code/joule-code-rs/crates/joule-code-receipt/Cargo.toml
David Charlot 8f5e6f80e6 joule-code: v0.2 — receipts seal as JCR-1 (family wire format)
Reconciles the Joule Code receipt with JCR-1, the signed-receipt format shared
across the Transaction Science family, so a Joule Code receipt verifies under the
family's existing JCR-1 tooling (and its cross-language Python/Go verifiers)
instead of a bespoke preimage. v0.1 -> v0.2 wire change.

- SPEC 6.1: the receipt's signed form is now a JCR-1 envelope — canonical
  det-CBOR (RFC 8949 4.2.1, length-first key order) of the "joule-code/1"
  profile, inside a COSE_Sign1 envelope (RFC 9052, EdDSA alg -8); steward in kid.
- joule-code-receipt: new jcr1 module (canonical CBOR + COSE_Sign1, vendored
  from the JCR-1 reference algorithm — no JouleClaw dependency, keeping the lean
  lib self-contained) + Receipt::to_jcr1_wire / seal / verify_envelope. Removed
  the bespoke sign/verify. A test pins the canonical encoder byte-for-byte
  against a published JCR-1 conformance vector.
- Conformance C3 vectors regenerated as JCR-1 COSE_Sign1 envelopes; the harness
  verifies the envelope and that its payload is the receipt's canonical core.
- spec/receipt.md, CHANGELOG (0.2.0), READMEs, workspace version -> 0.2.0.

Verified: the conformance harness passes the whole pack with no skips;
cargo test --workspace green; vanity scanner clean.

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

18 lines
512 B
TOML

[package]
name = "joule-code-receipt"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
description = "Joule Code — the JWP energy receipt: two-part measured+estimated cost with honest provenance (SPEC §6, spec/receipt.md)."
[dependencies]
joule-code-schema.workspace = true
ed25519-dalek.workspace = true
serde.workspace = true
serde_json.workspace = true
thiserror.workspace = true
[dev-dependencies]
hex.workspace = true