Verify evidence offline
Verify a signed EVE evidence record independently and offline — in Python, Node, or the browser — without trusting the EVE server. Verification confirms the evidence is authentic and unaltered; it does not attest that the underlying decision was correct.
Prerequisites
- A signed evidence envelope from EVE (a decision, scan, MCP execution, monitoring, shadow, or red-team record).
- The Ed25519 public key for independent (asymmetric) verification. An HMAC fallback is symmetric and not independently verifiable.
- Python, or Node 18+ (ESM) for the TypeScript/browser verifier.
Installation
Python: the embedded facade exposes verify_evidence. TypeScript/browser: install the client tarball and use verifyEvidence.
pip install ./eve_coreguard-0.2.2-py3-none-any.whl # Python: verify_evidence
npm install ./eve-coreguard-0.1.0-rc1.tgz # TS/browser: verifyEvidence
Runnable code
Python:
from core.eve_sdk import verify_evidence
result = verify_evidence("decision", certificate, expected_tenant="acme")
print(result["valid"], result["reason"])
TypeScript / browser (verifier holds no secrets and never signs):
import { verifyEvidence } from "@eve/coreguard";
const result = verifyEvidence(envelope, { publicKeyPem });
console.log(result.valid, result.signature); // e.g. true "ed25519-valid"
Expected result
- A genuine, unaltered envelope returns
valid: truewithsignature: "ed25519-valid"(production config). - The same Python-signed
jcs-1envelope verifies in TypeScript and in the browser — cross-language parity for the supported value domain.
Evidence output
envelope{content_hash, signature: "ed25519-...", canon: "jcs-1"}
verifyEvidence(env, {publicKeyPem}) -> {valid: true, signature: "ed25519-valid"}
Verification
Tamper detection is the point: change any signed field and re-verify.
const tampered = { ...envelope, decision: { ...envelope.decision, action: "ALLOW" } };
console.log(verifyEvidence(tampered, { publicKeyPem }).valid); // false — tamper rejected
Failure example
Verifying with the wrong public key, or an envelope whose bytes were altered, returns valid: false. An artifact scan envelope whose artifact_digest was changed is rejected, which is how substituted artifacts are caught after approval.
Production considerations
- Distribute and pin the Ed25519 public key out of band; independent verification depends on it.
- Use the browser/Node verifier in environments that must not trust the EVE server — it holds no secrets and never signs.
- Verification proves authenticity and integrity, not decision correctness; keep that distinction in audit language.
Limitations
- Offline verification is SUPPORTED. It verifies integrity, signature, and schema — it does not attest the correctness of the underlying decision, only that the evidence is authentic and unaltered.
- Independent (asymmetric) verification requires the Ed25519 public key; the HMAC fallback is symmetric and not independently verifiable.
jcs-1is a constrained RFC 8785 profile: it does not serialize non-integer floats / NaN / Infinity (fail-closed). Signed governance artifacts stay inside the supported domain (rates carried as integer permille).
Next step
Return to any subsystem guide — govern-a-tool-call.md, scan-an-artifact.md, test-a-shadow-policy.md — and verify the evidence it produces.