Check a receipt against the ledger that issued it.
Paste a receipt or drop a .dsr file. We check its signature against our current published key, or the vault's own key if it brings one; a sealed receipt, its content hash. For eight of the ten receipt types we find it in our ledger and compare the prior hash we recorded, and for an R1 we recompute its score. No account, no install.
Every one of these checks runs on our servers, against our records, so this page is Déjà answering for Déjà. It is the quick check, and the only one that can see our ledger. For evidence that doesn't depend on us, run the open-source verifier on your own machine.
- Runs on
- Déjà's servers
- Account
- none
- Receipt types
- 10
- Size limit
- 2 MB
- Rate limit
- 60 an hour
- Keys tried
- every key we publish, or the vault's own
- Report
- PDF and ZIP, unsigned
- Independent of Déjà
- no — use the CLI
Check a receipt
Seven checks, in order.
The first check that fails stops the run. The checks after it are marked not run, not failed, so the result says exactly where it stopped and why.
- 01
Parsed
A DSR/1.0 envelope carrying the eight fields every receipt has, from dsr_version to signature.
- 02
Type recognised
One of the ten receipt types this checker knows: R0, R1, R1-L, R1-N, R2, R2-F, R2-R, RV, RE and RG.
- 03
Vault found
The vault the receipt names exists in Déjà's records.
- 04
Signature valid
Ed25519 receipts against Déjà's current published key; a vault that brings its own RSA-PSS or ECDSA key, against that key. A sealed receipt carries a content hash instead of a signature, and the hash is recomputed.
- 05
In the ledger
Found in Déjà's ledger by its signature, with the prior hash the ledger recorded. RV and RE receipts have no ledger lookup, so for them this check is n/a.
- 06
Tamper check
The signed bytes rebuilt from the receipt and verified again. It repeats check 4 on the same inputs, so expect the same answer.
- 07
Score recomputed
R1 only: the confidence score, recomputed from the receipt's eight factors, matches the one stored. For any other type, and an R1 without its factors, n/a.
- ✓ Checks passed
Every check that applies held.
Its signature or content hash holds; where its type has a ledger lookup, it is in our ledger with the prior hash we recorded; and an R1's score recomputes. A check that does not apply is shown as n/a, not as a tick.
- ✗ Failed at a check
Something didn't hold.
The result names the check and the reason. Keep the receipt and the result, and check it offline with the CLI as well.
- ◌ Could not check
A limit of this checker.
The receipt uses a canonical form this checker can't rebuild, or its envelope is missing fields that form needs, which we won't invent. That is not a finding about the receipt.
Two checks can come back n/a rather than ticked. The ledger check has no lookup for RV and RE receipts, and the score is recomputed only for an R1 that carries its factors. Nothing was checked, so nothing is claimed.
A quick check, not an independent one.
What it checks
On our servers, against our records.
- The signature
- Against our current published key, or the key a vault registered with us. A sealed receipt's content hash is recomputed instead.
- The ledger
- For eight of the ten types, that the receipt is in our ledger with the prior hash we recorded. The CLI can't see this; only we can.
- The signed bytes
- Rebuilt from the receipt and verified again: a repeat of the signature check, on the same inputs.
- The score
- R1 only: recomputed from its eight factors.
What it trusts
All three are ours. That is the point of this column.
- Our servers
- The check runs there. You see the answer, not the work.
- Our keys
- The keys we publish are read from our servers' configuration; a vault's own key, from our database.
- Our ledger
- Asking whether our ledger contains a receipt means asking us.
What it does not do
The list that keeps the other two honest.
- Replace an independent check
- For that, run the verifier on your own machine against the key you were given.
- Try a key we don't publish
- It tries our current, trial and retired keys, and names the one that matched. A receipt signed with any other key fails here; the CLI checks it against whichever key you give it.
- Verify an engagement
- The engagement tab lists what is in scope. It checks nothing.
- Sign its report
- The PDF and the working papers are unsigned.
- Keep your receipt
- It is not written to our database. What is, is below.
The CLI's middle column is shorter. It trusts the key you were given, and nothing of ours.
What a check leaves behind.
Each check writes one row to a verification log, listed opposite. The receipt itself is not written to our database. It is held in the memory of the server that checked it, and is gone when that server instance is recycled.
The two download links carry the receipt as well, encoded into the link, so the report and working papers can be rebuilt on a server that never saw your check.
Opening an engagement is logged against the engagement: which engagement, a hash identifying the auditor it was issued to, the audit tool you name, and how many receipts were in scope.
Both tabs allow 60 requests an hour from one address.
Written per check · verification log
- Vault
- The receipt's vault ID
- Type
- The receipt type
- Signature
- A SHA-256 of the signature, not the signature
- Result
- Passed, failed or could not check, and the reason
- You
- Your IP address, hashed with a salt that changes daily
- Session
- A random session ID
- When
- The time of the check
This page, or the verifier?
| Property | This page | dsr-verifier-cli |
|---|---|---|
| Runs on | Déjà's servers | Your machine, with no network |
| Keys it tries | Every key we publish, or the vault's own | The key file you give it |
| Sees our ledger | Yes, for eight of the ten types | No — only the bundle you were given |
| Independent of Déjà | No | Yes |
| Needs | A browser | An install, or a build from source |
| Checks | One receipt at a time | A whole bundle, or one receipt |
| Leaves you | A PDF and a ZIP, both unsigned | For a bundle, a JSON report, unsigned |
| Best for | A quick look, and confirming a receipt is in our records | Audit evidence |