- did:
did:repo:423c9aee3c2cfd0d48ccacf645d3432b9b6bf2b2/blob/main/README.md- github:
https://gist.github.com/ChristopherA/e2d59c62e3e50abe2595d74c0fd6f782- updated: 2026-03-20 by Christopher Allen <ChristopherA@LifeWithAlacrity.com>
This gist demonstrates that a GitHub Gist can carry a valid Open Integrity inception commit and that a script within the gist can verify its own provenance.
Code distributed via curl | sh depends on transient trust: the hosting platform, the URL, and DNS. None of these are cryptographic. If any link in that chain is compromised, you run unverified code.
An Open Integrity inception commit addresses this by signing the repository's first commit with a key that is independently verifiable — registered on GitHub, published on a personal site, or both. Anyone can confirm that the code was authored by the claimed key holder, regardless of where the repository is hosted.
The repository DID (did:repo:423c9ae...) is derived from the inception commit hash, not from any platform URL. Clone this gist, push it to GitLab, host it on your own server, or distribute it over IPFS — the same verification works everywhere. The inception commit travels with the repository because it is part of the repository.
This matters because:
- Repositories maintain their cryptographic identity across platforms — cloning and rehosting does not break the chain of trust
- Verification requires only Git and a network connection to the signing key's publication endpoint (GitHub API, personal website, keyserver)
- Standard
git verify-commitis sufficient — no proprietary tools or platform APIs needed - Platform failure or censorship does not invalidate the repository identity
did:repo:423c9aee3c2cfd0d48ccacf645d3432b9b6bf2b2
The included verify-gist.sh walks three phases of the Progressive Trust lifecycle:
- Wholeness — the inception commit is empty (no files), carries the required initialization message, and includes a Signed-off-by trailer
- Proofs — an SSH signature is present and, if
allowed_signersis configured, cryptographically verified - References — the signing key fingerprint is checked against GitHub's public SSH signing keys API to confirm it belongs to a registered account
git clone https://gist.github.com/e2d59c62e3e50abe2595d74c0fd6f782.git oi-gist-poc
cd oi-gist-poc
sh verify-gist.shcurl -fsSL https://gist.githubusercontent.com/ChristopherA/e2d59c62e3e50abe2595d74c0fd6f782/raw/9b4b13421356584112a028c1b13c6e3ee68c3f77/verify-gist.sh | lessRequirements: git, curl. Optional: jq (for structured GitHub API parsing), gh (for authenticated API access).
GitHub's Gist API requires at least one file at creation time — there is no way to create a gist with an empty initial commit. To work around this:
- Created a gist via
gh gist createwith a placeholder file - Cloned the gist as a standard Git repository
- Created an orphan branch with a signed, empty inception commit matching the Open Integrity specification
- Added
verify-gist.shas the second commit, signed with the same key - Added this
README.mdas the third commit, also signed - Force-pushed the rewritten history to replace the original
The signing key (SHA256:a61TkTtLFGEYOmdRMbpYGkZwXw2QUrGkAWp3dok8jcw) is an Ed25519 key registered on GitHub for @ChristopherA. Anyone can confirm the key's registration via that public API endpoint — no authentication required.
- Gist IDs are opaque: The gist identifier (
e2d59c62e3e50abe2595d74c0fd6f782) is server-assigned and unrelated to the inception commit hash. The DID uses the commit hash. - Force-push required: The inception commit can only be inserted by rewriting history after gist creation. This is a one-time operation.
- Web edits break the chain: Commits made through the GitHub Gist web editor are unsigned and use
GitHub <noreply@github.com>as committer. Edits should be made locally and pushed with a signed commit. - No branch protection: Gists have no branch protection rules. Anyone with push access could rewrite history.
- Open Integrity Project — cryptographic roots of trust for Git repositories
- Progressive Trust — the trust lifecycle that structures the verification phases
- did:repo method — DID method specification for Git repositories
- GitHub SSH Signing Keys API — public endpoint for verifying registered signing keys