Verifying bpfcompat releases

July 29, 2026 · View on GitHub

Every tagged release of bpfcompat ships with a full supply-chain bundle so you can prove a binary came from this repository's build workflow before you run it:

ArtifactWhat it is
bpfcompat-linux-amd64, bpfcompat-validator-static-linux-amd64the binaries
SHA256SUMS (+ .sig, .crt)checksums, cosign-signed (keyless)
bpfcompat.sbom.cdx.jsonCycloneDX SBOM
release-candidate-evidence.jsonTag, commit, workflow run, exact image digest, and positive/negative VM report hashes
SLSA provenance attestationprovenance bound to the artifact digest, repository, commit, and release workflow
SBOM attestationthe SBOM bound to the binary's digest

Signing is keyless (Sigstore Fulcio + Rekor) via GitHub Actions OIDC — there is no long-lived private key. The signer identity is the release workflow itself.

Requires the GitHub CLI (gh). This is the strongest check — it proves the binary was built by this repo's release workflow:

gh attestation verify ./bpfcompat-linux-amd64 --repo Kernel-Guard/bpfcompat

A pass confirms the artifact's digest matches an attestation produced by the release-artifacts workflow on a v* tag. To pin the exact workflow identity:

gh attestation verify ./bpfcompat-linux-amd64 \
  --repo Kernel-Guard/bpfcompat \
  --signer-workflow Kernel-Guard/bpfcompat/.github/workflows/release-artifacts.yml

The promotion evidence is independently attested by the same workflow:

gh attestation verify ./release-candidate-evidence.json \
  --repo Kernel-Guard/bpfcompat \
  --signer-workflow Kernel-Guard/bpfcompat/.github/workflows/release-artifacts.yml

Offline / air-gapped verification is supported by downloading the attestation bundle first (gh attestation download) and verifying with --bundle.

2. Verify checksums + cosign signature

# 1) integrity
sha256sum -c SHA256SUMS

# 2) authenticity of SHA256SUMS (keyless cosign)
cosign verify-blob SHA256SUMS \
  --signature SHA256SUMS.sig \
  --certificate SHA256SUMS.crt \
  --certificate-identity-regexp '^https://github.com/Kernel-Guard/bpfcompat/.github/workflows/release-artifacts.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

3. Inspect the SBOM

# human-readable component list
cat bpfcompat.sbom.cdx.json | jq '.components[].name' | sort -u
# or verify the SBOM attestation is bound to the binary
gh attestation verify ./bpfcompat-linux-amd64 --repo Kernel-Guard/bpfcompat --predicate-type https://cyclonedx.org/bom

What this gives you

  • Integrity — the bytes weren't altered (checksums).
  • Authenticity — they were signed by this repo's workflow, not a fork or attacker (cosign cert identity).
  • Provenance — a tamper-evident record of which commit and workflow built them.
  • Promotion binding — one attested record connects the release tag and commit to the tested VM reports and promoted container digest.

The GitHub Action consumes prebuilt release binaries only after both sha256sum -c and gh attestation verify succeed for the CLI and validator. Attestation verification is restricted to .github/workflows/release-artifacts.yml; a checksum or attestation mismatch is a hard failure. When attestation verification is unavailable, the Action builds from its pinned source instead of trusting unverifiable release bytes.