diff --git a/RNS/Packet.py b/RNS/Packet.py index 6e065f1..9a10d47 100755 --- a/RNS/Packet.py +++ b/RNS/Packet.py @@ -34,10 +34,14 @@ class Packet: ``RNS.Destination.GROUP`` destination or a :ref:`RNS.Link`. For ``RNS.Destination.GROUP`` destinations, Reticulum will use the - pre-shared key configured for the destination. + pre-shared key configured for the destination. All packets to group + destinations are encrypted with the same AES-128 key. - For ``RNS.Destination.SINGLE`` destinations and :ref:`RNS.Link` - destinations, reticulum will use ephemeral keys, and offers **Forward Secrecy**. + For ``RNS.Destination.SINGLE`` destinations, Reticulum will use a newly + derived ephemeral AES-128 key for every packet. + + For :ref:`RNS.Link` destinations, Reticulum will use per-link + ephemeral keys, and offers **Forward Secrecy**. :param destination: A :ref:`RNS.Destination` instance to which the packet will be sent. :param data: The data payload to be included in the packet as *bytes*. diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index b4bee3c..1ab60fa 100644 Binary files a/docs/Reticulum Manual.pdf and b/docs/Reticulum Manual.pdf differ diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index 696ee0b..d584d64 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -131,12 +131,13 @@ bits, ensuring the Reticulum address space could potentially support galactic-sc This is obviously complete and ridiculous over-allocation, and as such, the current 128 bits should be sufficient, even far into the future. -By default Reticulum encrypts all data using elliptic curve cryptography. Any packet sent to a -destination is encrypted with a derived ephemeral key. Reticulum can also set up an encrypted +By default Reticulum encrypts all data using elliptic curve cryptography and AES. Any packet sent to a +destination is encrypted with a per-packet derived key. Reticulum can also set up an encrypted channel to a destination, called a *Link*. Both data sent over Links and single packets offer -*Forward Secrecy* and *Initiator Anonymity*, by using an Elliptic Curve Diffie Hellman key exchange -on Curve25519 to derive ephemeral keys. The multi-hop transport, coordination, verification -and reliability layers are fully autonomous and also based on elliptic curve cryptography. +*Initiator Anonymity*, and links additionally offer *Forward Secrecy* by using an Elliptic Curve +Diffie Hellman key exchange on Curve25519 to derive per-link ephemeral keys. The multi-hop transport, +coordination, verification and reliability layers are fully autonomous and also based on elliptic +curve cryptography. Reticulum also offers symmetric key encryption for group-oriented communications, as well as unencrypted packets for local broadcast purposes. @@ -442,8 +443,7 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | When the destination receives the packet, it can itself perform an ECDH key exchange and decrypt the packet. -* | A new ephemeral key is used for every packet sent in this way, and forward secrecy is guaranteed on a - per packet level. +* | A new ephemeral key is used for every packet sent in this way. * | 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, @@ -453,7 +453,7 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | In case the packet is addressed to a *group* destination type, the packet will be encrypted with the pre-shared AES-128 key associated with the destination. In case the packet is addressed to a *plain* - destination type, the payload data will not be encrypted. Neither of these two destination types offer + destination type, the payload data will not be encrypted. Neither of these two destination types can offer forward secrecy. In general, it is recommended to always use the *single* destination type, unless it is strictly necessary to use one of the others. diff --git a/docs/manual/reference.html b/docs/manual/reference.html index 127ff0f..d86fead 100644 --- a/docs/manual/reference.html +++ b/docs/manual/reference.html @@ -685,9 +685,12 @@ over a Reticulum network. Packets to will automatically be encrypted if they are adressed to a RNS.Destination.SINGLE destination, RNS.Destination.GROUP destination or a RNS.Link.

For RNS.Destination.GROUP destinations, Reticulum will use the -pre-shared key configured for the destination.

-

For RNS.Destination.SINGLE destinations and RNS.Link -destinations, reticulum will use ephemeral keys, and offers Forward Secrecy.

+pre-shared key configured for the destination. All packets to group +destinations are encrypted with the same AES-128 key.

+

For RNS.Destination.SINGLE destinations, Reticulum will use a newly +derived ephemeral AES-128 key for every packet.

+

For RNS.Link destinations, Reticulum will use per-link +ephemeral keys, and offers Forward Secrecy.

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

    -

    By default Reticulum encrypts all data using elliptic curve cryptography. Any packet sent to a -destination is encrypted with a derived ephemeral key. Reticulum can also set up an encrypted +

    By default Reticulum encrypts all data using elliptic curve cryptography and AES. Any packet sent to a +destination is encrypted with a per-packet derived key. Reticulum can also set up an encrypted channel to a destination, called a Link. Both data sent over Links and single packets offer -Forward Secrecy and Initiator Anonymity, by using an Elliptic Curve Diffie Hellman key exchange -on Curve25519 to derive ephemeral keys. The multi-hop transport, coordination, verification -and reliability layers are fully autonomous and also based on elliptic curve cryptography.

    +Initiator Anonymity, and links additionally offer Forward Secrecy by using an Elliptic Curve +Diffie Hellman key exchange on Curve25519 to derive per-link ephemeral keys. The multi-hop transport, +coordination, verification and reliability layers are fully autonomous and also based on elliptic +curve cryptography.

    Reticulum also offers symmetric key encryption for group-oriented communications, as well as unencrypted packets for local broadcast purposes.

    Reticulum can connect to a variety of interfaces such as radio modems, data radios and serial ports, @@ -481,8 +482,7 @@ packet.

  • -
    A new ephemeral key is used for every packet sent in this way, and forward secrecy is guaranteed on a -per packet level.
    +
    A new ephemeral key is used for every packet sent in this way.
  • @@ -496,7 +496,7 @@ public signing key.
  • In case the packet is addressed to a group destination type, the packet will be encrypted with the pre-shared AES-128 key associated with the destination. In case the packet is addressed to a plain -destination type, the payload data will not be encrypted. Neither of these two destination types offer +destination type, the payload data will not be encrypted. Neither of these two destination types can offer forward secrecy. In general, it is recommended to always use the single destination type, unless it is strictly necessary to use one of the others.
    diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index 696ee0b..d584d64 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -131,12 +131,13 @@ bits, ensuring the Reticulum address space could potentially support galactic-sc This is obviously complete and ridiculous over-allocation, and as such, the current 128 bits should be sufficient, even far into the future. -By default Reticulum encrypts all data using elliptic curve cryptography. Any packet sent to a -destination is encrypted with a derived ephemeral key. Reticulum can also set up an encrypted +By default Reticulum encrypts all data using elliptic curve cryptography and AES. Any packet sent to a +destination is encrypted with a per-packet derived key. Reticulum can also set up an encrypted channel to a destination, called a *Link*. Both data sent over Links and single packets offer -*Forward Secrecy* and *Initiator Anonymity*, by using an Elliptic Curve Diffie Hellman key exchange -on Curve25519 to derive ephemeral keys. The multi-hop transport, coordination, verification -and reliability layers are fully autonomous and also based on elliptic curve cryptography. +*Initiator Anonymity*, and links additionally offer *Forward Secrecy* by using an Elliptic Curve +Diffie Hellman key exchange on Curve25519 to derive per-link ephemeral keys. The multi-hop transport, +coordination, verification and reliability layers are fully autonomous and also based on elliptic +curve cryptography. Reticulum also offers symmetric key encryption for group-oriented communications, as well as unencrypted packets for local broadcast purposes. @@ -442,8 +443,7 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | When the destination receives the packet, it can itself perform an ECDH key exchange and decrypt the packet. -* | A new ephemeral key is used for every packet sent in this way, and forward secrecy is guaranteed on a - per packet level. +* | A new ephemeral key is used for every packet sent in this way. * | 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, @@ -453,7 +453,7 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | In case the packet is addressed to a *group* destination type, the packet will be encrypted with the pre-shared AES-128 key associated with the destination. In case the packet is addressed to a *plain* - destination type, the payload data will not be encrypted. Neither of these two destination types offer + destination type, the payload data will not be encrypted. Neither of these two destination types can offer forward secrecy. In general, it is recommended to always use the *single* destination type, unless it is strictly necessary to use one of the others.