diff --git a/provider/src/pacta_provider/webdocs.py b/provider/src/pacta_provider/webdocs.py index 6884285..18a7030 100644 --- a/provider/src/pacta_provider/webdocs.py +++ b/provider/src/pacta_provider/webdocs.py @@ -50,7 +50,7 @@ def _leaf_ok(entry: LogEntry) -> bool: ) -def _svg_tree(entries: list[LogEntry], root_hex: str, signing_backend: str) -> str: +def _svg_tree(entries: list[LogEntry], root_hex: str, signing_backend: str, head_label: str = "Ed25519") -> str: """The accumulator, drawn from its real leaves.""" if not entries: return "
(log is empty)
" @@ -94,7 +94,7 @@ def _svg_tree(entries: list[LogEntry], root_hex: str, signing_backend: str) -> s out.append(f'Second, additive anchor — post-quantum. Heads from +tree 14 on additionally carry a deterministic SLH-DSA-SHA2-128s (FIPS 205) +signature over the same payload. The Ed25519 signature above remains the one every consumer must +check; this one is checked where tooling allows (OpenSSL ≥ 3.5). Its verify path is the +proof subject of leaf 18.
+{slh_pem}
+SHA-256 fingerprint {slh_fp}
+ · raw: {base or ''}/log-slhdsa-public-key
+ · mirror: provider.slhdsa.pub
This key is the sole cryptographic identity anchor: it authenticates that these statements were made by the operator. It does not, by itself, make @@ -126,7 +148,7 @@ Pin it, and compare this copy byte-for-byte with the independently hosted
SHA-256 fingerprint {escape(fingerprint)}
· raw: {base or ''}/log-public-key
· curl -s ltl.zkdefi.org/log-public-key
entries/<library>.receipt.jsonopenssl binary).
receipts/verify.py (stdlib-only). python3 verify.py --all
+ever issued + verify.py (Python stdlib + the openssl binary for
+signatures; fails closed without them). python3 verify.py --all
recomputes the entire tree and every historical head — you then hold a retained view that can
later EXPOSE a conflicting head shown to someone else. (A single clone cannot by itself prove the
log never split its view toward another consumer; that requires comparing heads across
@@ -292,19 +318,39 @@ our roadmap. (The full walk-through is lecture 11 in the
3488a2d0…) is still head #5 of sth-history.jsonl —
+python3 verify.py --all re-verifies the paper-era prefix together with everything
+after it. What has moved since the snapshot is additive: leaves 13–16 re-attest the four
+Ed25519 libraries at 44 certificates each (the paper's sixteen-certificate corpora describe the
+leaf 8–11 generation, which those leaves still record); leaf 17 re-attests the
+accumulator's mechanized model at its hardened state; and leaf 18 is the log's first
+post-quantum subject, the SLH-DSA-SHA2-128s verify path. Heads from tree 14 on carry an
+additive SLH-DSA signature beside the Ed25519 signature the paper describes; earlier heads have
+none, by design, and the verifier reports them as ABSENT rather than failing them.
+One result has changed in the good direction: the 3,867-case model/deployment divergence the
+paper honestly reports was closed on 23 July 2026 (the sn==0 fix); the
+current pinned divergence count is 0, and both the divergence and its fix are part of the
+retained record. Where the paper and the live log disagree on a number, the paper is describing
+its snapshot — and the log's history contains that snapshot, unchanged, inside it.Log heads are signed offline; this service is read-only and holds no key material. Provider tooling, agent tooling, and the full course (12 Jupyter lectures) live in the pacta repository.