Skip to content

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.

Refused

The sender’s signature does not hold

Whoever made it is not proven to be the address it names.

  • Contents match the id
    Passed
  • 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.

Canonical bytes
{"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).