proof-aware-crypto-tooling-.../tests/test_boundaries.py

69 lines
2.9 KiB
Python
Raw Normal View History

Estate sync: boundary-axiom vocabulary + the four-tier apex reality (R4) The verified corpus completed its phase 2 on 2026-07-06: every ed25519 fork now carries FOUR button-enforced apex tiers up to the full lift (accept <=> decompress(R) = [k](-A)+[s]B as points), the complete scalar layer, and the constructive encoding/decoding chain. pacta was calibrated to the pre-apex corpus and - worse - had no vocabulary for boundary-audited certificates: its axiom audit knew only "clean = exactly the three standard axioms", so the apex tiers would have scored dirty. New vocabulary: - Profile.certificate_axioms: per-certificate ALLOWED axiom sets; expected_axioms_for(cert) resolves each certificate's own boundary. - RepoConfig.apex_boundary: a simple per-fork key (dalek-wrappers / hash3 / anza) expanded by the ed25519 profile into the exact per-tier allowed sets. AUTHORITY NOTE in profiles/ed25519.py: each repo's check.sh Phase 3b is the enforcement point; if the button and this table disagree, the button wins. - run_axiom_audit compares each certificate against ITS allowed set; deviation in EITHER direction (extra axiom or missing boundary axiom) is dirty. New risk reality: - R4 is now reachable: full four-tier apex + constructive chain + scalar arithmetic, all proven with cones pinned to their documented boundaries. R4 always carries explicit residual blockers (SHA-512 oracle, hypothesis-parametric wire parses, translation faithfulness, no side-channel/build assurance - those gate R5). - R3 unchanged (arithmetic pair) and now explains exactly which apex certificates are missing for R4. Attestation trust model hardened: - The provider is trusted for its OBSERVATION, never its VERDICT: axiom_status is re-derived locally from observed_axioms against the agent's own boundary policy. A provider that labels a dirty cone "clean" gains nothing; "proven" with no observed axioms is "unverifiable". - Partial attestations degrade instead of being rejected: uncovered certificates stay unproven and the score caps accordingly (an arithmetic-only attestation still authorizes an R3 library capsule, never a wallet). Also: scripts/mini_pytest.py - a dependency-free test runner (tmp_path, raises, monkeypatch, capsys) for hosts without pytest; examples regenerated FROM the tool (dalek/anza fixtures now R4, 16 certs; new full four-tier attestation example); tests updated + new tests/test_boundaries.py (lying-provider, missing-boundary-axiom, partial-coverage cases). 40/40 tests green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 08:04:43 +00:00
from pacta.attestation import _normalize_certificate
from pacta.config import RepoConfig
from pacta.claims import build_claim_card
from pacta.profiles import get_profile
from pacta.profiles.ed25519 import APEX_BOUNDARIES, APEX_TIER_CERTIFICATES, R4_REQUIREMENTS
def _repo(boundary="dalek-wrappers"):
return RepoConfig(name="dalek-ed25519-verified", kind="ed25519", apex_boundary=boundary)
def test_apex_tiers_expect_the_fork_boundary_not_standard_three():
profile = get_profile("ed25519", _repo())
for tier in APEX_TIER_CERTIFICATES:
expected = profile.expected_axioms_for(tier)
assert "ed25519.Signature" in expected
assert set(expected) == set(APEX_BOUNDARIES["dalek-wrappers"])
# non-apex certificates stay standard-three
assert profile.expected_axioms_for("CurveFieldProofs.fieldImplementation") == [
"propext", "Classical.choice", "Quot.sound",
]
def test_unknown_boundary_is_a_hard_error():
import pytest
with pytest.raises(KeyError):
get_profile("ed25519", _repo(boundary="no-such-boundary"))
def test_agent_rederives_axiom_status_against_local_policy():
profile = get_profile("ed25519", _repo())
boundary = list(APEX_BOUNDARIES["dalek-wrappers"])
lying = {
"name": "CurveFieldProofs.verify_accepts_iff",
"status": "proven",
"axiom_status": "clean", # the provider's verdict is never trusted
"observed_axioms": boundary + ["backend.simd.avx2_dispatch"],
}
out = _normalize_certificate(lying, profile)
assert out["axiom_status"] == "dirty"
assert out["provider_axiom_verdict"] == "clean"
honest = dict(lying, observed_axioms=boundary)
assert _normalize_certificate(honest, profile)["axiom_status"] == "clean"
# a boundary axiom MISSING is just as dirty as an extra one
short = dict(lying, observed_axioms=boundary[:-1])
assert _normalize_certificate(short, profile)["axiom_status"] == "dirty"
# "proven" with no observed axioms cannot be re-derived: distrust
blind = {"name": "CurveFieldProofs.verify_accepts_iff", "status": "proven", "axiom_status": "clean"}
assert _normalize_certificate(blind, profile)["axiom_status"] == "unverifiable"
def test_full_fixture_scores_r4_and_partial_scores_r3(tmp_path):
full = _repo()
card = build_claim_card(full, tmp_path, offline_fixture=True)
assert card["risk"]["level"] == "R4"
assert any("SHA-512" in b for b in card["risk"]["blockers"])
assert set(R4_REQUIREMENTS) <= {c["name"] for c in card["certificates"]}
partial = RepoConfig(
name="dalek-ed25519-verified",
kind="ed25519",
apex_boundary="dalek-wrappers",
certificates=["CurveFieldProofs.fieldImplementation", "CurveFieldProofs.edwardsImplementation"],
)
card = build_claim_card(partial, tmp_path, offline_fixture=True)
assert card["risk"]["level"] == "R3"
assert any("R4 requires the full apex tier set" in b for b in card["risk"]["blockers"])