OTRv4+ v10.4 — private IRC for I2P, Rust ratchet, SAM bridge support

Discussion

Updated the OTR v4 IRC client that runs on I2P. Connects to irc.postman.i2p by default, figures out the network from the hostname.

Big changes in this version:

The message ratchet is now Rust-only. Removed the Python version completely, 602 lines gone. Keys get wiped from memory deterministically when they're done — not whenever Python decides to garbage collect. Client won't start without the Rust module, no silent fallback.

SAM bridge is now the preferred way to connect to I2P. If you have SAM running on i2pd (port 7656), the client makes a fresh destination every launch. With SOCKS5 you share one destination across all connections — the IRC server sees the same address every time you reconnect. SAM fixes that. Falls back to SOCKS5 if SAM isn't set up.

SMP verification is now session-bound. The shared passphrase gets mixed with session info and both fingerprints so captured traffic from one session can't be used against another. Minimum 8 characters enforced.

Secrets stored on disk use Argon2id now. 64MB memory cost.

Seven bugs found in an audit and fixed — key swap that broke message handling for responders, timing leak in SMP, unsafe memory operations, fragment flooding, expired session checks, input length validation on DAKE messages.

270 tests passing. Tested live on two phones over I2P with full handshake and identity verification working.

https://github.com/muc111/OTRv4Plus

If you want SAM on i2pd, add this to i2pd.conf:

[sam]

enabled = true

address = 127.0.0.1

port = 7656

Restart i2pd and the client picks it up on next launch.

Posted Apr 9, 2026, 9:20 PM UTC

20
Loading comments…