Skip to main content

Verification Flow

Verification confirms who signed a document, when, and whether a copy is unchanged. There are two ways to verify, and they prove different things:

  • QR scan (phone or browser): proves who signed and when. Needs no account or software installation.
  • Desktop Verify (Veylent app): also proves the file in hand is the one that was signed.

QR Code Verification (Mobile)​

This is the primary method, designed for zero friction.

How It Works​

  1. Scan -- The verifier scans the QR code on the signed PDF with their phone camera
  2. Open -- The phone opens the verification URL in a browser, or in the Veylent Verify app
  3. Lookup -- The signature is looked up on the blockchain by the anchor ID in the URL
  4. Decrypt -- The key in the URL fragment decrypts the signing record entirely on the device
  5. Check -- The SHA-256 of the decrypted record must equal the composite hash on the blockchain, and the record must name the same anchor ID
  6. Display -- The page shows the signer's identity, signing time, and blockchain confirmation

The Key Never Leaves the Browser​

The verification URL has two parts:

HTTPS://VERIFY.GETVEYLENT.COM/V/<anchorId>#<encryptionKey>

The #fragment portion of a URL is never sent to any server -- this is a fundamental property of HTTP defined in RFC 3986. The encryption key stays entirely within the browser. The server sees the anchor ID (which is already public on the blockchain) but never the key.

Verification States​

StateMeaning
VerifiedAnchor found on-chain, record decrypted, its hash matches the on-chain composite hash, and it names this anchor ID
Partial Verification (no-key)Anchor found, but the URL has no key (fragment missing or stripped), so the details can't be opened
Doesn't match (mismatch)The record doesn't open with the key, doesn't hash to the on-chain composite hash, or names another anchor. Treat it as forged. No details are shown.
No such signature (not-found)No anchor with this ID on the blockchain
Couldn't verify (error)The link is malformed or the server couldn't be reached

What Is Displayed​

When fully verified:

Signer Information:

  • Name, email, type (individual/company)
  • Company and position (if applicable)
  • How the signer authenticated (trust anchor)

Document Information:

  • Document hash
  • Signing timestamp
  • Geolocation (if captured at signing time)

Blockchain Proof:

  • Anchor ID (shown as "Signature ID")
  • Transaction hash
  • Block time
  • Signature chain length

What a Scan Cannot Prove​

A scan never sees the document. It shows the document hash that was signed, but it cannot check that the paper or file in front of the verifier matches it. To check a copy, open it in the desktop app.

Desktop Verification​

The desktop app checks the file itself:

  1. Open the signed PDF in the verification tab
  2. The app finds each signer's layer: the first save whose signing history has that signer's entry last
  3. For each signer it cuts the file at the end of their layer and computes the SHA-256 of those bytes
  4. It looks up the signer's anchor and decrypts their record with the key from the QR URL in their history entry
  5. It checks that the record hashes to the on-chain composite hash, names the same anchor ID, links to the previous signer's anchor ID, and holds exactly the hash computed in step 3

The names and details shown come from the sealed record when it opens and checks out. The signing history in the file is plain and editable, so it is only shown as a fallback.

Document Results​

StatusMeaning
verifiedEvery signature checks out and nothing follows the last signer's layer
changed-after-signingEvery signature checks out, but something other than whitespace was added after the last signer's layer
failedAt least one signature doesn't match the blockchain or the file
uncheckedThe file looks intact, but the server couldn't be reached
legacySigned with an earlier Veylent format that can't be checked this way
rewrittenAnother app rewrote the whole file after signing, so the signers' layers can't be found
not-veylentNo Veylent signing history

Signer Results​

StatusMeaning
validThe signer's record matches the blockchain and the file up to their layer
document-mismatchThe file up to this signature isn't the one that was signed
record-mismatchThe sealed record doesn't open, doesn't match the on-chain hash, or names another anchor
not-anchoredNo signature with this anchor ID on the blockchain
out-of-orderThe blockchain links this signature to a different previous signature
uncheckedThe server couldn't be reached, or holds no sealed record for this signature

The app also flags a signer who signed a version that was changed after the previous signature.

Viewing Signed Versions​

Because each signed version is a byte prefix of the final file, the app can show any of them. View on a signer opens the file as it was right after that signer's layer. View original opens it as it was before anyone signed.