Native Evidence package verification

The native package contains manifest.json, signature.json, bundle.json, checksums.txt and instructions.txt. Materials in the signed manifest are references; their original bytes are not added to the package when the snapshot did not supply them.

  1. Read signature.json and base64-decode its payload verbatim to payload.bin and its signature to signature.raw. Signature verification uses those original bytes.
  2. Require the JSON value in manifest.json to equal the decoded signed payload. Inspect the signed bundle/tenant identity and material references against the expected evidence.
  3. Supply independently trusted public custody for the signing key through the existing CLI trust policy. A key identifier in the archive is a selector, not a trust decision.
  4. Run the existing cryptographic verification command, substituting the expected key identifier and trusted policy file:
stella crypto verify --input payload.bin --signature signature.raw --key-id KEY_ID --trust-policy TRUST_POLICY --format raw

For the configured Ed25519 CapsuleSeal key, the existing policy shape is:

keys:
  - id: evidence-locker-capsule-key
    algorithm: ED25519
    path: evidence-public.spki.b64

The referenced file contains base64 SubjectPublicKeyInfo obtained from the operator’s trusted public custody. Keep that trust input independent of the archive. Stella Ops cryptography’s existing Ed25519 provider performs verification; the command provisions no signing key.

The native snapshot’s original signature was verified with exit 0. Altering its payload or substituting the trusted public key caused exit 1. A provider override was unnecessary.

This command validates the detached payload signature. Recompute the material Merkle root and compare the expected bundle root separately. Validate referenced material bytes when available, and apply the configured TSA and transparency checks for any timestamp or checkpoint claims. It does not establish qualified timestamp status or verify a transparency checkpoint by itself.

Native package objects are immutable. Updated instructions apply to newly materialized packages; already retained objects keep their original bytes and receipts.