Reference implementation. The cryptography is real and runs entirely in
this browser: keys are created with the Web Crypto API, credentials are signed with
ECDSA P-256 over a canonicalized document, and the issuer's did:key identifier
is decoded back to its public key by the verifier with no registry and no network call.
The institutions, learners and achievements are illustrative sample data, and nothing is
transmitted anywhere — the page cannot make a network request at all.
- W3C Verifiable Credentials 2.0
- Open Badges 3.0
- did:key (P-256, multicodec + base58btc)
- ECDSA P-256 · Web Crypto
- Bitstring status list revocation
- Hash-linked anchor ledger
Issue a verifiable credential
Acting as a credentialing institution. The achievement is assembled as an Open Badges 3.0
AchievementCredential inside a W3C Verifiable Credential, canonicalized, then
signed with the issuer's private key.
Issuer identity
A decentralized identifier derived from the issuer's public key. The key material is inside the identifier, so a verifier resolves it offline.
Generating a P-256 key pair…
Learner credential wallet
The learner holds and controls their own credentials. Each has its own holder
did:key. From here they can inspect the signed document, present it to a
verifier, or copy it. The issuer can revoke by flipping one bit on the published status list.
Verify a credential
Paste any signed credential, or press Present to verifier on a wallet card. Verification is fully independent of the issuer.
What gets checked
A credential is trustworthy only if every one of these holds.
- StructureA well-formed VC 2.0 envelope carrying an Open Badges 3.0 achievement, with a proof attached.
- Cryptographic signatureThe key resolved from the issuer DID verifies the exact canonicalized bytes. Any edit breaks it.
- Issuer identityThe DID decodes to a P-256 public key on its own — no registry, no central authority.
- Tamper-evident anchorThe credential's hash is on the append-only ledger and the whole chain re-verifies.
- Revocation statusThe bit at the credential's index is clear on the issuer's published bitstring.
- Validity periodNow falls inside the window the credential asserts.
Anchor ledger
Each issued credential's SHA-256 hash is anchored to an append-only, hash-linked ledger. Publishing only the hash keeps learner data off the ledger while making tampering evident: change any credential and its hash no longer matches its block, and every later block breaks too.