Explore the five security layers that ensure your confidential fundraising documents are never exposed in plaintext to server operators or cloud hosts.
The document is read into browser memory and encrypted before touching the network. Our servers only ever receive ciphertext and commitment hashes.
// Generated locally in user's browser memory
const dek = crypto.getRandomValues(new Uint8Array(32));
const iv = crypto.getRandomValues(new Uint8Array(12));
const ciphertext = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv, tagLength: 128 },
await crypto.subtle.importKey("raw", dek, "AES-GCM", false, ["encrypt"]),
plaintextBytes
);