A Chrome Extension for sending and receiving multi-layer encrypted emails through Gmail.
- Key Exchange – You and your contact agree on a shared passphrase (out of band).
- Encrypt – When composing in Gmail, CryptMail encrypts your message with 100 rounds of AES-256-GCM, each round using a fresh random IV and salt derived from the shared passphrase via PBKDF2.
- Send – The extension replaces the plaintext in Gmail's compose field with the encrypted envelope and sends it.
- Decrypt – When you open a received email, the extension automatically detects the encrypted envelope, decrypts it using the stored key for that sender, and displays the plaintext.
- Clone or download this repository.
- Open
chrome://extensions/in Chrome. - Enable Developer mode (toggle in the top right).
- Click Load unpacked and select the repository folder.
- The CryptMail icon appears in your toolbar.
- Click the CryptMail icon in the toolbar.
- Enter the contact's email address and the shared passphrase.
- Click Save Key.
- Compose a new email in Gmail.
- Write your message normally.
- Click the 🔒 Encrypt & Send button that appears in the compose toolbar.
- The extension encrypts the message and sends it.
When you open an email containing a CryptMail envelope, the extension automatically decrypts and displays the plaintext (if you have the sender's key stored). A toggle button lets you switch between the decrypted and encrypted views.
- Algorithm: AES-256-GCM
- Key Derivation: PBKDF2 with SHA-256, 600,000 iterations
- Rounds: 100 (configurable) layers of encryption
- Randomness: Each round uses a unique random 16-byte salt and 12-byte IV
npm test├── manifest.json # Chrome Extension manifest (MV3)
├── src/
│ ├── crypto.js # Multi-layer AES-GCM encryption/decryption
│ ├── keystore.js # Per-contact key storage (chrome.storage)
│ ├── content.js # Gmail content script (UI integration)
│ ├── content.css # Content script styles
│ ├── popup.html # Extension popup UI
│ └── popup.js # Popup logic
├── icons/ # Extension icons
└── test/
└── crypto.test.js # Crypto module unit tests
GNU General Public License v3.0 – see LICENSE for details.