OC Lock
Take an envelope apart
Paste an envelope as JSON, base64url or a /unlock#… link, and see what it proves, field by field. No wallet; nothing leaves your browser. The demo is signed with a placeholder, so its sender check fails on purpose.
The sender’s signature does not hold
Whoever made it is not proven to be the address it names.
- Contents match the idPassed
- Sender’s signatureThe signature does not verify for the sender’s address.Failed
- From
- bc1qalice0demo0address0for0playground000
- For
- bc1qbob0demo0address0for0playground00000
- Sealed
- 28 Oct 2026, 07:11 UTC
- Id
- 836f97860c1bab0c2af67e6f3237cba222f4fd59679381e3afba8970bb0373f8
What this did not check
- That each recipient key is still current. The sender checked that when sealing.
- When it was really sent. The sealed time is the sender’s claim.
- Who else has seen the addresses and the hint. They are not encrypted.
Id
- Declared
- 836f97860c1bab0c2af67e6f3237cba222f4fd59679381e3afba8970bb0373f8
- Recomputed
- 836f97860c1bab0c2af67e6f3237cba222f4fd59679381e3afba8970bb0373f8
- Match
- Yes. The canonical bytes give the same id.
The id is the SHA-256 of the canonical JSON with sig.value emptied. One changed byte anywhere changes it.
Header
- v
- 2
- kind
- identity
- created_at
- 2026-10-28T07:11:57.728Z
- expires_at
- Never
- hint
- greeting
Algorithms
- kem
- x25519
- aead
- aes-256-gcm
- kdf
- hkdf-sha256
Sender
- address
- bc1qalice0demo0address0for0playground000
- sig.alg
- bip322
- sig.value
- ZmFrZS1zaWdu
Recipients (1)
- address
- bc1qbob0demo0address0for0playground00000
- device_id
- cfdd601be826835d6a59c993254eb578
- device_pk
- f7428eab665bb30c0e812f70678482f2b848cd5a4187bb6a7567af38e5528673
- eph_pk
- 8468677139c3f35737a02d6a5fe33b7608d724354f2fa11dee7a5de18eab3156
- wrapped_key
- gfBhFKZP32tFB_wS5NjGwSW3UcZblB39FLKak129Sva4a25p…
- nonce_kek
- 3e1e4a51f768a7077f089877
Payload
- nonce_ct
- 6bb1fb7e0cc0dfe9d6b08fd6
- ciphertext
- 92 characters of base64url
- Plaintext size
- About 53 bytes, plus a 16-byte GCM tag
Payment
None. Identity mode: no payment is asked for.
{"alg":{"aead":"aes-256-gcm","kdf":"hkdf-sha256","kem":"x25519"},"ciphertext":"9Wx8H5uRXFMMXl07wjt8qdpUbcGSc6oEqLeWbgYrvuiqqDLEB2HKaHXjyNBfEelY6rV7BAtkzvks1i5kfxnCQie2qo_T","created_at":"2026-10-28T07:11:57.728Z","expires_at":null,"from":{"address":"bc1qalice0demo0address0for0playground000"},"hint":"greeting","id":"836f97860c1bab0c2af67e6f3237cba222f4fd59679381e3afba8970bb0373f8","kind":"identity","nonce_ct":"6bb1fb7e0cc0dfe9d6b08fd6","payment":null,"recipients":[{"address":"bc1qbob0demo0address0for0playground00000","device_id":"cfdd601be826835d6a59c993254eb578","device_pk":"f7428eab665bb30c0e812f70678482f2b848cd5a4187bb6a7567af38e5528673","eph_pk":"8468677139c3f35737a02d6a5fe33b7608d724354f2fa11dee7a5de18eab3156","nonce_kek":"3e1e4a51f768a7077f089877","wrapped_key":"gfBhFKZP32tFB_wS5NjGwSW3UcZblB39FLKak129Sva4a25papeotkj1QfM9HmDa"}],"sig":{"alg":"bip322","pubkey":"bc1qalice0demo0address0for0playground000","value":"ZmFrZS1zaWdu"},"v":2}Every field, defined: the envelope format (opens in a new tab).