DocsHow a signature holds up

How a signature holds up

A signature is only worth what can be shown about it afterwards. This page is what ShareSign records, where it is printed, and how anyone can check it, on every plan, including the free one.

What is recorded

The person, the moment, the connection, the files and every event, listed exactly.

The personName and email as the sender entered them, and the address the link was emailed to. A hand-off records both the person who passed it on and the person who signed.
The momentThe time of each event in UTC, to the second.
The connectionThe network address and browser of every view and every signature.
The filesA SHA-256 hash of every original file at upload, and of the signed PDF at completion.
Every eventCreated, sent, emailed, opened, reminded, signed, declined, passed on, address changed, completed, voided, expired, downloaded, deleted and restored, each with who did it. An agent that prepared a draft is named.

The certificate of completion

What the final page of a signed PDF states, and the one command that matches a file on your disk to it.

When the last signer signs, the field values are drawn into the PDF and a certificate is appended as the final page of the same file. It travels with the document wherever it is emailed or downloaded. It states:

  • The document’s title and its ShareSign document ID.
  • The SHA-256 hash of each original file, so the file you uploaded can be matched to what was signed.
  • When the document was completed, in UTC.
  • For each recipient: name and email; for signers, the time they signed, their network address and their browser; for people copied, that they received a copy.
  • Where anyone can check it: a link to sharesign.co/verify with the document’s own code, and the same as a QR code for a printed copy.

To check that a file on your disk is the original the certificate names, compute its hash and compare:

shasum -a 256 contract.pdf

The signed PDF’s own hash is recorded at completion and returned by the API, so a copy that has been altered after signing can be told from the one ShareSign produced. Anyone can make that comparison at sharesign.co/verify.

Checking a file

How anyone holding a signed PDF or a closing record can see at sharesign.co/verify whether a byte has changed, without sending us the file.

Anyone holding a signed PDF, or the closing record of a data room, can drop it on sharesign.co/verify and see whether it is exactly what ShareSign sealed. They need no account. The file never leaves their device: their browser works out its SHA-256 and only those 64 characters are sent.

Exactly what was sealedThe page says so, with what the file's own certificate prints: the title, who signed and when, and when it was sealed. Nothing that is not already in the file, and never an email address.
Something added afterwardsA PDF app that adds a comment, a highlight, a filled field or another signature usually writes it after the end of the file. The page finds the sealed part intact inside and says that something was added after sealing, and that what was added is not covered.
Changed or saved againWhen the file carries a ShareSign certificate but is not the sealed file, the page says so, and names the document from the certificate inside it. A PDF app rewrites a file when it saves one, so a harmless save and a changed contract look the same; the answer is the copy from the completion email.
A printed copyThe certificate prints a twelve-character code under a QR code. Scanning it, or typing the code, shows what was sealed, to hold against the paper.
A closing recordDrop the whole archive: the page checks its manifest against the seal, then every file in it against the manifest, and names any that differ. A file uploaded in parts is checked part by part, against each part's own fingerprint. A file downloaded from the room can be dropped in too, to see which version it is.
After deletionWhen a workspace deletes a document or a room, we keep the fingerprint, seal code, sealing time and independent timestamp proof. The public check no longer returns the document title, signer names or room name. A copy still checks, and the page says the rest is in the certificate inside the file.
No recordAnything ShareSign did not seal, including an unsigned original, gets the same answer: we have no record of it.
Many at onceWith an API key, POST /v1/verify takes up to 100 fingerprints and answers each in the same words, for a bank, an auditor or a firm checking a folder. An agent does the same with sharesign_check_files. Any file from anyone, not only your own.

A check shows that a file is byte for byte what ShareSign sealed and that nothing in our record of it has changed since. It does not say whether an agreement is valid for a given purpose, or who a signer was beyond what the certificate records. The sender sees on the document’s page how many times it has been checked, and when last; never who checked it.

