signforge-verify
Verify SignForge-signed documents offline. No account needed, no internet needed for cryptographic verification.
Why Independent Verification Matters
Most e-signature platforms lock your proof inside their ecosystem. If the vendor disappears, your proof disappears. SignForge takes a different approach: every signed document contains a complete, self-verifying cryptographic proof bundle using open standards.
This package lets anyone verify a SignForge-signed document -- developers, auditors, legal teams, or even AI agents -- without needing a SignForge account or any internet connection.
"Don't trust us. Verify yourself." -- SignForge Trust Architecture
What This Verifies
Every SignForge-signed document contains a cryptographic proof bundle. This package verifies:
- W3C Verifiable Credential -- ECDSA P-256 DataIntegrityProof (ecdsa-jcs-2019)
- JAdES JWS -- EU-standard ES256 compact signature (ETSI TS 119 182)
- Merkle transparency proof -- RFC 6962 inclusion proof against a signed tree head
- RFC 3161 timestamp -- DigiCert TSA timestamp presence
- Signer identity credentials -- per-signer W3C VCs
- DID:web platform identity -- DID document snapshot
Install
pip install signforge-verify
For PDF verification (optional):
pip install signforge-verify[pdf]
1 dependency: cryptography (widely used, well-maintained).
PyMuPDF is optional -- only needed to extract proof from PDFs.
Quick Start
from signforge_verify import verify
# Verify a signed PDF
result = verify("document-signed.pdf")
print(result["valid"]) # True
# Verify a .proof.html file
result = verify("document.proof.html")
print(result["checks"]["vc_signature"]["status"]) # "pass"
CLI Usage
# Verify a signed PDF
signforge-verify document-signed.pdf
# Verify a proof document
signforge-verify document.proof.html
# JSON output (for scripting / CI pipelines)
signforge-verify document-signed.pdf --json
Example output:
============================================================
SignForge Proof Verifier
============================================================
File: document-signed.pdf
Format: v1.0
✓ Vc Signature: ECDSA P-256 DataIntegrityProof verified
✓ Jades Jws: ES256 JAdES JWS verified
✓ Merkle Proof: Merkle inclusion verified (tree size: 23)
• Timestamp: RFC 3161 timestamp from DigiCert at 2026-04-15T11:56:56Z
✓ Signer Identities: 1 signer identity VC(s) verified
• Did Snapshot: DID document captured at 2026-04-15T11:56:56Z
✅ DOCUMENT VERIFIED
============================================================
API Reference
verify(filepath) -> dict
Run all verification checks on a signed PDF or .proof.html file.
Returns a dict with:
valid(bool) -- overall verification resultchecks(dict) -- individual check resultsfile(str) -- input file pathformatVersion(str) -- proof format version
extract_from_pdf(filepath) -> dict | None
Extract the proof bundle from a signed PDF. Requires PyMuPDF.
extract_from_html(filepath) -> dict | None
Extract the proof bundle from a .proof.html file.
verify_data_integrity_proof(vc, pub) -> bool
Verify a W3C VC DataIntegrityProof signature.
verify_jades_jws(jws_compact, pub) -> bool
Verify a JAdES compact JWS (ES256).
verify_merkle_inclusion(leaf_hash, proof_path, root) -> bool
Verify a Merkle inclusion proof (RFC 6962).
How It Works
SignForge embeds a W3C Verifiable Credential and supporting cryptographic proofs inside every signed document. This verifier:
- Extracts the proof bundle from the document
- Imports the embedded ECDSA P-256 public key (JWK format)
- Verifies the VC signature using JCS canonicalization (RFC 8785)
- Verifies the JAdES JWS signature
- Verifies Merkle inclusion against the transparency log tree head
- Reports timestamp and identity credential status
All verification happens locally -- no network requests, no SignForge servers involved.
Learn more:
- Verification Architecture -- technical deep-dive for developers
- Proof Format Specification v1.0 -- full bundle schema reference
- Online Verifier -- verify documents in your browser
Use Cases
- Developers -- integrate document verification into your app or CI pipeline
- Legal & Compliance -- independently audit e-signature validity
- AI Agents -- let ChatGPT or Claude verify documents via tool use
- Archival -- confirm document integrity years after signing, even if SignForge no longer exists
Related
- SignForge -- Free e-signature platform. Sign documents in seconds.
- SignForge Verify (online) -- Verify documents in your browser
- @signforge/verify (npm) -- JavaScript/TypeScript verification package
- Sign PDF Online Free -- Sign PDFs without creating an account
License
MIT
Metadata
Release files for signforge-verify 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| signforge_verify-1.0.0.tar.gz | 69.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| signforge_verify-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 79.8 kB
Release files / signforge_verify-1.0.0.tar.gz
| Download URL | signforge_verify-1.0.0.tar.gz |
|---|---|
| Size | 69.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2fc7e779a267517c272ee7b69a7636ec71ca9a66eb01f0a4c13b3da842f39554
|
|
BLAKE2b-256 checksum How to use checksums |
01f4bfcd993772907a30d82babf4d2d75cf634c2df66d438b3105fdee1c83a3d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.12.3
|
Release files / signforge_verify-1.0.0-py3-none-any.whl
| Download URL | signforge_verify-1.0.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ee3dc6b1cbf9623351262dce7bb55ecd6ba80a2140e701311223ae866f9a90e
|
|
BLAKE2b-256 checksum How to use checksums |
2c1bb44f09700590fdec33e7c0ac1584044425264129760cd900a970538fcc25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.12.3
|