GitHub - uncognic/circuitchat: Tor-based encrypted communications

2 min read Original article ↗

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

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.

Documentation