DevNav release artifacts are signed cryptographically with Sigstore cosign in keyless mode, using GitHub Actions OIDC. There is no persistent private key: each signature is produced inside the GitHub Actions runner by a short-lived certificate issued by Fulcio and recorded in the Rekor transparency log.
- v0.13.0 (retroactive): the 12 distributed artifacts of the release
(installers, binaries, PowerShell module files, Scoop/WinGet packages and
metadata). Bundles live in
signatures/v0.13.0/. - v0.14.0: the assets were built from the immutable
v0.14.0tag. The final recovery run was triggered withworkflow_dispatchafter the initial ARM64 signing failure, so its Sigstore certificates identifyrelease.yml@refs/heads/main, not the tag ref. The recovery workflow commit wasd79cfbccdc8705006faeeb61d8368fd6e534bc4c. - Future releases: every artifact is signed by
.github/workflows/release.ymlbefore the GitHub Release is created, and the.sigstore.jsonbundles are published alongside the assets. The workflow also publishesDevNav-build-provenance-<arch>.intoto.jsonl: the DSSE in-toto envelope extracted from the workflow'sactions/attestbuild attestation, written in the standard JSON Lines form (one envelope per line, generated and validated byscripts/convert-attestation-to-intoto.ps1).
.sigstore.json(build provenance) — the complete Sigstore bundle produced byactions/attest: the DSSE envelope plus its verification material (Fulcio certificate and Rekor transparency-log entries). This is the authoritative representation of the attestation..intoto.jsonl— the same attestation reduced to the interoperable DSSE/in-toto form: each line is the DSSE envelope (payloadType,payload,signatures) whose decoded payload is a SLSA build-provenance Statement naming the release artifacts as subjects. The file does not include the certificate or Rekor entries, so it cannot be cryptographically verified on its own; tools that need the signature's trust material must use it together with the accompanying.sigstore.jsonbundle.
- The authenticity of a GitHub Artifact Attestation is verified with
gh attestation verify <artifact> -R JacobOptimiza/dev-nav, which resolves the attestation from GitHub's Attestations API for the artifact's digest and checks its signature, certificate chain, and transparency-log entry. - SHA-256 integrity of every distributed artifact (including both provenance
files) is checked against
SHA256SUMS.txtandrelease-manifest.json.
signatures/<tag>/index.json maps each artifact to its SHA-256 digest and its
bundle file.
- OIDC issuer:
https://token.actions.githubusercontent.com - Certificate identity for the retroactive v0.13.0 signatures:
https://github.com/JacobOptimiza/dev-nav/.github/workflows/sign-release.yml@refs/heads/main - Certificate identity for v0.14.0 recovery signatures:
https://github.com/JacobOptimiza/dev-nav/.github/workflows/release.yml@refs/heads/mainwith repositoryJacobOptimiza/dev-nav, workflow refrefs/heads/main, workflow SHAd79cfbccdc8705006faeeb61d8368fd6e534bc4c, and triggerworkflow_dispatch. Verify these claims with the corresponding Cosign--certificate-github-workflow-*constraints; the issuer remainshttps://token.actions.githubusercontent.com. - Certificate identity pattern for future releases:
https://github.com/JacobOptimiza/dev-nav/.github/workflows/release.yml@refs/tags/v<version>
Download the artifact from the release and the matching bundle from
signatures/v0.13.0/, then run:
cosign verify-blob \
--bundle DevNavSetup-x64.exe.sigstore.json \
--certificate-identity "https://github.com/JacobOptimiza/dev-nav/.github/workflows/sign-release.yml@refs/heads/main" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
DevNavSetup-x64.exeRepeat per artifact with its own bundle. A successful run prints
Verified OK. No public key file is needed: cosign verifies the Fulcio
certificate chain, the Rekor entry, and the issuer/identity claims from the
bundle.
For future releases, substitute the bundle and the certificate identity with
the @refs/tags/v<version> pattern above.
- SHA-256 checksums (
SHA256SUMS.txt,release-manifest.json) verify integrity: the file you downloaded matches what the release workflow produced. - Build attestations (GitHub artifact attestations) prove provenance: the artifact was built by a specific workflow run of this repository.
- Sigstore signatures prove authenticity: a private key that never left the CI runner and whose identity was certified by Fulcio signed this exact blob, and the event is publicly auditable in Rekor.
The signatures are Sigstore keyless signatures, not Authenticode code
signing: the dev-windows-*.exe binaries and DevNavSetup-*.exe installers
do not carry an embedded Authenticode signature. Windows SmartScreen
reputation is unaffected by these bundles.