Skip to content

0.10.0: receipts migrate to the draft-02 Acta envelope

Latest

Choose a tag to compare

@tomjwxf tomjwxf released this 09 Jul 00:11
· 3 commits to main since this release

Receipts are now emitted in the envelope the IETF draft specifies (draft-farley-acta-signed-receipts-02): a two-field { payload, signature: { alg: "EdDSA", kid, sig } } envelope, signed over the JCS bytes of the payload with no pre-hash, with issuer_id bound to the signing kid. Receipt logs hash-chain per section 5.7 (bare-hex SHA-256 over the entire previous line, signature included), the chain resumes across restarts, and signing-failure tombstones participate so unsigned gaps stay detectable.

Verification is dual-shape everywhere: every receipt written by 0.9.x and earlier still verifies, validated against 3,352 receipts from a real production gate log, and a mixed pre/post-migration log replays cleanly including the chain link that spans the boundary. The published @veritasacta/verify CLI verifies the new envelopes as-is.

The policy digest becomes a recomputable commitment: one normative construction (acta-policy-digest-v1, per-file SHA-256 manifest, JCS, full-strength digest, replacing two divergent truncated preimages), a 'policy digest' command that prints the recompute rule, and a 'policy publish' command that writes an acta.policy-bundle.v1 ready to host at .well-known/acta-policies/. Specified normatively in draft revision -03, alongside require_approval as a decision value.

Also fixed: importing the package as a library no longer attaches the demo server's stdin JSON-RPC listener; @noble/curves and @noble/hashes are now regular dependencies.

npm: https://www.npmjs.com/package/protect-mcp