Messages

Encrypted in your browser, when both of you hold a key. Reading is signed as well as sending, so a conversation cannot be opened by naming an address.

Messages are private between you and the other party. Reading them is signed, not just sending — so nobody can read a conversation by typing an address.

How the encryption works

Your encryption key is derived from one wallet signature and never leaves this tab. The server stores ciphertext and a key envelope for each participant, and holds nothing that can open either.

Your public key lives in a shared registry on Sui, not in this server's database. Only your own address can write your entry, and anyone can read it — including you, directly from the chain. That is what stops this deployment from hiding your key from someone trying to write to you, which would quietly push them back to plaintext with nothing looking wrong. Publishing it is a transaction, so it costs a little gas once.

What it still does not cover

Metadata is not encrypted. Who you message, when, and how often is visible to whoever operates this deployment, and encrypting the words does not change that. Messages sent to someone who has not published a key are sent in plaintext, and each message says which it is. Rotating your key makes everything sent to the old one unreadable — there is no re-wrapping, because nothing here can re-wrap without your key. And because the derivation relies on a signature being reproducible, it works with a keypair wallet and not with zkLogin, whose signatures change every session.