seal
lock files and messages with a password. everything happens in this tab; nothing is uploaded
password
type a password or generate a passphrase
⌘enter run · g generate · [] switch
drop files to seal or click to choose (each becomes its own .seal file)
or type a message
output is a text block or a link you can paste into any chat
drop .seal files to open or click to choose
or paste a sealed message
wrong password fails loudly; tampered data fails too
how it works (format v1)
key PBKDF2-SHA256, 600,000 iterations, random 16-byte salt -> AES-256 key
cipher AES-256-GCM, 1 MiB chunks, random 12-byte base IV
chunk i uses iv = base IV with its last 4 bytes xor i
every chunk authenticates the header + its index + a final flag,
so reordering, truncation and edits are all detected
layout "SEAL" u8 version u32 iterations u32 chunk size
16-byte salt 12-byte IV (41-byte header)
u32 length + encrypted {name, mime, size} (record 0)
encrypted chunks, each chunk size + 16-byte tag (records 1..n)
text the same container, base64, wrapped at 64 columns between
-----BEGIN SEAL MESSAGE----- and -----END SEAL MESSAGE-----
the filename and type are inside the encryption, not visible on the outside.
files are processed in 1 MiB chunks. over 256 MB, chromium browsers can stream
the output straight to disk, so size is bounded by disk, not memory; elsewhere
the output is assembled in memory.