What is stored here
Every artifact pushed to the trust registry is a cosign attestation — an OCI artifact containing a signed SBOM payload alongside its cryptographic proof of origin.
Cosign attestations
Each attestation wraps a CycloneDX SBOM payload and is signed with a cosign key. The signature is stored as a co-located OCI tag (sha256-<digest>.att) next to the image or package reference it attests.
Attestations are addressable by the digest of the attested artifact. Verifying one requires only the public key and registry read access — no Werfty tooling required.
Supported artifact types
- Docker image attestations — pushed by
werfty-attest docker - PyPI package attestations — pushed by
werfty-attest pypi
How to pull and verify
Verify a Docker image attestation with cosign
Pass the image reference and the Werfty public key. cosign resolves the attestation from the registry automatically.
cosign verify-attestation \
--key https://werfty.io/cosign.pub \
--type cyclonedx \
trust.werfty.io/<namespace>/<image>:<tag>
On success, cosign prints the verified attestation payload as JSON to stdout. A non-zero exit means the attestation is missing, the signature is invalid, or the key does not match — do not trust the artifact.
Verify a PyPI package attestation with cosign
cosign verify-attestation \
--key https://werfty.io/cosign.pub \
--type cyclonedx \
trust.werfty.io/pypi/<package>:<version>
Pull the raw SBOM payload with oras
Use oras pull to download the attestation blob directly if you want the CycloneDX JSON without going through cosign.
oras pull trust.werfty.io/<namespace>/<image>@sha256:<digest>
Use werfty-verify (recommended for CI)
werfty-verify wraps cosign verification and produces structured output. It gates the deploy on attestation validity.
# Verify a Docker image — exits 0 if trusted, 1 if untrusted, 2 on error
werfty-verify docker trust.werfty.io/<namespace>/<image>:<tag>
# Verify a PyPI package
werfty-verify pypi <package>==<version>
# Machine-readable output for scripting
werfty-verify docker trust.werfty.io/<namespace>/<image>:<tag> --json
Authentication
trust.werfty.io
Open — no credentials required. Pull any attestation, verify any signature.
trust.werfty.io
Requires credentials. Only authorised Werfty pipelines push attestations. Contact the Werfty team to discuss write access for your organisation.
Note: The registry enforces authentication on push. A bare GET /v2/ probe returns HTTP 401 — this is normal registry behaviour and does not mean the registry is unavailable. Any OCI client that supports anonymous pulls will work without configuration.
Raw OCI endpoint
The OCI Distribution API is available directly at trust.werfty.io/v2/. Expect a 401 Unauthorized JSON response on unauthenticated probe — this is the standard OCI registry challenge response, not an error.
Catalogue endpoint: GET https://trust.werfty.io/v2/_catalog — returns a JSON list of repositories.
This endpoint is for tooling and direct OCI client use. If you landed here from a browser link expecting a dashboard, you are in the right place — the registry does not serve a web UI.