How It
Works
A zero-knowledge proof lets you prove you have access to an internal company email β where both sender and recipient share the same domain β without revealing the email. Here's exactly what happens under the hood.
The Core Idea
Prove you know something without revealing what it is
Prover
You
Has a secret (an internal company email between two employees). Wants to prove employment without revealing the email.
Circuit
Circom + snarkjs
A mathematical program that verifies the DKIM signature and checks both From and To share the same domain. Produces a tiny proof.
Verifier
Smart Contract
Checks the 256-byte proof is valid. Never sees your email. Mints the NFT if check passes.
The key insight: The proof is "binding" β it can only be generated by someone who has access to an internal company email (both sender and recipient at the same domain). The proof reveals nothing about the email's contents. The smart contract verifies the math, not the email.
Anatomy of a ZK Email
What each part of your email is used for
From: alice@company.comDOMAIN CHECKED
To: bob@company.comDOMAIN CHECKED
DKIM-Signature: v=1; a=rsa-sha256; d=company.com; s=google; h=from:to:subject:date; b=ABCDEFGxyzβ¦VERIFIED
Subject: Re: Q3 Planning Date: Thu, 1 Jan 2025 10:23:11 +0000HIDDEN
[Email body contentβ¦] Hi, I wanted to follow up onβ¦HIDDEN
β Click any row to learn what the circuit does with it
The Circuit Pipeline
From .eml file to on-chain proof β step by step
β Click any step to see what it does
Circuit Facts
~4.2M
Constraints
256 B
Proof size
< 2ms
Verify time
Try It: Interactive Demo
Step through proof generation and verification yourself
4-Step Interactive Simulator
Click through each step: pick a company, watch the Circom circuit run in real time, inspect the 256-byte Groth16 proof, then trigger on-chain verification to see exactly what gets revealed versus what stays private.
Open Interactive Demo βInside a Groth16 Proof
The 256-byte object that proves everything
Groth16 is a zk-SNARK proving system. "SNARK" stands for Succinct Non-interactive ARgument of Knowledge. Succinct means the proof is tiny (256 bytes) regardless of how complex the computation was. Non-interactive means there's no back-and-forth β the prover sends one message, the verifier checks it.