# Checking records without claiming their truth

Run `python reproduce.py` with cryptography, Pillow and matplotlib installed. The project runtime uses an existing local dependency directory if present. Real HMAC-SHA256, SHA-256 and Ed25519 are executed; no simulated cryptography is substituted.

outcomes.csv contains exactly18 hand-selected cases: seven replay checks, seven signature/bundle checks and four version-lineage checks. Each records expected and actual acceptance, not an accuracy percentage. All outcomes pass their expectations. The deliberately insecure fixed-response baseline accepts a replay; that expected result is a warning, not a security success.

HMAC signs compact JSON [nonce,context] with a fresh32-byte demonstration key. Challenges are fresh16-byte nonces. The verifier removes a pending nonce before checking context and HMAC, including failed attempts. A separate policy invariant verifies that a failed attempt consumes the nonce; it is not counted as another trial. This policy permits denial of service and is not production guidance. There is no persistence, expiry, rate limiting, relay defense, mutual authentication or key management.

Ed25519 signs canonical UTF-8 JSON (sorted keys, compact separators) containing SHA-256 and length for three fabricated English fixtures. Tests cover untouched bundle, exact copy, one changed byte, an actual generated raster-page replacement, edited transcription, wrong public key and changed manifest bytes. The last two fail the signature; file variants fail integrity. signed-fixtures.json retains public key, signature, manifest and harmless fixtures for verification. Private keys and shared secrets are generated in memory and never saved. Fresh keys make byte-for-byte output nondeterministic, while the18 expected outcomes are reproducible. A public key is not independently bound to a real identity; signatures do not establish truthful content, trusted time or permission.

Provenance checks use a deliberately narrow version-lineage schema. Cases are a valid copy/translation chain, unsupported independence assertion, cycle and missing parent. provenance-cases.json includes the complete fabricated graphs and exact error lists. An evidence field's presence is not verification of its contents; an acyclic graph does not establish authenticity. These are not universal restrictions on all provenance graphs.

The case families are clean reruns of earlier stored demonstrations, not copies of their cryptographic bytes or old public-key fingerprints. The historical scripts/results are unchanged. Current runtime versions and generator hash are in study.json. outcome-matrix is an original publication-style table in PNG/SVG/PDF, not a probability chart.

Sources: [RFC2104 HMAC](https://www.rfc-editor.org/rfc/rfc2104), [RFC8032 Ed25519](https://www.rfc-editor.org/rfc/rfc8032), [W3C provenance data model](https://www.w3.org/TR/prov-dm/), [NIST authentication guidance](https://pages.nist.gov/800-63-4/sp800-63b.html). Passing these examples is not a cryptographic proof, standards certification or deployment review.
