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]>
18 lines
512 B
TOML
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
|