@passportsign/cli
v0.1.0
Published
passportsign CLI: bind a GitHub account to a passport-holding human via zkPassport, verify bindings against public Sigstore Rekor, generate self-contained inline SVG badges.
Maintainers
Readme
@passportsign/cli
passportsign CLI — bind a GitHub account to a passport-holding human via zkPassport, publish the attestation to the public Sigstore Rekor transparency log, and emit a self-contained inline SVG badge.
Install
npm install -g @passportsign/cliOr one-shot via npx:
npx @passportsign/cli bind <your-github-username> --countryRequires Node 22.5+ (uses node:sqlite). You also need the
ZKPassport mobile app (iOS /
Android)
with your NFC e-passport loaded.
Commands
passportsign bind <github_username>
Full v0 binding flow:
- Generate a one-time nonce.
- Prompt you to create a public GitHub gist named
passportsign.txtcontaining that nonce. - Verify the gist via the GitHub API.
- Render a QR code; you scan with the ZKPassport app, approve the disclosure on your phone.
- Submit the resulting in-toto attestation to public Sigstore Rekor.
- Write
binding.passportsign.jsonandpassportsign-badge.svgto the current directory.
Pass --country to disclose your passport's issuing country
(otherwise the attestation is personhood-only).
passportsign verify <bundle.json>
Run four cryptographic checks against a binding bundle:
- Statement bytes hash to the Rekor entry's recorded
payloadHash - Merkle inclusion proof verifies against the captured root
- Captured root is consistent with the current witnessed root (no log rewrite that orphans the entry)
- zkPassport SDK accepts the proof and the unique identifier matches the statement
All checks run without any dependency on a passportsign.dev operator — only public Sigstore Rekor and a local zkPassport SDK.
Flags:
--no-rekor-refetch— offline structural verification only--gist-recheck— also re-fetch the captured gist URL as a liveness signal
What the badge claims
At time T, a human holding a valid government-issued passport (and optionally: a citizen of country X, if the subject chose to disclose) was in control of the GitHub account
@username.
Explicit non-claims: this badge does not assert that the code is
human-written, that AI is not used, that the maintainer is currently
in control of the account, or that they are trustworthy. See
docs/passportsign.md
§1 for the full list.
License
Apache-2.0. Source: https://github.com/debugmcp/passportsign
