Cjdns Changelog
Version 22 - Noisemaker
February 3, 2023
It's been since September 18, 2020 when cjdns v21 was tagged out, and brought only small experimental inclusion of
Rust code to cjdns. v22 makes Rust a main language in which cjdns is written, and it is foreseen that in v23, almost
all interactions with the OS will be done in Rust.
Major Changes
- New protocol version v22, compatibility is maintained with v21 and v20 (no change in compatibility)
- This new protocol version brings a new CryptoAuth protocol based on the NOISE protocol used by WireGuard® VPN.
The NOISE protocol is used in all direct peering connections where both sides are v22.
- The legacy CryptoAuth protocol remains but has been entirely re-written in Rust,
the C version remains only for testing purposes.
- RPC
InterfaceController_peerStats()
Now contains Integer noiseProto: 1 if using the NOISE protocol for communication
- RPC
InterfaceController_disconnectPeer()
Now disconnects ALL sessions to given peer address instead of only the first
- RPC
InterfaceController_timestampPackets()
has been removed, as it only affected debug logging and was rarely used
- Libuv code is now compiled using the cjdns build system, it is nolonger compiled using gyp so python is nolonger needed to build cjdns
- Removed
cjdroute --bench
which was not an accurate measure of expected performance
Minor Changes
- Made fields of Message structure so they will be accessed through accessors - first step to move Message into Rust
- Make cjdns Error return value use a Rust anyhow error
- In preparation for removal of Libuv, we have replaced the following Libuv functions with Rust implementations:
- IP Address manipulation functions:
uv_inet_pton
/ uv_inet_pton
- Current time:
uv_now
/ uv_hrtime
- Child process:
uv_spawn
/ uv_exepath
/ uv_process_kill
- We nolonger put
makekeys
, mkpasswd
, privatetopublic
, publictoip6
, randombytes
, and sybilsim
in the main folder
- In the future:
makekeys
, privatetopublic
, publictoip6
, and randombytes
will be built as a separate optional component
mkpasswd
will be dropped because it is too trivial to be worth maintaining
sybilsim
will be dropped because it is nolonger maintained
- Removed from SwitchCore.c the possibility of an interface to be "down" which never exists in reality
- New logger for Rust code which uses the cjdns logger as a backend
- CryptoAuth is now an (asynchronous) Iface rather than a function you call to encrypt and decrypt
Older versions
For earlier versions, see ./util/version/Version.h