P2P encrypted messaging over Tor in Rust. Creates ephemeral onion services for chat using the Noise Protocol Framework. It is meant to be easy to use and private
- Main site: https://circuitchat.1707070.xyz
- Onion: http://si52lslgxgqnzom5bsbyr7axyj6r3ykelskahuuf36dxrzrbsppio5qd.onion/
video.mp4
Features
- Tor - uses Arti
- E2EE - every session uses
Noise_NN_25519_ChaChaPoly_BLAKE2s - Scripting/Automation - create custom bots for circuitchat with a simple event-driven scripting language (see docs/ccscript.md)
- Forward secrecy* - ephemeral Noise keys mean past sessions cannot be decrypted even if local data is later compromised
- Mutual auth - optional shared password for session authentication (HMAC-SHA256 over an Argon2-derived key)
- File transfer - send and receive files
- Encrypted history - optionally persist messages in a local SQLite database encrypted per-message with XChaCha20-Poly1305
- Bridge support - configure Tor bridges for use in censored networks
- Secure wipe - end the session, zero sensitive data in memory and delete all local state with a single command or shortcut
- Session fingerprint - verify that the connection has not been intercepted by comparing a shared fingerprint
- Session timeout - automatically end the session with a secure wipe after a certain period of time
- Convenience features - typing indicators, delivery receipts, away status, message search, peer mentioning, and more
Quick start
To start a listener (where someone connects to you):
To start an initiator (where you connect to someone else):
circuitchat initiate <onion_address>
To use a bot script:
circuitchat bot myscript.ccscript
On first run a circuitchat.toml config file is created next to the binary. All generated files (circuitchat.toml, circuitchat.db, cache/, state/, downloads/) live in the same directory as the binary.