Skip to content

feat: sign, attest, and verify release artifacts#9

Open
thedancingdeveloper wants to merge 3 commits into
mainfrom
feat/542-supply-chain
Open

feat: sign, attest, and verify release artifacts#9
thedancingdeveloper wants to merge 3 commits into
mainfrom
feat/542-supply-chain

Conversation

@thedancingdeveloper

Copy link
Copy Markdown
Owner

Summary

  • sign every release checksum with minisign and verify all signatures before publication
  • publish a CycloneDX release SBOM and GitHub build-provenance attestations
  • provision the independent public key and minisign runtime dependency into appliances
  • make the self-updater fail closed when a checksum signature is absent or invalid
  • expose the signature in the firmware UI and block unsigned online installs

Verification

  • cargo fmt --all -- --check
  • cargo clippy -p aifw-core -p aifw-api --all-targets -- -D warnings
  • cargo test -p aifw-core -p aifw-api
  • npm run lint
  • npm run build
  • workflow YAML parse check

Addresses AusAgentSmith ticket ZerosAndOnesLLC#542.

mack42 and others added 3 commits July 22, 2026 00:02
…l minisign (ZerosAndOnesLLC#542)

- Commit the minisign public key and compile it into the updater via
  include_str!, so appliances upgraded from builds that never shipped
  /usr/local/etc/aifw/update-signing.pub still enforce signatures; the
  on-disk copy is provisioned/refreshed at install time for operators.
- Auto-install minisign via the pkg sudo helper when verification runs
  on an appliance whose running updater predates the manifest entry;
  a missing/unrunnable minisign now surfaces as VerifyUnavailable
  instead of a misleading Download error.
- release.sh (the local publish gate) signs every *.sha256 with
  ~/.minisign/aifw-update.key, verifies against the committed public
  key, refuses to publish unsigned, and uploads .minisig sidecars plus
  update-signing.pub.
- CI: pipe MINISIGN_PASSWORD to minisign stdin (it never read the env
  var); verify signatures against the committed key in both the sign
  step and the release job; drop vars.MINISIGN_PUBLIC_KEY provisioning.
- SBOM scans the source tree (Cargo.lock, aifw-ui/package-lock.json)
  instead of xz blobs syft cannot open; SBOM added to provenance
  subjects.
- Remove stale uncompressed-image .sha256 files after xz so
  unverifiable checksums are never signed or published.
- Document key management, rotation, and compromise response in
  freebsd/RELEASE-SIGNING.md.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants