Skip to content
SenseiDeElitePublic

About

End-to-end post-quantum age encryption for Discord.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Agecord logo

Agecord

We added encryption to Discord because they wouldn't.

A MV3 browser extension that adds end-to-end post-quantum age encryption to Discord.
Messages are encrypted on your device before being sent —
Discord's servers only see ciphertext.

Firefox: Mozilla Add-on License: GPL-3.0-only Chromium: Latest Release

✨ Features

  • 🔒 End-to-end encryption – Messages are encrypted on the sender’s device and decrypted only on recipients’ devices.
  • ✍️ Digital signatures – Messages are signed using public-key cryptography, providing authenticity and non-repudiation.
  • 🔐 Passphrase protection – Encryption keys are unlocked with your passphrase for each session.
  • ⚛️ Post-quantum cryptography – Uses ML-KEM-768×X25519 hybrid key encapsulation for quantum-resistant key exchange.
  • 🦀 Memory-safe algorithms – Rust-based implementations of ML-DSA-87, Argon2id, XChaCha20-Poly1305, and SHAKE256 compiled to WebAssembly via rustcrypto-wasm.

🔐 Cryptography

Encryption uses age (ML-KEM-768×X25519 hybrid key agreement + ChaCha20-Poly1305), a modern and well-audited encryption format. Each message is also signed with an ML-DSA-87 signature, which guarantees that a message could only have been sent by the person who owns that keypair – any tampering or forgery is flagged immediately.

Your data is stored encrypted at rest on your device using Argon2id + XChaCha20-Poly1305. It is never uploaded anywhere.

✉️ Message format

Encrypted messages are sent as Discord file attachments (.age files). Each file begins with a version byte, followed by an ML-DSA-87 signature, a sender public-key hint, and the age ciphertext. The signature input binds a channelId (and serverId for servers) to prevent cross-channel replay. Messages are encrypted to all recipients and the sender, so the relevant parties can read the conversation.

🫆 Key fingerprints

Each contact's public key is displayed as a SHAKE256 (64-byte output) fingerprint. You can verify a contact's key out-of-band by comparing fingerprints with them directly if you wish.

🚧 Limitations

❌ No forward secrecy. If your private key is ever compromised, past messages encrypted to it could be read. Keep your passphrase strong and your private key safe.

🔏 No age compatibility. Agecord uses a custom message format to provide additional security properties within a instant messaging platform, making its encrypted files incompatible with standard age tooling.


ℹ️ Usage

See USAGE.md.


🔧 Troubleshooting

See TROUBLESHOOTING.md.


📜 Third-Party Notices

See NOTICES.md for the third-party notices.

Not affiliated with Discord Inc. Research project, use at your own risk.

About

End-to-end post-quantum age encryption for Discord.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages