From 86ae42a04982db3f9f0684534cb498c850b6977f Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 2 Feb 2023 19:04:52 +0100 Subject: [PATCH] Updated docs --- docs/Reticulum Manual.pdf | Bin 2331551 -> 2331495 bytes .../_sources/gettingstartedfast.rst.txt | 4 ++-- docs/manual/_sources/understanding.rst.txt | 22 +++++++++--------- docs/manual/_sources/using.rst.txt | 4 ++-- docs/manual/gettingstartedfast.html | 4 ++-- docs/manual/searchindex.js | 2 +- docs/manual/understanding.html | 22 +++++++++--------- docs/manual/using.html | 2 +- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 7a70cc6fc0221749637cfbc12da12b8354298470..0e2a3bbe23ab410eab35c39724b30de929c499f4 100644 GIT binary patch delta 59990 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έcQc^Ic`u1=*wszt`S(l8PiVuMplG!M5C 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

Bk|)i+;xS~h@o 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 diff --git a/docs/manual/_sources/gettingstartedfast.rst.txt b/docs/manual/_sources/gettingstartedfast.rst.txt index 77f291e..aa36223 100644 --- a/docs/manual/_sources/gettingstartedfast.rst.txt +++ b/docs/manual/_sources/gettingstartedfast.rst.txt @@ -115,8 +115,8 @@ Creating a Network With Reticulum ============================================= To create a network, you will need to specify one or more *interfaces* for Reticulum to use. This is done in the Reticulum configuration file, which by -default is located at ``~/.reticulum/config``. You can edit this file by hand, -or use the interactive ``rnsconfig`` utility. +default is located at ``~/.reticulum/config``. You can get an example +configuration file with all options via ``rnsd --exampleconfig``. When Reticulum is started for the first time, it will create a default configuration file, with one active interface. This default interface uses diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index 5296a28..ef521d0 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -107,13 +107,13 @@ guide the design of Reticulum: Introduction & Basic Functionality ================================== -Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at it’s +Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at its core a *message oriented* system. It is suited for both local point-to-point or point-to-multipoint scenarios where all nodes are within range of each other, as well as scenarios where packets need to be transported over multiple hops in a complex network to reach the recipient. Reticulum does away with the idea of addresses and ports known from IP, TCP and UDP. Instead -Reticulum uses the singular concept of *destinations*. Any application using Reticulum as it’s +Reticulum uses the singular concept of *destinations*. Any application using Reticulum as its networking stack will need to create one or more destinations to receive data, and know the destinations it needs to send data to. @@ -220,7 +220,7 @@ packet. In actual use of *single* destination naming, it is advisable not to use any uniquely identifying features in aspect naming. Aspect names should be general terms describing what kind of destination -is represented. The uniquely identifying aspect is always achieved by the appending the public key, +is represented. The uniquely identifying aspect is always achieved by appending the public key, which expands the destination into a uniquely identifiable one. Reticulum does this automatically. Any destination on a Reticulum network can be addressed and reached simply by knowing its @@ -239,7 +239,7 @@ To recap, the different destination types should be used in the following situat * **Plain** When plain-text communication is desirable, for example when broadcasting information, or for local discovery purposes. -To communicate with a *single* destination, you need to know it’s public key. Any method for +To communicate with a *single* destination, you need to know its public key. Any method for obtaining the public key is valid, but Reticulum includes a simple mechanism for making other nodes aware of your destinations public key, called the *announce*. It is also possible to request an unknown public key from the network, as all transport instances serve as a distributed ledger @@ -287,7 +287,7 @@ In Reticulum, destinations are allowed to move around the network at will. This protocols such as IP, where an address is always expected to stay within the network segment it was assigned in. This limitation does not exist in Reticulum, and any destination is *completely portable* over the entire topography of the network, and *can even be moved to other Reticulum networks* than the one it was created in, and -still become reachable. To update it's reachability, a destination simply needs to send an announce on any +still become reachable. To update its reachability, a destination simply needs to send an announce on any networks it is part of. After a short while, it will be globally reachable in the network. Seeing how *single* destinations are always tied to a private/public key pair leads us to the next topic. @@ -368,7 +368,7 @@ If it is a *Transport Node*, it should be given the configuration directive ``en The Announce Mechanism in Detail -------------------------------- -When an *announce* for a destination is transmitted by from a Reticulum instance, it will be forwarded by +When an *announce* for a destination is transmitted by a Reticulum instance, it will be forwarded by any transport node receiving it, but according to some specific rules: @@ -385,7 +385,7 @@ any transport node receiving it, but according to some specific rules: announces is set at 2%, but can be configured on a per-interface basis. * | If any given interface does not have enough bandwidth available for retransmitting the announce, - the announce will be assigned a priority inversely proportional to it's hop count, and be inserted + the announce will be assigned a priority inversely proportional to its hop count, and be inserted into a queue managed by the interface. * | When the interface has bandwidth available for processing an announce, it will prioritise announces @@ -431,7 +431,7 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | A packet is always created with an associated destination and some payload data. When the packet is sent to a *single* destination type, Reticulum will automatically create an ephemeral encryption key, perform - an ECDH key exchange with the destinations public key, and encrypt the information. + an ECDH key exchange with the destination's public key, and encrypt the information. * | It is important to note that this key exchange does not require any network traffic. The sender already knows the public key of the destination from an earlier received *announce*, and can thus perform the ECDH @@ -447,8 +447,8 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | Once the packet has been received and decrypted by the addressed destination, that destination can opt to *prove* its receipt of the packet. It does this by calculating the SHA-256 hash of the received packet, - and signing this hash with it's Ed25519 signing key. Transport nodes in the network can then direct this - *proof* back to the packets origin, where the signature can be verified against the destinations known + and signing this hash with its Ed25519 signing key. Transport nodes in the network can then direct this + *proof* back to the packets origin, where the signature can be verified against the destination's known public signing key. * | In case the packet is addressed to a *group* destination type, the packet will be encrypted with the @@ -465,7 +465,7 @@ For exchanges of larger amounts of data, or when longer sessions of bidirectiona forward the packet will take note of this *link request*. * | Second, if the destination accepts the *link request* , it will send back a packet that proves the - authenticity of it’s identity (and the receipt of the link request) to the initiating node. All + authenticity of its identity (and the receipt of the link request) to the initiating node. All nodes that initially forwarded the packet will also be able to verify this proof, and thus accept the validity of the *link* throughout the network. diff --git a/docs/manual/_sources/using.rst.txt b/docs/manual/_sources/using.rst.txt index bfc683e..1a12f24 100644 --- a/docs/manual/_sources/using.rst.txt +++ b/docs/manual/_sources/using.rst.txt @@ -377,7 +377,7 @@ output. # Run rnx on the listening system, specifying which identities # are allowed to execute commands - rncp --listen -a 941bed5e228775e5a8079fc38b1ccf3f -a 1b03013c25f1c2ca068a4f080b844a10 + rnx --listen -a 941bed5e228775e5a8079fc38b1ccf3f -a 1b03013c25f1c2ca068a4f080b844a10 # From another system, run a command rnx 7a55144adf826958a9529a3bcf08b149 "cat /proc/cpuinfo" @@ -565,4 +565,4 @@ If you want to automatically start ``rnsd`` at boot, run: .. code:: text - sudo systemctl enable rnsd \ No newline at end of file + sudo systemctl enable rnsd diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index 7409d57..d6e82fe 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -304,8 +304,8 @@ network status and connectivity.

