Verify with sigstore-python#

Use the standard sigstore command to check a raw bundle independently of the conda-specific verifier.

Install the inspection tools#

The owning conda-sigstore environment already contains the sigstore CLI. The inspection command also needs jq, which you can install with your system package manager. Confirm that both commands are available:

sigstore --version
jq --version

Start with a package and raw Bundle v0.3 object created by Sign a package.

Inspect the bundle#

jq -r '.mediaType, .dsseEnvelope.payloadType' \
  ./demo-package-1.0-0.conda.sigstore.json

The expected values are:

application/vnd.dev.sigstore.bundle.v0.3+json
application/vnd.in-toto+json

Supply the expected signer#

Obtain the certificate identity and issuer from the publisher’s documented release workflow, not from the bundle being checked.

export EXPECTED_CERTIFICATE_IDENTITY='https://github.com/OWNER/REPOSITORY/.github/workflows/release.yml@refs/tags/v1.0.0'
export EXPECTED_OIDC_ISSUER='https://token.actions.githubusercontent.com'

sigstore verify identity \
  --bundle ./demo-package-1.0-0.conda.sigstore.json \
  --cert-identity "$EXPECTED_CERTIFICATE_IDENTITY" \
  --cert-oidc-issuer "$EXPECTED_OIDC_ISSUER" \
  ./demo-package-1.0-0.conda
$env:EXPECTED_CERTIFICATE_IDENTITY = 'https://github.com/OWNER/REPOSITORY/.github/workflows/release.yml@refs/tags/v1.0.0'
$env:EXPECTED_OIDC_ISSUER = 'https://token.actions.githubusercontent.com'

sigstore verify identity `
  --bundle ./demo-package-1.0-0.conda.sigstore.json `
  --cert-identity $env:EXPECTED_CERTIFICATE_IDENTITY `
  --cert-oidc-issuer $env:EXPECTED_OIDC_ISSUER `
  ./demo-package-1.0-0.conda

A successful command prints the verified in-toto statement. It checks the Sigstore material, expected identity, issuer, and subject digest. It does not enforce CEP 27’s exact filename, single-subject, predicate, or target-channel rules.

Run conda sigstore verify as well when those checks are required.

Repeat the independent check offline#

After an online verification initializes Sigstore’s production trust material, add --offline:

sigstore verify identity --offline \
  --bundle ./demo-package-1.0-0.conda.sigstore.json \
  --cert-identity "$EXPECTED_CERTIFICATE_IDENTITY" \
  --cert-oidc-issuer "$EXPECTED_OIDC_ISSUER" \
  ./demo-package-1.0-0.conda
sigstore verify identity --offline `
  --bundle ./demo-package-1.0-0.conda.sigstore.json `
  --cert-identity $env:EXPECTED_CERTIFICATE_IDENTITY `
  --cert-oidc-issuer $env:EXPECTED_OIDC_ISSUER `
  ./demo-package-1.0-0.conda

Missing local trust material causes the command to fail.