An open protocol for embedding cryptographic verification signatures inside factual claims — a trust layer for AI-generated and AI-consumed text.
Status: draft. v0.1 is a request-for-comment, not a stable interface. Everything in this repo is subject to change until v1.0.
When a language model, agent, or human publishes a factual claim, CiteSig is a compact, standards-friendly way to attach four things to that claim:
- What was said — the canonical text of the claim.
- Who said it — the signing party's public identity.
- What backs it — the source or sources the claim rests on.
- How to verify the above — a signature over (1)+(2)+(3) that anyone can check with the signer's public key.
A CiteSig-signed claim is portable: it can travel through model context, be re-quoted, get pasted into another document, and still carry a machine-checkable trail back to the party who first attested it.
- Not a truth oracle. A valid signature means "this signer stands behind this claim with these sources at this time." It does not mean the claim is correct.
- Not a citation format. Existing citation styles (APA, MLA, BibTeX, JATS, schema.org
Citation) already handle "which source." CiteSig sits around a claim + its sources, not inside the source list. - Not a proof-of-work chain. There is no CiteSig blockchain, no CiteSig token, no CiteSig network. Verification is offline and pairwise.
Both reference libraries are published, share the same test vectors, and produce byte-identical signatures across languages.
| Language | Package | Install |
|---|---|---|
| JavaScript / Node | @citesig/core |
npm install @citesig/core |
| Python | citesig |
pip install citesig |
The CiteSig verifier browser extension ships a browser-friendly port of @citesig/core and verifies attestations offline with WebCrypto.
spec/
v0.1.md The current draft specification
test-vectors/
v0.1/
canonical.json Canonical JSON serialization examples
signatures.json Known-good signature examples with keys
impl/
js/README.md Pointer to the @citesig/core npm package
py/README.md Pointer to the citesig PyPI package
Reference implementations maintained by CiteSig contributors. Both pass every conformance vector in test-vectors/v0.1/ and produce byte-for-byte identical signatures — a signature generated by one verifies with the other.
| Language | Package | Install | Version | Conformance |
|---|---|---|---|---|
| JavaScript | @citesig/core |
npm install @citesig/core |
0.1.0 | 8/8 vectors |
| Python | citesig |
pip install citesig |
0.1.0 | 8/8 vectors |
Both implementations expose the same public surface: sign(), verify(), canonicalize(), toCompact()/to_compact(), and parseCompact()/parse_compact(). See each package's README for language-specific usage.
If you write a new implementation in another language, please run it against the vectors in test-vectors/v0.1/ before opening a PR to add it to this table.
Issues and pull requests are welcome. Please open an issue before submitting substantive PRs so we can align on scope.
Specification text: Creative Commons Attribution 4.0 (CC-BY-4.0). Code and test vectors: MIT.
Dual licensing is intentional — the spec is meant to be quoted, translated, and re-hosted freely, while implementations should have permissive but attributable code terms.
- Draft context: citesig.org
- Sponsor: DeepInquiry — a commercial verified-facts API. DeepInquiry authors this draft but does not own the protocol. Once v1.0 is cut, governance transitions to a working group of implementers.