LYGO-Resonance-Engine / protocol_stack /tools /verify_attestation_hardened.py
DeepSeekOracle's picture
Δ9Φ963-POLISH: P6 ethical gate + BLE harness live seed WS
cd0b0bf verified
Raw
History Blame Contribute Delete
2.46 kB
#!/usr/bin/env python3
"""Phase 6 polish — hardened attestation verification with ethical gate."""
from __future__ import annotations
import argparse
import json
import sys
import urllib.error
import urllib.request
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
sys.path.insert(0, str(ROOT / "stack"))
def fetch_badge(url: str) -> dict:
req = urllib.request.Request(url, headers={"Accept": "application/json"})
with urllib.request.urlopen(req, timeout=10) as resp:
return json.loads(resp.read().decode("utf-8"))
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--peer", default="http://127.0.0.1:8787", help="Node base URL")
ap.add_argument("--local", action="store_true", help="Verify locally generated badge")
ap.add_argument("--json", action="store_true")
args = ap.parse_args()
from protocol6_quantum_attest.attestation import AttestationService
from protocol6_quantum_attest.measurement import MeasurementCollector
from lygo_stack import deploy_stack
if args.local:
badge = deploy_stack("HARDENED_VERIFY").get_hardware_badge()
source = "local_stack"
else:
try:
badge = fetch_badge(args.peer.rstrip("/") + "/attestation/badge")
source = args.peer
except (urllib.error.URLError, TimeoutError, json.JSONDecodeError) as exc:
out = {"status": "FAIL", "reason": str(exc), "source": args.peer}
print(json.dumps(out, indent=2))
return 1
att = AttestationService(MeasurementCollector(), node_id=str(badge.get("node_id", "VERIFY")))
result = att.verify_badge_detailed(badge)
report = {"source": source, **result, "status": "PASS" if result["valid"] else "FAIL"}
if args.json:
print(json.dumps(report, indent=2))
else:
print("\n" + "=" * 70)
print("HARDENED ATTESTATION VERIFICATION")
print("=" * 70)
for k in ("valid", "alignment", "ethical_gate", "p0_match", "signature_valid", "fresh"):
if k in result:
mark = "OK" if result[k] else "FAIL"
print(f" {k}: {mark}")
if result.get("reasons"):
print(" reasons:")
for r in result["reasons"]:
print(f" - {r}")
print("=" * 70)
return 0 if result.get("valid") else 1
if __name__ == "__main__":
raise SystemExit(main())