Creating a Network With Reticulum#

To create a network, you will need to specify one or more interfaces for Reticulum to use. This is done in the Reticulum configuration file, which by -default is located at ~/.reticulum/config. You can edit this file by hand, -or use the interactive rnsconfig utility.

+default is located at ~/.reticulum/config. You can get an example +configuration file with all options via rnsd --exampleconfig.

When Reticulum is started for the first time, it will create a default configuration file, with one active interface. This default interface uses your existing Ethernet and WiFi networks (if any), and only allows you to diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 300d2f4..47d192f 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": 0, "minimum": [0, 5, 6, 9], "setup": [0, 2, 4, 5], "requir": [0, 2, 5, 6, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 3, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 5, 6, 7, 9, 10], "destin": [0, 2, 4, 5, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": [0, 10], "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "autoomat": 0, "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 5, 6, 7, 9, 11], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prove": [0, 9], "packet": [0, 2, 3, 4, 5, 6, 7, 10, 11], "adress": [0, 7, 9], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": [0, 2], "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 10], "client": [0, 2, 3, 4, 7], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 6, 10], "action": 0, "store": [0, 3, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 3, 6, 8, 9, 10, 11], "altern": [0, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 7, 9], "happen": [0, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 5, 7, 9, 10], "data": [0, 2, 4, 5, 6, 7, 9, 11], "encod": 0, "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 9, 10], "want": [0, 2, 3, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9], "__init__": 0, "self": [0, 6, 11], "call": [0, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "channel": [0, 2, 5, 6, 8, 9, 11], "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 9, 11], "server_ident": 0, "queri": [0, 2, 7], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 11], "wai": [0, 2, 5, 6, 9], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 9, 10], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 5, 10], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 9], "represent": 0, "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": 0, "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7], "kei": [0, 4, 6, 7, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 7, 10], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": 0, "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 5, 7, 10], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 9], "random_text_gener": 0, "request_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "implement": [0, 5, 6, 7, 8, 9, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "pleas": [0, 2, 5, 7, 10, 11], "note": [0, 2, 3, 5, 7, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prepar": [0, 6], "bundl": 0, "instead": [0, 2, 5, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "pack": 0, "thread": 0, "vendor": [0, 3], "umsgpack": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 3, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "actual": [0, 2, 5, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 6, 9], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 6, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9], "conclud": [0, 7], "hasattr": 0, "avail": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 5, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 5, 7, 9, 10], "normal": [0, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "could": [0, 2, 5, 6, 7, 9, 11], "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "unpackb": 0, "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 7, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 2, 9, 10], "g": 0, "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "depend": [2, 3, 6, 7, 9, 10], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "packag": [2, 5, 9], "manag": [2, 6, 7, 9, 10, 11], "like": [2, 3, 5, 6, 7, 9, 10, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "other": [2, 3, 5, 6, 7, 9, 10], "offlin": 2, "4": [2, 7, 9, 10], "6": [2, 10], "py3": 2, "whl": 2, "built": [2, 5, 9, 11], "few": [2, 3, 5, 6, 9, 10, 11], "even": [2, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 3, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 6, 9, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "separ": [2, 5, 6, 9, 10], "devic": [2, 3, 4, 5, 6, 7, 9, 10], "same": [2, 3, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 9, 10], "termin": [2, 7], "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "both": [2, 3, 5, 6, 7, 9, 10, 11], "delai": [2, 5, 9, 10], "share": [2, 6, 7, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "more": [2, 3, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": 2, "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": 2, "graphic": 2, "linux": [2, 9], "maco": 2, "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "come": [2, 9], "make": [2, 3, 5, 8, 9, 10], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "edit": [2, 10], "rnsconfig": 2, "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "mai": [2, 5, 7, 9, 10], "record": [2, 9], "metadata": 2, "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": 2, "most": [2, 3, 5, 6, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "daemon": [2, 5, 7, 10], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "slightli": 2, "experiment": [2, 11], "made": [2, 7, 9], "dublin": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "frankfurt": [2, 10], "5377": 2, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9], "failur": [2, 5], "guarante": [2, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": [2, 4], "addit": [2, 3, 5, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "pip3": [2, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "netifac": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "case": [2, 3, 5, 6, 9, 10], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "librari": 2, "cd": 2, "ln": [2, 10], "echo": [2, 4, 10], "unless": [2, 5, 7, 9], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 6, 9, 10], "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "bit": [2, 5, 7, 9, 10, 11], "version": [2, 9, 10], "32": [2, 9], "termux": 2, "f": 2, "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "platform": [2, 3, 9], "attempt": [2, 3, 7], "essenti": [2, 5, 9], "openssl": [2, 9], "libffi": 2, "rust": 2, "compil": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "startig": 2, "rare": [2, 5], "obscur": 2, "unusu": 2, "rnspure": 2, "content": [2, 6, 10], "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "serial": [2, 3, 4, 9, 11], "pyca": [2, 9], "cryptograph": [2, 4, 6, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "old": [3, 8, 9], "radio": [3, 4, 5, 6, 7, 9, 10, 11], "modem": [3, 5, 6, 7, 9, 11], "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "emploi": [3, 9], "reliabl": [3, 5, 6, 9, 11], "commonli": 3, "either": [3, 5, 6, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 6, 9], "common": [3, 4, 6, 9, 10, 11], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "raw": 3, "overhead": [3, 5, 9], "high": [3, 5, 9, 11], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "across": [3, 6], "togeth": [3, 9, 10], "tool": [3, 9, 10, 11], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "esp32": 3, "manufactur": 3, "io": [3, 10], "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "paramet": [3, 5, 6, 7, 9, 10], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "touch": [3, 11], "produc": 3, "short": [3, 9, 10], "fulli": [3, 9, 10, 11], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "capac": [3, 5, 7, 9], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "pattern": [3, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "aim": [4, 9], "particip": [4, 6, 9], "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "base": [4, 5, 6, 7, 9, 10, 11], "nomad": 4, "sideband": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "android": 4, "pure": [4, 9], "python": [4, 9, 10, 11], "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "udp": [4, 6, 9, 10, 11], "pipe": [4, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "less": [5, 9, 11], "endless": 5, "describ": [5, 7, 9], "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9], "switch": [5, 9, 10], "os": 5, "interface_en": [5, 10], "isol": [5, 10], "lan": 5, "group": [5, 7, 9], "group_id": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "multicast": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": 5, "eas": [5, 9], "simpler": 5, "4242": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "restor": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "tnc": [5, 7, 10, 11], "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": 5, "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "cours": [5, 9], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "being": [5, 7, 9], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow": [5, 6], "flow_control": 5, "pair": [5, 9, 10], "laser": 5, "serialinterfac": 5, "baud": 5, "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "virtual": [5, 6, 9, 10, 11], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "buffer": 5, "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": 5, "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "airtim": 5, "behaviour": [5, 10], "bring": 5, "brought": [5, 10], "valu": [5, 7, 9], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": 5, "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "ensur": [5, 7, 9, 11], "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "opposit": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": 5, "report": [5, 8], "guess": 5, "per": [5, 7, 9, 11], "affect": 5, "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "addition": [5, 9], "behalf": 5, "resid": 5, "requestor": 5, "resolv": 5, "chain": 5, "along": [5, 6, 7, 9], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "enforc": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "entir": [6, 7, 9, 10], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9], "higher": [6, 11], "issu": [6, 8], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 9], "keystor": 6, "degrad": 6, "term": [6, 9], "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "leav": [6, 9], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "properti": [6, 7], "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": 6, "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "decid": [6, 7, 9], "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "due": 6, "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "usb": [6, 9, 10], "cabl": 6, "adapt": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "previous": [6, 7, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": 6, "newli": [6, 7, 9], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": 6, "find": [6, 9], "were": 6, "poorli": 6, "outlier": 6, "signatur": [7, 9, 11], "configdir": 7, "logdest": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "507": 7, "break": [7, 9, 11], "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "drop": [7, 9, 10], "appli": [7, 9], "individu": [7, 9, 11], "static": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "create_kei": 7, "decrypt": [7, 9], "verif": [7, 9], "sign": [7, 9], "dh": 7, "keysiz": 7, "x25519": [7, 9, 11], "concaten": 7, "256": [7, 9], "128": [7, 9, 11], "constant": 7, "truncat": [7, 9], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "otherwis": 7, "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "hold": [7, 9], "ciphertext_token": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "callabl": 7, "clear_default_app_data": 7, "pre": [7, 9], "ae": [7, 9, 11], "deriv": [7, 9, 11], "secreci": [7, 9, 11], "payload": [7, 9], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "keepalive_timeout_factor": 7, "calcul": [7, 9], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "final": [7, 9], "consid": [7, 9, 11], "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "pathfinder_m": 7, "object": 7, "attribut": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "briefli": 9, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "document": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "problem": 9, "seek": 9, "solv": 9, "solut": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": 9, "approv": 9, "gatekeep": 9, "inevit": 9, "lead": 9, "govern": 9, "alter": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "usabl": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "stream": 9, "modifi": [9, 10], "interest": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "cb": 9, "wish": [9, 10], "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "accommod": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "multi": [9, 10, 11], "special": [9, 10], "uniqu": [9, 11], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "abstract": 9, "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "structur": [9, 11], "recap": 9, "indirectli": 9, "awar": 9, "ledger": 9, "therefor": [9, 11], "definit": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "assign": [9, 10], "topic": 9, "necessarili": 9, "person": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "asymmetr": [9, 11], "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "retransmit": 9, "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "greater": 9, "retri": 9, "newer": 9, "newest": 9, "discard": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "neither": 9, "session": 9, "bidirect": 9, "travers": 9, "rememb": 9, "subsequ": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "rotat": 9, "procedur": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "practic": [9, 11], "neglig": 9, "1200": 9, "96": 9, "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "bi": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "x": [9, 10], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "debian": [9, 10], "recent": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "onto": 9, "compos": 9, "field": 9, "header": 9, "context": 9, "465": 9, "vari": [9, 10], "00": [9, 10], "01": 9, "reserv": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "exclud": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "x22519": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "pose": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "verbos": 10, "exampleconfig": 10, "ie": 10, "remov": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "panic": 10, "unrecover": 10, "occur": [10, 11], "panic_on_interface_error": 10, "warn": 10, "debug": 10, "unus": 10, "order": 10, "teach": 10, "task": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "17": 10, "tcpinterfac": 10, "unsign": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "30": 10, "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "reticulu": 10, "w": 10, "posit": 10, "probe": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "decreas": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "shell": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "max": 10, "fw": 10, "nocheck": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "flash": 10, "attach": 10, "forc": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "bluetooth": 10, "consol": 10, "unlock": 10, "perman": 10, "administr": 10, "ubuntu": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "outsid": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "friendli": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "optic": 11, "transform": 11, "stop": 11, "fact": 11, "strength": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11}, "objects": {"RNS": [[7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Destination": [[7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 2, 1, "", "CURVE"], [7, 2, 1, "", "KEYSIZE"], [7, 2, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 2, 1, "", "CURVE"], [7, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 2, 1, "", "KEEPALIVE"], [7, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 2, 1, "", "STALE_GRACE"], [7, 2, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"]], "RNS.Packet": [[7, 2, 1, "", "ENCRYPTED_MDU"], [7, 2, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 2, 1, "", "ANNOUNCE_CAP"], [7, 2, 1, "", "MTU"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 2, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "instal": [2, 3], "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "nomad": 2, "network": [2, 4, 6], "sideband": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": 2, "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "arm64": 2, "raspberri": 2, "pi": 2, "android": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "rnode": [3, 5], "support": [3, 5, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "supplier": 3, "wifi": 3, "combin": 3, "type": [3, 9, 11], "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "serial": [5, 10], "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "destin": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "specif": 9, "packet": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "configur": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "devic": 11, "caveat": 11, "emptor": 11, "an": 1, "explan": 1, "human": 1, "Beings": 1}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Communications Hardware": [[3, "communications-hardware"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "Suppliers": [[3, "suppliers"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Supported Interfaces": [[5, "supported-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[2, "reticulum-on-arm64"]], "Reticulum on Raspberry Pi": [[2, "reticulum-on-raspberry-pi"]], "Reticulum on Android": [[2, "reticulum-on-android"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": 0, "minimum": [0, 5, 6, 9], "setup": [0, 2, 4, 5], "requir": [0, 2, 5, 6, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 3, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 5, 6, 7, 9, 10], "destin": [0, 2, 4, 5, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": [0, 10], "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "autoomat": 0, "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 5, 6, 7, 9, 11], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prove": [0, 9], "packet": [0, 2, 3, 4, 5, 6, 7, 10, 11], "adress": [0, 7, 9], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 10], "client": [0, 2, 3, 4, 7], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 6, 10], "action": 0, "store": [0, 3, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 3, 6, 8, 9, 10, 11], "altern": [0, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 7, 9], "happen": [0, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 5, 7, 9, 10], "data": [0, 2, 4, 5, 6, 7, 9, 11], "encod": 0, "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 9, 10], "want": [0, 2, 3, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9], "__init__": 0, "self": [0, 6, 11], "call": [0, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "channel": [0, 2, 5, 6, 8, 9, 11], "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 9, 11], "server_ident": 0, "queri": [0, 2, 7], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 11], "wai": [0, 2, 5, 6, 9], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 9, 10], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": 0, "dbm": [0, 5, 10], "snr": 0, "db": 0, "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 9], "represent": 0, "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": 0, "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7], "kei": [0, 4, 6, 7, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 7, 10], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": 0, "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 5, 7, 10], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 9], "random_text_gener": 0, "request_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "implement": [0, 5, 6, 7, 8, 9, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "pleas": [0, 2, 5, 7, 10, 11], "note": [0, 2, 3, 5, 7, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prepar": [0, 6], "bundl": 0, "instead": [0, 2, 5, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "pack": 0, "thread": 0, "vendor": [0, 3], "umsgpack": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 3, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "actual": [0, 2, 5, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 6, 9], "isdir": 0, "packb": 0, "fit": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 6, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9], "conclud": [0, 7], "hasattr": 0, "avail": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "variabl": 0, "statist": [0, 5, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 5, 7, 9, 10], "normal": [0, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "int": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "clear_screen": 0, "print_filelist": 0, "percent": 0, "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "could": [0, 2, 5, 6, 7, 9, 11], "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": 0, "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "unpack": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "unpackb": 0, "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 7, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": 0, "m": [0, 2, 9, 10], "g": 0, "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "depend": [2, 3, 6, 7, 9, 10], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "packag": [2, 5, 9], "manag": [2, 6, 7, 9, 10, 11], "like": [2, 3, 5, 6, 7, 9, 10, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "other": [2, 3, 5, 6, 7, 9, 10], "offlin": 2, "4": [2, 7, 9, 10], "6": [2, 10], "py3": 2, "whl": 2, "built": [2, 5, 9, 11], "few": [2, 3, 5, 6, 9, 10, 11], "even": [2, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 3, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 6, 9, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "separ": [2, 5, 6, 9, 10], "devic": [2, 3, 4, 5, 6, 7, 9, 10], "same": [2, 3, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 9, 10], "termin": [2, 7], "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "both": [2, 3, 5, 6, 7, 9, 10, 11], "delai": [2, 5, 9, 10], "share": [2, 6, 7, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "more": [2, 3, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": 2, "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": 2, "graphic": 2, "linux": [2, 9], "maco": 2, "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "come": [2, 9], "make": [2, 3, 5, 8, 9, 10], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "edit": 10, "rnsconfig": [], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "mai": [2, 5, 7, 9, 10], "record": [2, 9], "metadata": 2, "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": 2, "most": [2, 3, 5, 6, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "daemon": [2, 5, 7, 10], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "slightli": 2, "experiment": [2, 11], "made": [2, 7, 9], "dublin": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "frankfurt": [2, 10], "5377": 2, "uxg5kubabakh3jtnvsipingbr5574dle7bubvip7llfvwx2tgrua": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9], "failur": [2, 5], "guarante": [2, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": [2, 4], "addit": [2, 3, 5, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "pip3": [2, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "netifac": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "case": [2, 3, 5, 6, 9, 10], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "librari": 2, "cd": 2, "ln": [2, 10], "echo": [2, 4, 10], "unless": [2, 5, 7, 9], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 6, 9, 10], "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "bit": [2, 5, 7, 9, 10, 11], "version": [2, 9, 10], "32": [2, 9], "termux": 2, "f": 2, "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "platform": [2, 3, 9], "attempt": [2, 3, 7], "essenti": [2, 5, 9], "openssl": [2, 9], "libffi": 2, "rust": 2, "compil": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "startig": 2, "rare": [2, 5], "obscur": 2, "unusu": 2, "rnspure": 2, "content": [2, 6, 10], "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "serial": [2, 3, 4, 9, 11], "pyca": [2, 9], "cryptograph": [2, 4, 6, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "old": [3, 8, 9], "radio": [3, 4, 5, 6, 7, 9, 10, 11], "modem": [3, 5, 6, 7, 9, 11], "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "emploi": [3, 9], "reliabl": [3, 5, 6, 9, 11], "commonli": 3, "either": [3, 5, 6, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 6, 9], "common": [3, 4, 6, 9, 10, 11], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "raw": 3, "overhead": [3, 5, 9], "high": [3, 5, 9, 11], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "across": [3, 6], "togeth": [3, 9, 10], "tool": [3, 9, 10, 11], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "esp32": 3, "manufactur": 3, "io": [3, 10], "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "paramet": [3, 5, 6, 7, 9, 10], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "touch": [3, 11], "produc": 3, "short": [3, 9, 10], "fulli": [3, 9, 10, 11], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "capac": [3, 5, 7, 9], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "pattern": [3, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "aim": [4, 9], "particip": [4, 6, 9], "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "base": [4, 5, 6, 7, 9, 10, 11], "nomad": 4, "sideband": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "android": 4, "pure": [4, 9], "python": [4, 9, 10, 11], "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "udp": [4, 6, 9, 10, 11], "pipe": [4, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "less": [5, 9, 11], "endless": 5, "describ": [5, 7, 9], "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9], "switch": [5, 9, 10], "os": 5, "interface_en": [5, 10], "isol": [5, 10], "lan": 5, "group": [5, 7, 9], "group_id": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "multicast": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": 5, "eas": [5, 9], "simpler": 5, "4242": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "restor": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "tnc": [5, 7, 10, 11], "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": 5, "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "cours": [5, 9], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "being": [5, 7, 9], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow": [5, 6], "flow_control": 5, "pair": [5, 9, 10], "laser": 5, "serialinterfac": 5, "baud": 5, "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "virtual": [5, 6, 9, 10, 11], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "buffer": 5, "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": 5, "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "airtim": 5, "behaviour": [5, 10], "bring": 5, "brought": [5, 10], "valu": [5, 7, 9], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": 5, "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "ensur": [5, 7, 9, 11], "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "opposit": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": 5, "report": [5, 8], "guess": 5, "per": [5, 7, 9, 11], "affect": 5, "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "addition": [5, 9], "behalf": 5, "resid": 5, "requestor": 5, "resolv": 5, "chain": 5, "along": [5, 6, 7, 9], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "enforc": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "entir": [6, 7, 9, 10], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9], "higher": [6, 11], "issu": [6, 8], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 9], "keystor": 6, "degrad": 6, "term": [6, 9], "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "leav": [6, 9], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "properti": [6, 7], "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": 6, "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "decid": [6, 7, 9], "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "due": 6, "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "usb": [6, 9, 10], "cabl": 6, "adapt": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "previous": [6, 7, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": 6, "newli": [6, 7, 9], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": 6, "find": [6, 9], "were": 6, "poorli": 6, "outlier": 6, "signatur": [7, 9, 11], "configdir": 7, "logdest": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "507": 7, "break": [7, 9, 11], "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "drop": [7, 9, 10], "appli": [7, 9], "individu": [7, 9, 11], "static": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "create_kei": 7, "decrypt": [7, 9], "verif": [7, 9], "sign": [7, 9], "dh": 7, "keysiz": 7, "x25519": [7, 9, 11], "concaten": 7, "256": [7, 9], "128": [7, 9, 11], "constant": 7, "truncat": [7, 9], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "otherwis": 7, "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "hold": [7, 9], "ciphertext_token": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "callabl": 7, "clear_default_app_data": 7, "pre": [7, 9], "ae": [7, 9, 11], "deriv": [7, 9, 11], "secreci": [7, 9, 11], "payload": [7, 9], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "keepalive_timeout_factor": 7, "calcul": [7, 9], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "final": [7, 9], "consid": [7, 9, 11], "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "pathfinder_m": 7, "object": 7, "attribut": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "briefli": 9, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "document": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "problem": 9, "seek": 9, "solv": 9, "solut": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": 9, "approv": 9, "gatekeep": 9, "inevit": 9, "lead": 9, "govern": 9, "alter": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "usabl": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "stream": 9, "modifi": [9, 10], "interest": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "cb": 9, "wish": [9, 10], "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "accommod": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "multi": [9, 10, 11], "special": [9, 10], "uniqu": [9, 11], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "abstract": 9, "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "structur": [9, 11], "recap": 9, "indirectli": 9, "awar": 9, "ledger": 9, "therefor": [9, 11], "definit": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "assign": [9, 10], "topic": 9, "necessarili": 9, "person": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "asymmetr": [9, 11], "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "retransmit": 9, "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "greater": 9, "retri": 9, "newer": 9, "newest": 9, "discard": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "neither": 9, "session": 9, "bidirect": 9, "travers": 9, "rememb": 9, "subsequ": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "rotat": 9, "procedur": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "practic": [9, 11], "neglig": 9, "1200": 9, "96": 9, "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "bi": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "x": [9, 10], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "debian": [9, 10], "recent": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "onto": 9, "compos": 9, "field": 9, "header": 9, "context": 9, "465": 9, "vari": [9, 10], "00": [9, 10], "01": 9, "reserv": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "exclud": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "x22519": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "pose": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "verbos": 10, "exampleconfig": [2, 10], "ie": 10, "remov": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "panic": 10, "unrecover": 10, "occur": [10, 11], "panic_on_interface_error": 10, "warn": 10, "debug": 10, "unus": 10, "order": 10, "teach": 10, "task": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "17": 10, "tcpinterfac": 10, "unsign": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "30": 10, "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "reticulu": 10, "w": 10, "posit": 10, "probe": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "decreas": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "shell": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "max": 10, "fw": 10, "nocheck": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "flash": 10, "attach": 10, "forc": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "bluetooth": 10, "consol": 10, "unlock": 10, "perman": 10, "administr": 10, "ubuntu": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "outsid": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "friendli": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "optic": 11, "transform": 11, "stop": 11, "fact": 11, "strength": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11}, "objects": {"RNS": [[7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Destination": [[7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 2, 1, "", "CURVE"], [7, 2, 1, "", "KEYSIZE"], [7, 2, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 2, 1, "", "CURVE"], [7, 2, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 2, 1, "", "KEEPALIVE"], [7, 2, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 2, 1, "", "STALE_GRACE"], [7, 2, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"]], "RNS.Packet": [[7, 2, 1, "", "ENCRYPTED_MDU"], [7, 2, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RequestReceipt": [[7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 2, 1, "", "ANNOUNCE_CAP"], [7, 2, 1, "", "MTU"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 2, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "filetransf": 0, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "instal": [2, 3], "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "nomad": 2, "network": [2, 4, 6], "sideband": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": 2, "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "arm64": 2, "raspberri": 2, "pi": 2, "android": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "rnode": [3, 5], "support": [3, 5, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "supplier": 3, "wifi": 3, "combin": 3, "type": [3, 9, 11], "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "serial": [5, 10], "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "destin": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "specif": 9, "packet": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "configur": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "devic": 11, "caveat": 11, "emptor": 11, "an": 1, "explan": 1, "human": 1, "Beings": 1}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Filetransfer": [[0, "filetransfer"]], "Communications Hardware": [[3, "communications-hardware"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "Suppliers": [[3, "suppliers"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Supported Interfaces": [[5, "supported-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Reticulum on ARM64": [[2, "reticulum-on-arm64"]], "Reticulum on Raspberry Pi": [[2, "reticulum-on-raspberry-pi"]], "Reticulum on Android": [[2, "reticulum-on-android"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "API Reference": [[7, "api-reference"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[7, "RNS.Link"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index ed3604b..696cd2c 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -337,12 +337,12 @@ needs to be purchased.

Introduction & Basic Functionality#

-

Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at it’s +

Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at its core a message oriented system. It is suited for both local point-to-point or point-to-multipoint scenarios where all nodes are within range of each other, as well as scenarios where packets need to be transported over multiple hops in a complex network to reach the recipient.

Reticulum does away with the idea of addresses and ports known from IP, TCP and UDP. Instead -Reticulum uses the singular concept of destinations. Any application using Reticulum as it’s +Reticulum uses the singular concept of destinations. Any application using Reticulum as its networking stack will need to create one or more destinations to receive data, and know the destinations it needs to send data to.

All destinations in Reticulum are _represented_ as a 16 byte hash. This hash is derived from truncating a full @@ -442,7 +442,7 @@ addressable, because their public keys will differ.

In actual use of single destination naming, it is advisable not to use any uniquely identifying features in aspect naming. Aspect names should be general terms describing what kind of destination -is represented. The uniquely identifying aspect is always achieved by the appending the public key, +is represented. The uniquely identifying aspect is always achieved by appending the public key, which expands the destination into a uniquely identifiable one. Reticulum does this automatically.

Any destination on a Reticulum network can be addressed and reached simply by knowing its destination hash (and public key, but if the public key is not known, it can be requested from the @@ -468,7 +468,7 @@ indirectly, but must first be established through a single destination. -

To communicate with a single destination, you need to know it’s public key. Any method for +

To communicate with a single destination, you need to know its public key. Any method for obtaining the public key is valid, but Reticulum includes a simple mechanism for making other nodes aware of your destinations public key, called the announce. It is also possible to request an unknown public key from the network, as all transport instances serve as a distributed ledger @@ -509,7 +509,7 @@ certain pattern. This will be detailed in the section protocols such as IP, where an address is always expected to stay within the network segment it was assigned in. This limitation does not exist in Reticulum, and any destination is completely portable over the entire topography of the network, and can even be moved to other Reticulum networks than the one it was created in, and -still become reachable. To update it’s reachability, a destination simply needs to send an announce on any +still become reachable. To update its reachability, a destination simply needs to send an announce on any networks it is part of. After a short while, it will be globally reachable in the network.

Seeing how single destinations are always tied to a private/public key pair leads us to the next topic.

@@ -565,7 +565,7 @@ is the default setting.

The Announce Mechanism in Detail#

-

When an announce for a destination is transmitted by from a Reticulum instance, it will be forwarded by +

When an announce for a destination is transmitted by a Reticulum instance, it will be forwarded by any transport node receiving it, but according to some specific rules:

  • @@ -590,7 +590,7 @@ announces is set at 2%, but can be configured on a per-interface basis.
  • If any given interface does not have enough bandwidth available for retransmitting the announce, -the announce will be assigned a priority inversely proportional to it’s hop count, and be inserted +the announce will be assigned a priority inversely proportional to its hop count, and be inserted into a queue managed by the interface.
  • @@ -639,7 +639,7 @@ expect. Reticulum offers two ways to do this.

  • A packet is always created with an associated destination and some payload data. When the packet is sent to a single destination type, Reticulum will automatically create an ephemeral encryption key, perform -an ECDH key exchange with the destinations public key, and encrypt the information.
    +an ECDH key exchange with the destination’s public key, and encrypt the information.
  • @@ -665,8 +665,8 @@ packet.
  • Once the packet has been received and decrypted by the addressed destination, that destination can opt to prove its receipt of the packet. It does this by calculating the SHA-256 hash of the received packet, -and signing this hash with it’s Ed25519 signing key. Transport nodes in the network can then direct this -proof back to the packets origin, where the signature can be verified against the destinations known +and signing this hash with its Ed25519 signing key. Transport nodes in the network can then direct this +proof back to the packets origin, where the signature can be verified against the destination’s known public signing key.
  • @@ -689,7 +689,7 @@ forward the packet will take note of this link request.
  • Second, if the destination accepts the link request , it will send back a packet that proves the -authenticity of it’s identity (and the receipt of the link request) to the initiating node. All +authenticity of its identity (and the receipt of the link request) to the initiating node. All nodes that initially forwarded the packet will also be able to verify this proof, and thus accept the validity of the link throughout the network.
    diff --git a/docs/manual/using.html b/docs/manual/using.html index 088744c..487d2df 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -557,7 +557,7 @@ execute commands on remote systems over Reticulum, and to view returned command output.

    # Run rnx on the listening system, specifying which identities
     # are allowed to execute commands
    -rncp --listen -a 941bed5e228775e5a8079fc38b1ccf3f -a 1b03013c25f1c2ca068a4f080b844a10
    +rnx --listen -a 941bed5e228775e5a8079fc38b1ccf3f -a 1b03013c25f1c2ca068a4f080b844a10
     
     # From another system, run a command
     rnx 7a55144adf826958a9529a3bcf08b149 "cat /proc/cpuinfo"