Verify permit co-signatures offline (permit.co_signature.v1)#47
Merged
Conversation
The conformance vectors fell back to an empty list when keel-permit was not checked out alongside this repo. Parametrizing over an empty list collects zero cases and passes green, so the tests proving this verifier still matches the normative permit.co_signature.v1 contract would have silently vanished rather than failed. A missing or empty corpus now raises. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ure-phase1c # Conflicts: # keel_verifier/verifier.py
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Adds an adjudicator for
permit.co_signature.v1, so an auditor can verify a human's passkey co-signature on a permit with Keel's servers switched off.Verdicts
supportedcustody_tier=human_passkey.insufficient_evidencedisprovedunverifiable_scopeThe security properties that matter
permit_binding_signing, valid at signing time. If no pinned trust root is available, verification fails closed.disproved. A caller cannot assert what the co-signature was over.--allow-unsignedcannot launder a co-signature. That compatibility path still yieldsinsufficient_evidencefor this claim.Verification
25 tests, including a cross-check of every keel-permit golden vector against this runtime (so the implementation cannot drift from the normative contract) and an end-to-end signed-pack verification with no network.
Adversarial testing was run against the trust seam with pack integrity deliberately valid, so the outer layers could not do the rejecting. All forgeries failed closed, with a passing control:
supportedinsufficient_evidenceinsufficient_evidenceinsufficient_evidenceinsufficient_evidenceinsufficient_evidenceHonest boundary
Offline verification chains to Keel's signed key manifest, and the auditor must hold Keel's pinned trust root out of band. This is not an independent or notarized co-signature — an auditor who distrusts Keel's manifest signature has no fallback. That would require an external identity root, which is out of scope.
Sequencing
v3.5.1— keel-api's CI checks this repo out by that tag.🤖 Generated with Claude Code