Verify Artifacts and Registry
solidiom verify checks the cryptographic signatures of artifacts and the integrity of the registry catalog.
Artifact Verification
solidiom verify ./dist/dialog.tgzWithout arguments, solidiom verify looks for an artifact path. It reads .solidiom/policy.json to determine the verification mode, then runs the appropriate check.
Registry Verification
solidiom verify --registryThis verifies the entire registry catalog: schema validity, manifest integrity, and (if required by policy) signature.
Flags
| Flag | Description |
|---|---|
--registry | Verify registry catalog integrity instead of an artifact |
--no-network | Skip TUF network fetch; use cached trust root |
--json | Output result as JSON |
Verification Modes
The mode is determined by signatureMode in .solidiom/policy.json.
Sigstore (Keyless)
{ "signatureMode": "sigstore", "trustedIdentities": ["[email protected]"] }Uses @sigstore/verify and @sigstore/tuf for keyless verification:
- Fetches the TUF trusted root (or uses cached bundle with
--no-network) - Parses a Sigstore bundle from
<artifact>.sigstore.json - Verifies certificate chain, tlog inclusion, and identity against
trustedIdentities
Trusted Keys
{ "signatureMode": "trusted-keys" }Uses explicit ed25519 or RSA key verification with Node.js crypto:
- Reads
.solidiom/trusted-keys.json - Reads
<artifact>.sig(base64-encoded raw signature) - Verifies via
crypto.verify()against each active key - Retired keys are accepted for historical artifacts signed before their
retiredAtdate
None
{ "signatureMode": "none" }Verification is skipped. This is the default.
Trusted Keys Format
.solidiom/trusted-keys.json is an array of key entries:
[
{
"id": "solidiom-release-key",
"algorithm": "ed25519",
"publicKey": "-----BEGIN PUBLIC KEY-----\n...",
"status": "active",
"addedAt": "2025-01-01T00:00:00Z"
}
]| Field | Type | Description |
|---|---|---|
id | string | Key identifier |
algorithm | ed25519 | rsa-sha256 | rsa-sha512 | Signature algorithm |
publicKey | string | PEM-encoded public key |
status | active | retired | Key lifecycle status |
addedAt | string | ISO-8601 timestamp when key was added |
retiredAt | string | ISO-8601 timestamp when key was retired (optional) |
Registry Catalog Verification
solidiom verify --registry performs fail-closed verification:
- Schema check —
registry/index.jsonmust parse against a supported schema version - Manifest integrity — Each per-primitive manifest’s
filesHashmust match a fresh SHA-256 recomputation of itsfileDigests - Signature verification — If
policy.registrySignatureRequiredis true, the index must carry a valid Ed25519 signature
Verification keys are gathered from:
- Embedded public keys in the CLI package (dual-key rotation support)
REGISTRY_VERIFY_KEYenvironment variable (base64-encoded raw Ed25519 public key)policy.registryPublicKeysarray (base64-encoded raw Ed25519 public keys)
Output
On success:
Registry verified: 19 manifest(s) checkedOn failure:
Registry verification failed:
✗ dialog: filesHash mismatch
✗ registry index is not signed but signing is required by policy