You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[1.30.0] - 2026-07-14
eIDAS-qualified timestamp anchors on receipts: vaara.audit.receipt_anchor.QualifiedTSA obtains the RFC 3161 token from a qualified trust service provider over HTTP and records it as a SPEC.md Section 4 anchor with method rfc3161-eidas-qualified and the TSA URL. The pin is mandatory: the token's signer must match trusted_signer_cert (the exact TSU certificate) or trusted_issuer_cert (the issuing CA as listed on an EU trusted list, which survives signer rotation), checked before the anchor is recorded, so the method string is backed by a certificate held out of band instead of by whoever answered the URL. verify_timestamp_token and verify_receipt_anchor accept the same trusted_issuer_cert pin. scripts/qualified_anchor_dss_demo.py reproduces the full claim against live services: it anchors the bundled vector receipt to a qualified TSA and submits the token with the receipt's JCS signed payload to the European Commission's DSS validator, which reports indication PASSED at timestamp level QTSA ("Qualified timestamp") against the EU trusted lists (verified 2026-07-14).
vaara receipt render: a receipt rendered to a self-contained static HTML evidence page — decision facts, the timestamp anchor table (OTS proofs and qualified anchors re-verified offline in-process), the commitment chain figure, and the commands a skeptic runs to check the receipt without trusting the page. No JavaScript, no external assets, no network. Qualified anchors render as "Qualified eIDAS timestamp · authority · eIDAS Art. 41 · attested time"; a tampered receipt renders the anchor as INVALID.
AuditTrail.enable_auto_anchor cadence now defaults to every 32 records; turning anchoring on no longer requires choosing a number. Anchoring itself remains opt-in and fail-open (chained ANCHOR_GAP marker on TSA failure), unchanged.