A relay can see how big a message is, even though it cannot read it. To keep sizes from revealing what a message contains, every message is padded to one of five fixed sizes before it leaves the sender’s device.
| Bucket | Size | Typical contents |
|---|---|---|
| 1 | 256 bytes | Receipts, typing indicators, short text |
| 2 | 1 KiB | Most text messages |
| 3 | 4 KiB | Long text, group updates, small images’ previews |
| 4 | 16 KiB | Voice notes, in chunks |
| 5 | 64 KiB | Attachments, in chunks |
Attachments are encrypted with a random key, split into 64 KiB chunks and stored on the recipient’s mailbox relay as separate objects. The message that refers to them carries the key and a hash of each chunk.
The envelope
| Field | Size | Description |
|---|---|---|
version | 1 byte | Envelope version. 0x04 for Glossia 4.0. |
mailbox | 32 bytes | The recipient’s mailbox address for the current day. |
sealed | Variable | The sender’s identity, device and the end-to-end encrypted message, sealed so that only the recipient can open them. |
padding | Variable | Zero bytes that bring the envelope to its bucket size. |
tag | 16 bytes | Authenticates the padding length, so that it cannot be altered in transit. |
Sealed sender
The sender’s identity is inside the encryption, not on the outside of the envelope. Relays therefore cannot see who sent a message, only that a message of a certain size was delivered to a mailbox.
Conformance
Relays MUST reject any envelope whose length is not exactly one of the five bucket sizes, or whose padding tag does not verify. Earlier relay software accepted malformed padding, which could have let a malicious client mark its messages with distinctive sizes. This was reported in the 2026 audit as GL4-M1 and fixed before release.