diff --git a/docs/manual/_sources/gettingstartedfast.rst.txt b/docs/manual/_sources/gettingstartedfast.rst.txt index e9e1e2e..fce31c2 100644 --- a/docs/manual/_sources/gettingstartedfast.rst.txt +++ b/docs/manual/_sources/gettingstartedfast.rst.txt @@ -16,7 +16,7 @@ provides a complete encrypted communications suite built with Reticulum. :target: _images/nomadnet_3.png `Nomad Network `_ is a user-facing client -in the development for the messaging and information-sharing protocol +for the messaging and information-sharing protocol `LXMF `_, another project built with Reticulum. You can install Nomad Network via pip: @@ -48,7 +48,8 @@ Creating a Network With Reticulum ============================================= To create a network, you will need to specify one or more *interfaces* for Reticulum to use. This is done in the Reticulum configuration file, which by -default is located at ``~/.reticulum/config``. +default is located at ``~/.reticulum/config``. You can edit this file by hand, +or use the interactive ``rnsconfig`` utility. When Reticulum is started for the first time, it will create a default configuration file, with one active interface. This default interface uses @@ -152,7 +153,7 @@ From within Termux, execute the following: pkg update pkg upgrade - # Then install dependencies for cryptography library. + # Then install dependencies for the cryptography library. pkg install python build-essential openssl libffi rust # Make sure pip is up to date, and install the wheel module. diff --git a/docs/manual/_sources/interfaces.rst.txt b/docs/manual/_sources/interfaces.rst.txt index 0a00746..5375fc8 100644 --- a/docs/manual/_sources/interfaces.rst.txt +++ b/docs/manual/_sources/interfaces.rst.txt @@ -78,6 +78,9 @@ pre-existing LAN. # forward_ip = 10.55.0.16 # forward_port = 4242 +*Please Note!* If you use the ``device`` option, you will need the Python module +``netifaces`` installed on your system. You can install it with ``pip3 install netifaces``. + .. _interfaces-tcps: TCP Server Interface @@ -114,6 +117,8 @@ configured, other Reticulum peers can connect to it with a TCP Client interface. # device = eth0 # port = 4242 +*Please Note!* If you use the ``device`` option, you will need the Python module +``netifaces`` installed on your system. You can install it with ``pip3 install netifaces``. .. _interfaces-tcpc: @@ -136,6 +141,30 @@ same TCP Server interface at the same time. target_host = 127.0.0.1 target_port = 4242 +It is also possible to use this interface type to connect via other programs +or hardware devices that expose a KISS interface on a TCP port, for example +software-based soundmodems. To do this, use the ``kiss_framing`` option: + +.. code:: + + # Here's an example of a TCP Client interface that connects + # to a software TNC soundmodem on a KISS over TCP port. + + [[TCP KISS Interface]] + type = TCPClientInterface + interface_enabled = True + outgoing = True + kiss_framing = True + target_host = 127.0.0.1 + target_port = 8001 + +**Caution!** Only use the KISS framing option when connecting to external devices +and programs like soundmodems and similar over TCP. When using the +``TCPClientInterface`` in conjunction with the ``TCPServerInterface`` you should +never enable ``kiss_framing``, since this will disable internal reliability and +recovery mechanisms that greatly improves performance over unreliable and +intermittent TCP links. + .. _interfaces-rnode: diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index 4f4045d..fe3c40b 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -67,9 +67,12 @@ guide the design of Reticulum: it can be easily replicated. * **Very low bandwidth requirements** Reticulum should be able to function reliably over links with a transmission capacity as low - as *1,000 bps*. + as *500 bps*. * **Encryption by default** - Reticulum must use encryption by default where possible and applicable. + Reticulum must use strong encryption by default for all communication. +* **Initiator Anonymity** + It must be possible to communicate over a Reticulum network without revealing any identifying + information about oneself. * **Unlicensed use** Reticulum shall be functional over physical communication mediums that do not require any form of license to use. Reticulum must be designed in a way, so it is usable over ISM radio @@ -99,7 +102,7 @@ Introduction & Basic Functionality Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at it’s core a *message oriented* system. It is suited for both local point-to-point or point-to-multipoint scenarios where alle nodes are within range of each other, as well as scenarios where packets need -to be transported over multiple hops to reach the recipient. +to be transported over multiple hops in a complex network to reach the recipient. Reticulum does away with the idea of addresses and ports known from IP, TCP and UDP. Instead Reticulum uses the singular concept of *destinations*. Any application using Reticulum as it’s @@ -110,9 +113,9 @@ All destinations in Reticulum are represented internally as 10 bytes, derived fr SHA-256 hash of identifying characteristics of the destination. To users, the destination addresses will be displayed as 10 bytes in hexadecimal representation, as in the following example: ``<80e29bf7cccaf31431b3>``. -By default Reticulum encrypts all data using public-key cryptography. Any message sent to a -destination is encrypted with that destinations public key. Reticulum can also set up an encrypted -channel to a destination with *Perfect Forward Secrecy* and *Initiator Anonymity* using a elliptic +By default Reticulum encrypts all data using elliptic curve cryptography. Any packet sent to a +destination is encrypted with a derived ephemeral key. Reticulum can also set up an encrypted +channel to a destination with *Forward Secrecy* and *Initiator Anonymity* using a elliptic curve cryptography and ephemeral keys derived from a Diffie Hellman exchange on Curve25519. In Reticulum terminology, this is called a *Link*. @@ -135,17 +138,17 @@ destinations. Reticulum uses three different basic destination types, and one sp * **Single** - The *single* destination type defines a public-key encrypted destination. Any data sent to this - destination will be encrypted with the destination’s public key, and will only be readable by - the creator of the destination. + The *single* destination type is always identified by a unique public key. Any data sent to this + destination will be encrypted using ephemeral keys derived from an ECDH key exchange, and will + only be readable by the creator of the destination, who holds the corresponding private key. * **Group** The *group* destination type defines a symmetrically encrypted destination. Data sent to this destination will be encrypted with a symmetric key, and will be readable by anyone in - possession of the key. The *group* destination can be used just as well by only two peers, as it - can by many. + possession of the key. * **Plain** A *plain* destination type is unencrypted, and suited for traffic that should be broadcast to a number of users, or should be readable by anyone. Traffic to a *plain* destination is not encrypted. + Generally, *plain* destinations can be used for broadcast information intended to be public. * **Link** A *link* is a special destination type, that serves as an abstract channel to a *single* destination, directly connected or over multiple hops. The *link* also offers reliability and @@ -507,7 +510,7 @@ the transfer is needed. This is the purpose of the Reticulum :ref:`Resource`. A *Resource* can automatically handle the reliable transfer of an arbitrary amount of data over an established :ref:`Link`. Resources can auto-compress data, will handle breaking the data into individual packets, sequencing -the transfer and reassembling the data on the other end. +the transfer, integrity verification and reassembling the data on the other end. :ref:`Resources` are programmatically very simple to use, and only requires a few lines of codes to reliably transfer any amount of data. They can be used to transfer data stored in memory, @@ -581,6 +584,7 @@ Node Types Currently Reticulum defines two node types, the *Station* and the *Peer*. A node is a *station* if it fixed in one place, and if it is intended to be kept online most of the time. Otherwise the node is a *peer*. + This distinction is made by the user configuring the node, and is used to determine what nodes on the network will help forward traffic, and what nodes rely on other nodes for connectivity. @@ -596,10 +600,6 @@ Currently, Reticulum is completely priority-agnostic regarding general traffic. on a first-come, first-serve basis. Announce re-transmission are handled according to the re-transmission times and priorities described earlier in this chapter. -It is possible that a prioritisation engine could be added to Reticulum in the future, but in -the light of Reticulums goal of equal access, doing so would need to be the subject of careful -investigation of the consequences first. - .. _understanding-packetformat: @@ -702,4 +702,4 @@ Binary Packet Format - Link Request : 77 bytes - Link Proof : 77 bytes - Link RTT packet : 83 bytes - - Link keepalive : 14 bytes \ No newline at end of file + - Link keepalive : 14 bytes diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index 57dd87b..65859a0 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -53,7 +53,7 @@ a look at _images/nomadnet_3.png

Nomad Network is a user-facing client -in the development for the messaging and information-sharing protocol +for the messaging and information-sharing protocol LXMF, another project built with Reticulum.

You can install Nomad Network via pip:

# Install ...
@@ -79,7 +79,8 @@ network status and connectivity.

Creating a Network With Reticulum

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

+default is located at ~/.reticulum/config. You can edit this file by hand, +or use the interactive rnsconfig utility.

When Reticulum is started for the first time, it will create a default configuration file, with one active interface. This default interface uses your existing ethernet network (if there is one), and only allows you to @@ -163,7 +164,7 @@ and a few extra commands are required.

pkg update pkg upgrade -# Then install dependencies for cryptography library. +# Then install dependencies for the cryptography library. pkg install python build-essential openssl libffi rust # Make sure pip is up to date, and install the wheel module. diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html index 6d9c514..6c96752 100644 --- a/docs/manual/interfaces.html +++ b/docs/manual/interfaces.html @@ -107,6 +107,8 @@ pre-existing LAN.

# forward_port = 4242
+

Please Note! If you use the device option, you will need the Python module +netifaces installed on your system. You can install it with pip3 install netifaces.

TCP Server Interface

@@ -139,6 +141,8 @@ configured, other Reticulum peers can connect to it with a TCP Client interface. # port = 4242
+

Please Note! If you use the device option, you will need the Python module +netifaces installed on your system. You can install it with pip3 install netifaces.

TCP Client Interface

@@ -156,6 +160,27 @@ same TCP Server interface at the same time.

target_port = 4242
+

It is also possible to use this interface type to connect via other programs +or hardware devices that expose a KISS interface on a TCP port, for example +software-based soundmodems. To do this, use the kiss_framing option:

+
# Here's an example of a TCP Client interface that connects
+# to a software TNC soundmodem on a KISS over TCP port.
+
+[[TCP KISS Interface]]
+  type = TCPClientInterface
+  interface_enabled = True
+  outgoing = True
+  kiss_framing = True
+  target_host = 127.0.0.1
+  target_port = 8001
+
+
+

Caution! Only use the KISS framing option when connecting to external devices +and programs like soundmodems and similar over TCP. When using the +TCPClientInterface in conjunction with the TCPServerInterface you should +never enable kiss_framing, since this will disable internal reliability and +recovery mechanisms that greatly improves performance over unreliable and +intermittent TCP links.

RNode LoRa Interface

diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 7c7ea7e..98f984f 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["examples","gettingstartedfast","index","interfaces","networks","reference","understanding","using","whatis"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"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:56},filenames:["examples.rst","gettingstartedfast.rst","index.rst","interfaces.rst","networks.rst","reference.rst","understanding.rst","using.rst","whatis.rst"],objects:{"RNS.Destination":{announce:[5,1,1,""],app_and_aspects_from_name:[5,1,1,""],clear_default_app_data:[5,1,1,""],create_keys:[5,1,1,""],decrypt:[5,1,1,""],deregister_request_handler:[5,1,1,""],encrypt:[5,1,1,""],full_name:[5,1,1,""],get_private_key:[5,1,1,""],hash:[5,1,1,""],hash_from_name_and_identity:[5,1,1,""],load_private_key:[5,1,1,""],register_request_handler:[5,1,1,""],set_default_app_data:[5,1,1,""],set_link_established_callback:[5,1,1,""],set_packet_callback:[5,1,1,""],set_proof_requested_callback:[5,1,1,""],set_proof_strategy:[5,1,1,""],sign:[5,1,1,""]},"RNS.Identity":{CURVE:[5,2,1,""],KEYSIZE:[5,2,1,""],TRUNCATED_HASHLENGTH:[5,2,1,""],decrypt:[5,1,1,""],encrypt:[5,1,1,""],from_bytes:[5,1,1,""],from_file:[5,1,1,""],full_hash:[5,1,1,""],get_private_key:[5,1,1,""],get_public_key:[5,1,1,""],get_random_hash:[5,1,1,""],load_private_key:[5,1,1,""],load_public_key:[5,1,1,""],recall:[5,1,1,""],recall_app_data:[5,1,1,""],sign:[5,1,1,""],to_file:[5,1,1,""],truncated_hash:[5,1,1,""],validate:[5,1,1,""]},"RNS.Link":{CURVE:[5,2,1,""],ESTABLISHMENT_TIMEOUT_PER_HOP:[5,2,1,""],KEEPALIVE:[5,2,1,""],get_remote_identity:[5,1,1,""],identify:[5,1,1,""],inactive_for:[5,1,1,""],no_inbound_for:[5,1,1,""],no_outbound_for:[5,1,1,""],request:[5,1,1,""],set_packet_callback:[5,1,1,""],set_remote_identified_callback:[5,1,1,""],set_resource_callback:[5,1,1,""],set_resource_concluded_callback:[5,1,1,""],set_resource_started_callback:[5,1,1,""],set_resource_strategy:[5,1,1,""],teardown:[5,1,1,""]},"RNS.Packet":{ENCRYPTED_MDU:[5,2,1,""],PLAIN_MDU:[5,2,1,""],resend:[5,1,1,""],send:[5,1,1,""]},"RNS.PacketReceipt":{get_rtt:[5,1,1,""],get_status:[5,1,1,""],set_delivery_callback:[5,1,1,""],set_timeout:[5,1,1,""],set_timeout_callback:[5,1,1,""]},"RNS.RequestReceipt":{get_progress:[5,1,1,""],get_request_id:[5,1,1,""],get_response:[5,1,1,""],get_response_time:[5,1,1,""],get_status:[5,1,1,""]},"RNS.Resource":{advertise:[5,1,1,""],cancel:[5,1,1,""],get_progress:[5,1,1,""]},"RNS.Reticulum":{MTU:[5,2,1,""],should_use_implicit_proof:[5,1,1,""],transport_enabled:[5,1,1,""]},"RNS.Transport":{PATHFINDER_M:[5,2,1,""],deregister_announce_handler:[5,1,1,""],has_path:[5,1,1,""],hops_to:[5,1,1,""],next_hop:[5,1,1,""],next_hop_interface:[5,1,1,""],register_announce_handler:[5,1,1,""],request_path:[5,1,1,""]},RNS:{Destination:[5,0,1,""],Identity:[5,0,1,""],Link:[5,0,1,""],Packet:[5,0,1,""],PacketReceipt:[5,0,1,""],RequestReceipt:[5,0,1,""],Resource:[5,0,1,""],Reticulum:[5,0,1,""],Transport:[5,0,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute"},terms:{"0":[0,3,5,6,7,8],"00":6,"000":6,"00000000":6,"00000100":6,"00000111":6,"01":[6,7],"01010000":6,"02":7,"05":0,"07":7,"1":[0,3,5,6,7],"10":[0,3,6,7],"100":[0,6],"1000":[0,6],"1024":0,"11":6,"115200":[3,7],"12":3,"1200":6,"125":3,"125000":3,"127":3,"128":[5,6,8],"13":7,"14":6,"141":[],"15":[3,6],"150":[3,7],"150m":3,"151":6,"16":[3,7],"18":6,"180":6,"182":[],"2":[0,3,6,7],"20":[0,3,6,7],"200":[3,7],"2000000":[],"205":[],"211":[],"237":[6,8],"24":3,"240":[],"25":[0,2,8],"255":3,"256":[5,6],"270":6,"2f":0,"3":[0,6,7,8],"323":[],"33":6,"34":6,"360":5,"3600":0,"37":7,"37428":7,"38":7,"383":5,"3e12fc71692f8ec47bc5":1,"4":[6,7],"409":[],"4242":[3,7],"430":6,"45":0,"469":7,"477":[5,6],"4965":7,"5":[0,3,5,6],"500":[5,6,8],"512":5,"55":3,"56b115c30cd386cad69c":7,"60":0,"600":3,"62":[6,8],"7":[3,6],"72":3,"77":6,"7ca6f4e4dc26ae329e61":[],"8":[0,3,7],"80":[5,6],"80e29bf7cccaf31431b3":6,"83":6,"86":[],"867":3,"867200000":3,"868":6,"88":3,"9":7,"900":6,"9382f334de63217a4278":7,"95":6,"abstract":6,"break":[5,6,8],"byte":[0,5,6,7,8],"case":[1,3,4,6,7],"class":[0,2,8],"default":[0,1,3,4,5,6,7],"do":[0,1,3,5,6,7,8],"float":[0,5],"function":[0,1,2,3,4,5,8],"import":[0,1,4,6],"int":0,"long":[0,3,6],"new":[0,3,4,5,6],"public":[0,2,5],"return":[0,5],"short":6,"static":5,"throw":[],"true":[0,3,5,7],"try":[0,2],"while":[0,4,5,6,8],A:[0,1,3,4,5,6,8],And:0,As:[4,5,6,8],At:[4,6],Be:[5,7],But:6,By:[0,3,5,6],For:[1,3,4,5,6,8],IN:[0,5],If:[0,1,3,4,5,6,7,8],In:[0,1,3,4,5,6,7,8],It:[0,1,3,5,6,8],No:[6,8],On:[0,7],One:5,Or:[3,6],That:6,The:[0,1,2,3,4,5,8],Then:1,There:[4,6,8],These:[3,6,7],To:[0,1,3,4,6,7,8],Will:5,With:[2,3,4,6,7],_:6,__:6,______:6,_______:6,________:6,________________:6,__init__:0,__main__:0,__name__:0,_exit:0,ab:0,abil:1,abl:[0,4,5,6,7],about:[0,1,4,5,6],abov:[1,3,6],absolut:[],accept:[5,6],accept_al:[0,5],accept_app:5,accept_non:5,access:[5,6,7],accord:6,accordingli:0,acheiv:6,achiev:[5,6],acknowledg:8,across:4,act:[5,6],action:0,activ:[0,1,5,6],actor:6,actual:[0,1,3,6],ad:[0,4,5,6,8],adapt:4,add:[0,1,3,4],add_argu:0,addit:[6,8],addr1:6,addr2:6,address:[0,3,4,5,6,8],adher:5,administr:7,adress:[0,4,5,8],advantag:5,advertis:[0,5],advis:6,ae:[6,8],after:[0,4,6,7],again:[1,6],against:6,agent:6,agnost:[4,6],agnostic:6,aim:[2,6],air:8,airtim:3,aliv:[5,6],all:[0,2,3,4,5,6,7,8],alloc:7,allow:[0,1,3,4,5,6,7,8],allow_al:[0,5],allow_list:5,allow_non:5,allowed_list:5,almost:6,along:[4,6],alreadi:[0,4,6],also:[0,1,3,4,5,6,7,8],alter:[3,6],altern:[0,3,7],although:8,alwai:[5,6,7],amateur:[3,8],amet:[],amount:[3,4,5,6,8],an:[0,1,3,4,5,6,7,8],android:2,ani:[0,1,3,4,5,6,7,8],announc:[2,5],announce_handl:0,announced_ident:[0,5],announceloop:0,announcesampl:0,anonym:[4,5,6,8],anoth:[1,5,6,7],answer:[6,7],anyon:[0,4,5,6],anyth:[3,6],anywher:0,apart:6,api:[1,2,6,8],apk:1,app:[0,1,5,6],app_and_aspects_from_nam:5,app_data:[0,5],app_nam:[0,5],app_timeout:0,append:[0,6],appli:6,applic:[0,5,6,7],approach:7,approv:6,approxim:6,ar:[0,1,3,4,5,6,7,8],arbitrari:[5,6],arbritrari:8,area:[3,4,8],arg:0,argon:0,argpars:0,argument:[0,5,7],argumentpars:0,around:6,arriv:[0,6],ask:[0,5],aspect:[0,5,6],aspect_filt:[0,5],assign:[6,7],associ:[1,5,6],assum:[3,6],asymmetr:8,attached_interfac:[],attempt:5,attribut:5,audit:8,authent:[5,6,8],author:6,auto:[5,6],auto_compress:5,autoconfigur:8,autom:6,automat:[0,3,4,5,6,7,8],autonom:[4,6],autoomat:0,avail:[0,1,3,4,6,7,8],availadbl:[],averag:6,avoid:[6,7],awai:[0,4,6,7],awar:6,ax25kissinterfac:3,ax:[2,8],b:[0,4],back:[0,6,8],background:1,backhaul:4,band:6,bandwidth:[3,4,6,8],bare:0,barrier:6,base:[2,4,5,6,7,8],basi:[5,6,8],basic:[0,1,2],baud:[3,6],beacon:3,becaus:[4,6],becki:0,becom:[0,4],been:[0,3,4,5,6,8],befor:[0,5,6],begin:[0,5],begun:5,behind:6,being:[3,5,6],belief:6,below:[1,3],benefici:7,best:[1,6,8],beta:8,between:[0,4,5,6],bgp:6,bi:6,bidirect:6,billion:4,bin:7,binari:[0,2],bind:3,bit:[5,6,8],blob:[0,6],board:8,boot:7,both:[3,4,5,6,8],bp:6,bridg:2,briefli:6,broadcast:[1,2,3,5,6],broadcast_destin:0,broadcastloop:0,brought:7,buffer:3,bug:8,build:[0,1,2,3,6,8],built:[1,6,8],bundl:0,c:[0,4,6],cabl:4,cad:6,calcul:[5,6],call:[0,4,5,6,8],callabl:5,callback:[0,5],callsign:3,can:[0,1,2,3,4,5,6,7],cancel:5,candid:4,cannot:0,capac:6,carambola:0,care:[5,6,8],carri:[5,6],carrier:[4,8],caveat:2,cb:6,cbc:8,cd:1,cdma:3,censor:6,censorship:6,central:[4,6],certain:[0,3,4,6],challeng:6,chang:[0,1,5,6,7,8],channel:[0,3,4,6,8],channelarg:0,chapter:[1,3,4,6,8],charact:0,characterist:6,cheap:6,check:[0,1,5],checksum:[5,8],choos:[0,3],chose:6,chosen:4,chunk:0,ciphertext:5,ciphertext_token:5,cl:0,clear:[0,5,6],clear_default_app_data:5,clear_screen:0,client:[0,1,2,5],client_connect:0,client_disconnect:0,client_ident:0,client_loop:0,client_packet_receiv:0,client_request:0,clone:1,close:[0,5],closed_callback:5,closer:6,cluster:6,code:[1,2,3,6],codingr:3,com:[0,1],combin:[4,6],come:[1,6],command:[0,1,7],comment:3,common:[3,6],commun:[0,1,3,4,5,6,7,8],compat:[5,6],compil:1,complet:[0,1,4,5,6,8],compon:6,compos:6,compress:[0,5,6],comput:[1,6,8],concaten:5,concept:[2,6],conclud:[0,5],concurr:[6,7],condit:6,config:[0,1,4,7],configarg:0,configdir:5,configpath:0,configur:[0,1,2,3,4,5,6,8],confirm:[6,8],connect:[0,1,3,4,5,6,7,8],consequ:6,consid:[3,6,8],consist:6,constant:[5,6],construct:6,contact:6,contain:[0,4,5,6],content:[4,7],context:6,control:[0,3,4,5,6],conveni:0,convent:0,converg:2,coordin:[4,5,6,8],core:[4,6,8],correct:[0,6],correctli:0,correspond:6,cost:[6,8],could:[0,4,5,6,8],count:6,counter:0,cours:3,cover:8,coverag:4,cpu:0,creat:[0,2,3,5,6,7],create_kei:5,create_receipt:[0,5],creation:6,creator:6,critic:6,cryptograph:[4,8],cryptographi:[1,6,8],ctrl:0,cull:5,current:[0,2,3,5,6],current_download:0,current_filenam:0,curv:[4,5,6,8],curve25519:[4,5,6,8],custom:[5,6],d:[4,6],daemon:[5,7],dai:[4,6],data:[0,3,4,5,6,8],databit:[3,7],date:[0,1],db:0,dbm:[0,3],debian:[6,7],debug:[],decai:6,decid:[4,5,6],decod:0,decrypt:[5,6],dedic:6,def:0,default_timeout:[],defin:[0,3,6],definit:6,degrad:4,delai:6,deliv:[0,5],deliveri:[0,5,8],demand:5,demonstr:[0,3],depend:[1,4,7],deploi:6,deregist:5,deregister_announce_handl:5,deregister_request_handl:5,deriv:[6,8],describ:[3,5,6],descript:[0,7],design:[4,6,8],desir:[0,6],destin:[0,1,2,4,7],destination_1:0,destination_2:0,destination_clos:0,destination_hash:[0,5,7],destination_hexhash:0,detail:[0,1,2,5,7,8],detect:0,determin:[5,6],dev:[3,7],develop:[2,6,8],devic:[1,2,3,4,5,6,7],dh:5,did:0,differ:[0,1,3,4,5,6,7,8],diffi:[4,6,8],digit:[6,8],dir:0,direct:[0,4,5,6],directli:[3,5,6,7,8],directori:[0,7],disabl:3,disable_encrypt:[],disappear:[],discard:6,disconnect:0,discoveri:[6,7],discrimin:4,discuss:6,disk:[0,5],displai:[0,6],distanc:6,distinct:[3,6],distribut:[0,1,4,5,6,7],divmod:0,document:6,doe:[0,1,2,4,5,6],doesn:3,dolor:[],domain:[1,3],don:[0,1,4],done:[0,1,4,6],dori:4,dot:[6,7],down:0,downgrad:[],download:0,download_began:0,download_conclud:0,download_finish:0,download_start:0,download_tim:0,driver:[7,8],droid:1,drop:6,due:4,duplex:[6,8],dynam:7,e:[0,4],each:[0,4,6],earlier:6,eas:6,easi:[3,6,7,8],easier:[1,4,7],easiest:[1,6],easili:[6,8],eca6f4e4dc26ae329e61:7,ecdh:[6,8],echo:[1,2,7],echo_destin:0,echo_request:0,ed25519:[6,8],effici:[0,3,6,8],ei:0,either:[3,4,6],elaps:3,elif:0,ellipt:[4,5,6,8],els:[0,4,6],emploi:6,emptor:2,emul:1,enabl:[3,4,5,7],enable_transport:6,encapsul:[3,8],encod:0,encrypt:[0,1,4,5,6,8],encrypted_mdu:5,encryptionless:[],end:[0,4,5,6,8],endless:3,endpoint:[0,4,5,6],engin:6,enough:1,ensur:6,enter:0,entir:[4,6],entiti:6,entri:[0,6],enumer:0,environ:[1,6],environment:6,environmentlogg:6,ephemer:[4,5,6,8],equal:[4,6],equip:[4,6],equival:3,equl:[],error:0,essenti:[1,6],establish:[0,5,8],established_callback:5,establishment_timeout_per_hop:5,etc:7,eth0:3,ethernet:[1,4,6,8],even:[4,6,7,8],everi:[0,3,4,5,6],everyon:[4,6],everyth:[0,4,6],evolv:4,exact:6,exactli:[5,6],exampl:[1,2,3,5,6,7,8],example_util:[0,7],exampleannouncehandl:0,exce:0,except:[0,6],exchang:[4,5,6,8],execstart:7,execut:[0,1,5,7],exhaust:6,exist:[0,1,3,6,8],exit:[0,1,5,7],exit_handl:0,expand:6,expect:[0,5,6,7],experi:[1,6],experiment:8,explain:5,explan:6,explicit:5,explicitli:[],explor:[0,6,8],expos:5,extend:[0,1,6],extern:[5,8],extra:[1,3,4],extrem:8,f:1,fa7ddfab5213f916dea:6,face:1,fact:[6,8],factor:3,fail:[0,5],failed_callback:[0,5],fals:[0,3,5],far:[4,6],fast:2,fastest:3,featur:[6,8],feed:5,feedback:0,fernet:8,few:[1,4,6,7,8],field:6,file:[0,1,4,5,6,7,8],file_resourc:0,file_s:0,filelist:0,filelist_data:0,filelist_receiv:0,filelist_timeout_job:0,filenam:0,filetransf:[1,2,5],filter:[0,4,6],find:[4,6],firmwar:6,first:[0,1,5,6],fit:0,five:0,fix:[2,6],flag:[5,6],flow:[3,4],flow_control:3,flush:0,folder:1,follow:[0,1,3,6,7,8],forcibl:5,foreground:1,foremost:8,form:[3,4,5,6],format:[0,2,8],forth:0,forward:[3,5,6,8],forward_ip:3,forward_port:3,found:[0,1,4,6,7],four:4,frankfurt:7,free:8,frequenc:[3,6],friendli:8,from:[0,1,3,4,5,6,7,8],from_byt:5,from_fil:5,fromhex:0,fruit:0,ftdi_ft230x_basic_uart_43891ckm:7,full:[0,3,5,6,7,8],full_hash:5,full_nam:[5,7],fulli:[6,8],funcion:5,fundament:6,further:[1,2],futur:[4,6],g:0,ga:0,gatekeep:6,gatewai:4,gen:[],gener:[0,4,5,6,8],generalis:8,geograph:4,get:[0,2,3,5,8],get_packet_rssi:0,get_packet_snr:0,get_private_kei:5,get_progress:[0,5],get_public_kei:5,get_random_hash:[0,5],get_remote_ident:[0,5],get_request_id:5,get_respons:5,get_response_tim:5,get_rtt:[0,5],get_statu:5,gi:0,gigabyt:8,gipsum:[],git:1,github:[0,1],give:[3,6],given:[4,6],global:[0,4,8],go:[0,1,6],goal:2,good:[4,6],got:0,got_respons:0,govern:6,grape:0,great:6,greater:6,group:[5,6],grow:4,growth:2,guarante:6,guid:[1,5,6],h:[1,6,7],ha:[0,3,4,5,6,8],had:6,half:[6,8],hand:0,handheld:6,handl:[0,4,5,6,7,8],handler:[0,5],happen:[0,5],hardlin:4,hardwar:[4,5,6,8],has_path:[0,5],hasattr:0,hash:[0,1,5,6,7],hash_from_name_and_ident:5,hashmap:0,have:[0,1,3,4,5,6,7],hazard:5,header:6,header_1:6,header_2:6,header_typ:[],hear:6,heard:[5,6],helium:0,hellman:[4,6,8],help:[0,4,6,7,8],her:4,here:[0,1,3,6,7],hexadecim:[0,6,7],high:[3,6,8],higher:[6,8],highli:6,hill:4,hint:0,hit:0,hmac:8,hoc:8,hold:[5,6],home:4,homebrew:3,hop:[4,5,6,7,8],hops_to:5,host:[0,6,7,8],hostnam:3,hour:0,how:[0,3,4,6,8],howev:[4,6],http:[0,1],human:[0,5],i:0,id:[3,5,6,7],id_callsign:3,id_interv:3,idea:6,ident:[0,2,8],identif:[2,3,8],identifi:[0,3,5,6],identify:6,identifyexampl:0,ie:[],if00:7,ifconfig:7,ignor:[5,6],illustr:4,immedi:[1,7],impact:6,implement:[0,4,5,6,8],implicit:[5,6],improv:2,inactive_for:5,inbound:5,includ:[0,2,3,5,6],incom:[0,3,5],incompat:[5,6],increas:3,incur:3,indefinit:6,independ:5,independt:8,index:[0,1,2],indirectli:6,individu:6,inevit:6,infer:6,info:[5,6],inform:[0,1,2,4,5,6],infrastructur:[4,6],ingo:5,initi:[0,4,5,6,8],initialis:[0,5,7],input:0,insert:6,inspect:4,instal:[1,3,4,7],instanc:[0,5,7],instanti:5,instead:[0,3,6,7],integr:[4,6],intend:[4,6],intention:6,inter:5,interact:[0,5,6],interconnect:2,interest:6,interfac:[0,1,2,4,5,6,7],interface_en:[3,7],intern:[3,5,6],internet:[1,2,3,6,8],interv:[3,5],intiat:0,introduc:6,introduct:2,intuit:8,invalid:[0,5],investig:[4,6],involv:4,io:[1,7],ip:[3,6,8],ipsum:[],is_connected_to_shared_inst:0,is_request:[],is_respons:[],isdir:0,isfil:0,island:4,ism:6,its:[5,6],itself:[2,6],iv:8,job:0,join:[0,6],just:[0,4,6,8],k:0,kb:7,kbp:6,keep:[0,4,5,6,7,8],keepal:[5,6],kei:[0,2,4,5,8],kept:[3,4,5,6],kernel:[7,8],keyboardinterrupt:0,keyerror:5,keypair:6,keysiz:5,keystor:4,khz:3,ki:0,kill:5,kilomet:6,kind:[3,4,6],kiss:[2,7],kissinterfac:[3,7],know:[0,4,5,6],knowledg:[4,6],known:[0,5,6],krypton:0,lack:6,laid:6,lan:3,larg:[0,4,6],larger:6,laser:3,last:[0,3,5],last_unit:0,latenc:[6,8],later:[0,1],latest:[0,1],latest_client_link:0,launch:1,lavg:6,layer:[3,4,6,8],lead:6,learn:[0,1,6],least:[6,8],leav:[4,6],ledger:6,left:[5,6],len:0,length:[0,5],less:[3,6,8],let:[0,4,6,7],level:[3,6],libffi:1,librari:1,licens:6,light:6,like:[1,3,5,6,7,8],limit:6,line:[0,1,4,6,8],link:[2,4,8],link_clos:0,link_establish:0,linkexampl:0,linux:[1,6],list:[0,5,6,8],list_deliv:0,list_fil:0,list_packet:0,list_receipt:0,list_timeout:0,listdir:0,listen:[0,3,6],listen_ip:3,listen_port:3,littl:6,lki:6,lkr:6,ll:[0,1,8],ln:[1,7],load:[0,5,7],load_private_kei:5,load_public_kei:5,local:[0,1,3,4,5,6,7,8],locat:[1,4,6,7],log:0,log_error:0,log_info:0,loglevel:[0,5],longer:[0,4,6],longest:3,look:[0,1,3,6,7],loop:0,lora:[1,2,6,8],lorawan:6,lorem:[],lot:6,low:[3,4,6,8],lxmf:1,m:[0,6,7],mac:6,machin:6,made:[5,6],mai:[3,6],main:0,mainli:4,maintain:6,make:[1,6,7],malici:6,manag:[1,5],mani:[0,1,3,4,6,7,8],manipul:6,manual:[0,1,3,4,5,7],mark:6,markqvist:[0,1],master:[0,5],match:[0,3],maximum:[5,6],mcu:6,mdu:0,mean:[6,7],measur:6,mechan:2,medium:[4,6,8],member:4,memori:6,mention:6,menu:0,menu_mod:0,mesh:[4,8],messag:[0,1,5,6,7],messeng:6,metavar:0,method:[0,5,6],methodolog:[6,7],mhz:[3,6],mi:0,microcontrol:6,microwav:6,might:[3,4,6,7],millisecond:[0,7],mind:[4,8],minim:[2,6],minimalsampl:0,minimum:[0,4,6],minut:[0,1,6],mix:[3,4,7],mode:[0,1,6,8],modem:[3,4,5,6,8],modul:[0,1,6,7,8],moment:[6,8],monitor:6,moon:0,mor:[],more:[1,3,4,5,6,8],most:[1,3,4,6,7,8],motiv:2,move:1,mqtt:4,mtu:[5,6,8],much:6,multi:[6,7,8],multilater:6,multipl:[0,4,6,7],multipoint:6,must:[0,1,4,5,6],mw:3,my:6,mycal:3,n:0,name:[0,2,4,5],namespac:0,nano:1,narg:0,natur:3,necesarri:4,necessari:[1,5,6],necessarili:6,need:[0,1,2,3,4,6,7,8],neglig:6,neither:6,neon:0,netifac:1,network:[0,3,5,6,7,8],never:5,newer:6,newest:6,newli:[4,6],next:[1,4,5,6],next_hop:5,next_hop_interfac:5,nicknam:6,no1cll:3,no_inbound_for:5,no_outbound_for:5,nobl:0,noble_ga:0,noble_gas:0,node:[2,4,7,8],nomad:1,nomadnet:1,non:[5,6],none:[0,3,5,6,7],normal:0,notat:[6,7],note:[0,3,6,7],noth:8,notic:6,notif:[0,5],now:[0,1,4,6,7],nt:0,num:0,number:[0,1,3,4,5,6,7],object:5,obtain:6,occur:8,off:[6,8],offer:[1,2,3,5,6],often:[4,6,7],oganesson:0,old:6,onc:[0,4,5,6,8],one:[0,1,3,4,5,6,7,8],onli:[0,1,3,4,5,6,7,8],onlin:6,open:[0,3,5,6,7,8],openmodem:[3,8],openssl:1,oper:[4,5,6,8],opt:6,optic:8,optim:4,option:[0,1,3,4,5,7],order:7,orem:[],organis:4,orient:6,origin:[0,4,6],original_hash:[],os:[0,6,7,8],ospf:6,other:[1,3,4,5,6,7],otherwis:[5,6],our:[0,6],out:[0,3,4,5,6,8],outbound:5,outgo:[0,3,5,6,7],outli:4,outlier:4,outlin:[1,6],output:7,outward:6,over:[0,1,2,3,5,6,7,8],overal:6,overcom:6,overhead:[3,6],overrid:0,overview:[2,3,6],own:[0,1,4,5,6],owner:[],p:[0,6],pack:0,packag:1,packb:0,packet:[0,1,2,3,4,7,8],packet_callback:0,packet_deliv:0,packet_hash:0,packet_receipt:[0,5],packet_timed_out:0,packet_typ:[],packetreceipt:[0,5],pad:8,page:[2,6],pair:[3,6],palm:0,paramet:[3,4,5],pariti:[3,7],pars:0,parse_arg:0,parser:0,part:[0,4,6],particip:[2,6],pass:[0,3,4,5,6],past:[],path:[0,1,5,6,7],path_respons:5,pathfind:[],pathfinder_m:5,pattern:6,payload:[5,6],peach:0,peer:[0,1,3,5,6],peer_pub_byt:[],peer_sig_pub_byt:[],peopl:6,per:[5,6,8],percent:0,perfect:6,perform:[0,4,6],period:[3,6],perman:7,persecut:6,persist:[3,7],person:6,pet:0,philosophi:6,physic:[6,7],pi:[0,4,6,7,8],piec:6,ping:[1,7],pip3:[1,7],pip:[1,7],pkcs7:8,pkg:1,place:[4,6,7],plain:[0,3,5,6],plain_mdu:5,plaintext:[0,5],plan:4,platform:6,pleas:[0,7,8],plenti:6,plu:6,plug:7,pmr:6,point:[1,4,6],pomelo:0,poorli:4,port0:7,port:[2,3,4,6,8],posit:7,possess:6,possibl:[1,3,4,5,6,8],potenti:[0,6,7],power:3,practic:[6,8],pre:[1,3,5,6],preambl:[3,7],predict:6,prefer:6,prepar:[0,4],prerequisit:5,presenc:5,preserv:5,press:0,pretend:6,pretti:6,prettyhexrep:0,previou:0,previous:[4,5,6],primari:6,principl:[6,8],print:0,print_filelist:0,print_help:0,print_menu:0,prioriti:6,prioritis:[2,4],privaci:8,privat:[3,5,6,8],privileg:7,probabl:[0,4,6,7,8],probe:7,procedur:6,process:[1,5,6],product:[],program:[0,2,5,6],program_setup:0,programm:6,programmat:6,progress:[0,5,8],progress_callback:5,project:1,prompt:0,proof:[0,5,6,7],proof_packet:0,proof_requested_callback:5,proof_strategi:5,propag:6,properti:5,protocol:[1,2,8],prove:[0,6],prove_al:[0,5],prove_app:5,prove_non:5,proven:[5,6],provid:[0,1,2,3,4,5,6,8],prv_byte:5,pub_byt:5,public_inform:0,purchas:[4,6,8],purg:5,purpos:[3,5,6],purposefulli:6,put:0,py:[0,1,7],pyseri:1,python3:[1,7],python:[1,6,7,8],q:[0,7],queri:[0,1],queue:6,quiet:7,quinc:0,quit:0,r:[0,6],radio:[1,3,4,5,6,7,8],radiu:6,radon:0,rais:[0,5],ram:3,rand:6,randint:0,random:[0,5,6],random_text_gener:0,randomli:[0,6],rang:[0,1,3,4,6,8],raspberri:[4,6,7,8],rate:[0,3],rb:0,re:[0,3,5,6],reach:[2,4],reachabl:[0,4,5,6],read:[0,1,6],readabl:[0,5,6],readi:[0,1,4,5],readili:8,real:[4,8],realli:[3,5],reason:[3,6],reassembl:6,recal:[0,5],recall_app_data:5,recap:6,receipt:[0,2,6],receiv:[0,5,6,7],received_announc:[0,5],reception_rssi:0,reception_snr:0,reception_stat:0,recip:1,recipi:6,recommend:[0,6],reconstruct:6,record:6,recreat:6,refer:[0,1,2],regard:6,regist:[0,5],register_announce_handl:[0,5],register_request_handl:[0,5],rel:[6,8],relat:1,releas:[1,6],relev:[0,5],reli:6,reliabl:[4,6,8],rem:0,remain:6,rememb:6,remot:[0,5],remote_ident:[0,5],remote_identifi:0,remote_identity_hash:[],remote_p:0,remotesensor:6,repeat:1,replac:[1,6,7],repli:[0,7],replic:6,reply_data:0,reply_text:0,repositori:1,repres:6,represent:[0,6],request:[2,6,7],request_destin:0,request_fail:0,request_id:[0,5],request_packet:0,request_path:[0,5],request_receipt:[0,5],request_receiv:0,requested_at:[0,5],requestexampl:0,requestreceipt:5,requir:[0,1,4,6,7,8],research:8,resend:5,reserv:6,resili:8,resourc:[0,2],resource_callback:5,resource_sending_conclud:0,resource_strategi:5,respect:3,respond:[0,5],respons:[2,5],response_callback:[0,5],response_gener:[0,5],response_tim:[],rest:[4,8],restart:7,restartsec:7,result:[0,6],reticulum:[0,3,4],retransmiss:6,retransmit:6,retri:6,reveal:[5,6,8],review:8,right:4,rn:[0,1,5,7],rnode:[2,6,8],rnodeinterfac:3,rnpath:[1,2],rnprobe:[1,2],rnsd:[1,2],rnstatu:[1,2],robot:6,rotat:6,round:[0,5,7],rout:[4,5,6,8],rprogress:0,rsa:[],rssi:0,rtt:[0,5,6],rttstring:0,rule:6,run:[0,1,4,5,6,7,8],runtim:6,rust:1,rw:6,rx:[3,7],s:[0,1,3,4,6,7,8],said:6,same:[1,3,5,6,7],satisfi:6,save:[5,6],save_error:0,saved_filenam:0,scenario:[1,2,6],screen:0,search:2,second:[0,3,5,6,8],secreci:[5,6,8],section:[3,4,6],secur:[6,8],see:[0,4,5,6,8],seen:6,segment:[3,4],segment_index:[],select:[0,3],self:[0,4,8],send:[0,3,5,6,7],sender:[0,4,6],sendig:0,sensibl:1,sensor:6,sent:[0,5,6,7],sentiment:6,separ:[4,6,7],sequenc:[0,5,6,8],serial:[2,6,8],serialinterfac:3,serv:[0,4,6],serve_path:0,server:[0,1,2],server_callback:0,server_destin:0,server_fil:0,server_ident:0,server_link:0,server_loop:0,server_packet_receiv:0,servic:[1,2,4],session:6,set:[0,3,4,5,6,7,8],set_default_app_data:5,set_delivery_callback:[0,5],set_link_closed_callback:0,set_link_established_callback:[0,5],set_packet_callback:[0,5],set_proof_requested_callback:5,set_proof_strategi:[0,5],set_remote_identified_callback:[0,5],set_resource_callback:5,set_resource_concluded_callback:[0,5],set_resource_started_callback:[0,5],set_resource_strategi:[0,5],set_timeout:[0,5],set_timeout_callback:[0,5],setdaemon:0,setup:[0,2,3],sever:[1,4,5,7],sha256:8,sha:[5,6],shall:6,share:[1,4,5,6,7],she:4,shelf:[6,8],shop:0,shortest:6,shorthand:7,should:[0,3,4,5,6,8],should_allow_unencrypt:[],should_quit:0,should_use_implicit_proof:5,show:7,shown:0,side:8,sight:4,sign:[5,6],signatur:[5,6,8],significantli:[],similar:[4,7,8],simpl:[0,6,7,8],simplest:6,simpli:[0,1,4,6,7],simplic:6,sinc:[0,1,3,4,5,6],singl:[0,3,5,6,8],singular:6,sit:[],site:2,situat:[4,6],size:[0,5,6],size_str:0,sleep:0,slice:0,slottim:[3,7],slow:[0,3,6],small:[0,3,4,6,8],snr:0,so:[0,1,3,4,5,6,7,8],softwar:[1,6,8],some:[0,1,4,6],someth:[3,6],somethign:0,soon:5,sort:6,sourc:[0,1,4,6,8],space:[0,4,8],span:6,special:[6,7],specif:[0,2,3,5,8],specifi:[0,1,3,4,5,7],spectrum:[3,6],speed:[3,7],split:0,sponsor:8,spread:3,spreadingfactor:3,squelch:3,ssid:3,stabl:[6,8],stack:[0,1,4,6,7,8],stage:6,stai:[0,7],standard:[1,6],start:[0,2,3,5,6,7],startlimitintervalsec:7,startup:0,state:0,station:[3,6],stationari:4,statist:0,statu:[0,1,2,5,6,7],stdout:0,step:1,still:[0,4,6],stock:0,stop:8,stopbit:[3,7],store:[0,6],store_tru:0,str:0,strategi:5,stream:6,strength:8,strictli:6,string:[0,5],structur:6,subject:6,subnet:4,subsequ:6,succe:1,successful:5,successfulli:0,sucessfulli:6,sudo:7,suffic:6,suffici:[6,7],suffix:0,suit:[1,6],suitabl:[0,3,4,6],suppli:[4,5,6],support:[0,2,4,6,8],sure:[1,7],sy:0,symlink:[1,7],symmetr:[5,6],system:[0,1,2,5,8],systemctl:7,systemd:7,t:[0,1,3,4,6],tabl:[4,6],tail:3,take:[0,1,6,8],taken:[0,6],tangerin:0,target:[0,7],target_host:3,target_port:3,tcp:[1,2,4,6,8],tcpclientinterfac:3,tcpinterfac:7,tcpserverinterfac:3,tdata:0,teardown:[0,5],teardown_reason:0,teffect:0,tell:0,temperatur:6,ten:6,term:[4,6],termin:[1,5],terminolog:[4,6],termux:1,test:[3,6],testnet:7,text:[0,4,6],tfile:0,than:[0,4,6],thei:[0,4,5,6],them:[0,3,6],thereaft:6,therefor:[6,8],thi:[0,1,2,3,4,5,6,7],those:4,though:6,thourough:8,thread:0,three:[4,6],throough:3,throttl:4,through:[3,4,5,6,8],throughout:6,throughput:[6,8],thu:[4,5,6],ti:[0,6],time:[0,1,3,4,5,6,7],timeout:[0,5],timeout_callback:[],timeoutarg:0,timestr:0,tnc:[3,5,7,8],to_fil:5,todai:6,todo:[],togeth:6,token:[5,6],too:[0,4,6],tool:8,top:[4,6],topic:6,topographi:4,topolog:[3,6],total:[6,8],total_s:0,touch:8,toward:[0,6],tradit:4,traffic:[0,3,4,5,6],tramsit:[],transceiv:[3,6,8],transfer:[0,5,6,8],transfer_s:0,transmiss:[3,6],transmit:[0,3,6],transpar:[3,6],transport:[0,2,4,7,8],transport_en:5,transport_id:[],transport_typ:[],travers:6,treat:6,tri:0,trip:[0,5,7],trivial:8,truli:6,truncat:[5,6],truncated_hash:5,truncated_hashlength:5,trust:6,trustless:[6,8],ttime:0,ttransfer:0,ttyusb0:[3,7],ttyusb1:3,ttyusb2:3,tunnel:[6,8],tupl:5,turnaround:3,tutori:1,two:[0,3,4,6],tx:[3,7],txpower:3,txtail:[3,7],type:[0,2,3,4,5,7],typeerror:5,ubuntu:7,udp:[2,4,6,7,8],udpinterfac:[3,7],umsgpack:0,uncencrypt:0,under:7,underli:[4,8],understand:[1,2],unencrypt:[0,5,6],unequivoc:6,unforg:8,unidentifi:0,unifi:4,uninterest:0,uniqu:[6,8],unit:[0,7],unknown:[0,5,6],unless:[1,5,6],unlicens:6,unpack:0,unpackb:0,unplug:7,unsign:7,unsupport:5,until:[0,5,6],unwant:6,up:[0,1,4,6,7,8],updat:[0,1,5],upgrad:1,upon:[0,6],upset:0,urandom:8,us:[0,2,3,4,5,6],usabl:6,usag:7,usb:[4,6,7,8],useabl:6,user:[0,1,4,6,7],user_input:0,userland:8,usernameher:7,usr:7,utf:0,util:[0,2,6],utilis:[4,6,7,8],v:7,valid:[0,3,5,6,7],valu:[5,6],valueerror:[0,5],vari:7,variabl:0,varieti:[3,6,8],variou:[0,6],ve:1,vendor:0,verbos:7,veri:[4,5,6,7,8],verif:[5,6],verifi:[0,5,6],versa:[4,8],version:7,vhf:[4,6],via:[1,6,7],vice:[4,8],view:[1,6,7],virtual:4,visibl:0,wa:[0,4,5,6,8],wai:[0,1,3,4,6],wait:[0,6],want:[0,1,3,4,6,7,8],wantedbi:7,warrant:8,wast:3,wb:0,we:[0,3,6],well:[4,5,6,8],went:0,were:4,what:[0,1,2,5,6],whatev:[5,6],wheel:1,when:[0,1,3,4,5,6,7],whenev:5,where:[2,4,5,6,7],whereupon:6,whether:[0,3,5,6],which:[0,1,4,5,6,7],who:6,wide:[6,8],wifi:[4,6,8],wildcard:0,willing:4,window:6,wire:[3,6,8],wireless:4,wish:6,within:[0,1,3,4,5,6],without:[4,8],won:0,work:[1,6,7,8],world:[4,8],worri:4,would:[3,4,6],write:[0,1,5],written:6,wrong:0,x25519:[5,6,8],x:6,xenon:0,y:0,ye:6,year:6,yet:[0,6],yi:0,you:[0,1,2,3,4,5,6,7,8],your:[0,1,2,3,4,6,8],yourself:[6,8],z:0,zero:[5,8],zeromq:4,zi:0},titles:["Code Examples","Getting Started Fast","Reticulum Network Stack Manual","Supported Interfaces","Building Networks","API Reference","Understanding Reticulum","Using Reticulum on Your System","What is Reticulum?"],titleterms:{"1":[],"2":[],"25":3,"class":5,"function":6,"public":6,"try":1,The:[6,7],With:1,android:1,announc:[0,6],api:5,ax:3,base:1,basic:6,binari:6,bridg:4,broadcast:0,build:4,can:8,caveat:8,client:3,code:0,concept:4,configur:7,converg:4,creat:1,current:8,deliveri:[],destin:[5,6],detail:6,develop:1,devic:8,doe:8,echo:0,emptor:8,establish:6,exampl:[0,4],fast:1,filetransf:0,fix:7,format:6,further:6,get:[1,6],gipsum:[],goal:6,growth:4,ident:[5,6],identif:0,improv:7,includ:[1,7],indic:2,interconnect:4,interfac:[3,8],internet:4,introduct:6,kei:6,kiss:3,link:[0,5,6],lora:[3,4],manual:2,mechan:6,minim:0,motiv:6,name:[6,7],network:[1,2,4],node:6,offer:8,orem:[],over:4,overview:4,packet:[5,6],particip:1,pathfind:[],port:7,predict:[],prioritis:6,program:[1,7],protocol:6,proven:[],reach:6,receipt:5,refer:[5,6],request:[0,5],resourc:[5,6],respons:0,reticulum:[1,2,5,6,7,8],rnode:3,rnpath:7,rnprobe:7,rnsd:7,rnstatu:7,run:[],scenario:4,serial:[3,7],server:3,servic:7,setup:6,site:4,specif:6,stack:2,start:1,statu:8,step:[],support:3,system:[6,7],tabl:2,tcp:3,transport:[5,6],type:[6,8],udp:3,understand:6,us:[1,7,8],util:[1,7],what:8,where:8,your:7}}) \ No newline at end of file +Search.setIndex({docnames:["examples","gettingstartedfast","index","interfaces","networks","reference","understanding","using","whatis"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"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:56},filenames:["examples.rst","gettingstartedfast.rst","index.rst","interfaces.rst","networks.rst","reference.rst","understanding.rst","using.rst","whatis.rst"],objects:{"RNS.Destination":{announce:[5,1,1,""],app_and_aspects_from_name:[5,1,1,""],clear_default_app_data:[5,1,1,""],create_keys:[5,1,1,""],decrypt:[5,1,1,""],deregister_request_handler:[5,1,1,""],encrypt:[5,1,1,""],full_name:[5,1,1,""],get_private_key:[5,1,1,""],hash:[5,1,1,""],hash_from_name_and_identity:[5,1,1,""],load_private_key:[5,1,1,""],register_request_handler:[5,1,1,""],set_default_app_data:[5,1,1,""],set_link_established_callback:[5,1,1,""],set_packet_callback:[5,1,1,""],set_proof_requested_callback:[5,1,1,""],set_proof_strategy:[5,1,1,""],sign:[5,1,1,""]},"RNS.Identity":{CURVE:[5,2,1,""],KEYSIZE:[5,2,1,""],TRUNCATED_HASHLENGTH:[5,2,1,""],decrypt:[5,1,1,""],encrypt:[5,1,1,""],from_bytes:[5,1,1,""],from_file:[5,1,1,""],full_hash:[5,1,1,""],get_private_key:[5,1,1,""],get_public_key:[5,1,1,""],get_random_hash:[5,1,1,""],load_private_key:[5,1,1,""],load_public_key:[5,1,1,""],recall:[5,1,1,""],recall_app_data:[5,1,1,""],sign:[5,1,1,""],to_file:[5,1,1,""],truncated_hash:[5,1,1,""],validate:[5,1,1,""]},"RNS.Link":{CURVE:[5,2,1,""],ESTABLISHMENT_TIMEOUT_PER_HOP:[5,2,1,""],KEEPALIVE:[5,2,1,""],get_remote_identity:[5,1,1,""],identify:[5,1,1,""],inactive_for:[5,1,1,""],no_inbound_for:[5,1,1,""],no_outbound_for:[5,1,1,""],request:[5,1,1,""],set_packet_callback:[5,1,1,""],set_remote_identified_callback:[5,1,1,""],set_resource_callback:[5,1,1,""],set_resource_concluded_callback:[5,1,1,""],set_resource_started_callback:[5,1,1,""],set_resource_strategy:[5,1,1,""],teardown:[5,1,1,""]},"RNS.Packet":{ENCRYPTED_MDU:[5,2,1,""],PLAIN_MDU:[5,2,1,""],resend:[5,1,1,""],send:[5,1,1,""]},"RNS.PacketReceipt":{get_rtt:[5,1,1,""],get_status:[5,1,1,""],set_delivery_callback:[5,1,1,""],set_timeout:[5,1,1,""],set_timeout_callback:[5,1,1,""]},"RNS.RequestReceipt":{get_progress:[5,1,1,""],get_request_id:[5,1,1,""],get_response:[5,1,1,""],get_response_time:[5,1,1,""],get_status:[5,1,1,""]},"RNS.Resource":{advertise:[5,1,1,""],cancel:[5,1,1,""],get_progress:[5,1,1,""]},"RNS.Reticulum":{MTU:[5,2,1,""],should_use_implicit_proof:[5,1,1,""],transport_enabled:[5,1,1,""]},"RNS.Transport":{PATHFINDER_M:[5,2,1,""],deregister_announce_handler:[5,1,1,""],has_path:[5,1,1,""],hops_to:[5,1,1,""],next_hop:[5,1,1,""],next_hop_interface:[5,1,1,""],register_announce_handler:[5,1,1,""],request_path:[5,1,1,""]},RNS:{Destination:[5,0,1,""],Identity:[5,0,1,""],Link:[5,0,1,""],Packet:[5,0,1,""],PacketReceipt:[5,0,1,""],RequestReceipt:[5,0,1,""],Resource:[5,0,1,""],Reticulum:[5,0,1,""],Transport:[5,0,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute"},terms:{"0":[0,3,5,6,7,8],"00":6,"000":[],"00000000":6,"00000100":6,"00000111":6,"01":[6,7],"01010000":6,"02":7,"05":0,"07":7,"1":[0,3,5,6,7],"10":[0,3,6,7],"100":[0,6],"1000":[0,6],"1024":0,"11":6,"115200":[3,7],"12":3,"1200":6,"125":3,"125000":3,"127":3,"128":[5,6,8],"13":7,"14":6,"141":[],"15":[3,6],"150":[3,7],"150m":3,"151":6,"16":[3,7],"18":6,"180":6,"182":[],"2":[0,3,6,7],"20":[0,3,6,7],"200":[3,7],"2000000":[],"205":[],"211":[],"237":[6,8],"24":3,"240":[],"25":[0,2,8],"255":3,"256":[5,6],"270":6,"2f":0,"3":[0,6,7,8],"323":[],"33":6,"34":6,"360":5,"3600":0,"37":7,"37428":7,"38":7,"383":5,"3e12fc71692f8ec47bc5":1,"4":[6,7],"409":[],"4242":[3,7],"430":6,"45":0,"469":7,"477":[5,6],"4965":7,"5":[0,3,5,6],"500":[5,6,8],"512":5,"55":3,"56b115c30cd386cad69c":7,"60":0,"600":3,"62":[6,8],"7":[3,6],"72":3,"77":6,"7ca6f4e4dc26ae329e61":[],"8":[0,3,7],"80":[5,6],"8001":3,"80e29bf7cccaf31431b3":6,"83":6,"86":[],"867":3,"867200000":3,"868":6,"88":3,"9":7,"900":6,"9382f334de63217a4278":7,"95":6,"abstract":6,"break":[5,6,8],"byte":[0,5,6,7,8],"case":[1,3,4,6,7],"class":[0,2,8],"default":[0,1,3,4,5,6,7],"do":[0,1,3,5,6,7,8],"float":[0,5],"function":[0,1,2,3,4,5,8],"import":[0,1,4,6],"int":0,"long":[0,3,6],"new":[0,3,4,5,6],"public":[0,2,5],"return":[0,5],"short":6,"static":5,"throw":[],"true":[0,3,5,7],"try":[0,2],"while":[0,4,5,6,8],A:[0,1,3,4,5,6,8],And:0,As:[4,5,6,8],At:[4,6],Be:[5,7],But:6,By:[0,3,5,6],For:[1,3,4,5,6,8],IN:[0,5],If:[0,1,3,4,5,6,7,8],In:[0,1,3,4,5,6,7,8],It:[0,1,3,5,6,8],No:[6,8],On:[0,7],One:5,Or:[3,6],That:6,The:[0,1,2,3,4,5,8],Then:1,There:[4,6,8],These:[3,6,7],To:[0,1,3,4,6,7,8],Will:5,With:[2,3,4,6,7],_:6,__:6,______:6,_______:6,________:6,________________:6,__init__:0,__main__:0,__name__:0,_exit:0,ab:0,abil:1,abl:[0,4,5,6,7],about:[0,1,4,5,6],abov:[1,3,6],absolut:[],accept:[5,6],accept_al:[0,5],accept_app:5,accept_non:5,access:[5,6,7],accord:6,accordingli:0,acheiv:6,achiev:[5,6],acknowledg:8,across:4,act:[5,6],action:0,activ:[0,1,5,6],actor:6,actual:[0,1,3,6],ad:[0,4,5,8],adapt:4,add:[0,1,3,4],add_argu:0,addit:[6,8],addr1:6,addr2:6,address:[0,3,4,5,6,8],adher:5,administr:7,adress:[0,4,5,8],advantag:5,advertis:[0,5],advis:6,ae:[6,8],after:[0,4,6,7],again:[1,6],against:6,agent:6,agnost:[4,6],agnostic:6,aim:[2,6],air:8,airtim:3,aliv:[5,6],all:[0,2,3,4,5,6,7,8],alloc:7,allow:[0,1,3,4,5,6,7,8],allow_al:[0,5],allow_list:5,allow_non:5,allowed_list:5,almost:6,along:[4,6],alreadi:[0,4,6],also:[0,1,3,4,5,6,7,8],alter:[3,6],altern:[0,3,7],although:8,alwai:[5,6,7],amateur:[3,8],amet:[],amount:[3,4,5,6,8],an:[0,1,3,4,5,6,7,8],android:2,ani:[0,1,3,4,5,6,7,8],announc:[2,5],announce_handl:0,announced_ident:[0,5],announceloop:0,announcesampl:0,anonym:[4,5,6,8],anoth:[1,5,6,7],answer:[6,7],anyon:[0,4,5,6],anyth:[3,6],anywher:0,apart:6,api:[1,2,6,8],apk:1,app:[0,1,5,6],app_and_aspects_from_nam:5,app_data:[0,5],app_nam:[0,5],app_timeout:0,append:[0,6],appli:6,applic:[0,5,6,7],approach:7,approv:6,approxim:6,ar:[0,1,3,4,5,6,7,8],arbitrari:[5,6],arbritrari:8,area:[3,4,8],arg:0,argon:0,argpars:0,argument:[0,5,7],argumentpars:0,around:6,arriv:[0,6],ask:[0,5],aspect:[0,5,6],aspect_filt:[0,5],assign:[6,7],associ:[1,5,6],assum:[3,6],asymmetr:8,attached_interfac:[],attempt:5,attribut:5,audit:8,authent:[5,6,8],author:6,auto:[5,6],auto_compress:5,autoconfigur:8,autom:6,automat:[0,3,4,5,6,7,8],autonom:[4,6],autoomat:0,avail:[0,1,3,4,6,7,8],availadbl:[],averag:6,avoid:[6,7],awai:[0,4,6,7],awar:6,ax25kissinterfac:3,ax:[2,8],b:[0,4],back:[0,6,8],background:1,backhaul:4,band:6,bandwidth:[3,4,6,8],bare:0,barrier:6,base:[2,3,4,5,6,7,8],basi:[5,6,8],basic:[0,1,2],baud:[3,6],beacon:3,becaus:[4,6],becki:0,becom:[0,4],been:[0,3,4,5,6,8],befor:[0,5,6],begin:[0,5],begun:5,behind:6,being:[3,5,6],belief:6,below:[1,3],benefici:7,best:[1,6,8],beta:8,between:[0,4,5,6],bgp:6,bi:6,bidirect:6,billion:4,bin:7,binari:[0,2],bind:3,bit:[5,6,8],blob:[0,6],board:8,boot:7,both:[3,4,5,6,8],bp:6,bridg:2,briefli:6,broadcast:[1,2,3,5,6],broadcast_destin:0,broadcastloop:0,brought:7,buffer:3,bug:8,build:[0,1,2,3,6,8],built:[1,6,8],bundl:0,c:[0,4,6],cabl:4,cad:6,calcul:[5,6],call:[0,4,5,6,8],callabl:5,callback:[0,5],callsign:3,can:[0,1,2,3,4,5,6,7],cancel:5,candid:4,cannot:0,capac:6,carambola:0,care:[5,8],carri:[5,6],carrier:[4,8],caution:3,caveat:2,cb:6,cbc:8,cd:1,cdma:3,censor:6,censorship:6,central:[4,6],certain:[0,3,4,6],challeng:6,chang:[0,1,5,6,7,8],channel:[0,3,4,6,8],channelarg:0,chapter:[1,3,4,6,8],charact:0,characterist:6,cheap:6,check:[0,1,5],checksum:[5,8],choos:[0,3],chose:6,chosen:4,chunk:0,ciphertext:5,ciphertext_token:5,cl:0,clear:[0,5,6],clear_default_app_data:5,clear_screen:0,client:[0,1,2,5],client_connect:0,client_disconnect:0,client_ident:0,client_loop:0,client_packet_receiv:0,client_request:0,clone:1,close:[0,5],closed_callback:5,closer:6,cluster:6,code:[1,2,3,6],codingr:3,com:[0,1],combin:[4,6],come:[1,6],command:[0,1,7],comment:3,common:[3,6],commun:[0,1,3,4,5,6,7,8],compat:[5,6],compil:1,complet:[0,1,4,5,6,8],complex:6,compon:6,compos:6,compress:[0,5,6],comput:[1,6,8],concaten:5,concept:[2,6],conclud:[0,5],concurr:[6,7],condit:6,config:[0,1,4,7],configarg:0,configdir:5,configpath:0,configur:[0,1,2,3,4,5,6,8],confirm:[6,8],conjunct:3,connect:[0,1,3,4,5,6,7,8],consequ:[],consid:[3,6,8],consist:6,constant:[5,6],construct:6,contact:6,contain:[0,4,5,6],content:[4,7],context:6,control:[0,3,4,5,6],conveni:0,convent:0,converg:2,coordin:[4,5,6,8],core:[4,6,8],correct:[0,6],correctli:0,correspond:6,cost:[6,8],could:[0,4,5,6,8],count:6,counter:0,cours:3,cover:8,coverag:4,cpu:0,creat:[0,2,3,5,6,7],create_kei:5,create_receipt:[0,5],creation:6,creator:6,critic:6,cryptograph:[4,8],cryptographi:[1,6,8],ctrl:0,cull:5,current:[0,2,3,5,6],current_download:0,current_filenam:0,curv:[4,5,6,8],curve25519:[4,5,6,8],custom:[5,6],d:[4,6],daemon:[5,7],dai:[4,6],data:[0,3,4,5,6,8],databit:[3,7],date:[0,1],db:0,dbm:[0,3],debian:[6,7],debug:[],decai:6,decid:[4,5,6],decod:0,decrypt:[5,6],dedic:6,def:0,default_timeout:[],defin:[0,3,6],definit:6,degrad:4,delai:6,deliv:[0,5],deliveri:[0,5,8],demand:5,demonstr:[0,3],depend:[1,4,7],deploi:6,deregist:5,deregister_announce_handl:5,deregister_request_handl:5,deriv:[6,8],describ:[3,5,6],descript:[0,7],design:[4,6,8],desir:[0,6],destin:[0,1,2,4,7],destination_1:0,destination_2:0,destination_clos:0,destination_hash:[0,5,7],destination_hexhash:0,detail:[0,1,2,5,7,8],detect:0,determin:[5,6],dev:[3,7],develop:[2,6,8],devic:[1,2,3,4,5,6,7],dh:5,did:0,differ:[0,1,3,4,5,6,7,8],diffi:[4,6,8],digit:[6,8],dir:0,direct:[0,4,5,6],directli:[3,5,6,7,8],directori:[0,7],disabl:3,disable_encrypt:[],disappear:[],discard:6,disconnect:0,discoveri:[6,7],discrimin:4,discuss:6,disk:[0,5],displai:[0,6],distanc:6,distinct:[3,6],distribut:[0,1,4,5,6,7],divmod:0,document:6,doe:[0,1,2,4,5,6],doesn:3,dolor:[],domain:[1,3],don:[0,1,4],done:[0,1,4,6],dori:4,dot:[6,7],down:0,downgrad:[],download:0,download_began:0,download_conclud:0,download_finish:0,download_start:0,download_tim:0,driver:[7,8],droid:1,drop:6,due:4,duplex:[6,8],dynam:7,e:[0,4],each:[0,4,6],earlier:6,eas:6,easi:[3,6,7,8],easier:[1,4,7],easiest:[1,6],easili:[6,8],eca6f4e4dc26ae329e61:7,ecdh:[6,8],echo:[1,2,7],echo_destin:0,echo_request:0,ed25519:[6,8],edit:1,effici:[0,3,6,8],ei:0,either:[3,4,6],elaps:3,elif:0,ellipt:[4,5,6,8],els:[0,4,6],emploi:6,emptor:2,emul:1,enabl:[3,4,5,7],enable_transport:6,encapsul:[3,8],encod:0,encrypt:[0,1,4,5,6,8],encrypted_mdu:5,encryptionless:[],end:[0,4,5,6,8],endless:3,endpoint:[0,4,5,6],engin:[],enough:1,ensur:6,enter:0,entir:[4,6],entiti:6,entri:[0,6],enumer:0,environ:[1,6],environment:6,environmentlogg:6,ephemer:[4,5,6,8],equal:[4,6],equip:[4,6],equival:3,equl:[],error:0,essenti:[1,6],establish:[0,5,8],established_callback:5,establishment_timeout_per_hop:5,etc:7,eth0:3,ethernet:[1,4,6,8],even:[4,6,7,8],everi:[0,3,4,5,6],everyon:[4,6],everyth:[0,4,6],evolv:4,exact:6,exactli:[5,6],exampl:[1,2,3,5,6,7,8],example_util:[0,7],exampleannouncehandl:0,exce:0,except:[0,6],exchang:[4,5,6,8],execstart:7,execut:[0,1,5,7],exhaust:6,exist:[0,1,3,6,8],exit:[0,1,5,7],exit_handl:0,expand:6,expect:[0,5,6,7],experi:[1,6],experiment:8,explain:5,explan:6,explicit:5,explicitli:[],explor:[0,6,8],expos:[3,5],extend:[0,1,6],extern:[3,5,8],extra:[1,3,4],extrem:8,f:1,fa7ddfab5213f916dea:6,face:1,fact:[6,8],factor:3,fail:[0,5],failed_callback:[0,5],fals:[0,3,5],far:[4,6],fast:2,fastest:3,featur:[6,8],feed:5,feedback:0,fernet:8,few:[1,4,6,7,8],field:6,file:[0,1,4,5,6,7,8],file_resourc:0,file_s:0,filelist:0,filelist_data:0,filelist_receiv:0,filelist_timeout_job:0,filenam:0,filetransf:[1,2,5],filter:[0,4,6],find:[4,6],firmwar:6,first:[0,1,5,6],fit:0,five:0,fix:[2,6],flag:[5,6],flow:[3,4],flow_control:3,flush:0,folder:1,follow:[0,1,3,6,7,8],forcibl:5,foreground:1,foremost:8,form:[3,4,5,6],format:[0,2,8],forth:0,forward:[3,5,6,8],forward_ip:3,forward_port:3,found:[0,1,4,6,7],four:4,frame:3,frankfurt:7,free:8,frequenc:[3,6],friendli:8,from:[0,1,3,4,5,6,7,8],from_byt:5,from_fil:5,fromhex:0,fruit:0,ftdi_ft230x_basic_uart_43891ckm:7,full:[0,3,5,6,7,8],full_hash:5,full_nam:[5,7],fulli:[6,8],funcion:5,fundament:6,further:[1,2],futur:[4,6],g:0,ga:0,gatekeep:6,gatewai:4,gen:[],gener:[0,4,5,6,8],generalis:8,geograph:4,get:[0,2,3,5,8],get_packet_rssi:0,get_packet_snr:0,get_private_kei:5,get_progress:[0,5],get_public_kei:5,get_random_hash:[0,5],get_remote_ident:[0,5],get_request_id:5,get_respons:5,get_response_tim:5,get_rtt:[0,5],get_statu:5,gi:0,gigabyt:8,gipsum:[],git:1,github:[0,1],give:[3,6],given:[4,6],global:[0,4,8],go:[0,1,6],goal:2,good:[4,6],got:0,got_respons:0,govern:6,grape:0,great:6,greater:6,greatli:3,group:[5,6],grow:4,growth:2,guarante:6,guid:[1,5,6],h:[1,6,7],ha:[0,3,4,5,6,8],had:6,half:[6,8],hand:[0,1],handheld:6,handl:[0,4,5,6,7,8],handler:[0,5],happen:[0,5],hardlin:4,hardwar:[3,4,5,6,8],has_path:[0,5],hasattr:0,hash:[0,1,5,6,7],hash_from_name_and_ident:5,hashmap:0,have:[0,1,3,4,5,6,7],hazard:5,header:6,header_1:6,header_2:6,header_typ:[],hear:6,heard:[5,6],helium:0,hellman:[4,6,8],help:[0,4,6,7,8],her:4,here:[0,1,3,6,7],hexadecim:[0,6,7],high:[3,6,8],higher:[6,8],highli:6,hill:4,hint:0,hit:0,hmac:8,hoc:8,hold:[5,6],home:4,homebrew:3,hop:[4,5,6,7,8],hops_to:5,host:[0,6,7,8],hostnam:3,hour:0,how:[0,3,4,6,8],howev:[4,6],http:[0,1],human:[0,5],i:0,id:[3,5,6,7],id_callsign:3,id_interv:3,idea:6,ident:[0,2,8],identif:[2,3,8],identifi:[0,3,5,6],identify:6,identifyexampl:0,ie:[],if00:7,ifconfig:7,ignor:[5,6],illustr:4,immedi:[1,7],impact:6,implement:[0,4,5,6,8],implicit:[5,6],improv:[2,3],inactive_for:5,inbound:5,includ:[0,2,3,5,6],incom:[0,3,5],incompat:[5,6],increas:3,incur:3,indefinit:6,independ:5,independt:8,index:[0,1,2],indirectli:6,individu:6,inevit:6,infer:6,info:[5,6],inform:[0,1,2,4,5,6],infrastructur:[4,6],ingo:5,initi:[0,4,5,6,8],initialis:[0,5,7],input:0,insert:6,inspect:4,instal:[1,3,4,7],instanc:[0,5,7],instanti:5,instead:[0,3,6,7],integr:[4,6],intend:[4,6],intention:6,inter:5,interact:[0,1,5,6],interconnect:2,interest:6,interfac:[0,1,2,4,5,6,7],interface_en:[3,7],intermitt:3,intern:[3,5,6],internet:[1,2,3,6,8],interv:[3,5],intiat:0,introduc:6,introduct:2,intuit:8,invalid:[0,5],investig:4,involv:4,io:[1,7],ip:[3,6,8],ipsum:[],is_connected_to_shared_inst:0,is_request:[],is_respons:[],isdir:0,isfil:0,island:4,ism:6,its:[5,6],itself:[2,6],iv:8,job:0,join:[0,6],just:[0,4,6,8],k:0,kb:7,kbp:6,keep:[0,4,5,6,7,8],keepal:[5,6],kei:[0,2,4,5,8],kept:[3,4,5,6],kernel:[7,8],keyboardinterrupt:0,keyerror:5,keypair:6,keysiz:5,keystor:4,khz:3,ki:0,kill:5,kilomet:6,kind:[3,4,6],kiss:[2,7],kiss_fram:3,kissinterfac:[3,7],know:[0,4,5,6],knowledg:[4,6],known:[0,5,6],krypton:0,lack:6,laid:6,lan:3,larg:[0,4,6],larger:6,laser:3,last:[0,3,5],last_unit:0,latenc:[6,8],later:[0,1],latest:[0,1],latest_client_link:0,launch:1,lavg:6,layer:[3,4,6,8],lead:6,learn:[0,1,6],least:[6,8],leav:[4,6],ledger:6,left:[5,6],len:0,length:[0,5],less:[3,6,8],let:[0,4,6,7],level:[3,6],libffi:1,librari:1,licens:6,light:[],like:[1,3,5,6,7,8],limit:6,line:[0,1,4,6,8],link:[2,3,4,8],link_clos:0,link_establish:0,linkexampl:0,linux:[1,6],list:[0,5,6,8],list_deliv:0,list_fil:0,list_packet:0,list_receipt:0,list_timeout:0,listdir:0,listen:[0,3,6],listen_ip:3,listen_port:3,littl:6,lki:6,lkr:6,ll:[0,1,8],ln:[1,7],load:[0,5,7],load_private_kei:5,load_public_kei:5,local:[0,1,3,4,5,6,7,8],locat:[1,4,6,7],log:0,log_error:0,log_info:0,loglevel:[0,5],longer:[0,4,6],longest:3,look:[0,1,3,6,7],loop:0,lora:[1,2,6,8],lorawan:6,lorem:[],lot:6,low:[3,4,6,8],lxmf:1,m:[0,6,7],mac:6,machin:6,made:[5,6],mai:[3,6],main:0,mainli:4,maintain:6,make:[1,6,7],malici:6,manag:[1,5],mani:[0,1,3,4,6,7,8],manipul:6,manual:[0,1,3,4,5,7],mark:6,markqvist:[0,1],master:[0,5],match:[0,3],maximum:[5,6],mcu:6,mdu:0,mean:[6,7],measur:6,mechan:[2,3],medium:[4,6,8],member:4,memori:6,mention:6,menu:0,menu_mod:0,mesh:[4,8],messag:[0,1,5,6,7],messeng:6,metavar:0,method:[0,5,6],methodolog:[6,7],mhz:[3,6],mi:0,microcontrol:6,microwav:6,might:[3,4,6,7],millisecond:[0,7],mind:[4,8],minim:[2,6],minimalsampl:0,minimum:[0,4,6],minut:[0,1,6],mix:[3,4,7],mode:[0,1,6,8],modem:[3,4,5,6,8],modul:[0,1,3,6,7,8],moment:[6,8],monitor:6,moon:0,mor:[],more:[1,3,4,5,6,8],most:[1,3,4,6,7,8],motiv:2,move:1,mqtt:4,mtu:[5,6,8],much:6,multi:[6,7,8],multilater:6,multipl:[0,4,6,7],multipoint:6,must:[0,1,4,5,6],mw:3,my:6,mycal:3,n:0,name:[0,2,4,5],namespac:0,nano:1,narg:0,natur:3,necesarri:4,necessari:[1,5,6],necessarili:6,need:[0,1,2,3,4,6,7,8],neglig:6,neither:6,neon:0,netifac:[1,3],network:[0,3,5,6,7,8],never:[3,5],newer:6,newest:6,newli:[4,6],next:[1,4,5,6],next_hop:5,next_hop_interfac:5,nicknam:6,no1cll:3,no_inbound_for:5,no_outbound_for:5,nobl:0,noble_ga:0,noble_gas:0,node:[2,4,7,8],nomad:1,nomadnet:1,non:[5,6],none:[0,3,5,6,7],normal:0,notat:[6,7],note:[0,3,6,7],noth:8,notic:6,notif:[0,5],now:[0,1,4,6,7],nt:0,num:0,number:[0,1,3,4,5,6,7],object:5,obtain:6,occur:8,off:[6,8],offer:[1,2,3,5,6],often:[4,6,7],oganesson:0,old:6,onc:[0,4,5,6,8],one:[0,1,3,4,5,6,7,8],oneself:6,onli:[0,1,3,4,5,6,7,8],onlin:6,open:[0,3,5,6,7,8],openmodem:[3,8],openssl:1,oper:[4,5,6,8],opt:6,optic:8,optim:4,option:[0,1,3,4,5,7],order:7,orem:[],organis:4,orient:6,origin:[0,4,6],original_hash:[],os:[0,6,7,8],ospf:6,other:[1,3,4,5,6,7],otherwis:[5,6],our:[0,6],out:[0,3,4,5,6,8],outbound:5,outgo:[0,3,5,6,7],outli:4,outlier:4,outlin:[1,6],output:7,outward:6,over:[0,1,2,3,5,6,7,8],overal:6,overcom:6,overhead:[3,6],overrid:0,overview:[2,3,6],own:[0,1,4,5,6],owner:[],p:[0,6],pack:0,packag:1,packb:0,packet:[0,1,2,3,4,7,8],packet_callback:0,packet_deliv:0,packet_hash:0,packet_receipt:[0,5],packet_timed_out:0,packet_typ:[],packetreceipt:[0,5],pad:8,page:[2,6],pair:[3,6],palm:0,paramet:[3,4,5],pariti:[3,7],pars:0,parse_arg:0,parser:0,part:[0,4,6],particip:[2,6],pass:[0,3,4,5,6],past:[],path:[0,1,5,6,7],path_respons:5,pathfind:[],pathfinder_m:5,pattern:6,payload:[5,6],peach:0,peer:[0,1,3,5,6],peer_pub_byt:[],peer_sig_pub_byt:[],peopl:6,per:[5,6,8],percent:0,perfect:[],perform:[0,3,4,6],period:[3,6],perman:7,persecut:6,persist:[3,7],person:6,pet:0,philosophi:6,physic:[6,7],pi:[0,4,6,7,8],piec:6,ping:[1,7],pip3:[1,3,7],pip:[1,7],pkcs7:8,pkg:1,place:[4,6,7],plain:[0,3,5,6],plain_mdu:5,plaintext:[0,5],plan:4,platform:6,pleas:[0,3,7,8],plenti:6,plu:6,plug:7,pmr:6,point:[1,4,6],pomelo:0,poorli:4,port0:7,port:[2,3,4,6,8],posit:7,possess:6,possibl:[1,3,4,5,6,8],potenti:[0,6,7],power:3,practic:[6,8],pre:[1,3,5,6],preambl:[3,7],predict:6,prefer:6,prepar:[0,4],prerequisit:5,presenc:5,preserv:5,press:0,pretend:6,pretti:6,prettyhexrep:0,previou:0,previous:[4,5,6],primari:6,principl:[6,8],print:0,print_filelist:0,print_help:0,print_menu:0,prioriti:6,prioritis:[2,4],privaci:8,privat:[3,5,6,8],privileg:7,probabl:[0,4,6,7,8],probe:7,procedur:6,process:[1,5,6],product:[],program:[0,2,3,5,6],program_setup:0,programm:6,programmat:6,progress:[0,5,8],progress_callback:5,project:1,prompt:0,proof:[0,5,6,7],proof_packet:0,proof_requested_callback:5,proof_strategi:5,propag:6,properti:5,protocol:[1,2,8],prove:[0,6],prove_al:[0,5],prove_app:5,prove_non:5,proven:[5,6],provid:[0,1,2,3,4,5,6,8],prv_byte:5,pub_byt:5,public_inform:0,purchas:[4,6,8],purg:5,purpos:[3,5,6],purposefulli:6,put:0,py:[0,1,7],pyseri:1,python3:[1,7],python:[1,3,6,7,8],q:[0,7],queri:[0,1],queue:6,quiet:7,quinc:0,quit:0,r:[0,6],radio:[1,3,4,5,6,7,8],radiu:6,radon:0,rais:[0,5],ram:3,rand:6,randint:0,random:[0,5,6],random_text_gener:0,randomli:[0,6],rang:[0,1,3,4,6,8],raspberri:[4,6,7,8],rate:[0,3],rb:0,re:[0,3,5,6],reach:[2,4],reachabl:[0,4,5,6],read:[0,1,6],readabl:[0,5,6],readi:[0,1,4,5],readili:8,real:[4,8],realli:[3,5],reason:[3,6],reassembl:6,recal:[0,5],recall_app_data:5,recap:6,receipt:[0,2,6],receiv:[0,5,6,7],received_announc:[0,5],reception_rssi:0,reception_snr:0,reception_stat:0,recip:1,recipi:6,recommend:[0,6],reconstruct:6,record:6,recoveri:3,recreat:6,refer:[0,1,2],regard:6,regist:[0,5],register_announce_handl:[0,5],register_request_handl:[0,5],rel:[6,8],relat:1,releas:[1,6],relev:[0,5],reli:6,reliabl:[3,4,6,8],rem:0,remain:6,rememb:6,remot:[0,5],remote_ident:[0,5],remote_identifi:0,remote_identity_hash:[],remote_p:0,remotesensor:6,repeat:1,replac:[1,6,7],repli:[0,7],replic:6,reply_data:0,reply_text:0,repositori:1,repres:6,represent:[0,6],request:[2,6,7],request_destin:0,request_fail:0,request_id:[0,5],request_packet:0,request_path:[0,5],request_receipt:[0,5],request_receiv:0,requested_at:[0,5],requestexampl:0,requestreceipt:5,requir:[0,1,4,6,7,8],research:8,resend:5,reserv:6,resili:8,resourc:[0,2],resource_callback:5,resource_sending_conclud:0,resource_strategi:5,respect:3,respond:[0,5],respons:[2,5],response_callback:[0,5],response_gener:[0,5],response_tim:[],rest:[4,8],restart:7,restartsec:7,result:[0,6],reticulum:[0,3,4],retransmiss:6,retransmit:6,retri:6,reveal:[5,6,8],review:8,right:4,rn:[0,1,5,7],rnode:[2,6,8],rnodeinterfac:3,rnpath:[1,2],rnprobe:[1,2],rnsconfig:1,rnsd:[1,2],rnstatu:[1,2],robot:6,rotat:6,round:[0,5,7],rout:[4,5,6,8],rprogress:0,rsa:[],rssi:0,rtt:[0,5,6],rttstring:0,rule:6,run:[0,1,4,5,6,7,8],runtim:6,rust:1,rw:6,rx:[3,7],s:[0,1,3,4,6,7,8],said:6,same:[1,3,5,6,7],satisfi:6,save:[5,6],save_error:0,saved_filenam:0,scenario:[1,2,6],screen:0,search:2,second:[0,3,5,6,8],secreci:[5,6,8],section:[3,4,6],secur:[6,8],see:[0,4,5,6,8],seen:6,segment:[3,4],segment_index:[],select:[0,3],self:[0,4,8],send:[0,3,5,6,7],sender:[0,4,6],sendig:0,sensibl:1,sensor:6,sent:[0,5,6,7],sentiment:6,separ:[4,6,7],sequenc:[0,5,6,8],serial:[2,6,8],serialinterfac:3,serv:[0,4,6],serve_path:0,server:[0,1,2],server_callback:0,server_destin:0,server_fil:0,server_ident:0,server_link:0,server_loop:0,server_packet_receiv:0,servic:[1,2,4],session:6,set:[0,3,4,5,6,7,8],set_default_app_data:5,set_delivery_callback:[0,5],set_link_closed_callback:0,set_link_established_callback:[0,5],set_packet_callback:[0,5],set_proof_requested_callback:5,set_proof_strategi:[0,5],set_remote_identified_callback:[0,5],set_resource_callback:5,set_resource_concluded_callback:[0,5],set_resource_started_callback:[0,5],set_resource_strategi:[0,5],set_timeout:[0,5],set_timeout_callback:[0,5],setdaemon:0,setup:[0,2,3],sever:[1,4,5,7],sha256:8,sha:[5,6],shall:6,share:[1,4,5,6,7],she:4,shelf:[6,8],shop:0,shortest:6,shorthand:7,should:[0,3,4,5,6,8],should_allow_unencrypt:[],should_quit:0,should_use_implicit_proof:5,show:7,shown:0,side:8,sight:4,sign:[5,6],signatur:[5,6,8],significantli:[],similar:[3,4,7,8],simpl:[0,6,7,8],simplest:6,simpli:[0,1,4,6,7],simplic:6,sinc:[0,1,3,4,5,6],singl:[0,3,5,6,8],singular:6,sit:[],site:2,situat:[4,6],size:[0,5,6],size_str:0,sleep:0,slice:0,slottim:[3,7],slow:[0,3,6],small:[0,3,4,6,8],snr:0,so:[0,1,3,4,5,6,7,8],softwar:[1,3,6,8],some:[0,1,4,6],someth:[3,6],somethign:0,soon:5,sort:6,soundmodem:3,sourc:[0,1,4,6,8],space:[0,4,8],span:6,special:[6,7],specif:[0,2,3,5,8],specifi:[0,1,3,4,5,7],spectrum:[3,6],speed:[3,7],split:0,sponsor:8,spread:3,spreadingfactor:3,squelch:3,ssid:3,stabl:[6,8],stack:[0,1,4,6,7,8],stage:6,stai:[0,7],standard:[1,6],start:[0,2,3,5,6,7],startlimitintervalsec:7,startup:0,state:0,station:[3,6],stationari:4,statist:0,statu:[0,1,2,5,6,7],stdout:0,step:1,still:[0,4,6],stock:0,stop:8,stopbit:[3,7],store:[0,6],store_tru:0,str:0,strategi:5,stream:6,strength:8,strictli:6,string:[0,5],strong:6,structur:6,subject:[],subnet:4,subsequ:6,succe:1,successful:5,successfulli:0,sucessfulli:6,sudo:7,suffic:6,suffici:[6,7],suffix:0,suit:[1,6],suitabl:[0,3,4,6],suppli:[4,5,6],support:[0,2,4,6,8],sure:[1,7],sy:0,symlink:[1,7],symmetr:[5,6],system:[0,1,2,3,5,8],systemctl:7,systemd:7,t:[0,1,3,4,6],tabl:[4,6],tail:3,take:[0,1,6,8],taken:[0,6],tangerin:0,target:[0,7],target_host:3,target_port:3,tcp:[1,2,4,6,8],tcpclientinterfac:3,tcpinterfac:7,tcpserverinterfac:3,tdata:0,teardown:[0,5],teardown_reason:0,teffect:0,tell:0,temperatur:6,ten:6,term:[4,6],termin:[1,5],terminolog:[4,6],termux:1,test:[3,6],testnet:7,text:[0,4,6],tfile:0,than:[0,4,6],thei:[0,4,5,6],them:[0,3,6],thereaft:6,therefor:[6,8],thi:[0,1,2,3,4,5,6,7],those:4,though:6,thourough:8,thread:0,three:[4,6],throough:3,throttl:4,through:[3,4,5,6,8],throughout:6,throughput:[6,8],thu:[4,5,6],ti:[0,6],time:[0,1,3,4,5,6,7],timeout:[0,5],timeout_callback:[],timeoutarg:0,timestr:0,tnc:[3,5,7,8],to_fil:5,todai:6,todo:[],togeth:6,token:[5,6],too:[0,4,6],tool:8,top:[4,6],topic:6,topographi:4,topolog:[3,6],total:[6,8],total_s:0,touch:8,toward:[0,6],tradit:4,traffic:[0,3,4,5,6],tramsit:[],transceiv:[3,6,8],transfer:[0,5,6,8],transfer_s:0,transmiss:[3,6],transmit:[0,3,6],transpar:[3,6],transport:[0,2,4,7,8],transport_en:5,transport_id:[],transport_typ:[],travers:6,treat:6,tri:0,trip:[0,5,7],trivial:8,truli:6,truncat:[5,6],truncated_hash:5,truncated_hashlength:5,trust:6,trustless:[6,8],ttime:0,ttransfer:0,ttyusb0:[3,7],ttyusb1:3,ttyusb2:3,tunnel:[6,8],tupl:5,turnaround:3,tutori:1,two:[0,3,4,6],tx:[3,7],txpower:3,txtail:[3,7],type:[0,2,3,4,5,7],typeerror:5,ubuntu:7,udp:[2,4,6,7,8],udpinterfac:[3,7],umsgpack:0,uncencrypt:0,under:7,underli:[4,8],understand:[1,2],unencrypt:[0,5,6],unequivoc:6,unforg:8,unidentifi:0,unifi:4,uninterest:0,uniqu:[6,8],unit:[0,7],unknown:[0,5,6],unless:[1,5,6],unlicens:6,unpack:0,unpackb:0,unplug:7,unreli:3,unsign:7,unsupport:5,until:[0,5,6],unwant:6,up:[0,1,4,6,7,8],updat:[0,1,5],upgrad:1,upon:[0,6],upset:0,urandom:8,us:[0,2,3,4,5,6],usabl:6,usag:7,usb:[4,6,7,8],useabl:6,user:[0,1,4,6,7],user_input:0,userland:8,usernameher:7,usr:7,utf:0,util:[0,2,6],utilis:[4,6,7,8],v:7,valid:[0,3,5,6,7],valu:[5,6],valueerror:[0,5],vari:7,variabl:0,varieti:[3,6,8],variou:[0,6],ve:1,vendor:0,verbos:7,veri:[4,5,6,7,8],verif:[5,6],verifi:[0,5,6],versa:[4,8],version:7,vhf:[4,6],via:[1,3,6,7],vice:[4,8],view:[1,6,7],virtual:4,visibl:0,wa:[0,4,5,6,8],wai:[0,1,3,4,6],wait:[0,6],want:[0,1,3,4,6,7,8],wantedbi:7,warrant:8,wast:3,wb:0,we:[0,3,6],well:[4,5,6,8],went:0,were:4,what:[0,1,2,5,6],whatev:[5,6],wheel:1,when:[0,1,3,4,5,6,7],whenev:5,where:[2,4,5,6,7],whereupon:6,whether:[0,3,5,6],which:[0,1,4,5,6,7],who:6,wide:[6,8],wifi:[4,6,8],wildcard:0,willing:4,window:6,wire:[3,6,8],wireless:4,wish:6,within:[0,1,3,4,5,6],without:[4,6,8],won:0,work:[1,6,7,8],world:[4,8],worri:4,would:[3,4,6],write:[0,1,5],written:6,wrong:0,x25519:[5,6,8],x:6,xenon:0,y:0,ye:6,year:6,yet:[0,6],yi:0,you:[0,1,2,3,4,5,6,7,8],your:[0,1,2,3,4,6,8],yourself:[6,8],z:0,zero:[5,8],zeromq:4,zi:0},titles:["Code Examples","Getting Started Fast","Reticulum Network Stack Manual","Supported Interfaces","Building Networks","API Reference","Understanding Reticulum","Using Reticulum on Your System","What is Reticulum?"],titleterms:{"1":[],"2":[],"25":3,"class":5,"function":6,"public":6,"try":1,The:[6,7],With:1,android:1,announc:[0,6],api:5,ax:3,base:1,basic:6,binari:6,bridg:4,broadcast:0,build:4,can:8,caveat:8,client:3,code:0,concept:4,configur:7,converg:4,creat:1,current:8,deliveri:[],destin:[5,6],detail:6,develop:1,devic:8,doe:8,echo:0,emptor:8,establish:6,exampl:[0,4],fast:1,filetransf:0,fix:7,format:6,further:6,get:[1,6],gipsum:[],goal:6,growth:4,ident:[5,6],identif:0,improv:7,includ:[1,7],indic:2,interconnect:4,interfac:[3,8],internet:4,introduct:6,kei:6,kiss:3,link:[0,5,6],lora:[3,4],manual:2,mechan:6,minim:0,motiv:6,name:[6,7],network:[1,2,4],node:6,offer:8,orem:[],over:4,overview:4,packet:[5,6],particip:1,pathfind:[],port:7,predict:[],prioritis:6,program:[1,7],protocol:6,proven:[],reach:6,receipt:5,refer:[5,6],request:[0,5],resourc:[5,6],respons:0,reticulum:[1,2,5,6,7,8],rnode:3,rnpath:7,rnprobe:7,rnsd:7,rnstatu:7,run:[],scenario:4,serial:[3,7],server:3,servic:7,setup:6,site:4,specif:6,stack:2,start:1,statu:8,step:[],support:3,system:[6,7],tabl:2,tcp:3,transport:[5,6],type:[6,8],udp:3,understand:6,us:[1,7,8],util:[1,7],what:8,where:8,your:7}}) \ No newline at end of file diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 7c7dd3a..790863f 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -100,12 +100,18 @@ it can be easily replicated.

  • Very low bandwidth requirements

    Reticulum should be able to function reliably over links with a transmission capacity as low -as 1,000 bps.

    +as 500 bps.

  • -
    Encryption by default

    Reticulum must use encryption by default where possible and applicable.

    +
    Encryption by default

    Reticulum must use strong encryption by default for all communication.

    +
    +
    +
  • +
  • +
    Initiator Anonymity

    It must be possible to communicate over a Reticulum network without revealing any identifying +information about oneself.

  • @@ -148,7 +154,7 @@ needs to be purchased.

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

    +to be transported over multiple hops in a complex network to reach the recipient.

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

    All destinations in Reticulum are represented internally as 10 bytes, derived from truncating a full SHA-256 hash of identifying characteristics of the destination. To users, the destination addresses will be displayed as 10 bytes in hexadecimal representation, as in the following example: <80e29bf7cccaf31431b3>.

    -

    By default Reticulum encrypts all data using public-key cryptography. Any message sent to a -destination is encrypted with that destinations public key. Reticulum can also set up an encrypted -channel to a destination with Perfect Forward Secrecy and Initiator Anonymity using a elliptic +

    By default Reticulum encrypts all data using elliptic curve cryptography. Any packet sent to a +destination is encrypted with a derived ephemeral key. Reticulum can also set up an encrypted +channel to a destination with Forward Secrecy and Initiator Anonymity using a elliptic curve cryptography and ephemeral keys derived from a Diffie Hellman exchange on Curve25519. In Reticulum terminology, this is called a Link.

    Reticulum also offers symmetric key encryption for group-oriented communications, as well as @@ -174,23 +180,23 @@ private IP networks.

    destinations. Reticulum uses three different basic destination types, and one special:

    • -
      Single

      The single destination type defines a public-key encrypted destination. Any data sent to this -destination will be encrypted with the destination’s public key, and will only be readable by -the creator of the destination.

      +
      Single

      The single destination type is always identified by a unique public key. Any data sent to this +destination will be encrypted using ephemeral keys derived from an ECDH key exchange, and will +only be readable by the creator of the destination, who holds the corresponding private key.

    • Group

      The group destination type defines a symmetrically encrypted destination. Data sent to this destination will be encrypted with a symmetric key, and will be readable by anyone in -possession of the key. The group destination can be used just as well by only two peers, as it -can by many.

      +possession of the key.

    • Plain

      A plain destination type is unencrypted, and suited for traffic that should be broadcast to a -number of users, or should be readable by anyone. Traffic to a plain destination is not encrypted.

      +number of users, or should be readable by anyone. Traffic to a plain destination is not encrypted. +Generally, plain destinations can be used for broadcast information intended to be public.

    • @@ -575,7 +581,7 @@ the transfer is needed.

      This is the purpose of the Reticulum Resource. A Resource can automatically handle the reliable transfer of an arbitrary amount of data over an established Link. Resources can auto-compress data, will handle breaking the data into individual packets, sequencing -the transfer and reassembling the data on the other end.

      +the transfer, integrity verification and reassembling the data on the other end.

      Resources are programmatically very simple to use, and only requires a few lines of codes to reliably transfer any amount of data. They can be used to transfer data stored in memory, or stream data directly from files.

      @@ -654,8 +660,8 @@ treated more as a reference than as essential reading.

      Node Types

      Currently Reticulum defines two node types, the Station and the Peer. A node is a station if it fixed -in one place, and if it is intended to be kept online most of the time. Otherwise the node is a peer. -This distinction is made by the user configuring the node, and is used to determine what nodes on the +in one place, and if it is intended to be kept online most of the time. Otherwise the node is a peer.

      +

      This distinction is made by the user configuring the node, and is used to determine what nodes on the network will help forward traffic, and what nodes rely on other nodes for connectivity.

      If a node is a Peer it should be given the configuration directive enable_transport = No.

      If it is a Station, it should be given the configuration directive enable_transport = Yes.

      @@ -665,9 +671,6 @@ network will help forward traffic, and what nodes rely on other nodes for connec

      Currently, Reticulum is completely priority-agnostic regarding general traffic. All traffic is handled on a first-come, first-serve basis. Announce re-transmission are handled according to the re-transmission times and priorities described earlier in this chapter.

      -

      It is possible that a prioritisation engine could be added to Reticulum in the future, but in -the light of Reticulums goal of equal access, doing so would need to be the subject of careful -investigation of the consequences first.

      Binary Packet Format

      diff --git a/docs/source/gettingstartedfast.rst b/docs/source/gettingstartedfast.rst index e9e1e2e..fce31c2 100644 --- a/docs/source/gettingstartedfast.rst +++ b/docs/source/gettingstartedfast.rst @@ -16,7 +16,7 @@ provides a complete encrypted communications suite built with Reticulum. :target: _images/nomadnet_3.png `Nomad Network `_ is a user-facing client -in the development for the messaging and information-sharing protocol +for the messaging and information-sharing protocol `LXMF `_, another project built with Reticulum. You can install Nomad Network via pip: @@ -48,7 +48,8 @@ Creating a Network With Reticulum ============================================= To create a network, you will need to specify one or more *interfaces* for Reticulum to use. This is done in the Reticulum configuration file, which by -default is located at ``~/.reticulum/config``. +default is located at ``~/.reticulum/config``. You can edit this file by hand, +or use the interactive ``rnsconfig`` utility. When Reticulum is started for the first time, it will create a default configuration file, with one active interface. This default interface uses @@ -152,7 +153,7 @@ From within Termux, execute the following: pkg update pkg upgrade - # Then install dependencies for cryptography library. + # Then install dependencies for the cryptography library. pkg install python build-essential openssl libffi rust # Make sure pip is up to date, and install the wheel module. diff --git a/docs/source/interfaces.rst b/docs/source/interfaces.rst index 0a00746..5375fc8 100644 --- a/docs/source/interfaces.rst +++ b/docs/source/interfaces.rst @@ -78,6 +78,9 @@ pre-existing LAN. # forward_ip = 10.55.0.16 # forward_port = 4242 +*Please Note!* If you use the ``device`` option, you will need the Python module +``netifaces`` installed on your system. You can install it with ``pip3 install netifaces``. + .. _interfaces-tcps: TCP Server Interface @@ -114,6 +117,8 @@ configured, other Reticulum peers can connect to it with a TCP Client interface. # device = eth0 # port = 4242 +*Please Note!* If you use the ``device`` option, you will need the Python module +``netifaces`` installed on your system. You can install it with ``pip3 install netifaces``. .. _interfaces-tcpc: @@ -136,6 +141,30 @@ same TCP Server interface at the same time. target_host = 127.0.0.1 target_port = 4242 +It is also possible to use this interface type to connect via other programs +or hardware devices that expose a KISS interface on a TCP port, for example +software-based soundmodems. To do this, use the ``kiss_framing`` option: + +.. code:: + + # Here's an example of a TCP Client interface that connects + # to a software TNC soundmodem on a KISS over TCP port. + + [[TCP KISS Interface]] + type = TCPClientInterface + interface_enabled = True + outgoing = True + kiss_framing = True + target_host = 127.0.0.1 + target_port = 8001 + +**Caution!** Only use the KISS framing option when connecting to external devices +and programs like soundmodems and similar over TCP. When using the +``TCPClientInterface`` in conjunction with the ``TCPServerInterface`` you should +never enable ``kiss_framing``, since this will disable internal reliability and +recovery mechanisms that greatly improves performance over unreliable and +intermittent TCP links. + .. _interfaces-rnode: diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index 4f4045d..fe3c40b 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -67,9 +67,12 @@ guide the design of Reticulum: it can be easily replicated. * **Very low bandwidth requirements** Reticulum should be able to function reliably over links with a transmission capacity as low - as *1,000 bps*. + as *500 bps*. * **Encryption by default** - Reticulum must use encryption by default where possible and applicable. + Reticulum must use strong encryption by default for all communication. +* **Initiator Anonymity** + It must be possible to communicate over a Reticulum network without revealing any identifying + information about oneself. * **Unlicensed use** Reticulum shall be functional over physical communication mediums that do not require any form of license to use. Reticulum must be designed in a way, so it is usable over ISM radio @@ -99,7 +102,7 @@ Introduction & Basic Functionality Reticulum is a networking stack suited for high-latency, low-bandwidth links. Reticulum is at it’s core a *message oriented* system. It is suited for both local point-to-point or point-to-multipoint scenarios where alle nodes are within range of each other, as well as scenarios where packets need -to be transported over multiple hops to reach the recipient. +to be transported over multiple hops in a complex network to reach the recipient. Reticulum does away with the idea of addresses and ports known from IP, TCP and UDP. Instead Reticulum uses the singular concept of *destinations*. Any application using Reticulum as it’s @@ -110,9 +113,9 @@ All destinations in Reticulum are represented internally as 10 bytes, derived fr SHA-256 hash of identifying characteristics of the destination. To users, the destination addresses will be displayed as 10 bytes in hexadecimal representation, as in the following example: ``<80e29bf7cccaf31431b3>``. -By default Reticulum encrypts all data using public-key cryptography. Any message sent to a -destination is encrypted with that destinations public key. Reticulum can also set up an encrypted -channel to a destination with *Perfect Forward Secrecy* and *Initiator Anonymity* using a elliptic +By default Reticulum encrypts all data using elliptic curve cryptography. Any packet sent to a +destination is encrypted with a derived ephemeral key. Reticulum can also set up an encrypted +channel to a destination with *Forward Secrecy* and *Initiator Anonymity* using a elliptic curve cryptography and ephemeral keys derived from a Diffie Hellman exchange on Curve25519. In Reticulum terminology, this is called a *Link*. @@ -135,17 +138,17 @@ destinations. Reticulum uses three different basic destination types, and one sp * **Single** - The *single* destination type defines a public-key encrypted destination. Any data sent to this - destination will be encrypted with the destination’s public key, and will only be readable by - the creator of the destination. + The *single* destination type is always identified by a unique public key. Any data sent to this + destination will be encrypted using ephemeral keys derived from an ECDH key exchange, and will + only be readable by the creator of the destination, who holds the corresponding private key. * **Group** The *group* destination type defines a symmetrically encrypted destination. Data sent to this destination will be encrypted with a symmetric key, and will be readable by anyone in - possession of the key. The *group* destination can be used just as well by only two peers, as it - can by many. + possession of the key. * **Plain** A *plain* destination type is unencrypted, and suited for traffic that should be broadcast to a number of users, or should be readable by anyone. Traffic to a *plain* destination is not encrypted. + Generally, *plain* destinations can be used for broadcast information intended to be public. * **Link** A *link* is a special destination type, that serves as an abstract channel to a *single* destination, directly connected or over multiple hops. The *link* also offers reliability and @@ -507,7 +510,7 @@ the transfer is needed. This is the purpose of the Reticulum :ref:`Resource`. A *Resource* can automatically handle the reliable transfer of an arbitrary amount of data over an established :ref:`Link`. Resources can auto-compress data, will handle breaking the data into individual packets, sequencing -the transfer and reassembling the data on the other end. +the transfer, integrity verification and reassembling the data on the other end. :ref:`Resources` are programmatically very simple to use, and only requires a few lines of codes to reliably transfer any amount of data. They can be used to transfer data stored in memory, @@ -581,6 +584,7 @@ Node Types Currently Reticulum defines two node types, the *Station* and the *Peer*. A node is a *station* if it fixed in one place, and if it is intended to be kept online most of the time. Otherwise the node is a *peer*. + This distinction is made by the user configuring the node, and is used to determine what nodes on the network will help forward traffic, and what nodes rely on other nodes for connectivity. @@ -596,10 +600,6 @@ Currently, Reticulum is completely priority-agnostic regarding general traffic. on a first-come, first-serve basis. Announce re-transmission are handled according to the re-transmission times and priorities described earlier in this chapter. -It is possible that a prioritisation engine could be added to Reticulum in the future, but in -the light of Reticulums goal of equal access, doing so would need to be the subject of careful -investigation of the consequences first. - .. _understanding-packetformat: @@ -702,4 +702,4 @@ Binary Packet Format - Link Request : 77 bytes - Link Proof : 77 bytes - Link RTT packet : 83 bytes - - Link keepalive : 14 bytes \ No newline at end of file + - Link keepalive : 14 bytes