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

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 -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.

+Initiator Anonymity. Links additionally offer Forward Secrecy by default, employing an Elliptic Curve +Diffie Hellman key exchange on Curve25519 to derive per-link ephemeral keys. Asymmetric, link-less +packet communication can also provide forward secrecy, with automatic key ratcheting, by enabling +ratchets on a per-destination basis. 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, @@ -639,7 +640,7 @@ expect. Reticulum offers two ways to do this.

  • A packet is always created with an associated destination and some payload data. When the packet is sent to a single destination type, Reticulum will automatically create an ephemeral encryption key, perform -an ECDH key exchange with the destination’s public key, and encrypt the information.
    +an ECDH key exchange with the destination’s public key (or ratchet key, if available), and encrypt the information.
  • @@ -1068,10 +1069,11 @@ both on general-purpose CPUs and on microcontrollers. The necessary primitives a
  • Ed25519 for signatures

  • X25519 for ECDH key exchanges

  • HKDF for key derivation

  • -
  • Fernet for encrypted tokens

    +
  • Modified Fernet for encrypted tokens

    • AES-128 in CBC mode

    • HMAC for message authentication

    • +
    • No Version and Timestamp metadata included

  • SHA-256

  • diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index c9acd0e..4bf5519 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -262,12 +262,13 @@ considered complete and stable at the moment, but could change if absolutely war
  • Complete initiator anonymity, communicate without revealing your identity

  • Asymmetric encryption based on X25519, and Ed25519 signatures as a basis for all communication

  • Forward Secrecy by using ephemeral Elliptic Curve Diffie-Hellman keys on Curve25519

  • -
  • Reticulum uses the Fernet specification for on-the-wire / over-the-air encryption

    +
  • Reticulum uses a modified version of the Fernet specification for on-the-wire / over-the-air encryption

      -
    • All keys are ephemeral and derived from an ECDH key exchange on Curve25519

    • +
    • Keys are ephemeral and derived from an ECDH key exchange on Curve25519

    • AES-128 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for authentication

    • IVs are generated through os.urandom()

    • +
    • No Version and Timestamp metadata included

  • Unforgeable packet delivery confirmations

  • diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index fe8eb8a..e458ebf 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -134,10 +134,11 @@ be sufficient, even far into the future. 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 -*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. +*Initiator Anonymity*. Links additionally offer *Forward Secrecy* by default, employing an Elliptic Curve +Diffie Hellman key exchange on Curve25519 to derive per-link ephemeral keys. Asymmetric, link-less +packet communication can also provide forward secrecy, with automatic key ratcheting, by enabling +ratchets on a per-destination basis. 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. @@ -431,7 +432,7 @@ For exchanges of small amounts of information, Reticulum offers the *Packet* API * | A packet is always created with an associated destination and some payload data. When the packet is sent to a *single* destination type, Reticulum will automatically create an ephemeral encryption key, perform - an ECDH key exchange with the destination's public key, and encrypt the information. + an ECDH key exchange with the destination's public key (or ratchet key, if available), and encrypt the information. * | It is important to note that this key exchange does not require any network traffic. The sender already knows the public key of the destination from an earlier received *announce*, and can thus perform the ECDH @@ -867,12 +868,14 @@ both on general-purpose CPUs and on microcontrollers. The necessary primitives a * HKDF for key derivation -* Fernet for encrypted tokens +* Modified Fernet for encrypted tokens * AES-128 in CBC mode * HMAC for message authentication + * No Version and Timestamp metadata included + * SHA-256 * SHA-512 diff --git a/docs/source/whatis.rst b/docs/source/whatis.rst index a420b7e..4c2d6ed 100644 --- a/docs/source/whatis.rst +++ b/docs/source/whatis.rst @@ -53,9 +53,9 @@ What does Reticulum Offer? * Forward Secrecy by using ephemeral Elliptic Curve Diffie-Hellman keys on Curve25519 -* Reticulum uses the `Fernet `_ specification for on-the-wire / over-the-air encryption +* Reticulum uses a modified version of the `Fernet `_ specification for on-the-wire / over-the-air encryption - * All keys are ephemeral and derived from an ECDH key exchange on Curve25519 + * Keys are ephemeral and derived from an ECDH key exchange on Curve25519 * AES-128 in CBC mode with PKCS7 padding @@ -63,6 +63,8 @@ What does Reticulum Offer? * IVs are generated through os.urandom() + * No Version and Timestamp metadata included + * Unforgeable packet delivery confirmations * A variety of supported interface types