You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Stacked on #217. This advances #210 from structural signature-presence evidence to a cryptographic, operator-invokable verification boundary. It does not publish a release candidate, distribute trust roots, or claim release readiness.
RED -> implementation
RED d7f43b90dfc0ec810b3cc7a759c0b05d251cecba: signature verifier absent; contract requires valid Ed25519 verification and rejection of forged signatures, unknown key identity, release/version substitution, subject-digest substitution, non-Ed25519 trust material, malformed trust maps, and non-canonical envelopes.
GREEN implementation 9e8ae50ca1a5098ac3232ce4032c900e53d3862b: verifyReleaseEvidenceSignatures reuses feat(release): add exact release evidence index contract #217's exact artifact byte/digest verification, reopens detached signature artifacts with O_NOFOLLOW, bounds and re-hashes the envelope, requires canonical JSON and exact release/subject identity, and verifies Ed25519 against an operator-supplied explicit trusted-key map.
RED b6f10140f2097338f799cddb940b93dbaeb5d367: requires a bounded operator CLI surface for signature verification.
GREEN ca0c16992d36034b71c957935d5991112e8864fd: adds verify-release --index ... --artifacts ... --trusted-keys ...; success output contains only release version and exact source commit.
RED 93a3954061d4edad8bb7c60ef9e3a2060f87e5cf: detects the existing lstat/readFile race at JSON-input trust boundaries.
GREEN 806633e2879c9f5637e7a5cba440e57d4912cd26: all commercial-readiness JSON inputs now open one descriptor with O_NOFOLLOW, validate that same descriptor with stat, read through it, and fail closed on final-symlink substitution.
Current exact head 280cd9ffe5c36f47c55aab8fa75523baf671514d includes static-check coverage for the new CLI/security regressions.
The signed statement is versioned as life-os.release-signature.v1 and binds exact source commit, channel, version, subject artifact name, and subject SHA-256 digest. Trust is never inferred from a key embedded in the artifact, a GitHub actor, or model output. Verification failures are payload-free.
Deliberate boundary
This slice verifies detached Ed25519 signature bytes and exposes the local operator verification command. It does not define key issuance, rotation, revocation, hardware custody, Sigstore/cosign identity policy, transparency-log acceptance, artifact publication, or #210's install/upgrade/backup/restore/buyer-journey gates. Those remain separate release work.
Keep Draft while parent #217 is Draft/unmerged. After #217 integrates through normal policy, retarget/rebase non-destructively onto the resulting protected main and obtain fresh exact-head repository + central required workflow/review evidence. The focused RED/GREEN sequence is repository history; queued, absent, predecessor, or skipped hosted evidence is not passing.
Superseded by #236 after verified complete, non-destructive transfer. The predecessor exact head e56a954bbea84f7cf49462da1834adfffde60cbe owns six release-signature/CLI paths relative to historical parent c5529fe5423b43039745f6da8ca0d7b8dd1ebb79. Current #217 head 38b2683654de0cd575e35bd4ebda45d8a8693c02 adds/modifies only the disjoint release-evidence directory-boundary test and release-evidence.mjs. #236 exact head 2f0924f2e4a8776afe352378279a6cd0cd45222a is a two-parent descendant of both this predecessor head and current #217; fresh comparison from current #217 is ahead-only with exactly the same six predecessor-owned paths. No predecessor review/check evidence transfers; #236 remains Draft for fresh exact-head evidence.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
Stacked on #217. This advances #210 from structural signature-presence evidence to a cryptographic, operator-invokable verification boundary. It does not publish a release candidate, distribute trust roots, or claim release readiness.
RED -> implementation
d7f43b90dfc0ec810b3cc7a759c0b05d251cecba: signature verifier absent; contract requires valid Ed25519 verification and rejection of forged signatures, unknown key identity, release/version substitution, subject-digest substitution, non-Ed25519 trust material, malformed trust maps, and non-canonical envelopes.9e8ae50ca1a5098ac3232ce4032c900e53d3862b:verifyReleaseEvidenceSignaturesreuses feat(release): add exact release evidence index contract #217's exact artifact byte/digest verification, reopens detached signature artifacts withO_NOFOLLOW, bounds and re-hashes the envelope, requires canonical JSON and exact release/subject identity, and verifies Ed25519 against an operator-supplied explicit trusted-key map.a6aae50f1360881afadd090a7cc3f1dd54cb6fa9.b6f10140f2097338f799cddb940b93dbaeb5d367: requires a bounded operator CLI surface for signature verification.ca0c16992d36034b71c957935d5991112e8864fd: addsverify-release --index ... --artifacts ... --trusted-keys ...; success output contains only release version and exact source commit.93a3954061d4edad8bb7c60ef9e3a2060f87e5cf: detects the existing lstat/readFile race at JSON-input trust boundaries.806633e2879c9f5637e7a5cba440e57d4912cd26: all commercial-readiness JSON inputs now open one descriptor withO_NOFOLLOW, validate that same descriptor withstat, read through it, and fail closed on final-symlink substitution.280cd9ffe5c36f47c55aab8fa75523baf671514dincludes static-check coverage for the new CLI/security regressions.The signed statement is versioned as
life-os.release-signature.v1and binds exact source commit, channel, version, subject artifact name, and subject SHA-256 digest. Trust is never inferred from a key embedded in the artifact, a GitHub actor, or model output. Verification failures are payload-free.Deliberate boundary
This slice verifies detached Ed25519 signature bytes and exposes the local operator verification command. It does not define key issuance, rotation, revocation, hardware custody, Sigstore/cosign identity policy, transparency-log acceptance, artifact publication, or #210's install/upgrade/backup/restore/buyer-journey gates. Those remain separate release work.
Keep Draft while parent #217 is Draft/unmerged. After #217 integrates through normal policy, retarget/rebase non-destructively onto the resulting protected main and obtain fresh exact-head repository + central required workflow/review evidence. The focused RED/GREEN sequence is repository history; queued, absent, predecessor, or skipped hosted evidence is not passing.
Refs #210, #217.