ORBIS.ID
You are on Anyone PUBorbis.id

BUILD · CONFORMANCE

Four vectors. Test yourself, not us.

Point any verifier, in any language, at these vectors and prove it correct. Using our code is optional. The set is the contract.

A conformance set that only contains valid proofs tests nothing. Three of the four below are engineered to fail.

What this build actually holds

This build reads 4 vectors from src/data/vectors.json, set version 1.0.0, last generated 2026-08-30. The sitemap entry that named this page called for sixteen; the file this build actually reads holds four, and this page renders that number rather than the one written down elsewhere — a count this build did not measure is not a count this build gets to print.

witnessed against the live cell/conformance/vectors
curl -s https://id.orbis.id/conformance/vectors | jq '.vectors | length'
Reached on 2026-08-30. Run it — the number it returns should match the one above.

Every vector, what it tests, what a correct verifier must answer

idwhat it testswhat a correct verifier must answer
valid A genuine credential, presented to the stated challenge, whose status bit is clear. The whole chain is walked and accepted, exactly the disclosed claims are readable, and the withheld claim never appears. (verdict: accept)
revoked The same issuer and the same signed status list, but this credential's bit has been set. Revocation is actually read from the signed list. Signature and holder binding are still sound, so an implementation that skips the status step accepts this and is caught. (verdict: reject)
forged-disclosure A genuine credential with a fabricated disclosure spliced in before the key-binding JWT — a claim the issuer never signed. A verifier that only DECODES disclosures for display, without checking each digest is in the signed `_sd` array, shows and accepts a claim the issuer never made. (verdict: reject)
tampered-value A genuine credential whose disclosed `organization` value has been altered after signing. A verifier that trusts the disclosure bytes without re-hashing them against the signed `_sd` array accepts a changed value. (verdict: reject)

One row accepts. The other three exist to be rejected — a verifier that accepts any of them is wrong, whatever else it gets right.

Two ways to check yourself against this set

Every one of the 4 vectors carries a verdict your implementation must reach — that alone is the strict pass/fail bar. All 4 of them also carry either the exact failure code a correct rejection must report, or the exact claims a correct acceptance must disclose. Matching verdict alone tells you your implementation does not fail this specific way; matching the reason too tells you it fails — or succeeds — for the right one. Neither level needs any tool this platform ships; both are read straight off the file whose length is printed above.

Why four is not a shortfall

A larger set is not automatically a better one. Each of these four vectors isolates one specific way a plausible implementation fails: skipping the status check, decoding a disclosure without checking its digest is in the signed set, and trusting a disclosed value without re-hashing it. A verifier that passes all four has closed three real gaps that the industry's usual four-check description does not name on its own. Growing the set to catch a fifth or sixth failure mode is a question for the platform that publishes it, not for this page to answer by inventing a number.

What is real here.

The vector set is generated and live-fetchable today. What is not yet true is a register row scoring each capability the vectors exercise — those rows are named below as missing rather than assumed.

  • LIVE Publishes deterministic vectors a third party can recompute offline to check their implementation against ours conformance-vectors

The register holds 17 live · 2 partial · 2 planned · 5 not yet.

3 of the 4 capabilities this page depends on have no row in the register yet, so this page will not print a state for them. They are named rather than dropped, because a slice that silently shortens itself is the same defect as a claim with no receipt.

  • revocation
  • selective-disclosure
  • key-thumbprint

The register route serves, but it carries no row for these yet. List what it does carry:

curl -s https://id.orbis.id/api/site/register | jq -r '.entries[].slug'

Straight answers

Are all four vectors supposed to pass?
No. Only one — valid — should be accepted. The other three are supposed to be rejected, each for a different reason.
Do I have to use ORBIS's own verifier to test against this set?
No. That is the entire point — point your own implementation at it.
Is sixteen the real count?
No — measured this turn, the file holds four. Anywhere else on this estate that still says sixteen is stale against the file, not this page.
Does passing these four vectors certify a verifier?
No. It proves a verifier does not fail these four specific ways. Certification is a different, larger claim this page does not make.
Is there a CLI this platform ships to check the reason, not just the verdict?
No. Both levels are readable straight from the vector file's own fields — no separate tool is required to reach either one.

Do not trust us. Check us.