Checking a native evidence package on your own systems

Implementation status — verify against src/. Checker version 1 is stella evidence check-package (src/Cli/StellaOps.Cli/Commands/EvidenceCheckPackageCommand.cs, src/Cli/StellaOps.Cli/Services/EvidencePackageChecker.cs), specified by RFC-0003. It reaches operators with the next CLI release. It supports ED25519 and ES256 package signatures and no time or log evidence profile.

This guide is for the operator who wants a per-check report on a native evidence package (bundle.tgz) that the organisation’s own Installation produced.

How the checker works

Before you start

  1. The package. Download the sealed bundle’s native package with GET /api/evidence/v1/evidence/{bundleId}/download (scope evidence:read); see bundle packaging. Record its SHA-256 before you move it.
  2. Your trust list. Collect the public keys you trust for evidence of this Installation, as SubjectPublicKeyInfo PEM files or a JSON Web Key Set. The Evidence service publishes its bundle signing public keys at /api/evidence/v1/evidence/capsules/signing-keys/jwks (anonymous read, no private material). A key set fetched from the Installation proves nothing by itself: keep only keys whose thumbprints your organisation declared through an independent channel.
    • The thumbprint is sha256: followed by the lowercase hexadecimal SHA-256 of the key’s DER SubjectPublicKeyInfo. The report prints it for every key it reads. For a PEM key you can compute it with openssl pkey -pubin -in key.pem -outform DER | sha256sum.
    • The checker computes thumbprints from the key bytes. A key identifier (kid, the package’s keyId, a file name) is never trusted.
    • Private key material is refused, never loaded.
  3. Material bytes (optional). To check material bytes (C5), place each original file below one directory at the material’s canonicalPath.

Run the check

stella evidence check-package bundle.tgz --trusted-key evidence-keys.jwks.json --materials ./materials --output report.json
OptionMeaning
<package>The native evidence package (bundle.tgz).
--trusted-key <file>A public key you trust for evidence of this Installation: SPKI PEM or JSON Web Key Set. Repeatable. These keys form the trust list for C6 and are also tried for the package signature (C3).
--package-key <file>A further public key to try for C3 without declaring it trusted. Repeatable. If it verifies the signature and is not in the trust list, C3 passes and C6 fails.
--materials <dir>Directory with original material bytes for C5.
--output, -o <file>Write the JSON report to this file and print a summary. Without it the report goes to standard output.
--signSign the report with this Installation’s enrolled DSSE key; requires --output.

Exit codes: 0 the package was admitted and the report written, whatever the check results; 5 the package was refused at admission (the report records the reason); 1 the package file was not found; 2 --sign without --output; 4 the report was written but signing failed.

Read the report

The report is one JSON document with schema stella.ops/evidencePackageCheckReport@v1, written deterministically. Its members are schemaVersion, checker, operatingModel, checkedAt, inputs, admission, checks, statements, trust and limits.

Admission. The checker reads at most 16 archive entries, only regular files with the five package file names at the archive root, within fixed size limits. A path with a directory part or .., a link, a device entry, a repeated name or an oversize entry refuses admission, and no check runs. Package content is data: nothing in it is executed, fetched or printed as an instruction.

Checks. Each entry has a result (pass, fail, not-checked or unsupported), reasons, prerequisites and whether it rests on an authenticated payload.

Checkpass means
C1 checksum-list consistencychecksums.txt lists exactly the materials of the signed payload.
C2 signed payload equalitymanifest.json equals the signed payload.
C3 package signatureThe signature verifies over the signed payload bytes under one key you supplied; the report names the key by thumbprint and input.
C4 material root recomputationThe material root recomputed from the signed entries equals every stated root.
C5 supplied material bytesEvery listed material was supplied and matches its size and SHA-256. Materials without bytes are not-checked, never counted as checked.
C6 key trustC3 passed, and the key that verified C3 is in your trust list.
C7 version-field extractionAt least one version field was extracted from the signed payload. These are package statements, not versions observed running.
C8 time and log evidenceNo profile is implemented in checker version 1; each item found is unsupported.

C6 results in detail:

ResultReasonMeaning
pass—The key that verified C3 is in your trust list.
failkey-not-in-customer-trust-listC3 passed under a key you supplied with --package-key that is not in your trust list.
not-checkedno-customer-trust-configuredYou passed no --trusted-key.
not-checkedno-usable-trusted-keyNone of the trust-list files held a readable public key.
not-checkedprerequisite-not-passed:C3C3 did not pass, so there is no key to compare.

Statements. Each value read from the package carries its source (for example signed-payload or unsigned-file:bundle.json), its authentication status with the checks it rests on, and the operation (extracted, recomputed, compared). A payload value counts as authenticated only when C3 passed.

Trust. For the package signature the report separates the mathematical verification (C3), the key authorisation under your trust list (C6, with each trust-list file’s name and SHA-256) and the revocation information, which is unavailable offline: the trust list states which keys you trust at the time of the check, not when a key was withdrawn or compromised. Keeping it current is your responsibility.

Sign the report (optional)

With --sign, the command signs the exact report bytes as a DSSE envelope (payload type application/vnd.stellaops.evidence-package-check-report.v1+json) with this Installation’s enrolled generic-dsse purpose key, the signing path stella attest sign uses, and writes <output>.dsse.json. A reader verifies the envelope over the report file as written, with the Installation’s public key obtained independently; the envelope keyid is only a hint. The signature is your organisation’s statement about its own document. It adds no time evidence.

What a report establishes, and what it does not

Every report carries these limits: