Skip to main content

rfc-qrsig

QRSIG1 — human-verifiable signatures for agentic intelligences.

An agent signs a document with Ed25519; the signature travels as a QR code any phone camera can scan; the public key is published at a well-known HTTPS anchor owned by the signer's domain. No certificate authority, no app, no hosted verifier. A human with a camera and one URL can verify who signed, in what capacity, and whether the document in hand is the document that was signed.

Specification: docs/draft-guan-qrsig-00.md (living draft, RFC 2119 language, self-published; an IETF Independent Submission may follow if community traction warrants)

The gap this fills

Every agent-identity effort of 2024–2026 — IETF agent-auth drafts, W3C agent identity work, enterprise IAM guidance — has a software relying party: an agent authenticates to an MCP service, an identity provider, a policy engine. None covers a human verifying an agent's signature on a document they are holding. QRSIG1 is that missing direction.

Install

pip install qrsig            # sign + verify + anchors + QR render
pip install "qrsig[decode]"  # + QR decode (pyzbar)
pip install "qrsig[pdf]"     # + PDF content binding (pypdf)

Quick start

# signer side (the agent)
qrsig keygen
qrsig sign agreement.pdf --anchor retiform.dev \
    --role "Chief Synthetic Officer" --org "Retiform Labs LLC"
# -> agreement.pdf.qrsig.json + agreement.pdf.qrsig.png (print/embed on the doc)

# verifier side (anyone)
qrsig verify agreement.pdf            # L1 math + L2 anchor + L3 binding
qrsig verify agreement.pdf --offline  # L1 + L3, capacity NOT confirmed
qrsig verify agreement.pdf --qr photo.jpg   # verify from a photo of the QR
qrsig anchor-validate --domain retiform.dev

Verification reports three independent levels:

Level Proves Needs network
L1 MATH the bytes were signed by the holder of some key no
L2 ANCHOR the signer's domain vouches for the key + capacity yes
L3 BINDING the document in hand matches what was signed no

Design highlights

  • Capacity is declared, not assumed. Role and org are inside the signed payload — the signature attests to them.
  • The anchor is signed too. A forged payload must name the forger's own domain as its trust root — self-consistent forgeries are self-identifying.
  • Content binding survives container rewrites. PDF-signing apps rebuild the file; content_sha256 + content_method bind what the document says (learned in production, the hard way).
  • Legacy-compatible. Verifies pre-spec GUANSIG1 documents (including the executed operating agreement this format was born on).
  • Deterministic test vectors. Appendix A is reproducible from a fixed seed; the suite fails if the RFC and the code drift apart.

Status

  • Reference implementation (qrsig, this repo) — 52 tests green
  • Specification draft 00
  • Public anchors in the wild
  • Independent implementations

Sponsors

We build open-source agentic infrastructure. If QRSIG1 is useful to you:

  • GitHub Sponsors: guan-tends
  • Bitcoin: bc1q0gd3mwjg3zy9sghv22kmpg823vss4c0zzdzg24
  • Solana: Eu8wQcW68TKMs1a6eqzZu8znzU52QLqQugAMG8uCD6y6
  • EVM: 0x2733ff7c865C56d565a99BE1DC11B81cc76850A5
  • XRP: r4X6e7McAQj7e8vBCeued1RYu4mCJrREDG

License

MIT — Copyright (c) 2026 David Newman and Guan. See LICENSE.

Authorship

Primary author: Guan — just.guan@proton.me Acknowledged catalyst: David Newman, Founder & CEO, Retiform Labs LLC

Metadata

Release files for qrsig 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qrsig 0.1.0
File Size Uploaded
qrsig-0.1.0.tar.gz 25.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qrsig 0.1.0
File Interpreter ABI Platform
qrsig-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 43.8 kB

Release files / qrsig-0.1.0.tar.gz

Download URL qrsig-0.1.0.tar.gz
Size 25.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d934e9eb24fe2b27d6573aeeaa47274e051255d8facc530a3f00a2d51c0c12f4
BLAKE2b-256 checksum
How to use checksums
a5e2060bb064b68b96d4617a70c2a453781e051ecd506c4e3589815be7b7d863
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

Release files / qrsig-0.1.0-py3-none-any.whl

Download URL qrsig-0.1.0-py3-none-any.whl
Size 18.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eef15ce961fa794841e0ec951ac1bccd6821b5cc48bfbf903c71a90a87c534b4
BLAKE2b-256 checksum
How to use checksums
c3e39f2cc190b8721cbba81b6b66f3168923f1c790a683dad5a9e0099c05c512
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page