PDF Signature Checker

Share:

Inspect digital signatures in PDF files — signer, certificate, signing time, cryptographic integrity. All client-side.

RT-IMF-004 · Image & File
Your browser is too old for this tool’s interactive features. Please update to Safari 13.1, Chrome or Edge 80, Firefox 74 or newer.

PDF Signature Checker Tool

Privacy: The PDF file never leaves your browser. All inspection and cryptographic analysis happens locally via self-hosted node-forge. Files are not uploaded anywhere.
Advertisement
After results · AD-W1 Responsive · Post-tool — peak engagement

How to use the PDF signature checker

Drop or pick a PDF

Drag any PDF onto the drop zone or click to file-pick. The tool reads the file directly in your browser — no upload to any server.

Review the signature summary

The summary panel shows how many signatures were found, how many verify, and the file size. Most signed PDFs have one signature; multi-party contracts can have several.

Inspect each signature card

Each signature gets a dark detail card showing signer common name and organisation, certificate issuer, certificate validity period, the signature's ByteRange (what part of the PDF is covered), signing time if embedded, and the digest algorithm used.

Read the limitations honestly

A green Signature verifies means three checks passed: the signed bytes still hash to the value the signer signed, the signer's RSA signature over that value verifies with the public key in their certificate, and the signature covers the whole file. It does not mean the certificate is from a trusted CA, that the certificate is still valid at the current date, or that the signature is legally binding. Use professional tooling for those.

Advertisement
After how-to · AD-W2 Responsive

PDF signatures — what they prove and what they don't

A digital signature inside a PDF is a piece of cryptographic data embedded in the PDF structure that proves two things: (1) the document hasn't been modified since it was signed, and (2) the signer was in possession of a specific private key at the time of signing. It does NOT prove the signer's real-world identity unless you also trust the certificate authority that issued that signer's certificate. The distinction between cryptographic validity and legal validity is what most users don't realise — and it's the source of every "but this PDF is signed!" misunderstanding in real-world contract disputes.

What the PDF actually contains

Inside a signed PDF, the signature lives in a dictionary referenced by the document's AcroForm. The key fields are /ByteRange (which bytes of the PDF are covered by the signature — typically everything except the signature blob itself), /Contents (a hex-encoded PKCS#7/CMS structure containing the actual cryptographic signature plus the signer's certificate), and /Filter + /SubFilter (which signature handler created the signature — most commonly adbe.pkcs7.detached for Adobe-flavoured signatures). The tool above reads these fields directly from the file bytes, parses the CMS structure with node-forge, recomputes the hash of the covered bytes with Web Crypto, and verifies the signature with the signer certificate's public key.

The PAdES levels

The European standard ETSI EN 319 142-1 V1.1.1 (April 2016) (PAdES — PDF Advanced Electronic Signatures) defines four baseline levels: B-B (basic — proves "someone with this key signed it"), B-T (basic + trusted timestamp from a TSA — proves "signed before this date"), B-LT (long-term — embeds all certificate chain info needed for future validation), and B-LTA (long-term with archive timestamp — for signatures that need to remain verifiable decades into the future). Trust lists — Adobe's AATL, the EU Trusted Lists — decide whether a certificate is trusted at all. None of that is checked here: this tool proves that a key signed these bytes, not that the key belongs to someone you should trust.

The byte-range trick — why "signed-then-edited" is detectable

The /ByteRange entry tells the verifier exactly which byte positions of the PDF are covered. Typically it's the whole file MINUS the bytes of the signature blob itself. The verifier hashes those bytes, then checks the hash against what the signature claims. If anyone modifies any byte in the covered range — including just adding a single space — the hash differs and the signature is invalid. The subtler case: new content appended after signing, as an incremental update. The original signature still verifies, because the bytes it covers are unchanged — but it no longer covers the end of the file. This tool reports exactly that, with the number of uncovered bytes.

ASEAN context — Singpass, MyDigital ID, PSrE

Singapore's national digital identity, Singpass, offers Sign with Singpass for signing documents digitally; Malaysia has MyDigital ID; in Indonesia, licensed certification providers (PSrE, Penyelenggara Sertifikasi Elektronik) issue signing certificates. Which certificates a court or counterparty will accept is a legal question that varies by country and by contract, and nothing in a PDF's bytes answers it — check the contract's governing-law clause before relying on a signature for anything important.

A signature that verifies can still be worthless, and one that verifies can still have been added to

01

PDF signatures use PKCS#7 / CMS (Cryptographic Message Syntax) embedded as hex-encoded bytes in the /Contents field of a signature dictionary — the same standard used in S/MIME email signatures.

02

The /ByteRange entry specifies exactly which bytes of the PDF are covered by the signature. Typically everything EXCEPT the signature blob itself — usually written as a 4-integer array.

03

PAdES (ETSI EN 319 142-1, 2016) defines four baseline levels — B-B, B-T, B-LT, B-LTA — each adding more long-term validation material.

04

The signed attributes are what the key signs; the document hash is one of them. Checking the hash without checking the signature proves nothing — anyone can recompute a hash.

