Skip to documentation
SLOP

tiny.reticulum

Reference tiny.reticulum

Overview · API · Code relationships · Verification · Audit

Overview

Everything one program needs to reach a named party across a mesh network: the address that names the party, the key material behind that address, the bytes that go on the wire, the ciphers that seal a payload, and the state machine that drives one node of the mesh. That network is Reticulum, in which nodes find each other by broadcasting signed announcements and reach each other over any medium that moves bytes.

A party has to stay reachable under one name while the wire under it changes, so the name a sender uses cannot be an interface or a route. Whoever holds that name has to be the only one who can read what is sent to it and the only one who can sign for it, so the address itself carries the guarantee. The code has to run where memory is fixed before the program starts, so every store takes its size from the caller and every call works in a buffer the caller owns. A port of a protocol that speaks to programs written by other people has to be checkable against the original, byte for byte.

A name built from an interface, an address, or a route stops naming the party as soon as any of them changes, so the sender has no way to find it again. One long-lived key pair leaves every message ever sent to it readable once those bytes leak. A mesh floods, so the same packet reaches a node by more than one route and would be acted on once for each.

The package follows Reticulum 1.5.0, the reference implementation, pinned to one upstream commit by the package README and the generated conformance corpus. The code takes the wire layouts, the key derivations, the addressing rule, and the state machines from the reference, and each declaration names the reference file and line range it follows. The package generates a corpus of reference bytes and clocks from that release and replays it in differential tests, so each of those claims is checkable from this tree.

The 16-byte address a party is reached by (a destination) is a truncated hash over a dotted name and, for a party with a single owner, that owner's public key, so it names the party under whatever interface or route it sits behind. The key material behind one address (an identity) is two key pairs: an X25519 pair that receives encrypted payloads and an Ed25519 pair that signs. A party also publishes a short-lived X25519 key (a rotating key) in its signed announcements and keeps the older ones, so a sender that heard a recent announcement encrypts to a key the party will soon stop using. Reading and writing a packet work in slices the caller supplies, and every store is carved out of caller storage whose length has to equal a derived byte count exactly. The node performs no input or output and reads no clock, so each step takes the current second from its caller and returns records standing for actions the caller performs, such as sending a frame or arming a timer (each an effect). The package names its parts: the wire layouts, what a node does with a packet once it is read, destination addressing, identity key material, the symmetric ciphers, carrier frames, interface access codes, the node state machine, the shared hash widths, and the generated corpus.

Definitions

Namespaces

Public namespaces.

Code relationships

Direct static dependencies extracted from parsed source by semantic graph analysis.

Uses: tiny.choir, tiny.hypothesis, tiny.sdfii, tiny.smg, tiny.sys, tiny.ui, tiny.wayland
Used by: tiny.pluck, tiny.quic

Verification

No verification records are cataloged for this module in this build.

Audit

EvidenceValue
Sourcelib/reticulum/src/root.zig
Definitions9 of 10 documented
Members0 of 0 documented
Public names10 API, 867 indexed
Version26.7.0
Revisiondaab053ee433