Timestamped independently

Each night's seals timestamped by DigiCert and Sectigo, and how to check a proof with OpenSSL, without ShareSign.

Each night at 00:15 UTC, ShareSign asks two authorities it does not run, DigiCert and Sectigo, to timestamp a single fingerprint that covers the day’s seals. That fingerprint says nothing about any document. Each timestamp is the authority’s own signed RFC 3161 token, and a document’s proof carries both.

A checked file’s result offers its proof: the file’s fingerprint, its path to that night’s root, and the two tokens. With the proof, anybody can show the file existed by that night, using a few lines of any language and OpenSSL, without asking ShareSign anything, and whether or not ShareSign is still here.

First, the path. A leaf is the SHA-256 of the byte 0 and the fingerprint; each step joins with the byte 1, on the side the step names. It must end at the root:

python3 - proof.json <<'EOF'
import hashlib, json, sys
p = json.load(open(sys.argv[1]))
h = hashlib.sha256(b"\x00" + bytes.fromhex(p["fingerprint"])).digest()
for step in p["path"]:
    s = bytes.fromhex(step["hash"])
    h = hashlib.sha256(b"\x01" + (s + h if step["side"] == "left" else h + s)).digest()
print("path leads to the root:", h.hex() == p["root"])
EOF

Then each token, saved from its download address, against the root and your computer’s trusted certificates (on Debian and Ubuntu they are in /etc/ssl/certs/ca-certificates.crt):

openssl ts -verify -digest <root> -in digicert.tsr -CAfile /etc/ssl/cert.pem
Verification: OK

And the fingerprint is the file’s own: shasum -a 256 on the file must print the proof’s fingerprint. A seal made today is timestamped tonight; until then its result says so.

The audit trail

Why a row cannot be changed or removed without every hash after it breaking.

Every event above is a row in an append-only table: the database itself refuses to update or delete a row, for us as much as for anyone. Each row carries a SHA-256 hash of the previous row’s hash together with its own contents, so the trail is a chain. Change one row, or remove one, and every hash after it stops matching; a break is detectable, and a trail that verifies is one that has not been touched since it was written.

The trail is shown on the document page as its activity, and returned by the API at GET /v1/documents/{id}/audit with each row’s hash, so you can keep a copy and verify it yourself. It can also be downloaded as a spreadsheet.

The audit trail as a spreadsheet

The trail in Excel or Sheets, for one document or for every document between two days.

The trail can be downloaded as a CSV file that opens in Excel, Numbers or Google Sheets, on every plan. For one document, use Download as CSV beside its activity. For every document between two days, up to a year at a time, an owner or admin uses Settings, Data. Deleted documents are left out, and taking the whole trail out is itself recorded in the workspace’s activity.

One row per eventWhen it happened, the document, who did what in the same words as the document's page, the recipient's name and email, the network address and device, and any details such as a decline reason.
TimesIn UTC, in a column that says so, so two people in two countries read the same instant.
CheckableEach row carries its own hash and the hash of the row before it. Hold a row against the certificate, or recompute the chain, without asking us.
Names in any scriptArabic, Hindi, Chinese and the rest arrive in the spreadsheet as they were typed.
Safe to openA name or a reason that begins with =, +, - or @ cannot run as a formula: it arrives as plain text.

What is not here yet

Advanced and qualified signatures are not built. If your agreement needs one, this says so now.

ShareSign does not yet issue advanced (PAdES) signatures sealed with a hardware-backed key, or qualified electronic signatures through a qualified trust service provider. Both are planned. If your agreement requires one of them today, ShareSign is not the right tool for that document, and we would rather say so here than on the day it matters.

Where the data lives, how it is encrypted, and how long it is kept is on data and regions; the one-page summary with links to every underlying document is the trust page.

Was anything here wrong, or missing?

Tell us what you were trying to do and we will fix the page. Write from the support page.

Last changed 19 September 2026.