Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

DarkIRC protocol and data reference

This page describes the current DarkIRC-specific data placed in the Event Graph and the IRC surface exposed to local clients. The underlying peer protocol is documented in the Event Graph network protocol.

Event content

Each chat event serializes the following Privmsg structure:

FieldTypeCurrent meaning
versionu8Format version; newly emitted messages currently use 0.
msg_typeu8Message subtype; newly emitted messages currently use 0.
channelStringChannel name, or an encrypted dummy value for a DM.
nickStringSender nickname, or an encrypted dummy value for a DM.
msgStringMessage body or encoded ciphertext.

Nicknames and channel names are limited to 24 bytes. Message bodies and topics are limited to 512 bytes. The IRC input buffer is limited to 1024 bytes.

Public channels

Without a configured channel secret, channel, nick, and msg are stored as plaintext. Public channel history should be treated as public and persistent.

Encrypted channels

For a [channel."#name"] with a secret, DarkIRC constructs a crypto_box::ChaChaBox from that 32-byte base58 secret. The channel name, padded nickname, and message are encrypted independently and encoded with base58. Every participant must configure the identical secret.

[channel."#project"]
secret = "BASE58_32_BYTE_SECRET"
topic = "Private project channel"

Generate a secret with darkirc --gen-channel-secret.

Direct messages

For a configured contact, DarkIRC encrypts dummy channel and nickname fields and encrypts the message with the contact ChaCha box. Contact configuration requires the contact’s public key and the local secret key:

[contact."Bob"]
dm_chacha_public = "BOBS_BASE58_PUBLIC_KEY"
my_dm_chacha_secret = "ALICES_BASE58_SECRET_KEY"

See encrypted direct messages for the two-party setup and security limitations.

Local IRC interface

DarkIRC currently handles these IRC commands:

ADMIN, CAP, INFO, JOIN, LIST, MODE, MOTD, NAMES, NICK, PART, PASS, PING, PRIVMSG, REHASH, TOPIC, USER, and VERSION.

It provides the custom client capabilities no-history and no-autojoin. NickServ commands are sent with PRIVMSG NickServ ... when RLN is enabled. DarkIRC does not claim complete RFC 2812 compatibility; commands that depend on conventional centralized IRC server state may be absent or have P2P-specific semantics.

Reloadable configuration

REHASH reloads autojoin, [channel.*], and [contact.*] from the active configuration file. P2P, datastore, history, archive, RPC, listener, password, and RLN settings require a daemon restart.