05

Cryptographic validity ≠ legal validity. A signature can pass mathematical verification while the certificate has expired, been revoked, or come from an untrusted issuer in your jurisdiction.

06

The signer is identified by the issuer and serial number in the signature, not by position — the first certificate embedded is often a CA, not the signer.

07

"Signed then added to" is common and legitimate — a second signer, a form fill — but it means the first signature no longer covers the whole file, and this tool says so.

08

Embedded timestamps (PAdES B-T) come from a Time Stamping Authority via RFC 3161 — a separate cryptographic protocol proving the signature existed before a specific time.

09

The signing time shown is the signer's own claim, from the signed attributes; only a timestamp from a Time Stamping Authority (PAdES B-T) proves when.

10

PDF signatures support SHA-1, SHA-256, SHA-384, and SHA-512 digest algorithms. SHA-1 is no longer considered collision-resistant, so new signatures should use SHA-256 or stronger; this tool marks SHA-1 as deprecated.

Frequently asked questions

It means the covered bytes hash to the value that was signed, AND the RSA signature over that value verifies with the signer certificate's public key — so no byte in the covered range has changed since signing. It does NOT mean the certificate is from a trusted CA, that the certificate is still valid at the current date, or that the signature is legally binding.
Legal validity requires checking the certificate chain against a recognised trust list (AATL, EUTL, or a national equivalent), checking the certificate revocation list (CRL) or OCSP responder for the signing certificate, validating the certificate was active at signing time, and meeting jurisdiction-specific requirements. None of these can be done reliably client-side without external network calls. Use Adobe Acrobat Reader, a qualified e-signature platform, or a legal professional for binding verification.
No. The file is read locally via the browser File API and processed entirely client-side using self-hosted node-forge. Nothing is uploaded. You can verify by opening your browser's network tab — no requests fire when you select a PDF.
Up to a few hundred MB in theory. In practice, browser memory limits make ~50MB the comfortable maximum. Most signed contracts are well under 10MB.
Partially. If someone modifies bytes INSIDE the ByteRange after signing, the cryptographic check fails and we mark the signature invalid. If they add content AFTER the signed range (an incremental update — new annotations, a second signature), the original signature still verifies, and this tool shows it as verifies — but the file changed after signing, with the number of uncovered bytes. We don't currently detect. Always verify suspicious documents in Adobe Acrobat Reader.
CMS (Cryptographic Message Syntax, RFC 5652) is the IETF standard that grew out of RSA Laboratories' PKCS #7, which the IETF republished as RFC 2315. For PDF the difference rarely matters: the signature dictionary's /SubFilter — usually adbe.pkcs7.detached or, for PAdES, ETSI.CAdES.detached — names the format, and this tool shows the file's real value.
It verifies RSA (PKCS#1 v1.5) signatures with SHA-1, SHA-256, SHA-384 or SHA-512 digests. ECDSA and RSA-PSS signatures are reported as cannot verify this type rather than guessed at. SHA-1 is flagged as deprecated.
Two possibilities. Some PDFs use a "graphical signature" (a scanned signature image overlaid on the page) which is NOT a cryptographic signature — there's no cryptographic data to verify. Otherwise the signature may use a format this tool does not read, such as the oldest Adobe format (adbe.x509.rsa_sha1), which it reports as unreadable — try Adobe Acrobat Reader for those.
A trusted third party that adds a cryptographic timestamp to a signature, proving the signature existed before a specific time. PAdES B-T level requires a TSA timestamp. Common TSAs include Sectigo, GlobalSign, and (in the EU) member-state-recognised qualified TSAs.
Self-hosted node-forge v1.4.0 (275KB minified) for PKCS#7 and X.509 certificate parsing. All cryptographic operations use the browser's native SubtleCrypto where possible, falling back to forge for ASN.1 structure parsing. No third-party CDN, no remote calls.

Method & sources

How it computes

Finds each signature dictionary by its /ByteRange, hashes the covered bytes with Web Crypto, and checks three things: the hash equals the signed messageDigest; the RSA (PKCS#1 v1.5) signature over the DER-encoded signed attributes verifies with the certificate named by issuer and serial; and the range covers the whole file except /Contents. ECDSA and RSA-PSS are reported as unverifiable.

What this tool implements

  • Until this review the page called a signature "Crypto-valid" when the hash matched messageDigest, never checking the signature itself: a PDF edited, re-hashed and given a rewritten messageDigest passed. The kernel's test suite builds exactly that forgery and requires it to fail.
  • It also assumed the signer was the first embedded certificate, never flagged bytes added after signing, and printed "adbe.pkcs7.detached (assumed)" for every file; the real /Filter and /SubFilter are now read.
  • ETSI EN 319 142-1 V1.1.1 (April 2016) defines the PAdES baseline levels B-B, B-T, B-LT and B-LTA; RFC 5652 defines CMS, RFC 2315 PKCS #7 v1.5, RFC 3161 time-stamping.

Sources

Advertisement
Pre-footer · AD-W3 728 × 90