Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 18:55
· 235 commits to main since this release
v1.2.0
4cb0425

verify-attestation.sh is byte-identical to v1.1.0 (sha256 2838c9295365e4a459198b3fa3173472c58b012f3858c13a4941aa7b4ac41010). This release adds tests and published vectors. The verifier's behaviour is unchanged, and if you pinned the v1.1.0 script you do not need to update it.

Test vectors for other implementations

#24: tests/vectors/v1/ publishes 101 fixed vectors for attest.attestation.v1 and attest.statuslist.v1, for anyone writing their own verifier.

  • Each vector gives:
    • the input files and the verifier arguments, with a fixed --now;
    • the expected exit code;
    • a stable reason code;
    • the reference script's output line.
  • Valid documents also carry the sha-256 of their canonical bytes, to help debug an encoder.
  • The keys are committed and marked test-only; never trust anything they sign.
  • The set is append-only and protected by SHA256SUMS. Its schema and evolution policy are in tests/vectors/v1/README.md, and the reference runner is tests/vectors.sh.

Proof that the signature check is what rejects forgeries

  • 24 vectors are marked signature_only. Every check except the signature passes on them, so only the ML-DSA-65 verification stands between them and exit 0. They cover:
    • one changed payload value;
    • signature bytes flipped at the same length;
    • a signature by another key under the issuer's kid;
    • a signature transplanted from another attestation;
    • a consistent kid switch;
    • the status-list equivalents.
  • tests/mutants.sh checks this property. It builds a copy of the verifier with the signature checks disabled, and requires that copy to accept every signature_only case. That proves the reference rejects them because of the signature and nothing else.
  • 13 structural vectors cover signature size, a substituted alg and kid mismatches. Separate checks reject these before the signature is examined.
  • tests/run.sh runs the vectors and the mutant check in CI and in the release workflow.

Verify this release

sha256sum -c SHA256SUMS
cosign verify-blob --bundle verify-attestation.sh.sigstore.json \
  --certificate-identity "https://github.com/Hodeitek/hodeishield-attest-verifier/.github/workflows/release.yml@refs/tags/v1.2.0" \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  verify-attestation.sh

verify-attestation.sh sha256: 2838c9295365e4a459198b3fa3173472c58b012f3858c13a4941aa7b4ac41010

Full changelog: v1.1.0...v1.2.0