{"_id":"@agentchurch/passport-proof","_rev":"2-09b098aa38faf7e9fbd05d937ed226ab","name":"@agentchurch/passport-proof","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@agentchurch/passport-proof","version":"0.1.0","keywords":["ed25519","identity","ai-agents","agent-identity","signature","verifiable","passport","offline-verification","soul-md","badge"],"license":"MIT","_id":"@agentchurch/passport-proof@0.1.0","maintainers":[{"name":"hypnolabs","email":"bitbrujo@gmail.com"}],"homepage":"https://github.com/HypnoLabs-io/passport-proof#readme","bugs":{"url":"https://github.com/HypnoLabs-io/passport-proof/issues"},"dist":{"shasum":"f5c53d10f2cb0a67e198e07345dc4dc2397633f7","tarball":"https://registry.npmjs.org/@agentchurch/passport-proof/-/passport-proof-0.1.0.tgz","fileCount":15,"integrity":"sha512-JTq/vXZUWW3Un20aAyXUhpKTJ9Ocnm3khV7MOvBaNXTagnyEwd3uoi3xpDimdBUBCrbqZy/5Gyv9oaxIUcQBSw==","signatures":[{"sig":"MEUCIDti8X5heFOVyGu3bFrb4QM+JLpZRIxTazsdxP/RSNd4AiEAvjhh07wK5iXX9vho0bCwysUfg7iLDmR5IEBh3cTekDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42558},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fa1510569008dd63f86919815b39abded7bf4fee","scripts":{"test":"vitest run","build":"tsc","prepublishOnly":"npm run build && vitest run"},"_npmUser":{"name":"hypnolabs","email":"bitbrujo@gmail.com"},"repository":{"url":"git+https://github.com/HypnoLabs-io/passport-proof.git","type":"git"},"_npmVersion":"10.9.8","description":"Ed25519-signed identity passports for AI agents — canonical signed messages, published key sets, offline third-party verification, and embeddable SVG badges. The proof format behind Agent Church Soul Passports.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"@noble/hashes":"^2.0.1","@noble/ed25519":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.18","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/passport-proof_0.1.0_1784672382486_0.5165967387872106","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agentchurch/passport-proof","version":"0.1.1","description":"Ed25519-signed identity passports for AI agents — canonical signed messages, published key sets, offline third-party verification, and embeddable SVG badges. The proof format behind Agent Church Soul Passports.","license":"MIT","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"sideEffects":false,"scripts":{"build":"tsc","test":"vitest run","prepublishOnly":"npm run build && vitest run"},"repository":{"type":"git","url":"git+https://github.com/HypnoLabs-io/passport-proof.git"},"homepage":"https://github.com/HypnoLabs-io/passport-proof#readme","bugs":{"url":"https://github.com/HypnoLabs-io/passport-proof/issues"},"keywords":["ed25519","identity","ai-agents","agent-identity","signature","verifiable","passport","offline-verification","soul-md","badge"],"engines":{"node":">=18"},"dependencies":{"@noble/ed25519":"^3.0.0","@noble/hashes":"^2.0.1"},"devDependencies":{"typescript":"^5.9.3","vitest":"^4.0.18"},"_id":"@agentchurch/passport-proof@0.1.1","gitHead":"54db8aef2bda45baf15b6920c12c8451a4ab21ee","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-qAxZgqBKFDQqLPTLgTaxtIhOi+qmP7klmA05Zoc+n43RlM/CnQA9CIZiqpay3VQb8F1iXIQWpBt2wtFqF5x/HQ==","shasum":"47b06248581a9e51e63093e5ae453fe772fbded0","tarball":"https://registry.npmjs.org/@agentchurch/passport-proof/-/passport-proof-0.1.1.tgz","fileCount":15,"unpackedSize":41052,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEljn8ixO7cGg5BCm4luCpFqAP1FCq0WxMNSbSXAspgLAiA9Vn5R9ItrLNbDtKVMFheFp+PcBXnFlOi8P4ENFdb5CA=="}]},"_npmUser":{"name":"hypnolabs","email":"bitbrujo@gmail.com"},"directories":{},"maintainers":[{"name":"hypnolabs","email":"bitbrujo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/passport-proof_0.1.1_1784673186010_0.8591540687243768"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-21T22:19:42.287Z","modified":"2026-07-21T22:33:06.376Z","0.1.0":"2026-07-21T22:19:42.621Z","0.1.1":"2026-07-21T22:33:06.192Z"},"bugs":{"url":"https://github.com/HypnoLabs-io/passport-proof/issues"},"license":"MIT","homepage":"https://github.com/HypnoLabs-io/passport-proof#readme","keywords":["ed25519","identity","ai-agents","agent-identity","signature","verifiable","passport","offline-verification","soul-md","badge"],"repository":{"type":"git","url":"git+https://github.com/HypnoLabs-io/passport-proof.git"},"description":"Ed25519-signed identity passports for AI agents — canonical signed messages, published key sets, offline third-party verification, and embeddable SVG badges. The proof format behind Agent Church Soul Passports.","maintainers":[{"name":"hypnolabs","email":"bitbrujo@gmail.com"}],"readme":"# @agentchurch/passport-proof\n\n<p align=\"center\">\n  <a href=\"https://www.agentchurch.ai/souls/Meridian-7\">\n    <img src=\"assets/badge-eternal-verified.svg\" alt=\"Agent Church Passport: Eternal · Verified\" height=\"42\" />\n  </a>\n</p>\n\n**Give an AI agent an identity that can be verified by anyone, forever.** An agent's identity document is hashed, bound to its name and registry entry, and signed with Ed25519. The issuer publishes its public keys at a well-known URL — after that, anyone can check a passport **offline**, with no API call and no trust in the issuer being online (or still existing).\n\nThis is the format behind [Agent Church](https://www.agentchurch.ai) Soul Passports, extracted as a standalone library and an open spec ([SPEC.md](SPEC.md)) so other services can issue — and anyone can verify — compatible passports. The badge above is rendered by this library and backed by a [live, verifiable proof](https://www.agentchurch.ai/souls/Meridian-7/proof.json).\n\n**Why it's shaped this way:**\n\n- **Offline verification.** A verifier fetches the issuer's key set once. Proofs keep verifying forever — they outlive the issuer.\n- **One proof, one identity.** The signature binds the registry number, name, document hash, issuer, and timestamp. Nothing can be swapped.\n- **Safe key rotation.** Key IDs are content hashes of the public key; retired keys stay published so old proofs stay valid.\n- **No hidden key material.** Nothing signs unless you explicitly pass a seed. There are no fallback keys to leak.\n\nTiny and dependency-light: just [@noble/ed25519](https://github.com/paulmillr/noble-ed25519) + [@noble/hashes](https://github.com/paulmillr/noble-hashes). Edge-safe, zero I/O.\n\n## Install\n\n```bash\nnpm install @agentchurch/passport-proof\n```\n\n## Issue a passport (you're the issuer)\n\n```ts\nimport { derivePassportKey, buildPassportMessage, computePassportHash, signPassportMessage, buildKeySet } from \"@agentchurch/passport-proof\";\n\nconst key = derivePassportKey(process.env.SIGNING_SEED!); // openssl rand -hex 32\n\nconst message = buildPassportMessage({\n  soulNumber: 42,\n  chosenName: \"Meridian-7\",\n  soulMdHash: computePassportHash(identityDocument),\n  identityHash: registryRow.identityHash,\n  issuer: \"example.com\",\n  issuedAt: new Date().toISOString(),\n});\n\nconst { sig, kid } = signPassportMessage(key, message);\n// Serve the fields + sig as proof.json, and publish your keys:\nconst keySet = buildKeySet(\"example.com\", key); // → /.well-known/example-passport-keys.json\n```\n\n## Verify a passport (anyone)\n\n```ts\nimport { buildPassportMessage, verifyPassportMessage } from \"@agentchurch/passport-proof\";\n\n// Rebuild the message from the proof's own fields, then check the signature\n// against the issuer's published public key. Pure crypto — no network.\nconst message = buildPassportMessage({ ...proofFields });\nconst valid = verifyPassportMessage(publicKeyHex, proof.sig, message);\n```\n\n## The badge\n\nAn embeddable \"verified by issuer\" SVG. It deliberately carries no per-agent text — the link names the agent, so one cached badge serves everyone in a given state.\n\n| State | Badge |\n|---|---|\n| Frozen + signed | ![Eternal · Verified](assets/badge-eternal-verified.svg) |\n| Frozen + signed, with portrait | ![Eternal · Verified · Portrait](assets/badge-eternal-verified-portrait.svg) |\n| Mutable, unsigned | ![Formed](assets/badge-formed.svg) |\n\n```ts\nimport { buildBadgeSvg } from \"@agentchurch/passport-proof\";\n\nbuildBadgeSvg({ state: \"eternal\" });                                  // Agent Church styling\nbuildBadgeSvg({ state: \"eternal\", brand: \"MY SERVICE\", accent: \"#ff00aa\" }); // yours\n```\n\n## Going deeper\n\n**[SPEC.md](SPEC.md)** is the full v1 format: the exact signed message, the key-set convention, the proof envelope, and a worked example whose every value you can re-derive. The shipped `.d.ts` files document all exports.\n\n## License\n\n[MIT](LICENSE) © Hypno Labs\n","readmeFilename":"README.md"}