proof-aware-crypto-tooling-.../provider/src/pacta_provider
mrwulf 962c0fdd41 verify.py template: check the additive SLH-DSA head signature, fail-closed where it counts
The consumer verifier now judges the slh_dsa block on every head. The status
taxonomy is the design decision, so it is spelled out and each arm tested:

  ABSENT     head predates the second signature — allowed (additive posture,
             operator decision 2026-08-06); an append-only log keeps history.
  VALID      verified against provider.slhdsa.pub.
  INVALID    present and wrong — HARD FAILURE. A bad signature is never a
             degradation.
  WRONG-KEY  head names a different key than the mirror ships — hard failure.
  NO-PUBKEY  head claims the signature, mirror ships no key — broken
             publication, hard failure.
  TOOLING    OpenSSL < 3.5 cannot read SLH-DSA keys — honest degradation:
             one loud NOTE, never counted as verified, never failed; the
             required Ed25519 checks still gate the result.

verify_selftest.py gains two adversarial cases, both mutating a full mirror
copy: one flipped signature byte must fail naming slh_dsa:INVALID; deleting
provider.slhdsa.pub while heads claim the signature must fail NO-PUBKEY. On
mirrors without slh blocks the cases record as not-applicable rather than
silently passing. First selftest run caught my own marker bug — the case
grepped for the stored failure string, which is never printed, instead of
the printed status; the printed line is now the assertion target.

README template: SLH-DSA key row, honesty paragraph (verification proven for
both algorithms, signing for neither; leaves Ed25519-signed at issuance
only), and the hardcoded head size is GONE — the README now names no tree
size at all, so this staleness class dies with the instance (it said "tree
size 13" and would have shipped that under a 19-leaf head).

Template is deliberately ahead of the published mirror until the next
publication, which overwrites the mirror from here (the sync rule's
intended direction for pre-publication work). Proven against the scratch
19-leaf mirror: verify.py --all RESULT OK [full] with ABSENT on heads 8-13
and VALID on 14-19; selftest 13/13 GREEN. Backward compat proven against a
copy of the live 13-leaf mirror: RESULT OK [full], selftest GREEN with the
slh cases n/a. Suite 152/0/0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-07 15:16:58 +02:00
..
__init__.py add nested proof check provider 2026-07-03 13:03:58 +02:00
__main__.py add nested proof check provider 2026-07-03 13:03:58 +02:00
cli.py Move the log service to ltl.zkdefi.org (root path); keep path-mount support 2026-07-06 19:14:52 +02:00
discovery.py add nested proof check provider 2026-07-03 13:03:58 +02:00
published_assets.py verify.py template: check the additive SLH-DSA head signature, fail-closed where it counts 2026-08-07 15:16:58 +02:00
service.py replay: compile the certificate corpus, not the button's instruments; forks attest 44 2026-08-07 10:24:35 +02:00
transparency_log.py provider: thread the optional SLH-DSA key pair through append/sth/publish 2026-08-07 13:22:41 +02:00
web.py paper v0.3: the reinvention — accountable distribution of machine-checked evidence 2026-07-17 09:39:04 +02:00
webdocs.py paper v0.9: round-15 final patch — the frozen submission candidate 2026-07-17 22:20:42 +02:00