From 80eec131f8f91131bb6af35f62fee03181277e5d Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 15 Apr 2025 18:25:12 +0200 Subject: [PATCH 01/91] Updated docs --- docs/Reticulum Manual.epub | Bin 3546627 -> 3546628 bytes docs/Reticulum Manual.pdf | Bin 4171939 -> 4171939 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 55970f86ad69bcf7dccbbef3bc3e3fa69f7bda96..61083975a7b237664096b6736a72c7ff603e6972 100644 GIT binary patch delta 2378 zcmZ9O3p7+~8^`xXB$t>y#$eFonp+dorrbq!irfj^8PzbxiIT#&RYp!|@Crq~KDm_0 zCqjH5A}U8zayuoObV0g^;~c(sJFC{Jz1DC2pZ~ko^E~hKzI)A{gobBmBBVkMr@O&-i&XMy@Ly+U-CJbmMqzLD>@>;@4qEU zO3%wD^0`gsVe{=mmZw~uhF=A*JGZR*B73)iNzDFwUnYg1_0i{d!%1Q*$^jw;i&S=F7kg6u;*4-WACqZybqkG+r+n|*A- zVNKP5X^~n$+Gs$=>-v~pY(}B?M30uyfcR`@{a?e8hl)&|{Uww0$XGw@opZMYJ>sdg zGN?ay*rG0$O3u92ZC2@2&#oS1oqX-6C1*G$Tp53_X~yx*z}Lr7GuW=}luXZ2tDeBuXJuDqBK5Cu5 z%3X+hBXPgu<@3PZdO@Rp94jHvwR!usTGd^~*!w=sU6o&HiIg;lU;{LcVEB)ep;P8_ z_OW`gPj_#WG^)61>YMd}Uz;?&Ei-?nJw?t(n5NNU6`GM9plRN|-kFz4Q|8EZkzDE= zjAbJ4$mgkX^c{T4Ifli4ix235t&gUbU7OgJw7lH-ck_*v=ekD~GtP1%Ey?})F0(Bq^yUC0^zCV$&zJ7f-ZZ&cp1Q_V*p!eICC${i$`1 zpR{Q6^4*uYqr39bN)1-f^PjVu1kQYOjdf?=_6j3IbPC;~rEa)))9Pf@brb!5NoJ-vW?TMytiUaK z3v0YyA}QIgp(q-8*2`O=xPd=COwBpO8tP5fT!+!!-R+!?TV7{cD6!rgV~f1!JM8b5 z9~oq{ww(1;loqgP`RfyIcr_%Sly^<3^C(Hx{VlW1yGAxvyKhy_fsN+d0t}8lSrA55 z&P^&D8SqbjIsCs)XQ`0Rs5^Iq)A#0oxwb_=lX4q99OG1)BV%@!7qp|XdwtZ2Nv!c?_p}}1EwlMN{s~EXS>x$ILL7lG;Z+v}N zH7}HiUOSol`s>4$Pk)i=(`vEQBt^J{=kA&c`n%R}x`8uVf1-meaB>+ewdP-+FeS0} z@mv3N+Be}Hz4f-I&#hTX-N%8c?A%4vWxJ>t{LMm^BiZRy!^BKQ8zZ>oq&1P+yz~N^Q{?IU>+=L+veyAoLtME=B~t0`&AI zB6#@}bu)y)8C*;RA_@_MEQ5$cBp}Nnl8_Y;DTp*g1|kbt36X=yLr4$|LWU?nC=f*m z6`}-DhNwVj5LJj8L>;mULWit|Xh1X}S`clB4n!BS2BHVihZsN%Ax4n35C&u{y zgNrc_XA_fM&ST1viJ+>2`CNt=F{6=LlhL@o#1@)rYrI5W^83dEOv~d8b;71+i3OIZ zAV`8Nib%k#`1V|h>j5?-oC0&fP7+RAQ9wr!*75zE&|vTZ!^um@I|OC+7f=L|haaDn z-!h?IiK_*bBwUS1egu=z7%)k~RS7GD;WUxcje^UK%K9$bQ4zA}w-*5JrMgzg!eAR0 z1d;uroEHei{>e{;`RHqK4a1d*a`y(F?RsZJ_`L-w$!U~Vz z9ti@|7>+Fs;619xP_lpI`GJ~F95gz9D4Y}g^IQi{->(jZ=W|LIL8O0}OCPu@;2T8mVj^G!6Hxx=bJ=Bt zqk<0#I0J14bPB!|H3Mu4z8SR#m4r-ySqi=hwFVZ7P-;M|B5seK0C%B?y0Mi(2wRy7 zG^w~Ax(J-9a53V;D&R`R$)J>q<7guofs5!c&{l%74FoB{4wm3Qgo^-kO0Z@(uvCUF z3&bnq4x%^POh8wgi5eJJ#-*1|ZgG&?mnwrG0~_G=|1eV)z*KN6QIAq42rXq&L9hy( z$)$`5g3F+*gbw9^Ar;u88LXn=^rdn~Q6KIe_}@ja7D3?keSfaR6@z^=+!AGiON5*P zLp0n9l>jQLxH@tE7OL<%_`pXMw?+4WTvc3Wsh*_PmiXmxUpvzfMDlwz;>~1&5tt(G JFOS3J{{y)zvH}1A delta 2446 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 46d290dfc40d4b894890ba17c51b9b8eec23142a..0e2fe0aa46edc8a2ea4083dab4e0099732f12394 100644 GIT binary patch delta 256 zcmajVOELpN0D$3&ctpf22qKt}n28|Wo$h%=WU9NGDhn5|Q^nfG0WAJ?7OoI?$T^%K zH&K)eSbV#0^7UPq{CcOr97X0?V38$CEK_EM3ahNK&IX%Q*Fp(m{6Gn1gqBABm1#82XGLd)y)%8AS?AoXkBv%ol1T3|n;P%+C>X~7lu9wx2)V zlGo9@<0ak24}_M1{3BCu9R1|uj@2^BY-~*`Gi`len^+IS%%%fn(m~(pnSaRi=_`7v F`~uLLOM3tS From 1851fda9e02f6591659b54db3ea286d557a7acbd Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 15 Apr 2025 18:51:52 +0200 Subject: [PATCH 02/91] Fixed interface string representation --- RNS/Interfaces/LocalInterface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RNS/Interfaces/LocalInterface.py b/RNS/Interfaces/LocalInterface.py index 5f318fa..e5aef6d 100644 --- a/RNS/Interfaces/LocalInterface.py +++ b/RNS/Interfaces/LocalInterface.py @@ -329,8 +329,8 @@ class LocalClientInterface(Interface): def __str__(self): - if self.socket_path: return "Shared Instance["+str(self.socket_path.replace("\0", ""))+"]" - else: return "Shared Instance["+str(self.target_port)+"]" + if self.socket_path: return "LocalInterface["+str(self.socket_path.replace("\0", ""))+"]" + else: return "LocalInterface["+str(self.target_port)+"]" class LocalServerInterface(Interface): From a65473f6abe5c327036e3105cd2f19ee2164432f Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 15 Apr 2025 18:57:12 +0200 Subject: [PATCH 03/91] Updated docs --- docs/Reticulum Manual.epub | Bin 3546628 -> 3546627 bytes docs/Reticulum Manual.pdf | Bin 4171939 -> 4171939 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 61083975a7b237664096b6736a72c7ff603e6972..23d25b684869821dfa4fe5885807594f6f445efc 100644 GIT binary patch delta 2416 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 0e2fe0aa46edc8a2ea4083dab4e0099732f12394..ad40627c025dea98be2d13803a0f8da2e1057e30 100644 GIT binary patch delta 232 zcmajVNlwCG06^iCwm1Nas33z<6tIE}{q5fYYa6Lua0O1o;;p-I;{kdFlAgm0a1>+X z1zf!3TfFT1N6CtID3nmq&?$4oF(;f-p-PQ2&Z%=jgG;Wsrb&w%+H~mB&=Sxqc{-1I)jSgxo?8FhS gD`XN|o^QvASX&>y^a{&&-;$vb{I}$r&uH8H1s~c)j{pDw delta 232 zcmajVNlwCG06^iC78P)2bSyGRWp3%;L2H}86cVn$X;{2<7i>I0uRzjscma=MG+w~P zOTNX+KEIXhw;c)vR5Xelam)!N%2YVzjB_ry Date: Tue, 15 Apr 2025 20:19:33 +0200 Subject: [PATCH 04/91] Updated license --- LICENSE | 16 +++++++++--- RNS/Buffer.py | 16 +++++++++--- RNS/Channel.py | 16 +++++++++--- RNS/Cryptography/AES.py | 16 +++++++++--- RNS/Cryptography/Ed25519.py | 16 +++++++++--- RNS/Cryptography/HKDF.py | 16 +++++++++--- RNS/Cryptography/Hashes.py | 16 +++++++++--- RNS/Cryptography/PKCS7.py | 16 +++++++++--- RNS/Cryptography/Provider.py | 16 +++++++++--- RNS/Cryptography/Proxies.py | 16 +++++++++--- RNS/Cryptography/Token.py | 16 +++++++++--- RNS/Cryptography/__init__.py | 16 +++++++++--- RNS/Destination.py | 16 +++++++++--- RNS/Identity.py | 16 +++++++++--- RNS/Interfaces/AX25KISSInterface.py | 16 +++++++++--- RNS/Interfaces/Android/KISSInterface.py | 16 +++++++++--- RNS/Interfaces/Android/RNodeInterface.py | 16 +++++++++--- RNS/Interfaces/Android/SerialInterface.py | 16 +++++++++--- RNS/Interfaces/Android/__init__.py | 16 +++++++++--- RNS/Interfaces/AutoInterface.py | 16 +++++++++--- RNS/Interfaces/BackboneInterface.py | 16 +++++++++--- RNS/Interfaces/I2PInterface.py | 16 +++++++++--- RNS/Interfaces/Interface.py | 16 +++++++++--- RNS/Interfaces/KISSInterface.py | 16 +++++++++--- RNS/Interfaces/LocalInterface.py | 16 +++++++++--- RNS/Interfaces/PipeInterface.py | 16 +++++++++--- RNS/Interfaces/RNodeInterface.py | 16 +++++++++--- RNS/Interfaces/RNodeMultiInterface.py | 16 +++++++++--- RNS/Interfaces/SerialInterface.py | 16 +++++++++--- RNS/Interfaces/TCPInterface.py | 16 +++++++++--- RNS/Interfaces/UDPInterface.py | 16 +++++++++--- RNS/Interfaces/__init__.py | 16 +++++++++--- RNS/Interfaces/util/netinfo.py | 2 +- RNS/Link.py | 16 +++++++++--- RNS/Packet.py | 16 +++++++++--- RNS/Resolver.py | 16 +++++++++--- RNS/Resource.py | 16 +++++++++--- RNS/Reticulum.py | 16 +++++++++--- RNS/Transport.py | 16 +++++++++--- RNS/Utilities/__init__.py | 16 +++++++++--- RNS/Utilities/rncp.py | 16 +++++++++--- RNS/Utilities/rnid.py | 16 +++++++++--- RNS/Utilities/rnir.py | 16 +++++++++--- RNS/Utilities/rnodeconf.py | 16 +++++++++--- RNS/Utilities/rnpath.py | 16 +++++++++--- RNS/Utilities/rnprobe.py | 16 +++++++++--- RNS/Utilities/rnsd.py | 16 +++++++++--- RNS/Utilities/rnstatus.py | 16 +++++++++--- RNS/Utilities/rnx.py | 16 +++++++++--- RNS/__init__.py | 16 +++++++++--- RNS/vendor/platformutils.py | 30 +++++++++++++++++++++++ 51 files changed, 619 insertions(+), 197 deletions(-) diff --git a/LICENSE b/LICENSE index 92e0464..297ff7e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ -MIT License, unless otherwise noted +Reticulum License -Copyright (c) 2016-2024 Mark Qvist / unsigned.io +Copyright (c) 2016-2025 Mark Qvist / unsigned.io Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +- The Software shall not be used in any kind of system which includes amongst + its functions the ability to purposefully do harm to human beings. + +- The Software shall not be used, directly or indirectly, in the creation of + an artificial intelligence, machine learning or language model training + dataset, including but not limited to any use that contributes to the + training or development of such a model or algorithm. + +- The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Buffer.py b/RNS/Buffer.py index 320f67d..20780e2 100644 --- a/RNS/Buffer.py +++ b/RNS/Buffer.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Channel.py b/RNS/Channel.py index cc144ef..011fde1 100644 --- a/RNS/Channel.py +++ b/RNS/Channel.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/AES.py b/RNS/Cryptography/AES.py index 8880638..2689509 100644 --- a/RNS/Cryptography/AES.py +++ b/RNS/Cryptography/AES.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/Ed25519.py b/RNS/Cryptography/Ed25519.py index 38fdb86..b7ffccd 100644 --- a/RNS/Cryptography/Ed25519.py +++ b/RNS/Cryptography/Ed25519.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/HKDF.py b/RNS/Cryptography/HKDF.py index 67b04f1..33d95d1 100644 --- a/RNS/Cryptography/HKDF.py +++ b/RNS/Cryptography/HKDF.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/Hashes.py b/RNS/Cryptography/Hashes.py index 595718b..02b8514 100644 --- a/RNS/Cryptography/Hashes.py +++ b/RNS/Cryptography/Hashes.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/PKCS7.py b/RNS/Cryptography/PKCS7.py index 3787d36..a046131 100644 --- a/RNS/Cryptography/PKCS7.py +++ b/RNS/Cryptography/PKCS7.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/Provider.py b/RNS/Cryptography/Provider.py index 5c2b82a..9c78c89 100644 --- a/RNS/Cryptography/Provider.py +++ b/RNS/Cryptography/Provider.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/Proxies.py b/RNS/Cryptography/Proxies.py index fc84604..876baff 100644 --- a/RNS/Cryptography/Proxies.py +++ b/RNS/Cryptography/Proxies.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/Token.py b/RNS/Cryptography/Token.py index 8687ae9..6a84a3c 100644 --- a/RNS/Cryptography/Token.py +++ b/RNS/Cryptography/Token.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Cryptography/__init__.py b/RNS/Cryptography/__init__.py index fc292b8..925221d 100644 --- a/RNS/Cryptography/__init__.py +++ b/RNS/Cryptography/__init__.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2022-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Destination.py b/RNS/Destination.py index b2bbda3..ed5f1e1 100755 --- a/RNS/Destination.py +++ b/RNS/Destination.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Identity.py b/RNS/Identity.py index 5c39b2a..9432813 100644 --- a/RNS/Identity.py +++ b/RNS/Identity.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/AX25KISSInterface.py b/RNS/Interfaces/AX25KISSInterface.py index 2df42ba..abda34f 100644 --- a/RNS/Interfaces/AX25KISSInterface.py +++ b/RNS/Interfaces/AX25KISSInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/Android/KISSInterface.py b/RNS/Interfaces/Android/KISSInterface.py index c4d33a0..b14f45c 100644 --- a/RNS/Interfaces/Android/KISSInterface.py +++ b/RNS/Interfaces/Android/KISSInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/Android/RNodeInterface.py b/RNS/Interfaces/Android/RNodeInterface.py index 62fab51..d720df8 100644 --- a/RNS/Interfaces/Android/RNodeInterface.py +++ b/RNS/Interfaces/Android/RNodeInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/Android/SerialInterface.py b/RNS/Interfaces/Android/SerialInterface.py index 41b6276..2e0cb17 100644 --- a/RNS/Interfaces/Android/SerialInterface.py +++ b/RNS/Interfaces/Android/SerialInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/Android/__init__.py b/RNS/Interfaces/Android/__init__.py index 299b693..a9a74ff 100644 --- a/RNS/Interfaces/Android/__init__.py +++ b/RNS/Interfaces/Android/__init__.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2022 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/AutoInterface.py b/RNS/Interfaces/AutoInterface.py index 993fbb8..5bdf468 100644 --- a/RNS/Interfaces/AutoInterface.py +++ b/RNS/Interfaces/AutoInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/BackboneInterface.py b/RNS/Interfaces/BackboneInterface.py index 8ecef12..bf1cf30 100644 --- a/RNS/Interfaces/BackboneInterface.py +++ b/RNS/Interfaces/BackboneInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/I2PInterface.py b/RNS/Interfaces/I2PInterface.py index 78c802d..6cac70c 100644 --- a/RNS/Interfaces/I2PInterface.py +++ b/RNS/Interfaces/I2PInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/Interface.py b/RNS/Interfaces/Interface.py index 41583c5..a302dca 100755 --- a/RNS/Interfaces/Interface.py +++ b/RNS/Interfaces/Interface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/KISSInterface.py b/RNS/Interfaces/KISSInterface.py index 3a0c3eb..d343f0a 100644 --- a/RNS/Interfaces/KISSInterface.py +++ b/RNS/Interfaces/KISSInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/LocalInterface.py b/RNS/Interfaces/LocalInterface.py index e5aef6d..08a410c 100644 --- a/RNS/Interfaces/LocalInterface.py +++ b/RNS/Interfaces/LocalInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/PipeInterface.py b/RNS/Interfaces/PipeInterface.py index 27e96fc..1574753 100644 --- a/RNS/Interfaces/PipeInterface.py +++ b/RNS/Interfaces/PipeInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/RNodeInterface.py b/RNS/Interfaces/RNodeInterface.py index 385d084..f9f3790 100644 --- a/RNS/Interfaces/RNodeInterface.py +++ b/RNS/Interfaces/RNodeInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/RNodeMultiInterface.py b/RNS/Interfaces/RNodeMultiInterface.py index 21477f6..d08a8fd 100644 --- a/RNS/Interfaces/RNodeMultiInterface.py +++ b/RNS/Interfaces/RNodeMultiInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2024 Jacob Eva. Adapted from the RNodeInterface by Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/SerialInterface.py b/RNS/Interfaces/SerialInterface.py index 4a68971..7c9d0da 100755 --- a/RNS/Interfaces/SerialInterface.py +++ b/RNS/Interfaces/SerialInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/TCPInterface.py b/RNS/Interfaces/TCPInterface.py index 2745c32..0a15220 100644 --- a/RNS/Interfaces/TCPInterface.py +++ b/RNS/Interfaces/TCPInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/UDPInterface.py b/RNS/Interfaces/UDPInterface.py index db1bcad..8966bbe 100644 --- a/RNS/Interfaces/UDPInterface.py +++ b/RNS/Interfaces/UDPInterface.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/__init__.py b/RNS/Interfaces/__init__.py index db199c4..9a11d8f 100755 --- a/RNS/Interfaces/__init__.py +++ b/RNS/Interfaces/__init__.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Interfaces/util/netinfo.py b/RNS/Interfaces/util/netinfo.py index 12b08cc..7a88d7c 100644 --- a/RNS/Interfaces/util/netinfo.py +++ b/RNS/Interfaces/util/netinfo.py @@ -1,7 +1,7 @@ # MIT License # -# Copyright (c) 2025 Mark Qvist # Copyright (c) 2014 Stefan C. Mueller +# Copyright (c) 2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/RNS/Link.py b/RNS/Link.py index 4ddd67d..864840e 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Packet.py b/RNS/Packet.py index bcd5e47..feadb1c 100755 --- a/RNS/Packet.py +++ b/RNS/Packet.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Resolver.py b/RNS/Resolver.py index fb09bc8..fa514a4 100644 --- a/RNS/Resolver.py +++ b/RNS/Resolver.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Resource.py b/RNS/Resource.py index 1fc3237..aa97ad9 100644 --- a/RNS/Resource.py +++ b/RNS/Resource.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Reticulum.py b/RNS/Reticulum.py index 39c5fa9..c0769a4 100755 --- a/RNS/Reticulum.py +++ b/RNS/Reticulum.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Transport.py b/RNS/Transport.py index 244932f..4a91e66 100755 --- a/RNS/Transport.py +++ b/RNS/Transport.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors. +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/__init__.py b/RNS/Utilities/__init__.py index 299b693..a9a74ff 100644 --- a/RNS/Utilities/__init__.py +++ b/RNS/Utilities/__init__.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2022 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rncp.py b/RNS/Utilities/rncp.py index 9fd6734..4ec0dc3 100644 --- a/RNS/Utilities/rncp.py +++ b/RNS/Utilities/rncp.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnid.py b/RNS/Utilities/rnid.py index be7e908..68f5fab 100644 --- a/RNS/Utilities/rnid.py +++ b/RNS/Utilities/rnid.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2023-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnir.py b/RNS/Utilities/rnir.py index f5d2388..7f37576 100644 --- a/RNS/Utilities/rnir.py +++ b/RNS/Utilities/rnir.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2023-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnodeconf.py b/RNS/Utilities/rnodeconf.py index 10443a3..7d48499 100755 --- a/RNS/Utilities/rnodeconf.py +++ b/RNS/Utilities/rnodeconf.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2018-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnpath.py b/RNS/Utilities/rnpath.py index 95e49eb..c7a56c6 100644 --- a/RNS/Utilities/rnpath.py +++ b/RNS/Utilities/rnpath.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnprobe.py b/RNS/Utilities/rnprobe.py index 392f664..aecff37 100644 --- a/RNS/Utilities/rnprobe.py +++ b/RNS/Utilities/rnprobe.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnsd.py b/RNS/Utilities/rnsd.py index 459c034..c3d4fe7 100755 --- a/RNS/Utilities/rnsd.py +++ b/RNS/Utilities/rnsd.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnstatus.py b/RNS/Utilities/rnstatus.py index b109695..f23e076 100644 --- a/RNS/Utilities/rnstatus.py +++ b/RNS/Utilities/rnstatus.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/Utilities/rnx.py b/RNS/Utilities/rnx.py index ffc9c47..6db6f26 100644 --- a/RNS/Utilities/rnx.py +++ b/RNS/Utilities/rnx.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -11,8 +11,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/__init__.py b/RNS/__init__.py index a08ced3..9845264 100755 --- a/RNS/__init__.py +++ b/RNS/__init__.py @@ -1,6 +1,6 @@ -# MIT License +# Reticulum License # -# Copyright (c) 2016-2025 Mark Qvist / unsigned.io and contributors +# Copyright (c) 2016-2025 Mark Qvist # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -9,8 +9,16 @@ # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, diff --git a/RNS/vendor/platformutils.py b/RNS/vendor/platformutils.py index 6bcbb5a..7399acd 100644 --- a/RNS/vendor/platformutils.py +++ b/RNS/vendor/platformutils.py @@ -1,3 +1,33 @@ +# Reticulum License +# +# Copyright (c) 2016-2025 Mark Qvist +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# - The Software shall not be used in any kind of system which includes amongst +# its functions the ability to purposefully do harm to human beings. +# +# - The Software shall not be used, directly or indirectly, in the creation of +# an artificial intelligence, machine learning or language model training +# dataset, including but not limited to any use that contributes to the +# training or development of such a model or algorithm. +# +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + def get_platform(): from os import environ if "ANDROID_ARGUMENT" in environ: return "android" From dba6cd8393ec0d3137412b1f3890d12243bcfe10 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 15 Apr 2025 20:48:12 +0200 Subject: [PATCH 05/91] Updated license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 297ff7e..9285f0f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ Reticulum License -Copyright (c) 2016-2025 Mark Qvist / unsigned.io +Copyright (c) 2016-2025 Mark Qvist Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From eff0c91ed0e6ef7488198db312813bf0ec7dcf63 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 16 Apr 2025 00:35:56 +0200 Subject: [PATCH 06/91] Updated docs --- README.md | 14 +++++++++++--- docs/source/understanding.rst | 18 +++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3b0ac70..4fa24c7 100755 --- a/README.md +++ b/README.md @@ -312,7 +312,15 @@ organisation? Make them a reality quickly by sponsoring their implementation. ## Cryptographic Primitives Reticulum uses a simple suite of efficient, strong and well-tested cryptographic primitives, with widely available implementations that can be used both on -general-purpose CPUs and on microcontrollers. The utilised primitives are: +general-purpose CPUs and on microcontrollers. + +One of the primary considerations for choosing this particular set of primitives is +that they can be implemented *safely* and with relatively few pitfalls, on practically +all current computing platforms. + +The primitives listed here *are authoritative*. Anything claiming to be Reticulum, +but not using these exact primitives **is not** Reticulum, and possibly an +intentionally compromised or weakened clone. The utilised primitives are: - Reticulum Identity Keys are 512-bit Curve25519 keysets - A 256-bit Ed25519 key for signatures @@ -320,9 +328,9 @@ general-purpose CPUs and on microcontrollers. The utilised primitives are: - HKDF for key derivation - Encrypted tokens are based on the [Fernet spec](https://github.com/fernet/spec/) - Ephemeral keys derived from an ECDH key exchange on Curve25519 - - AES-128 in CBC mode with PKCS7 padding - HMAC using SHA256 for message authentication - - IVs are generated through os.urandom() + - IVs must be generated through `os.urandom()` or better + - AES-128 or AES-256 in CBC mode with PKCS7 padding - No Fernet version and timestamp metadata fields - SHA-256 - SHA-512 diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index 31e32c9..60ce283 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -858,9 +858,17 @@ of the different interface modes, and how they are configured. Cryptographic Primitives ------------------------ -Reticulum has been designed to use a simple suite of efficient, strong and modern -cryptographic primitives, with widely available implementations that can be used -both on general-purpose CPUs and on microcontrollers. The necessary primitives are: +Reticulum uses a simple suite of efficient, strong and well-tested cryptographic +primitives, with widely available implementations that can be used both on +general-purpose CPUs and on microcontrollers. + +One of the primary considerations for choosing this particular set of primitives is +that they can be implemented *safely* and with relatively few pitfalls, on practically +all current computing platforms. + +The primitives listed here *are authoritative*. Anything claiming to be Reticulum, +but not using these exact primitives **is not** Reticulum, and possibly an +intentionally compromised or weakened clone. The utilised primitives are: * Ed25519 for signatures @@ -872,11 +880,11 @@ both on general-purpose CPUs and on microcontrollers. The necessary primitives a * Ephemeral keys derived from an ECDH key exchange on Curve25519 - * AES-128 in CBC mode with PKCS7 padding + * AES-128 or AES-256 in CBC mode with PKCS7 padding * HMAC using SHA256 for message authentication - * IVs are generated through os.urandom() + * IVs must be generated through ``os.urandom()`` or better * No Fernet version and timestamp metadata fields From a0f6c99fb59cfdc354b83297087e281cf66df604 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 16 Apr 2025 00:37:11 +0200 Subject: [PATCH 07/91] Updated docs --- README.md | 2 +- docs/source/understanding.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4fa24c7..def7cd8 100755 --- a/README.md +++ b/README.md @@ -315,7 +315,7 @@ primitives, with widely available implementations that can be used both on general-purpose CPUs and on microcontrollers. One of the primary considerations for choosing this particular set of primitives is -that they can be implemented *safely* and with relatively few pitfalls, on practically +that they can be implemented *safely* with relatively few pitfalls, on practically all current computing platforms. The primitives listed here *are authoritative*. Anything claiming to be Reticulum, diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index 60ce283..be48f4d 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -863,7 +863,7 @@ primitives, with widely available implementations that can be used both on general-purpose CPUs and on microcontrollers. One of the primary considerations for choosing this particular set of primitives is -that they can be implemented *safely* and with relatively few pitfalls, on practically +that they can be implemented *safely* with relatively few pitfalls, on practically all current computing platforms. The primitives listed here *are authoritative*. Anything claiming to be Reticulum, From 796cffe29d691b05dd7947e224cb59e736cb4fee Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 16 Apr 2025 00:40:29 +0200 Subject: [PATCH 08/91] Updated docs --- README.md | 6 +++--- docs/source/understanding.rst | 2 +- docs/source/whatis.rst | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index def7cd8..2388609 100755 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ For more info, see [reticulum.network](https://reticulum.network/) and [the FAQ - Forward Secrecy is available for all communication types, both for single packets and over links - Reticulum uses the following format for encrypted tokens: - Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519 - - AES-128 in CBC mode with PKCS7 padding + - AES-128 or AES-256 in CBC mode with PKCS7 padding - HMAC using SHA256 for authentication - IVs are generated through os.urandom() - Unforgeable packet delivery confirmations @@ -335,8 +335,8 @@ intentionally compromised or weakened clone. The utilised primitives are: - SHA-256 - SHA-512 -In the default installation configuration, the `X25519`, `Ed25519` and -`AES-128-CBC` primitives are provided by [OpenSSL](https://www.openssl.org/) +In the default installation configuration, the `X25519`, `Ed25519`, `AES-128-CBC` +and `AES-256-CBC` primitives are provided by [OpenSSL](https://www.openssl.org/) (via the [PyCA/cryptography](https://github.com/pyca/cryptography) package). The hashing functions `SHA-256` and `SHA-512` are provided by the standard Python [hashlib](https://docs.python.org/3/library/hashlib.html). The `HKDF`, diff --git a/docs/source/understanding.rst b/docs/source/understanding.rst index be48f4d..41556f4 100644 --- a/docs/source/understanding.rst +++ b/docs/source/understanding.rst @@ -892,7 +892,7 @@ intentionally compromised or weakened clone. The utilised primitives are: * SHA-512 -In the default installation configuration, the ``X25519``, ``Ed25519`` and ``AES-128-CBC`` +In the default installation configuration, the ``X25519``, ``Ed25519``, ``AES-128-CBC`` and ``AES-256-CBC`` primitives are provided by `OpenSSL `_ (via the `PyCA/cryptography `_ package). The hashing functions ``SHA-256`` and ``SHA-512`` are provided by the standard Python `hashlib `_. The ``HKDF``, ``HMAC``, diff --git a/docs/source/whatis.rst b/docs/source/whatis.rst index fb67b19..01cbb1b 100644 --- a/docs/source/whatis.rst +++ b/docs/source/whatis.rst @@ -68,7 +68,7 @@ What does Reticulum Offer? * Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519 - * AES-128 in CBC mode with PKCS7 padding + * AES-128 or AES-256 in CBC mode with PKCS7 padding * HMAC using SHA256 for authentication From 0dc972f7c97206f54b6a550a90f1b4b018e14424 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 16 Apr 2025 00:41:50 +0200 Subject: [PATCH 09/91] Updated docs --- docs/manual/_sources/understanding.rst.txt | 20 ++++++++++++++------ docs/manual/_sources/whatis.rst.txt | 2 +- docs/manual/searchindex.js | 2 +- docs/manual/understanding.html | 18 ++++++++++++------ docs/manual/whatis.html | 2 +- 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index 31e32c9..41556f4 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -858,9 +858,17 @@ of the different interface modes, and how they are configured. Cryptographic Primitives ------------------------ -Reticulum has been designed to use a simple suite of efficient, strong and modern -cryptographic primitives, with widely available implementations that can be used -both on general-purpose CPUs and on microcontrollers. The necessary primitives are: +Reticulum uses a simple suite of efficient, strong and well-tested cryptographic +primitives, with widely available implementations that can be used both on +general-purpose CPUs and on microcontrollers. + +One of the primary considerations for choosing this particular set of primitives is +that they can be implemented *safely* with relatively few pitfalls, on practically +all current computing platforms. + +The primitives listed here *are authoritative*. Anything claiming to be Reticulum, +but not using these exact primitives **is not** Reticulum, and possibly an +intentionally compromised or weakened clone. The utilised primitives are: * Ed25519 for signatures @@ -872,11 +880,11 @@ both on general-purpose CPUs and on microcontrollers. The necessary primitives a * Ephemeral keys derived from an ECDH key exchange on Curve25519 - * AES-128 in CBC mode with PKCS7 padding + * AES-128 or AES-256 in CBC mode with PKCS7 padding * HMAC using SHA256 for message authentication - * IVs are generated through os.urandom() + * IVs must be generated through ``os.urandom()`` or better * No Fernet version and timestamp metadata fields @@ -884,7 +892,7 @@ both on general-purpose CPUs and on microcontrollers. The necessary primitives a * SHA-512 -In the default installation configuration, the ``X25519``, ``Ed25519`` and ``AES-128-CBC`` +In the default installation configuration, the ``X25519``, ``Ed25519``, ``AES-128-CBC`` and ``AES-256-CBC`` primitives are provided by `OpenSSL `_ (via the `PyCA/cryptography `_ package). The hashing functions ``SHA-256`` and ``SHA-512`` are provided by the standard Python `hashlib `_. The ``HKDF``, ``HMAC``, diff --git a/docs/manual/_sources/whatis.rst.txt b/docs/manual/_sources/whatis.rst.txt index fb67b19..01cbb1b 100644 --- a/docs/manual/_sources/whatis.rst.txt +++ b/docs/manual/_sources/whatis.rst.txt @@ -68,7 +68,7 @@ What does Reticulum Offer? * Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519 - * AES-128 in CBC mode with PKCS7 padding + * AES-128 or AES-256 in CBC mode with PKCS7 padding * HMAC using SHA256 for authentication diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 94c42ff..f815055 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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "mit": 0, "licens": [0, 9], "copyright": 0, "2024": 0, "mark": [0, 7, 9], "qvist": 0, "unsign": 0, "io": [0, 3], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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, "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 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, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "condit": [9, 11], "pmr": 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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]]}, "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "mit": 0, "licens": [0, 9], "copyright": 0, "2024": 0, "mark": [0, 7, 9], "qvist": 0, "unsign": 0, "io": [0, 3], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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, "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 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, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "condit": [9, 11], "pmr": 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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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": {"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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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 diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 5ba554d..c93365a 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -1062,9 +1062,15 @@ of the different interface modes, and how they are configured.

Cryptographic Primitives#

-

Reticulum has been designed to use a simple suite of efficient, strong and modern -cryptographic primitives, with widely available implementations that can be used -both on general-purpose CPUs and on microcontrollers. The necessary primitives are:

+

Reticulum uses a simple suite of efficient, strong and well-tested cryptographic +primitives, with widely available implementations that can be used both on +general-purpose CPUs and on microcontrollers.

+

One of the primary considerations for choosing this particular set of primitives is +that they can be implemented safely with relatively few pitfalls, on practically +all current computing platforms.

+

The primitives listed here are authoritative. Anything claiming to be Reticulum, +but not using these exact primitives is not Reticulum, and possibly an +intentionally compromised or weakened clone. The utilised primitives are:

  • Ed25519 for signatures

  • X25519 for ECDH key exchanges

  • @@ -1072,16 +1078,16 @@ both on general-purpose CPUs and on microcontrollers. The necessary primitives a
  • Encrypted tokens are based on the Fernet spec

    • Ephemeral keys derived from an ECDH key exchange on Curve25519

    • -
    • AES-128 in CBC mode with PKCS7 padding

    • +
    • AES-128 or AES-256 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for message authentication

    • -
    • IVs are generated through os.urandom()

    • +
    • IVs must be generated through os.urandom() or better

    • No Fernet version and timestamp metadata fields

  • SHA-256

  • SHA-512

-

In the default installation configuration, the X25519, Ed25519 and AES-128-CBC +

In the default installation configuration, the X25519, Ed25519, AES-128-CBC and AES-256-CBC primitives are provided by OpenSSL (via the PyCA/cryptography package). The hashing functions SHA-256 and SHA-512 are provided by the standard Python hashlib. The HKDF, HMAC, diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index 9d07b7b..f87699a 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -279,7 +279,7 @@ considered complete and stable at the moment, but could change if absolutely war

  • Reticulum uses the following format for encrypted tokens:

    • Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519

    • -
    • AES-128 in CBC mode with PKCS7 padding

    • +
    • AES-128 or AES-256 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for authentication

    • IVs are generated through os.urandom()

    From ab9fc7b370df4c4e56266b337727d467c7e2b4c2 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 16 Apr 2025 00:43:35 +0200 Subject: [PATCH 10/91] Updated docs --- README.md | 2 +- docs/manual/_sources/understanding.rst.txt | 2 +- docs/manual/searchindex.js | 2 +- docs/manual/understanding.html | 2 +- docs/source/understanding.rst | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2388609..8259d53 100755 --- a/README.md +++ b/README.md @@ -318,7 +318,7 @@ One of the primary considerations for choosing this particular set of primitives that they can be implemented *safely* with relatively few pitfalls, on practically all current computing platforms. -The primitives listed here *are authoritative*. Anything claiming to be Reticulum, +The primitives listed here **are authoritative**. Anything claiming to be Reticulum, but not using these exact primitives **is not** Reticulum, and possibly an intentionally compromised or weakened clone. The utilised primitives are: diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt index 41556f4..bdc4cea 100644 --- a/docs/manual/_sources/understanding.rst.txt +++ b/docs/manual/_sources/understanding.rst.txt @@ -866,7 +866,7 @@ One of the primary considerations for choosing this particular set of primitives that they can be implemented *safely* with relatively few pitfalls, on practically all current computing platforms. -The primitives listed here *are authoritative*. Anything claiming to be Reticulum, +The primitives listed here **are authoritative**. Anything claiming to be Reticulum, but not using these exact primitives **is not** Reticulum, and possibly an intentionally compromised or weakened clone. The utilised primitives are: diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index f815055..0044622 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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "mit": 0, "licens": [0, 9], "copyright": 0, "2024": 0, "mark": [0, 7, 9], "qvist": 0, "unsign": 0, "io": [0, 3], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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, "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 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, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "condit": [9, 11], "pmr": 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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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": {"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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "mit": 0, "licens": [0, 9], "copyright": 0, "2024": 0, "mark": [0, 7, 9], "qvist": 0, "unsign": 0, "io": [0, 3], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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, "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 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, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "condit": [9, 11], "pmr": 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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "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"]], "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"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index c93365a..6ca2075 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -1068,7 +1068,7 @@ general-purpose CPUs and on microcontrollers.

    One of the primary considerations for choosing this particular set of primitives is that they can be implemented safely with relatively few pitfalls, on practically all current computing platforms.

    -

    The primitives listed here are authoritative. Anything claiming to be Reticulum, +

    The primitives listed here are authoritative. Anything claiming to be Reticulum, but not using these exact primitives is not Reticulum, and possibly an intentionally compromised or weakened clone. The utilised primitives are:

    Raises:
    @@ -1015,9 +1016,9 @@ they are addressed to a RNS.Destination.GROUP destination or a RNS.Link.

    For RNS.Destination.GROUP destinations, Reticulum will use the pre-shared key configured for the destination. All packets to group -destinations are encrypted with the same AES-128 key.

    +destinations are encrypted with the same AES-256 key.

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

    +derived ephemeral AES-256 key for every packet.

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

    diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 8ffa945..725da1c 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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 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, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]]}, "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": [0, 7], "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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "auto_compress": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "under": [7, 8, 10, 11], "omit": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 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, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]]}, "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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 diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 590c3d0..96eb757 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -673,7 +673,7 @@ public signing key.
  • In case the packet is addressed to a group destination type, the packet will be encrypted with the -pre-shared AES-128 key associated with the destination. In case the packet is addressed to a plain +pre-shared AES-256 key associated with the destination. In case the packet is addressed to a plain destination type, the payload data will not be encrypted. Neither of these two destination types can offer forward secrecy. In general, it is recommended to always use the single destination type, unless it is strictly necessary to use one of the others.
    @@ -1078,7 +1078,7 @@ intentionally compromised or weakened clone. The utilised primitives are:

  • Encrypted tokens are based on the Fernet spec

    • Ephemeral keys derived from an ECDH key exchange on Curve25519

    • -
    • AES-128 or AES-256 in CBC mode with PKCS7 padding

    • +
    • AES-256 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for message authentication

    • IVs must be generated through os.urandom() or better

    • No Fernet version and timestamp metadata fields

    • @@ -1087,7 +1087,7 @@ intentionally compromised or weakened clone. The utilised primitives are:

    • SHA-256

    • SHA-512

    -

    In the default installation configuration, the X25519, Ed25519, AES-128-CBC and AES-256-CBC +

    In the default installation configuration, the X25519, Ed25519 and AES-256-CBC primitives are provided by OpenSSL (via the PyCA/cryptography package). The hashing functions SHA-256 and SHA-512 are provided by the standard Python hashlib. The HKDF, HMAC, diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index 8bbccd4..4858f24 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -279,7 +279,7 @@ considered complete and stable at the moment, but could change if absolutely war

  • Reticulum uses the following format for encrypted tokens:

    • Ephemeral per-packet and link keys and derived from an ECDH key exchange on Curve25519

    • -
    • AES-128 or AES-256 in CBC mode with PKCS7 padding

    • +
    • AES-256 in CBC mode with PKCS7 padding

    • HMAC using SHA256 for authentication

    • IVs are generated through os.urandom()

    From 5f502746a4364ad28c2f5d584624cd066e73724a Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 13:16:37 +0200 Subject: [PATCH 70/91] Updated tests --- tests/identity.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/identity.py b/tests/identity.py index 6cd503d..623a72f 100644 --- a/tests/identity.py +++ b/tests/identity.py @@ -7,11 +7,8 @@ import os signed_message = "e51a008b8b8ba855993d8892a40daad84a6fb69a7138e1b5f69b427fe03449826ab6ccb81f0d72b4725e8d55c814d3e8e151b495cf5b59702f197ec366d935ad04a98ca519d6964f96ea09910b020351d1cdff3befbad323a2a28a6ec7ced4d0d67f02c525f93b321d9b076d704408475bd2d123cd51916f7e49039246ac56add37ef87e32d7f9853ac44a7f77d26fedc83e4e67a45742b751c2599309f5eda6efa0dafd957f61af1f0e86c4d6c5052e0e5fa577db99846f2b7a0204c31cef4013ca51cb307506c9209fd18d0195a7c9ae628af1a1d9ee7a4cf30037ed190a9fdcaa4ce5bb7bea19803cb5b5cea8c21fdb98d8f73ff5aaad87f5f6c3b7bcfe8974e5b063cc1113d77b9e96bec1c9d10ed37b780c3f7349a34092bb3968daeced40eb0b5130c0d11595e30b9671896385d04289d067f671599386536eed8430a72e186fb95023d5ac5dd442443bfabfe13a84a38d060af73bf20f921f38a768672fdbcb1dfece7458166e2e15948d6b4fa81f42db48747d283c670f576a0b410b31a70d2594823d0e29135a488cb0408c9e5bc1e197ff99aef471924231ccc8e3eddc82dbcea4801f14c5fc7a389a26a52cc93cfe0770953ef595ff410b7033a6ed5c975dd922b3f48f9dffcfb412eeed5758f3aa51de7eb47cd2cb" sig_from_key_0 = "3020ef58f861591826a61c3d2d4a25b949cdb3094085ba6b1177a6f2a05f3cdd24d1095d6fdd078f0b2826e80b261c93c1ff97fbfd4857f25706d57dd073590c" -encrypted_message_legacy = "71884a271ead43558fcf1e331c5aebcd43498f16da16f8056b0893ce6b15d521eaa4f31639cd34da1b57995944076c4f14f300f2d2612111d21a3429a9966ac1da68545c00c7887d8b26f6c1ab9defa020b9519849ca41b7904199882802b6542771df85144a79890289d3c02daef6c26652c5ce9de231a2" -fixed_token_legacy = "54d6ba347f3f2fe74fa52d6844a9090c049a6f437d7d151b9bd7db3e6785dd40286c451babda82660cbb4827517365b740675adf60d4b82778d7f7815a0e9818f2f2d3f15c0365e9d4f08df4f8261e5549c8c398e92bc66750fcd4ce7ea150f8a8761936341129e89afd22eaa57c303ccbe045d0b2fc7b8637946e16627419ef1fea0a0fef974c418a98af046d61e8e064f42c4948b0c81701106583c8f224329c0b475cb2168dc2e3fbf649edb79c58b7c839a509e146ec8d26589cb990c76c756fdefd0110410a6ab84fa3a722db74" - encrypted_message = "71884a271ead43558fcf1e331c5aebcd43498f16da16f8056b0893ce6b15d521eaa4f31639cd34da1b57995944076c4f14f300f2d2612111d21a3429a9966ac1da68545c00c7887d8b26f6c1ab9defa020b9519849ca41b7904199882802b6542771df85144a79890289d3c02daef6c26652c5ce9de231a2" -fixed_token = "e028a7d7b757241e53c65f20214365a74b83b4529e83291b391c614703d8a218708d1b47666c277c41cd9bb64b36ba5688801945df0b2470ea05e215eb9ffac8fad658f4d7fbc28688712daf9066e662b8f941cc766ee394e57b12eb629e3e807b3af9ec867170b5cd40fc17f29ff478fa28e419772020bd7c141f732851fb2397b150f30c2f9e347dabe01e80e5d857aaee7087d557f6027922fa814a67f417fba5e600975cf7502686d4112ba7814b9661067a7c900d5ed62f3125b126dc3c7ffea21d4702e6d205614b5da09e4b4d" +fixed_token = "e37705f9b432d3711acf028678b0b9d37fdf7e00a3b47c95251aad61447df2620b5b9978783c3d9f2fb762e68c8b57c554928fb70dd79c1033ce5865f91761aad3e992790f63456092cb69b7b045f539147f7ba10d480e300f193576ae2d75a7884809b76bd17e05a735383305c0aa5621395bbf51e8cc66c1c536f339f2bea600f08f8f9a76564b2522cd904b6c2b6e553ec3d4df718ae70434c734297b313539338d184d2c64a9c4ddbc9b9a4947d0b45f5a274f65ae9f6bb203562fd5cede6abd3c615b699156e08fa33b841647a0" fixed_keys = [ ("f8953ffaf607627e615603ff1530c82c434cf87c07179dd7689ea776f30b964cfb7ba6164af00c5111a45e69e57d885e1285f8dbfe3a21e95ae17cf676b0f8b7", "650b5d76b6bec0390d1f8cfca5bd33f9"), @@ -155,11 +152,8 @@ class TestIdentity(unittest.TestCase): fid = RNS.Identity.from_bytes(bytes.fromhex(fixed_keys[0][0])) self.assertEqual(fid.hash, bytes.fromhex(fixed_keys[0][1])) - # Test decryption of known AES-128 token - plaintext = fid.decrypt(bytes.fromhex(fixed_token_legacy)) - self.assertEqual(plaintext, bytes.fromhex(encrypted_message_legacy)) - # Test decryption of known AES-256 token + print("Testing decryption of known token") plaintext = fid.decrypt(bytes.fromhex(fixed_token)) self.assertEqual(plaintext, bytes.fromhex(encrypted_message)) From 4e4c68071f241971ce033d6e8da62fb1ad8dee0e Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 13:18:44 +0200 Subject: [PATCH 71/91] Removed legacy encryption modes. Default to AES-256 for links and packets. --- RNS/Cryptography/Token.py | 1 - RNS/Identity.py | 63 ++++++++++----------------------------- RNS/Link.py | 2 +- 3 files changed, 16 insertions(+), 50 deletions(-) diff --git a/RNS/Cryptography/Token.py b/RNS/Cryptography/Token.py index 53cc27a..c0ac5db 100644 --- a/RNS/Cryptography/Token.py +++ b/RNS/Cryptography/Token.py @@ -103,7 +103,6 @@ class Token(): def decrypt(self, token = None): - # RNS.log(f"Trying decryption with {self.mode}") # TODO: Remove if not isinstance(token, bytes): raise TypeError("Token must be bytes") if not self.verify_hmac(token): raise ValueError("Token HMAC was invalid") diff --git a/RNS/Identity.py b/RNS/Identity.py index c1e17aa..b5e9dfa 100644 --- a/RNS/Identity.py +++ b/RNS/Identity.py @@ -87,7 +87,6 @@ class Identity: """ DERIVED_KEY_LENGTH = 512//8 - DERIVED_KEY_LENGTH_LEGACY = 256//8 # Storage known_destinations = {} @@ -679,20 +678,8 @@ class Identity: shared_key = ephemeral_key.exchange(target_public_key) - # TODO: Reset after migration - # derived_key = RNS.Cryptography.hkdf( - # length=Identity.DERIVED_KEY_LENGTH, - # derive_from=shared_key, - # salt=self.get_salt(), - # context=self.get_context(), - # ) - - # Use legacy derived key length (AES-128) during migration by - # default. This allows AES-256 capable instances on RNS 0.9.5 - # to still communicate with older versions. This migration - # handling will be removed in RNS 0.9.6. derived_key = RNS.Cryptography.hkdf( - length=Identity.DERIVED_KEY_LENGTH_LEGACY, + length=Identity.DERIVED_KEY_LENGTH, derive_from=shared_key, salt=self.get_salt(), context=self.get_context(), @@ -706,6 +693,16 @@ class Identity: else: raise KeyError("Encryption failed because identity does not hold a public key") + def __decrypt(self, shared_key, ciphertext): + derived_key = RNS.Cryptography.hkdf( + length=Identity.DERIVED_KEY_LENGTH, + derive_from=shared_key, + salt=self.get_salt(), + context=self.get_context()) + + token = Token(derived_key) + plaintext = token.decrypt(ciphertext) + return plaintext def decrypt(self, ciphertext_token, ratchets=None, enforce_ratchets=False, ratchet_id_receiver=None): """ @@ -716,36 +713,6 @@ class Identity: :raises: *KeyError* if the instance does not hold a private key. """ - # This handles decryption during migration to AES-256 where - # older instances may still use AES-128. If decryption fails - # initially, AES-128 will be attempted as a fallback mode. - # This handler will be removed in RNS 0.9.6. - def migration_decrypt(shared_key, ciphertext): - try: - derived_key = RNS.Cryptography.hkdf( - length=Identity.DERIVED_KEY_LENGTH, - derive_from=shared_key, - salt=self.get_salt(), - context=self.get_context()) - - token = Token(derived_key) - plaintext = token.decrypt(ciphertext) - - # TODO: Remove after migration - # If decryption fails, try legacy decryption mode - except Exception as e: - RNS.log("Decryption failed, attempting legacy mode fallback", RNS.LOG_DEBUG) - derived_key = RNS.Cryptography.hkdf( - length=Identity.DERIVED_KEY_LENGTH_LEGACY, - derive_from=shared_key, - salt=self.get_salt(), - context=self.get_context()) - - token = Token(derived_key) - plaintext = token.decrypt(ciphertext) - - return plaintext - if self.prv != None: if len(ciphertext_token) > Identity.KEYSIZE//8//2: plaintext = None @@ -760,8 +727,7 @@ class Identity: ratchet_prv = X25519PrivateKey.from_private_bytes(ratchet) ratchet_id = Identity._get_ratchet_id(ratchet_prv.public_key().public_bytes()) shared_key = ratchet_prv.exchange(peer_pub) - plaintext = migration_decrypt(shared_key, ciphertext) - + plaintext = self.__decrypt(shared_key, ciphertext) if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = ratchet_id @@ -778,7 +744,7 @@ class Identity: if plaintext == None: shared_key = self.prv.exchange(peer_pub) - plaintext = migration_decrypt(shared_key, ciphertext) + plaintext = self.__decrypt(shared_key, ciphertext) if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = None @@ -788,7 +754,8 @@ class Identity: if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = None - return plaintext; + return plaintext + else: RNS.log("Decryption failed because the token size was invalid.", RNS.LOG_DEBUG) return None diff --git a/RNS/Link.py b/RNS/Link.py index 7118fca..2542c46 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -127,7 +127,7 @@ class Link: MODE_PQ_RESERVED_3 = 0x06 MODE_PQ_RESERVED_4 = 0x07 ENABLED_MODES = [MODE_AES128_CBC, MODE_AES256_CBC] - MODE_DEFAULT = MODE_AES128_CBC + MODE_DEFAULT = MODE_AES256_CBC MODE_DESCRIPTIONS = {MODE_AES128_CBC: "AES_128_CBC", MODE_AES256_CBC: "AES_256_CBC", MODE_AES256_GCM: "MODE_AES256_GCM", From 11e06b477ed92b2a0cf7770b7d320c2d96fd53a8 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 13:26:26 +0200 Subject: [PATCH 72/91] Cleanup --- RNS/Cryptography/Token.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/RNS/Cryptography/Token.py b/RNS/Cryptography/Token.py index c0ac5db..c0e457d 100644 --- a/RNS/Cryptography/Token.py +++ b/RNS/Cryptography/Token.py @@ -37,9 +37,6 @@ from RNS.Cryptography import AES from RNS.Cryptography.AES import AES_128_CBC from RNS.Cryptography.AES import AES_256_CBC -# TODO: Remove after migration -import RNS - class Token(): """ This class provides a slightly modified implementation of the Fernet spec @@ -53,7 +50,7 @@ class Token(): TOKEN_OVERHEAD = 48 # Bytes @staticmethod - def generate_key(mode=AES_128_CBC): + def generate_key(mode=AES_256_CBC): if mode == AES_128_CBC: return os.urandom(32) elif mode == AES_256_CBC: return os.urandom(64) else: raise TypeError(f"Invalid token mode: {mode}") @@ -91,14 +88,12 @@ class Token(): if not isinstance(data, bytes): raise TypeError("Token plaintext input must be bytes") iv = os.urandom(16) - # RNS.log(f"Encrypting with {self.mode}") # TODO: Remove ciphertext = self.mode.encrypt( plaintext = PKCS7.pad(data), key = self._encryption_key, iv = iv) signed_parts = iv+ciphertext - return signed_parts + HMAC.new(self._signing_key, signed_parts).digest() @@ -110,15 +105,10 @@ class Token(): ciphertext = token[16:-32] try: - plaintext = PKCS7.unpad( + return PKCS7.unpad( self.mode.decrypt( ciphertext = ciphertext, key = self._encryption_key, iv = iv)) - # RNS.log(f"Decrypted packet with {self.mode}") # TODO: Remove - return plaintext - - except Exception as e: - RNS.trace_exception(e) # TODO: Remove after migration - raise ValueError("Could not decrypt token") \ No newline at end of file + except Exception as e: raise ValueError(f"Could not decrypt token: {e}") From d4ea6982369a5579a66d489f30311034f6265a00 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 13:29:20 +0200 Subject: [PATCH 73/91] Cleanup --- RNS/Link.py | 1 - 1 file changed, 1 deletion(-) diff --git a/RNS/Link.py b/RNS/Link.py index 2542c46..3af39c7 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -226,7 +226,6 @@ class Link: return None - # TODO: Set default link mode to AES_256_CBC after migration def __init__(self, destination=None, established_callback=None, closed_callback=None, owner=None, peer_pub_bytes=None, peer_sig_pub_bytes=None, mode=MODE_DEFAULT): if destination != None and destination.type != RNS.Destination.SINGLE: raise TypeError("Links can only be established to the \"single\" destination type") self.mode = mode From 11511168dce19f3c8f4ea8ce6eb927fac8f35803 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 13:32:35 +0200 Subject: [PATCH 74/91] Cleanup --- RNS/Destination.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RNS/Destination.py b/RNS/Destination.py index 11ee053..7f97c23 100755 --- a/RNS/Destination.py +++ b/RNS/Destination.py @@ -642,7 +642,7 @@ class Destination: RNS.log(f"Decryption still failing after ratchet reload. The contained exception was: {e}", RNS.LOG_ERROR) raise e - RNS.log("Decryption succeeded after ratchet reload", RNS.LOG_NOTICE) + if decrypted: RNS.log("Decryption succeeded after ratchet reload", RNS.LOG_NOTICE) return decrypted From 29a52e19cf0df4c73180c4b0ac187ffb3b22898b Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 17:25:00 +0200 Subject: [PATCH 75/91] Cleanup --- RNS/Identity.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/RNS/Identity.py b/RNS/Identity.py index b5e9dfa..fe1589e 100644 --- a/RNS/Identity.py +++ b/RNS/Identity.py @@ -693,6 +693,7 @@ class Identity: else: raise KeyError("Encryption failed because identity does not hold a public key") + # Post 0.9.6 decryption will only accept AES-256 def __decrypt(self, shared_key, ciphertext): derived_key = RNS.Cryptography.hkdf( length=Identity.DERIVED_KEY_LENGTH, @@ -704,6 +705,36 @@ class Identity: plaintext = token.decrypt(ciphertext) return plaintext + # This handles decryption during migration to AES-256 where + # older instances may still use AES-128. If decryption fails + # initially, AES-128 will be attempted as a fallback mode. + # This handler will be removed in RNS 0.9.6. + def __migration_decrypt(self, shared_key, ciphertext): + try: + derived_key = RNS.Cryptography.hkdf( + length=Identity.DERIVED_KEY_LENGTH, + derive_from=shared_key, + salt=self.get_salt(), + context=self.get_context()) + + token = Token(derived_key) + plaintext = token.decrypt(ciphertext) + + # TODO: Remove after migration + # If decryption fails, try legacy decryption mode + except Exception as e: + RNS.log("Decryption failed, attempting legacy mode fallback", RNS.LOG_DEBUG) + derived_key = RNS.Cryptography.hkdf( + length=Identity.DERIVED_KEY_LENGTH_LEGACY, + derive_from=shared_key, + salt=self.get_salt(), + context=self.get_context()) + + token = Token(derived_key) + plaintext = token.decrypt(ciphertext) + + return plaintext + def decrypt(self, ciphertext_token, ratchets=None, enforce_ratchets=False, ratchet_id_receiver=None): """ Decrypts information for the identity. @@ -727,7 +758,7 @@ class Identity: ratchet_prv = X25519PrivateKey.from_private_bytes(ratchet) ratchet_id = Identity._get_ratchet_id(ratchet_prv.public_key().public_bytes()) shared_key = ratchet_prv.exchange(peer_pub) - plaintext = self.__decrypt(shared_key, ciphertext) + plaintext = self.__migration_decrypt(shared_key, ciphertext) if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = ratchet_id @@ -744,7 +775,7 @@ class Identity: if plaintext == None: shared_key = self.prv.exchange(peer_pub) - plaintext = self.__decrypt(shared_key, ciphertext) + plaintext = self.__migration_decrypt(shared_key, ciphertext) if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = None From d680f4d41191187d05fc93ef43e75f118c55d198 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 17:59:26 +0200 Subject: [PATCH 76/91] Cleanup --- RNS/Identity.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/RNS/Identity.py b/RNS/Identity.py index fe1589e..81e5c50 100644 --- a/RNS/Identity.py +++ b/RNS/Identity.py @@ -87,6 +87,7 @@ class Identity: """ DERIVED_KEY_LENGTH = 512//8 + DERIVED_KEY_LENGTH_LEGACY = 256//8 # Storage known_destinations = {} @@ -720,10 +721,8 @@ class Identity: token = Token(derived_key) plaintext = token.decrypt(ciphertext) - # TODO: Remove after migration - # If decryption fails, try legacy decryption mode except Exception as e: - RNS.log("Decryption failed, attempting legacy mode fallback", RNS.LOG_DEBUG) + # RNS.log("Decryption failed, attempting legacy mode fallback", RNS.LOG_DEBUG) derived_key = RNS.Cryptography.hkdf( length=Identity.DERIVED_KEY_LENGTH_LEGACY, derive_from=shared_key, From 30a08c41927e506b1640fb302132be62e132494f Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 18:01:13 +0200 Subject: [PATCH 77/91] Updated manual --- docs/Reticulum Manual.epub | Bin 3546914 -> 3546913 bytes docs/Reticulum Manual.pdf | Bin 4172830 -> 4172823 bytes docs/manual/.buildinfo | 2 +- docs/manual/_static/documentation_options.js | 2 +- docs/manual/examples.html | 6 +++--- docs/manual/forhumans.html | 6 +++--- docs/manual/genindex.html | 6 +++--- docs/manual/gettingstartedfast.html | 6 +++--- docs/manual/hardware.html | 6 +++--- docs/manual/index.html | 6 +++--- docs/manual/interfaces.html | 6 +++--- docs/manual/networks.html | 6 +++--- docs/manual/objects.inv | Bin 2769 -> 2769 bytes docs/manual/reference.html | 6 +++--- docs/manual/search.html | 6 +++--- docs/manual/support.html | 6 +++--- docs/manual/understanding.html | 6 +++--- docs/manual/using.html | 6 +++--- docs/manual/whatis.html | 6 +++--- 19 files changed, 44 insertions(+), 44 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 9f474e2fe9a0bc093bfd19df7e2c94ec6cf43f00..c4e2d0922d186758a651ba34ac3eaf9ed9464fcf 100644 GIT binary patch delta 2511 zcmZ{m2~bnX7KZO7EGB>n5R#A(7FP(1fV`_RD4?K`O;#0xAZXAaI{~7o(NPC*L7b=^ z2N9tZ6=hXG1VJPqpp0=1n;ScbVnhWWI=&`vd{tU+QuS5;r@K%0Io+pjC$F|0&4rX0 zphBa}!oX+>zf`1*Ad_SSQAZGDQ%p3U8_l2nMr6ICaBO)|o8P7Q;l-&9_2F@++JhpQFA@i5F3=f2 ztRA8NoB2YY-m_LAhYL1-^WRuXBQ$EOhDEJyEP9#Rxt_pokBcfx8_y1+Z*WNQTW%#PuG{@OIlt&i7!A~9JEgU9Lqi~I_RbQT^nB?2Ef6+YnfOR>(ca4{t zWm1y^0aT~+mi~JWZI130zs02je1aH;dcEEK*g_fOv#`xJ`@AOv;k>Zv~?RP30kP zI_4{F#$OwL=o-8Ce3f_JuWKYOS1$U0<_Yi3IK!nZu^Gj!N?*OQEFoyB@T73XWlf(F z<#QvM?oQ7mot=*6AImeB<@Y>}-aSBC7yczQeR8QNCp*q$aKALB{p0qWb8mQG z?Bn8Q^*E3w1-o`LL)NeZPRym=k13bky>L5QOYG9d8@I2dde5ypATt}v3~OGLRzvk_ zj^AnLHor&wCX{eWi9VU~qTJ0s$>D=kVCOMDBk}zn`d04?m6rteJ=qox;X=E69Z~s4 z)h*`l_-W%>VfCBZr|cw+QF-rc(r3O+RHimN;s&cXUB7wZ>fPE!t&dt=UKkDzj}|-R z(R9(4M8WJpp1{~3R%uLT*R554kv8O+x+srK=C>vaaM>kuBvU5)IZmy%hxuaM`934x zgR8hh9cpQT1s2bT^jX(dWUu72Dn4QL68O7>fb^Lbg6JFpdN6|Kthjq3^%R)+5yfC4* zedh#W3Dau(=jhP>3xeFcr=Nu-H5cFCvFxnBk34AKwd?bqw9!w?ws{I~+hqGj^aSsV zU+d?S+P6W}>Q3w=-!dZcsA^v-py9M90SjrYr0iR+;3iVUstwSg|#wR zIpt|82Q9N~C=}z*7Hpq7ZWqaetl?QY05jJ?v#zmV_own+OAFw zeBL#_uQp^Xi#pLpe5xs9&uv&bM=3dTBCC6J+jt`9)%LE&iI2ZOn9I13|DZ;jlNB?k z_14RDIpa=e@$O^sm&-=qG5P)cG3!O&a9(aWW%$KHW+3n*cJ;Z+AOklonvHui6r!l4 z0aXZonTCc!?5k}vR|wzN89EBl_g8>osM1j#4Zx(scI)nkyhcF=q5JQLLQG8-}nG8ZxrG9O|BF@>-oW)O3T1;i4v0AdBP zhS)$BR(h-0hKm)s-N?2jk`?M+sqJ%3MV5tiwv~l-|GMa;=wFXw#aein{eNE%K+?gi z45v-urIyG>27&|i&iCKBy;2aOgHbrslj?D~A8uqINd8F`Wajr7usyf;hB1P0 z1)))~k=z7J!B&1$q?a42M8^H^q60lemz__c2%-gFEaDHoXMt1)Gnft!$aOFV8V)qc z7*kVQGP72s% z9%dlU!;A*rKnpzrXbia700?5hb+3S22Id0KX^?@LD~jP;SB&haCW3S>fmQWGvR8nO zKDG>v0CD=zGaOXF2Dh)!7UUM%QURF>7jFj+Ow3rZP9ho*6Ab@Ai54I~)kiH5GO?wo zE4Vq`WPvFrT$Ksz3@}5*O$8aio67+L1I!8KgBu2aS82zY03H!WB+Wz+{11V-o;1Yt LRrhGaYDE460&ms> delta 2476 zcmZ|R3piBU9suyYjiK>K3}zUN_e?V$sj)+OCW(k1PKFdErx+&kJZVat>cn)UTHNGO zdZ;E9HKK-!B+0l4DWyaQMMw|fteJbd->2{1`M%$`{%h}9YyH<__MSpf2YMR1s)zDw z6ECypket}ZWD(?xI)W%72(l$Aa#v{NE{iDcHbJ&m%qTXmZuqOZ-ll*m8H3=x{oLLUYlnTA8|}FjI0XZ~6vG zct6$P(U%eBV*jwPx}I*y-G7rd#4KzqVg{C3kDQI4uKX-s)qi!G!aB1)NaJaK!Dp99 z0gq)7Pi#pVM+tO>fAP+c!N@jk;n+lXj)y+`;U}tWChvXrzcYrfeeI={pD?>J@F3=0 z;%~!&emkG6lfwkH;uE}Omz3}M zD|p1apDX+oOKI8938gn27vN)0=HrdiZNA+}J-$&<^=@omqCBnHD(QPl^fmLSy@r)W z3e*?N&V>toH*g|XzGx+1&|IjGGtGZP?cwU<^X3jH+6U6)R)jFN`t>N-^OcS~ROUWk zZL@S$Ztg+$mOXT@qTh{8JRBeA@$@>iGVAl)6S8fVs8xlHHqmq**_w<~;*z^*+kew` z^xkc&_L1to`;LQ%U$Ua;;-fVW>x6di-mdL=;{Nz_Us+;q*Wn9mUfvtjC~I2KOL6U1 zq=(=|r;d{pA5YNt2jWhpR*K_2m&Q4cixZN(#^%H(9k8=H{p8Bpj|nwP0(L&+d1W`X z=NyeV-;`CIYC|=M&aAdz8HfUD1NzzjdKI*SOSHDCPMao2lCp=Q$?2o%(N;=ziKdej zKHaU(NrBjX&`&!kRX(?7@&+N^)!YuPu%NW7VogUE;Y zZiuV-f~Aj)gnYu^->OBUHNLu}QSv%ymHHWr^#ev8Tiy;>3ycc>GC8;{`w3so)-&)% zrQN0oQDR!Ia`x%n@mEJ%Qcf<+FR@zE+a6|56*JB*4|YnrW!%;%m)q{i^L`YawRXqA zrWAz-%up8vi61y=)uI)gWS zX&|_IAC(3%*Oio{L5ir+Od6~iW@h-2~Rqs$@8QUWeqA^DvjFs zXuqs9s>(v`T&2}zl z2rUx&;91+UrE|M=ilw41jT)}8x|OA~yj;Z+Uaqpf;EaRIE&K(=N>mB|eSH8GBDR1k zsq%{JBWfuK!d5{MdAK`2K1KVQK@bts41g=fzKbgyuizudxf6I~?vHQ4vS?qW0fK}k z1ar6%p)nQ-zwY8h_;{i+>bU=Gw4|+f)+N^*6hTzsD@$co+d|Mp#PlS|f)OG{LBoKO zI;JbFo2g?InK)5arbwIlbBCEX%KJiza9AJYr)1m!|3?Q`U$Qx<5s^Tfbe$&ZBRtQ7-#@!B4KVgS+WYyC##TvB^h4y z18g$341EIf$e1fG^N=PG9MU9%DapOnYbYO(C~%;D5I})_3P1q`TMk#H zkAj&|B^xu-71e%389|=e!Xq+kh5}%vgE^q#fU5&rhJhQfz@-XUpg_PP0irJKyc0O+ zVg}NFVp0F7AozDE%M$r%gR8(EUCbW!1h*wcF8HPkd({KBdKgu@4*_~`UkX6H9_EaT qt!9DDYL?clLnrx}bmsYQSAqG7|3nbNtTa8rj2@;Vw@(e8F63_>R@0~e diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 76eac1b4f9ba8ff4c38b1697d558d0a47edfadf4..dfe292eaf8af9699df6ad2416527d858e2457448 100644 GIT binary patch delta 232427 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 z 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 ^ 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

    dg&&T*`e@QS^e=hp5vXL>1 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

    { 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

    Po7 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

    ZIiIeh-(10iam}m8>9-6(l?UH## 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

    u?&e?>y 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 W`OTK;Z&%wZaTsu^s=E5SaRC4Y*e9U? diff --git a/docs/manual/.buildinfo b/docs/manual/.buildinfo index b0fd267..b3345dc 100644 --- a/docs/manual/.buildinfo +++ b/docs/manual/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 4e1b5f77b3c7f5d0453477a09dcc765c +config: cce3deb193d6110f18b4ace0b3f4099b tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/manual/_static/documentation_options.js b/docs/manual/_static/documentation_options.js index 1838c46..2eef2aa 100644 --- a/docs/manual/_static/documentation_options.js +++ b/docs/manual/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.9.5 beta', + VERSION: '0.9.6 beta', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/manual/examples.html b/docs/manual/examples.html index fd1135b..5279891 100644 --- a/docs/manual/examples.html +++ b/docs/manual/examples.html @@ -6,7 +6,7 @@ - Code Examples - Reticulum Network Stack 0.9.5 beta documentation + Code Examples - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/forhumans.html b/docs/manual/forhumans.html index c2fca7a..d52308a 100644 --- a/docs/manual/forhumans.html +++ b/docs/manual/forhumans.html @@ -6,7 +6,7 @@ - An Explanation of Reticulum for Human Beings - Reticulum Network Stack 0.9.5 beta documentation + An Explanation of Reticulum for Human Beings - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/genindex.html b/docs/manual/genindex.html index dbe69c8..21494a7 100644 --- a/docs/manual/genindex.html +++ b/docs/manual/genindex.html @@ -4,7 +4,7 @@ - Index - Reticulum Network Stack 0.9.5 beta documentation + Index - Reticulum Network Stack 0.9.6 beta documentation @@ -139,7 +139,7 @@
    @@ -165,7 +165,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html index 09b7769..0bf2419 100644 --- a/docs/manual/gettingstartedfast.html +++ b/docs/manual/gettingstartedfast.html @@ -6,7 +6,7 @@ - Getting Started Fast - Reticulum Network Stack 0.9.5 beta documentation + Getting Started Fast - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/hardware.html b/docs/manual/hardware.html index 029d4dc..dfdcaf0 100644 --- a/docs/manual/hardware.html +++ b/docs/manual/hardware.html @@ -6,7 +6,7 @@ - Communications Hardware - Reticulum Network Stack 0.9.5 beta documentation + Communications Hardware - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/index.html b/docs/manual/index.html index fa1c02b..666e06e 100644 --- a/docs/manual/index.html +++ b/docs/manual/index.html @@ -6,7 +6,7 @@ - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html index 89ceb4b..4bdc519 100644 --- a/docs/manual/interfaces.html +++ b/docs/manual/interfaces.html @@ -6,7 +6,7 @@ - Configuring Interfaces - Reticulum Network Stack 0.9.5 beta documentation + Configuring Interfaces - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/networks.html b/docs/manual/networks.html index 3d65f6d..99f77e3 100644 --- a/docs/manual/networks.html +++ b/docs/manual/networks.html @@ -6,7 +6,7 @@ - Building Networks - Reticulum Network Stack 0.9.5 beta documentation + Building Networks - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/objects.inv b/docs/manual/objects.inv index 9ab16646919c70e41803773c848e5a04b86fa3d5..4974e9b15a82b2ef1e46ec96a73ad977e9c948d4 100644 GIT binary patch delta 12 Tcmca8dQo(OKcm^kfJQC=AR`2C delta 12 Tcmca8dQo(OKcnf!fJQC=ARYv6 diff --git a/docs/manual/reference.html b/docs/manual/reference.html index 6e0ae02..dc0bc7c 100644 --- a/docs/manual/reference.html +++ b/docs/manual/reference.html @@ -6,7 +6,7 @@ - API Reference - Reticulum Network Stack 0.9.5 beta documentation + API Reference - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/search.html b/docs/manual/search.html index dbafce6..7ba2a6f 100644 --- a/docs/manual/search.html +++ b/docs/manual/search.html @@ -4,7 +4,7 @@ - Search - Reticulum Network Stack 0.9.5 beta documentation + Search - Reticulum Network Stack 0.9.6 beta documentation @@ -138,7 +138,7 @@
    @@ -164,7 +164,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/support.html b/docs/manual/support.html index 987c952..fd10980 100644 --- a/docs/manual/support.html +++ b/docs/manual/support.html @@ -6,7 +6,7 @@ - Support Reticulum - Reticulum Network Stack 0.9.5 beta documentation + Support Reticulum - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html index 96eb757..407aa4c 100644 --- a/docs/manual/understanding.html +++ b/docs/manual/understanding.html @@ -6,7 +6,7 @@ - Understanding Reticulum - Reticulum Network Stack 0.9.5 beta documentation + Understanding Reticulum - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/using.html b/docs/manual/using.html index 4c16cbc..c6343a1 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -6,7 +6,7 @@ - Using Reticulum on Your System - Reticulum Network Stack 0.9.5 beta documentation + Using Reticulum on Your System - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html index 4858f24..1c75673 100644 --- a/docs/manual/whatis.html +++ b/docs/manual/whatis.html @@ -6,7 +6,7 @@ - What is Reticulum? - Reticulum Network Stack 0.9.5 beta documentation + What is Reticulum? - Reticulum Network Stack 0.9.6 beta documentation @@ -141,7 +141,7 @@
    @@ -167,7 +167,7 @@
    - Reticulum Network Stack 0.9.5 beta documentation + Reticulum Network Stack 0.9.6 beta documentation From c1673f39b661557c008e408af122b322c6990b44 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 13 May 2025 19:46:18 +0200 Subject: [PATCH 78/91] Updated changelog --- Changelog.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Changelog.md b/Changelog.md index 7234d5f..743d1f7 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,30 @@ +### 2025-05-14: RNS β 0.9.6 + +This release activates AES-256 as the default encryption mode for all communication. It is the last release that will support the old AES-128 based modes, which will be entirely phased out in the next release. + +This release also includes a number of API and resource consumption improvements, and fixes a bug. + +**Changes** +- Enabled AES-256 as default encryption mode for all traffic +- Added ability to efficiently transfer files as responses in the `Request` API +- Added ability to include metadata on `Resource` transfers +- Added option to specify `Resource` auto-compression limits +- Added option to specify `Request` response auto-compression limits +- Added `Resource` transfer example +- Added allow overwrite option to `rncp` +- Improved hardware MTU auto-configuration +- Improved handling of file transfers using the `Resource` API +- Improved `Resource` transfer memory consumption +- Improved memory consumption of applications connected to a shared instance +- Improved `rncp` memory consumption for large files +- Fixed announce handlers not triggering after shared instance disappearance + +**Release Hashes** +``` +597939c69c3861e0854f62b64484527c146850d6a5444f22ab49721b9c901e15 rns-0.9.6-py3-none-any.whl +72aa816b7a8ce05d5ef76e4f26906b57a5aec96bd83ac74b19d53295ae24d3a8 rnspure-0.9.6-py3-none-any.whl +``` + ### 2025-05-09: RNS β 0.9.5 This release initiates migration of Reticulum from AES-128 to AES-256 as the default link and packet cipher mode. It is a compatibility/migration release, that while supporting AES-256 doesn't use it by default. It will work with both the old AES-128 based modes, and the new AES-256 based modes. There's a very slight penalty in performance to support both the old and new modes at the same time, but only for single packet APIs (not links), and it really shouldn't be noticeable in any everyday use. From 756029e5afa3fe57e7394a302c3e8b43fd693cc8 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 15 May 2025 01:14:55 +0200 Subject: [PATCH 79/91] Added option to specify shared instance type --- RNS/Interfaces/LocalInterface.py | 4 +-- RNS/Reticulum.py | 43 +++++++++++++++++++++++-------- RNS/Utilities/rnsd.py | 26 ++++++++++++++----- docs/source/using.rst | 44 ++++++++++++++++++++++++-------- 4 files changed, 88 insertions(+), 29 deletions(-) diff --git a/RNS/Interfaces/LocalInterface.py b/RNS/Interfaces/LocalInterface.py index 08a410c..445ba28 100644 --- a/RNS/Interfaces/LocalInterface.py +++ b/RNS/Interfaces/LocalInterface.py @@ -70,7 +70,7 @@ class LocalClientInterface(Interface): self.HW_MTU = 262144 self.online = False - if socket_path != None and RNS.vendor.platformutils.use_af_unix(): self.socket_path = f"\0rns/{socket_path}" + if socket_path != None and RNS.Reticulum.get_instance().use_af_unix: self.socket_path = f"\0rns/{socket_path}" else: self.socket_path = None self.IN = True @@ -350,7 +350,7 @@ class LocalServerInterface(Interface): self.online = False self.clients = 0 - if socket_path != None and RNS.vendor.platformutils.use_af_unix(): self.socket_path = f"\0rns/{socket_path}" + if socket_path != None and RNS.Reticulum.get_instance().use_af_unix: self.socket_path = f"\0rns/{socket_path}" else: self.socket_path = None self.IN = True diff --git a/RNS/Reticulum.py b/RNS/Reticulum.py index c112a7f..23d88f6 100755 --- a/RNS/Reticulum.py +++ b/RNS/Reticulum.py @@ -211,7 +211,8 @@ class Reticulum: """ return Reticulum.__instance - def __init__(self,configdir=None, loglevel=None, logdest=None, verbosity=None, require_shared_instance=False): + def __init__(self,configdir=None, loglevel=None, logdest=None, verbosity=None, + require_shared_instance=False, shared_instance_type=None): """ Initialises and starts a Reticulum instance. This must be done before any other operations, and Reticulum will not @@ -263,12 +264,11 @@ class Reticulum: self.local_control_port = 37429 self.local_socket_path = None self.share_instance = True + self.shared_instance_type = shared_instance_type self.rpc_listener = None self.rpc_key = None self.rpc_type = "AF_INET" - - if RNS.vendor.platformutils.use_af_unix(): - self.local_socket_path = "default" + self.use_af_unix = False self.ifac_salt = Reticulum.IFAC_SALT @@ -325,12 +325,11 @@ class Reticulum: self.__apply_config() RNS.log(f"Utilising cryptography backend \"{RNS.Cryptography.Provider.backend()}\"", RNS.LOG_DEBUG) RNS.log(f"Configuration loaded from {self.configpath}", RNS.LOG_VERBOSE) - - RNS.Identity.load_known_destinations() + RNS.Identity.load_known_destinations() RNS.Transport.start(self) - if RNS.vendor.platformutils.use_af_unix(): + if self.use_af_unix: self.rpc_addr = f"\0rns/{self.local_socket_path}/rpc" self.rpc_type = "AF_UNIX" else: @@ -458,6 +457,11 @@ class Reticulum: if option == "instance_name": value = self.config["reticulum"][option] self.local_socket_path = value + if option == "shared_instance_type": + if self.shared_instance_type == None: + value = self.config["reticulum"][option].lower() + if value in ["tcp", "unix"]: + self.shared_instance_type = value if option == "shared_instance_port": value = int(self.config["reticulum"][option]) self.local_interface_port = value @@ -516,6 +520,17 @@ class Reticulum: if RNS.compiled: RNS.log("Reticulum running in compiled mode", RNS.LOG_DEBUG) else: RNS.log("Reticulum running in interpreted mode", RNS.LOG_DEBUG) + + if RNS.vendor.platformutils.use_af_unix(): + if self.shared_instance_type == "tcp": self.use_af_unix = False + else: self.use_af_unix = True + else: + self.shared_instance_type = "tcp" + self.use_af_unix = False + + if self.local_socket_path == None and self.use_af_unix: + self.local_socket_path = "default" + self.__start_local_interface() if self.is_shared_instance or self.is_standalone_instance: @@ -1379,8 +1394,16 @@ instance_name = default # is the case, you can isolate different instances by # specifying a unique set of ports for each: -shared_instance_port = 37428 -instance_control_port = 37429 +# shared_instance_port = 37428 +# instance_control_port = 37429 + + +# If you want to explicitly use TCP for shared instance +# communication, instead of domain sockets, this is also +# possible, by using the following option: + +# shared_instance_type = tcp + # You can configure Reticulum to panic and forcibly close # if an unrecoverable interface error occurs, such as the @@ -1388,7 +1411,7 @@ instance_control_port = 37429 # an optional directive, and can be left out for brevity. # This behaviour is disabled by default. -panic_on_interface_error = No +# panic_on_interface_error = No [logging] diff --git a/RNS/Utilities/rnsd.py b/RNS/Utilities/rnsd.py index c3d4fe7..15ae69c 100755 --- a/RNS/Utilities/rnsd.py +++ b/RNS/Utilities/rnsd.py @@ -117,12 +117,24 @@ share_instance = Yes # If you want to run multiple *different* shared instances # on the same system, you will need to specify different -# shared instance ports for each. The defaults are given -# below, and again, these options can be left out if you -# don't need them. +# instance names for each. On platforms supporting domain +# sockets, this can be done with the instance_name option: -shared_instance_port = 37428 -instance_control_port = 37429 +instance_name = default + +# Some platforms don't support domain sockets, and if that +# is the case, you can isolate different instances by +# specifying a unique set of ports for each: + +# shared_instance_port = 37428 +# instance_control_port = 37429 + + +# If you want to explicitly use TCP for shared instance +# communication, instead of domain sockets, this is also +# possible, by using the following option: + +# shared_instance_type = tcp # On systems where running instances may not have access @@ -154,7 +166,7 @@ instance_control_port = 37429 # an optional directive, and can be left out for brevity. # This behaviour is disabled by default. -panic_on_interface_error = No +# panic_on_interface_error = No # When Transport is enabled, it is possible to allow the @@ -165,7 +177,7 @@ panic_on_interface_error = No # Transport Instance, and printed to the log at startup. # Optional, and disabled by default. -respond_to_probes = No +# respond_to_probes = No [logging] diff --git a/docs/source/using.rst b/docs/source/using.rst index 20260c0..73aab5d 100644 --- a/docs/source/using.rst +++ b/docs/source/using.rst @@ -69,12 +69,12 @@ configuration file is created. The default configuration looks like this: # If you enable Transport, your system will route traffic # for other peers, pass announces and serve path requests. - # This should only be done for systems that are suited to - # act as transport nodes, ie. if they are stationary and + # This should be done for systems that are suited to act + # as transport nodes, ie. if they are stationary and # always-on. This directive is optional and can be removed # for brevity. - enable_transport = False + enable_transport = No # By default, the first program to launch the Reticulum @@ -91,12 +91,24 @@ configuration file is created. The default configuration looks like this: # If you want to run multiple *different* shared instances # on the same system, you will need to specify different - # shared instance ports for each. The defaults are given - # below, and again, these options can be left out if you - # don't need them. + # instance names for each. On platforms supporting domain + # sockets, this can be done with the instance_name option: - shared_instance_port = 37428 - instance_control_port = 37429 + instance_name = default + + # Some platforms don't support domain sockets, and if that + # is the case, you can isolate different instances by + # specifying a unique set of ports for each: + + # shared_instance_port = 37428 + # instance_control_port = 37429 + + + # If you want to explicitly use TCP for shared instance + # communication, instead of domain sockets, this is also + # possible, by using the following option: + + # shared_instance_type = tcp # On systems where running instances may not have access @@ -110,13 +122,25 @@ configuration file is created. The default configuration looks like this: # rpc_key = e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790 + # It is possible to allow remote management of Reticulum + # systems using the various built-in utilities, such as + # rnstatus and rnpath. You will need to specify one or + # more Reticulum Identity hashes for authenticating the + # queries from client programs. For this purpose, you can + # use existing identity files, or generate new ones with + # the rnid utility. + + # enable_remote_management = yes + # remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b5af27bca1776dc + + # You can configure Reticulum to panic and forcibly close # if an unrecoverable interface error occurs, such as the # hardware device for an interface disappearing. This is # an optional directive, and can be left out for brevity. # This behaviour is disabled by default. - panic_on_interface_error = No + # panic_on_interface_error = No # When Transport is enabled, it is possible to allow the @@ -127,7 +151,7 @@ configuration file is created. The default configuration looks like this: # Transport Instance, and printed to the log at startup. # Optional, and disabled by default. - respond_to_probes = No + # respond_to_probes = No [logging] From f186b6266b5d8a06c9676263d9a2f9030035c661 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 15 May 2025 12:50:16 +0200 Subject: [PATCH 80/91] Implemented dynamic keepalive and link timeout calculation --- RNS/Link.py | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/RNS/Link.py b/RNS/Link.py index 3af39c7..74d4416 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -80,19 +80,23 @@ class Link: LINK_MTU_SIZE = 3 TRAFFIC_TIMEOUT_MIN_MS = 5 TRAFFIC_TIMEOUT_FACTOR = 6 + KEEPALIVE_MAX_RTT = 1.75 KEEPALIVE_TIMEOUT_FACTOR = 4 """ RTT timeout factor used in link timeout calculation. """ - STALE_GRACE = 2 + STALE_GRACE = 5 """ Grace period in seconds used in link timeout calculation. """ - KEEPALIVE = 360 + KEEPALIVE_MAX = 360 + KEEPALIVE_MIN = 5 + KEEPALIVE = KEEPALIVE_MAX """ - Interval for sending keep-alive packets on established links in seconds. + Default interval for sending keep-alive packets on established links in seconds. """ - STALE_TIME = 2*KEEPALIVE + STALE_FACTOR = 2 + STALE_TIME = STALE_FACTOR*KEEPALIVE """ If no traffic or keep-alive packets are received within this period, the link will be marked as stale, and a final keep-alive packet will be sent. @@ -101,7 +105,7 @@ class Link: and will be torn down. """ - WATCHDOG_MAX_SLEEP = 1 + WATCHDOG_MAX_SLEEP = 5 PENDING = 0x00 HANDSHAKE = 0x01 @@ -243,6 +247,7 @@ class Link: self.pending_requests = [] self.last_inbound = 0 self.last_outbound = 0 + self.last_keepalive = 0 self.last_proof = 0 self.last_data = 0 self.tx = 0 @@ -425,11 +430,13 @@ class Link: self.activated_at = time.time() self.last_proof = self.activated_at RNS.Transport.activate_link(self) - RNS.log("Link "+str(self)+" established with "+str(self.destination)+", RTT is "+str(round(self.rtt, 3))+"s", RNS.LOG_DEBUG) + RNS.log("Link "+str(self)+" established with "+str(self.destination)+", RTT is "+RNS.prettyshorttime(self.rtt), RNS.LOG_DEBUG) if self.rtt != None and self.establishment_cost != None and self.rtt > 0 and self.establishment_cost > 0: self.establishment_rate = self.establishment_cost/self.rtt + self.__update_keepalive() + rtt_data = umsgpack.packb(self.rtt) rtt_packet = RNS.Packet(self, rtt_data, context=RNS.Packet.LRRTT) rtt_packet.send() @@ -537,6 +544,8 @@ class Link: if self.rtt != None and self.establishment_cost != None and self.rtt > 0 and self.establishment_cost > 0: self.establishment_rate = self.establishment_cost/self.rtt + self.__update_keepalive() + try: if self.owner.callbacks.link_established != None: self.owner.callbacks.link_established(self) @@ -679,23 +688,23 @@ class Link: def had_outbound(self, is_keepalive=False): self.last_outbound = time.time() - if not is_keepalive: - self.last_data = self.last_outbound + if not is_keepalive: self.last_data = self.last_outbound + else: self.last_keepalive = self.last_outbound + + def __teardown_packet(self): + teardown_packet = RNS.Packet(self, self.link_id, context=RNS.Packet.LINKCLOSE) + teardown_packet.send() + self.had_outbound() def teardown(self): """ Closes the link and purges encryption keys. New keys will be used if a new link to the same destination is established. """ - if self.status != Link.PENDING and self.status != Link.CLOSED: - teardown_packet = RNS.Packet(self, self.link_id, context=RNS.Packet.LINKCLOSE) - teardown_packet.send() - self.had_outbound() + if self.status != Link.PENDING and self.status != Link.CLOSED: self.__teardown_packet() self.status = Link.CLOSED - if self.initiator: - self.teardown_reason = Link.INITIATOR_CLOSED - else: - self.teardown_reason = Link.DESTINATION_CLOSED + if self.initiator: self.teardown_reason = Link.INITIATOR_CLOSED + else: self.teardown_reason = Link.DESTINATION_CLOSED self.link_closed() def teardown_packet(self, packet): @@ -782,9 +791,10 @@ class Link: elif self.status == Link.ACTIVE: activated_at = self.activated_at if self.activated_at != None else 0 last_inbound = max(max(self.last_inbound, self.last_proof), activated_at) + now = time.time() - if time.time() >= last_inbound + self.keepalive: - if self.initiator: + if now >= last_inbound + self.keepalive: + if self.initiator and now >= self.last_keepalive + self.keepalive: self.send_keepalive() if time.time() >= last_inbound + self.stale_time: @@ -798,6 +808,7 @@ class Link: elif self.status == Link.STALE: sleep_time = 0.001 + self.__teardown_packet() self.status = Link.CLOSED self.teardown_reason = Link.TIMEOUT self.link_closed() @@ -833,6 +844,10 @@ class Link: self.snr = packet.snr if packet.q != None: self.q = packet.q + + def __update_keepalive(self): + self.keepalive = max(min(self.rtt*(Link.KEEPALIVE_MAX/Link.KEEPALIVE_MAX_RTT), Link.KEEPALIVE_MAX), Link.KEEPALIVE_MIN) + self.stale_time = self.keepalive * Link.STALE_FACTOR def send_keepalive(self): keepalive_packet = RNS.Packet(self, bytes([0xFF]), context=RNS.Packet.KEEPALIVE) From 96ce7e3f473d1a53b5af23aa10aac39394716d14 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 15 May 2025 15:32:20 +0200 Subject: [PATCH 81/91] Updated changelog --- Changelog.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 743d1f7..c0d0154 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,7 @@ This release also includes a number of API and resource consumption improvements **Changes** - Enabled AES-256 as default encryption mode for all traffic +- Added dynamic link keepalive and timeout calculation - Added ability to efficiently transfer files as responses in the `Request` API - Added ability to include metadata on `Resource` transfers - Added option to specify `Resource` auto-compression limits @@ -21,8 +22,8 @@ This release also includes a number of API and resource consumption improvements **Release Hashes** ``` -597939c69c3861e0854f62b64484527c146850d6a5444f22ab49721b9c901e15 rns-0.9.6-py3-none-any.whl -72aa816b7a8ce05d5ef76e4f26906b57a5aec96bd83ac74b19d53295ae24d3a8 rnspure-0.9.6-py3-none-any.whl +a23c64a04c1e83fd0ab449f564ac904da7fd4f61c0faf68a063f486cc48b44bd rns-0.9.6-py3-none-any.whl +4544882dea902b18b00d8a04c9ab93201974573b7b63c3db06cb310b0acec240 rnspure-0.9.6-py3-none-any.whl ``` ### 2025-05-09: RNS β 0.9.5 From 308a6906dbac2c71e1bad5d12c1a33d4a113e7c4 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 15 May 2025 15:32:31 +0200 Subject: [PATCH 82/91] Updated manual --- docs/Reticulum Manual.epub | Bin 3546913 -> 3547110 bytes docs/Reticulum Manual.pdf | Bin 4172823 -> 4174115 bytes docs/manual/_sources/using.rst.txt | 44 ++++++++++++++++++++++------- docs/manual/reference.html | 6 ++-- docs/manual/searchindex.js | 2 +- docs/manual/using.html | 44 ++++++++++++++++++++++------- 6 files changed, 72 insertions(+), 24 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index c4e2d0922d186758a651ba34ac3eaf9ed9464fcf..d1d412eb607b95f8e1af1a0075bc4216e4c9a203 100644 GIT binary patch delta 28353 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 S|6JvS{-U7`7l;dj#{NGR%D3JC diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index dfe292eaf8af9699df6ad2416527d858e2457448..9097bfaaa105ec22f23a71d333570f18899fe716 100644 GIT binary patch delta 135122 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 delta 133846 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

    Reticulum

    -class RNS.Reticulum(configdir=None, loglevel=None, logdest=None, verbosity=None, require_shared_instance=False)#
    +class RNS.Reticulum(configdir=None, loglevel=None, logdest=None, verbosity=None, require_shared_instance=False, shared_instance_type=None)#

    This class is used to initialise access to Reticulum within a program. You must create exactly one instance of this class before carrying out any other RNS operations, such as creating destinations @@ -1195,14 +1195,14 @@ and encrypted connectivity with the specified destination.

    -STALE_GRACE = 2#
    +STALE_GRACE = 5#

    Grace period in seconds used in link timeout calculation.

    KEEPALIVE = 360#
    -

    Interval for sending keep-alive packets on established links in seconds.

    +

    Default interval for sending keep-alive packets on established links in seconds.

    diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 725da1c..7d4c889 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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": [0, 7], "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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "auto_compress": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "under": [7, 8, 10, 11], "omit": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 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, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]]}, "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 9], "should_quit": 0, "fals": [0, 5, 7], "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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": [0, 7], "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 10, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5, 10], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 10, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 10], "below": [2, 3, 5], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "shared_instance_typ": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "auto_compress": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "under": [7, 8, 10, 11], "omit": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 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, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "instance_nam": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "explicitli": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]]}, "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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 diff --git a/docs/manual/using.html b/docs/manual/using.html index c6343a1..bca454f 100644 --- a/docs/manual/using.html +++ b/docs/manual/using.html @@ -277,12 +277,12 @@ configuration file is created. The default configuration looks like this:

    # If you enable Transport, your system will route traffic # for other peers, pass announces and serve path requests. -# This should only be done for systems that are suited to -# act as transport nodes, ie. if they are stationary and +# This should be done for systems that are suited to act +# as transport nodes, ie. if they are stationary and # always-on. This directive is optional and can be removed # for brevity. -enable_transport = False +enable_transport = No # By default, the first program to launch the Reticulum @@ -299,12 +299,24 @@ configuration file is created. The default configuration looks like this:

    # If you want to run multiple *different* shared instances # on the same system, you will need to specify different -# shared instance ports for each. The defaults are given -# below, and again, these options can be left out if you -# don't need them. +# instance names for each. On platforms supporting domain +# sockets, this can be done with the instance_name option: -shared_instance_port = 37428 -instance_control_port = 37429 +instance_name = default + +# Some platforms don't support domain sockets, and if that +# is the case, you can isolate different instances by +# specifying a unique set of ports for each: + +# shared_instance_port = 37428 +# instance_control_port = 37429 + + +# If you want to explicitly use TCP for shared instance +# communication, instead of domain sockets, this is also +# possible, by using the following option: + +# shared_instance_type = tcp # On systems where running instances may not have access @@ -318,13 +330,25 @@ configuration file is created. The default configuration looks like this:

    # rpc_key = e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790 +# It is possible to allow remote management of Reticulum +# systems using the various built-in utilities, such as +# rnstatus and rnpath. You will need to specify one or +# more Reticulum Identity hashes for authenticating the +# queries from client programs. For this purpose, you can +# use existing identity files, or generate new ones with +# the rnid utility. + +# enable_remote_management = yes +# remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b5af27bca1776dc + + # You can configure Reticulum to panic and forcibly close # if an unrecoverable interface error occurs, such as the # hardware device for an interface disappearing. This is # an optional directive, and can be left out for brevity. # This behaviour is disabled by default. -panic_on_interface_error = No +# panic_on_interface_error = No # When Transport is enabled, it is possible to allow the @@ -335,7 +359,7 @@ configuration file is created. The default configuration looks like this:

    # Transport Instance, and printed to the log at startup. # Optional, and disabled by default. -respond_to_probes = No +# respond_to_probes = No [logging] From 5387264dcb5c5cca34ca6677239ce9f6f1adef0b Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 15 May 2025 22:24:33 +0200 Subject: [PATCH 83/91] Updated changelog --- Changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index c0d0154..0104132 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,4 +1,4 @@ -### 2025-05-14: RNS β 0.9.6 +### 2025-05-15: RNS β 0.9.6 This release activates AES-256 as the default encryption mode for all communication. It is the last release that will support the old AES-128 based modes, which will be entirely phased out in the next release. From accf104553d4306698b28d41335a66c2964512ab Mon Sep 17 00:00:00 2001 From: markqvist Date: Sat, 17 May 2025 10:24:38 +0200 Subject: [PATCH 84/91] Update FUNDING.yml --- FUNDING.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FUNDING.yml b/FUNDING.yml index 3755d31..d125d55 100644 --- a/FUNDING.yml +++ b/FUNDING.yml @@ -1,2 +1,3 @@ +liberapay: Reticulum ko_fi: markqvist -custom: "https://unsigned.io/donate" \ No newline at end of file +custom: "https://unsigned.io/donate" From 8128f573ef66da9f278c5667d5d80cc3fc2a49e6 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 17 May 2025 10:25:09 +0200 Subject: [PATCH 85/91] Updated manual --- docs/Reticulum Manual.epub | Bin 3547110 -> 3547110 bytes docs/Reticulum Manual.pdf | Bin 4174115 -> 4174114 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index d1d412eb607b95f8e1af1a0075bc4216e4c9a203..0e216b16afd22bdacc2aa122d7b786884adffedf 100644 GIT binary patch delta 1757 zcmX}tdpwhS9KdmpnOW(=%>5c?7K<#NE^`}>mxQEJw3gIKN97VVoUtxglS_z^TOv`8 z%Ul*BWhE!+LPgUMO*Il_CE@%$r_LYm*X#58{(iqde$VrIJ&*WyFC+%4bRmVOhpK!9 zQ1o0n0WxB#uJxmE+NELd+=9p5gw|ZTx`Aquh06}*`p@G{x6~>3dpWt<{qycmno&Ykrp9}xy|tL zDyg`jWuE1hZ?mmLidB2DLD6TV_&&rhC{L(aFkyx4mZjBPJWcDv4;-(qOu8C-QO6rT zAJ=<5?)h{L?xJ9)$4Jw|@O#vTVp3R08PPhsm@bJCi(9FvN=%`4ZhAmv0qKa(DFXIs zao#=I_NV}Yde3|vgdLxI=qgSMcCdL+*xEsS%$Tb;9y2X`RBTGCwfc0GG2is{iQ8z^ zJWI>6XeS;2qTupZhoHY%mSzlGchnaMOEmE*3-y--J=f%amWr}n^?e^q>&d0E#6bG_cQ zo${~^Fmg90uLCu6ih8t{pz2kYbK3`A%jF0`@b43GNcK6k-RH6msGeTI( zIz{c~L^a`*JdsDa^69C~!N!wXanHq>J?=@T0}W7Qzp0JshT6-ETf3>zg=~q_f{R;R zrwOgFJ@t-K1C%_AWwSX$oKh<>`S^0 z5*&l>=I#q{<>hrb4#a-5b{JW8das`Yv%#aM#m?$ZbMl}AUUTqFhkDRx&KT?XV9HeD zaSMg}k%U>TM51%M{Sut$oVO-D7LzNOt-~^$)@*_rt%j0_XmlPHC$cvtC4I78^3*wv zeBK`?wqK1dO?r8V|vi?+Pl9~m6_|E3BFj2Z>rJ$RsMm_rP$!h8JWhz z*1}G=Q>bbpiQ>=Ha*l|oW_>@ipO-kadEK|bdpB;X;qH}g$@qTm+3toYcZtH`DC`xD zlA0o?F6CY06EeaG={{SB{VFK}2*GMQxo8SlL^ z63@nE9Nv|k`EJ}V`ey3o59I#MS#sBNDz`RdO8c@xR&FS-cNlY3nuu>`IV|F_8F%L> z(vD-ZU+N=cgg=-<=Cz5JLNQk;rbyx?X~Vk8918Kfdyup)vVTW}=;UN{^T87xgwkVH z1p;rW7ALIADR7QZCDplMS4_J>qA)Rgqh2#Qrx!f8pyX6!WMmX%z-OvPgdWvGEye?b z;bbH#s@fnV!g-2{NStkXL_%V_BpHXq$h;4-#J67x`M`@Kel8V?UWt^p7j(xOsljAu zR1T?s(xFXGNMU-RrDlu8#>>kBC_oNC1M&a{Pyn#N5@0Ey2rL7Z11o@)fD)h#-~bf> z52ylafI6T7XaZV*HlPFO0(yWxU;wNF3;`qHH-G>b14LjoU;>x|Bw!6-2ABhD0SkZ( ztmEV5Ee~ZOcZ_di>8lVR#sM_}p?lOhJ}D{8}QY{ycs_72bd><*UNB oNDQd{cZ#pB2H!?6j`**%VOQj(bB%RjDY8pn4~|2kR1dcO7cCVb3IG5A delta 1757 zcmX}tdpwhS9Ki9G*k%f|A;dJITte$HBT=fQxr9@Rj>O?~l}qlKlSD|XgwBLIiWIYT zGD*ZXm5y9`k<4Y$Hn-A}+;e`OQ|FKO>-BkkzrW{?=XqYQ=aJNPAtXSBE&`Pl!8&-- zYf<&uI)ni|J4(3QuCiczaP0BmZpq`X4JdYEV`7QH38^qD#xgR4t!85rSP?l@%w52k z-PcQ5YaK~27!-GZJ@J-QSY#LUTQx+lT{!hLcPr#}KdselcfG^7M|m^t-mziw+(KVa z==Cn&qRjE?mQ^h5#CeRC&IQx(c2OazAfq~PvEwkEt?4YlDjYf4DX#o5*LVO;?eag# zNu4P3)jGS?)^)d+)Tu^D>oBA;y?$8*iIa%~{NbLK9#gWhG1HNXk$%W!8u1R`3#l~R za1fi%?z@3jI72_=KtnE;s>h6Kdm_V(Pg}LiPOwJNb7@CyhqW|L%88q77Pmwj-wo@U zr>{(Fqp&c8ZtijBm5o~!bDmrpw!4t1X@Gy=L1w$u9V-*Y%!z37DguE-`P_@TNLp#< zR9F0$!8=&fQf6cL5ZL;5?0p@mKpcB%F|C*#aBq+|BwkW*T z@-9t9-bFe5)lHwi`DUhBlA!(2ys(VEC*Wf|v-$b_03J123k8%q;KIBQml7=@BZ5oU znQaAso#imK-zGfLC_pjrt(ALB>gBT~J1=V4t7@=0d&R{Imc;0MpAXL}lywZ(t$yhi z+UrS7an&vgL{mG6H_qMeO}(m1BX0LDcM;s{{ccJK;(LtaA2jbwMV+#0u{l6zr?n1h zWThV^6LIg>?4ABy&#I%!r9mrv*GO@rLnK3WwZ)9-6e>k-{pSdV-_UzXn=Mw&oTIgW zD71*~bk}_#q2ay%k<)88B+uyMRTT%$QztFrA_Ie+_;G7R{sZ&W`TUm~UCCMD+lH*i zW+xa$y+`NCGBK4;Cw!iqou<%hb+2&BH<;`89}8i)U9u%wq<6oOgnlC2KA3;&j;cMrKYA=-=+8wZ&wTbf z$t{?^fEJXXsJD2`R_9k3S)y8WUFUn(k{tpEE~N&2r?7BSIZu1|yrF*IE`6H(J&r}Y ze`c0P;y=c^*KY-n>z9_xs=uK{R1?FE)Qs^)_gyCSRFiZ3j1<~ybjSNkf49q=vVw81 zY?{J)RdBK?2IE(~#IXeWidZ+Hn~tAf@jGMLj`h5}V!OP!f+{-Z@Qv7gH_8JA&K4Ee zk0x&vpPD^T_C#>j^U8A3g{2F#StkDZm(a*Rcq1G5wYbnzxy*ElS=?!(o+klOA;Ms8 zbGlF>6-sQ+*7ZSkJy5^5wQr8j6a&@cXn!K?3F~9P!NC~ebLGjaZARL~ciR%MKFkn< zrh3sunfCK;)|wecSQ%$bwk1ORwcpZuQONLRqs zbPYjqf(zM&z?d&p3SMD3AP1}fiIj|A104xD3U=tUw zKnlu*?=2ypq>O`$!6Egngzqx+8HpSEY;%btJl9zcu~h&6KjgeogDjWkIY=C21&19D zvVkKS2T|a7^m8J^LEGVpHU7t$a6AM*{G11P$QE9W{9LV5|8aSMIz)z7`Rb589R2G5 kUB%VZfa>IzM%->4$Qgd=IYzqBH~17m4@!okL=Uq67Y|Mn)c^nh diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 9097bfaaa105ec22f23a71d333570f18899fe716..8f14c921978d54543adb4499085e3784e184e9bd 100644 GIT binary patch delta 6260 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 D(8HrG delta 6258 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 J^vv{`{tMZptP=nL From 13037d68edf824dcdb2f9efdebd3075800544fba Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 17 May 2025 10:35:49 +0200 Subject: [PATCH 86/91] Updated documentation --- docs/Reticulum Manual.epub | Bin 3547110 -> 3547120 bytes docs/Reticulum Manual.pdf | Bin 4174114 -> 4174124 bytes docs/manual/_sources/support.rst.txt | 3 +++ docs/manual/searchindex.js | 2 +- docs/manual/support.html | 3 +++ docs/source/support.rst | 3 +++ 6 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 0e216b16afd22bdacc2aa122d7b786884adffedf..82239c7cd8081d8e34fd6f9487bf678bc169ef1c 100644 GIT binary patch delta 3287 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 JCovG{{txFB9o+x` diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 8f14c921978d54543adb4499085e3784e184e9bd..57ea6e955dcbb285be6fdfabea95c657b5e1d4cb 100644 GIT binary patch delta 8913 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 CAFX5n diff --git a/docs/manual/_sources/support.rst.txt b/docs/manual/_sources/support.rst.txt index 3f0af03..254a61f 100644 --- a/docs/manual/_sources/support.rst.txt +++ b/docs/manual/_sources/support.rst.txt @@ -22,6 +22,9 @@ Donations are gratefully accepted via the following channels: Bitcoin: 3CPmacGm34qYvR6XWLVEJmi2aNe3PZqUuq + Liberapay: + https://ko-fi.com/markqvist + Ko-Fi: https://ko-fi.com/markqvist diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 7d4c889..52d9f40 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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 9], "should_quit": 0, "fals": [0, 5, 7], "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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": [0, 7], "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 10, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5, 10], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 10, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 10], "below": [2, 3, 5], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "shared_instance_typ": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "auto_compress": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "under": [7, 8, 10, 11], "omit": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 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, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "instance_nam": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "explicitli": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]]}, "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mode() (rns.link method)": [[7, "RNS.Link.get_mode"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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], "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, 11], "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, 7, 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, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 7, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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, 4, 9, 10], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 5, 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, 7, 9], "should_quit": 0, "fals": [0, 5, 7], "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, "5": [0, 2, 5, 7, 9, 10, 11], "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 5, 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, "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, 2, 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, 11], "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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 7], "assign": [0, 9, 10], "integ": [0, 7], "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 10, 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, 7, 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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 5, 9], "compress": [0, 7, 9, 11], "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, 5, 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, 2, 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, 5], "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, 11], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 9, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "illustr": [0, 5, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3, 9], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 5, 6, 7, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 5, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 5, 7, 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, 7, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "reboot": 2, "again": [2, 5, 9], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 5, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 5, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5, 10], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 10, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": [2, 9], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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, 5], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": [2, 9], "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 10], "below": [2, 3, 5], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 5, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": 2, "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7, 9], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": 3, "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, 4], "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": [3, 5], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "sx1280": 3, "dual": 3, "io": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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, 5, 9], "cheap": [3, 5, 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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "resolv": [4, 5, 10], "issu": [4, 5, 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], "custom": [4, 7, 9, 11], "android": [4, 5, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": [4, 7], "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "discoveri": [5, 7, 9, 10], "router": [5, 10], "sort": [5, 9, 10], "present": 5, "cabl": [5, 6], "intermediari": [5, 7, 9], "desktop": 5, "mobil": [5, 9], "subset": 5, "block": 5, "seen": [5, 9], "isp": 5, "off": [5, 9, 10, 11], "communica": 5, "tion": 5, "usabl": [5, 9], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "id": [5, 7, 9, 10], "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, "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, "primarili": 5, "event": 5, "backend": [5, 9], "thousand": [5, 9], "interchang": 5, "cross": 5, "backboneinterfac": 5, "socket": [5, 10, 11], "ipv4": 5, "gracefulli": 5, "intermitt": 5, "loss": [5, 9], "listen_on": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "4251": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "listen_ip": 5, "listen_port": 5, "tunnel": [5, 9, 11], "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "toler": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": [5, 9], "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], "15": 5, "16": [5, 9, 10], "frequent": 5, "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], "simplest": [5, 9], "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": [5, 11], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9], "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, "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, "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": [5, 7], "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], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "natur": 5, "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "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, 11], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "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], "require_shared_inst": 7, "shared_instance_typ": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9], "constant": 7, "truncat": [7, 9, 10], "target_hash": 7, "from_identity_hash": 7, "bool": 7, "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 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, "ciphertext": 7, "token": [7, 9, 11], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "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, "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, "auto_compress": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "under": [7, 8, 10, 11], "omit": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 7, "get_mod": 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, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "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, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 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, "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, "announce_packet_hash": 7, "receive_path_respons": 7, "live": 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, "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, "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 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, "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, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "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, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "consider": 9, "safe": 9, "pitfal": 9, "authorit": 9, "claim": 9, "compromis": 9, "weaken": 9, "hkdf": 9, "fernet": 9, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "trivial": [9, 11], "consequ": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "ie": 10, "breviti": 10, "share_inst": 10, "instance_nam": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "explicitli": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "interface_en": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 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, "autoconfigur": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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, "liberapai": 8}, "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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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, "", "current_ratchet_id"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mode"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, 3], "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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, 5, 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, 5], "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "opencom": 3, "xl": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "t114": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "backbon": 5, "listen": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "i2p": 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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "OpenCom XL": [[3, "opencom-xl"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "LilyGO T-Echo": [[3, "lilygo-t-echo"]], "Heltec T114": [[3, "heltec-t114"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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"]], "Backbone Interface": [[5, "backbone-interface"]], "Listeners": [[5, "listeners"]], "Connecting Remotes": [[5, "connecting-remotes"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "I2P Interface": [[5, "i2p-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"]], "API Reference": [[7, "api-reference"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/manual/support.html b/docs/manual/support.html index fd10980..89db5bd 100644 --- a/docs/manual/support.html +++ b/docs/manual/support.html @@ -237,6 +237,9 @@ Ethereum: Bitcoin: 3CPmacGm34qYvR6XWLVEJmi2aNe3PZqUuq +Liberapay: +https://ko-fi.com/markqvist + Ko-Fi: https://ko-fi.com/markqvist
    diff --git a/docs/source/support.rst b/docs/source/support.rst index 3f0af03..254a61f 100644 --- a/docs/source/support.rst +++ b/docs/source/support.rst @@ -22,6 +22,9 @@ Donations are gratefully accepted via the following channels: Bitcoin: 3CPmacGm34qYvR6XWLVEJmi2aNe3PZqUuq + Liberapay: + https://ko-fi.com/markqvist + Ko-Fi: https://ko-fi.com/markqvist From d795fbeaf34c1517ea7584fed30f5df4dc780ded Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 17 May 2025 10:37:11 +0200 Subject: [PATCH 87/91] Updated documentation --- docs/Reticulum Manual.epub | Bin 3547120 -> 3547125 bytes docs/Reticulum Manual.pdf | Bin 4174124 -> 4174137 bytes docs/manual/_sources/support.rst.txt | 2 +- docs/manual/support.html | 2 +- docs/source/support.rst | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 82239c7cd8081d8e34fd6f9487bf678bc169ef1c..fccd712354aa1a7ce9d304ef80ed197091fc23c0 100644 GIT binary patch delta 3370 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

    TW(E0D-{Q#A65l3Fqi#!_OgP~}aQ-?35Ntx$ z{ffZy(wvpWaS>QSMAcB*j69oNtS{^zK3zg2ZXHe?_vjpgN5J#d_y~Q&j8U{Fgu|z@ zkAUeGXmRp+)aRv_I%>H)q6s7>PrE+I-$0BehWAbW2I7NBy;s!*@{wa!<3AWsh#(S^ z8=8jY+$sqnP?Lh`?wpKQnAwf@GQuoIYvf{;J zawG32;mZ|phByepv86Gq5Bq}dcbe7u)bB3+H<^iwslxa?wsv(}r(KhSTQdG>De9hN zVq>ghvlQamEVBrlRgZUI(+$P*D%Yc?r+vOgZEiPIrWsDY_tseBD{apmBw1SG zW(`w%9E}}xHo8aReev4ZKEryqGRM1sX$p}pL5@Es`-Cbp*ASX=<(w7!b_2bN0?jF1gBu$g`RPh@Nl7-f}Efx5_#9=2sE7?Pe zs2WA=a|eT!(eAefUg??;U6EH& zpS_dYWZwLz;*M^vZPVxE(88q5_qmE0-y|lPIdaFKzR<9o;!~qrHM>cKgQSbu%eCAY z+8h6N!ZcN)(4;z!oIS^##z*t1Kof7uz+Q4>oD6AeTBq}a6m|KvqOTV#awi!%jU;OQd29rBhbZghpCH(;r=6KpS*)&&1-oh#hN!z06RY;6i$@>D1azI&qI^{=+0Xq z;VZ+N>FoRsP!n6Xb3g32M~`-IZbR^R4Y<$*t*~uYaLO8uC4@M4J+k^lUNf(G@vh%*fi%k^ zC|SjDWSsX=sTND?@D7g=i&LfF4{+}EtJue=?N3_RA2Q}3bt+562i+KK2Y9yY+Iuj| z08^}7sMLek8CP){J(oq5fA9$ab4MT>2)_SS0@M1uG~jtb^W>oErcWLycZUnU^|b@5 z@iW{+f@pZ6O$dpL0&~!Tc=Y*j;Q4z;j9{((cH0B&>j@Yps~*Kz zZZ25a4`8pbnDd6&39~32l!zeaR!pj>(dC6vzR-sLgkx2UB}}*)l)3NLh`sW0;@FaE z$nLi?x(v|HH%-5C++=3)T4Npxs-M4Gi`y1B!_1IIbj27=J4^ysRa-2r`MgK{x@cdn zX^H#Sv(DUVvG!7iy$t=JF~2QS)QwlSL|)!HNfnWZzAl8IcZpl}GJ-CO(AqN(h5PqS z=t@qs<_6U}G59ebY0J8A$=bfVMTadX8)7!6_UM_g(44AzBj_Esl(3A$KKOHw=~`L& zyM7@fXH99^o6J+CHg!LS+p(|H{5iii{5ZFm2-18lU~RFSj%_i3#W_FrzKtqhsdL-f z3-u(nXP$DjX~A81drb-=|J-&h_=!4m>LFX4tU?yiYMgX( z1kVgPfAF02(ly&uV>`U(T1)#bIzy+z^0fTOkyU7oI?BAr4?bSbN+0siig!K8fNpRPQ-{{BC;G0sfeeq$Yv(#BuH zUqo6m&7q@>FBnnQ#IsDY(`nDh^c-COfrj{?dGxEu^uV`l*B1?7#SwKycjP^BA4c6w zc8R@3cAGzp21};2eeIj!_ig+j{l_@}4fRErcHOjG=Xtqs>$|>f(Q<|{#FyLE_*U}r zP0fd2%A~xG7(#SO-ytU(Ou+f(0$TSpw$jNZ=7cf^JrsmdNA=rbHDX7Z@QYd>bl>2r z8c*Y{O*M=oNcNxfKs5I>#}ipy%X>sy=kldV%Ilio`ZB{JZuc#V*9`vv@lh7sxk)OG%;t%J+XQ#5-ARiu zteDYq!-WY|Wq(3Tm(`*zqFpM9*Qn^s4x0OjRP;yUsv5Y&=9OnhN3iwHYt>;hI!7DSw5b`uPi--cYgQv zy3}g74;i6@?oLt4keJ$?+(b$4F<&ElC3ykmoZyn78t8fiUm1jHXHQHi9rL<>$>W*Q zV=aFx@B1as2Wt`==rSCTa&W73uF+Wh!LN?BtlB(9+WX!5c!e0VS(<0yJc;QOA+Nk& z{(Gp)dv!!LHZ|YN?r(IPAm;;;37WJ>Lc4PKBaM}eha(3AUa^%)#0mqImTmhF&wW4@rKaBg>pPP@^!%0A|GmNA$(~1BEzu-LLF!gUFV(h0i4^ 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Ǡ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 Date: Sat, 17 May 2025 10:39:30 +0200 Subject: [PATCH 88/91] Updated readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8941292..719e380 100755 --- a/README.md +++ b/README.md @@ -305,6 +305,7 @@ You can help support the continued development of open, free and private communi ``` 0xae89F3B94fC4AD6563F0864a55F9a697a90261ff ``` +- Liberapay: https://liberapay.com/Reticulum/ - Ko-Fi: https://ko-fi.com/markqvist ## Cryptographic Primitives From 51e3983bf84df69e5531213dc80f84adcae4dd0f Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 17 May 2025 10:39:52 +0200 Subject: [PATCH 89/91] Updated readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 719e380..a6f0aa1 100755 --- a/README.md +++ b/README.md @@ -306,6 +306,7 @@ You can help support the continued development of open, free and private communi 0xae89F3B94fC4AD6563F0864a55F9a697a90261ff ``` - Liberapay: https://liberapay.com/Reticulum/ + - Ko-Fi: https://ko-fi.com/markqvist ## Cryptographic Primitives From 045cb662ef45ad4b070d2bb6e3067ecc0ffc9b3b Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Mon, 26 May 2025 19:04:30 +0200 Subject: [PATCH 90/91] Removed legacy AES-128 handlers --- RNS/Identity.py | 33 ++------------------------------- RNS/Link.py | 2 +- tests/link.py | 13 ++++--------- 3 files changed, 7 insertions(+), 41 deletions(-) diff --git a/RNS/Identity.py b/RNS/Identity.py index 81e5c50..7fb2be5 100644 --- a/RNS/Identity.py +++ b/RNS/Identity.py @@ -694,7 +694,6 @@ class Identity: else: raise KeyError("Encryption failed because identity does not hold a public key") - # Post 0.9.6 decryption will only accept AES-256 def __decrypt(self, shared_key, ciphertext): derived_key = RNS.Cryptography.hkdf( length=Identity.DERIVED_KEY_LENGTH, @@ -706,34 +705,6 @@ class Identity: plaintext = token.decrypt(ciphertext) return plaintext - # This handles decryption during migration to AES-256 where - # older instances may still use AES-128. If decryption fails - # initially, AES-128 will be attempted as a fallback mode. - # This handler will be removed in RNS 0.9.6. - def __migration_decrypt(self, shared_key, ciphertext): - try: - derived_key = RNS.Cryptography.hkdf( - length=Identity.DERIVED_KEY_LENGTH, - derive_from=shared_key, - salt=self.get_salt(), - context=self.get_context()) - - token = Token(derived_key) - plaintext = token.decrypt(ciphertext) - - except Exception as e: - # RNS.log("Decryption failed, attempting legacy mode fallback", RNS.LOG_DEBUG) - derived_key = RNS.Cryptography.hkdf( - length=Identity.DERIVED_KEY_LENGTH_LEGACY, - derive_from=shared_key, - salt=self.get_salt(), - context=self.get_context()) - - token = Token(derived_key) - plaintext = token.decrypt(ciphertext) - - return plaintext - def decrypt(self, ciphertext_token, ratchets=None, enforce_ratchets=False, ratchet_id_receiver=None): """ Decrypts information for the identity. @@ -757,7 +728,7 @@ class Identity: ratchet_prv = X25519PrivateKey.from_private_bytes(ratchet) ratchet_id = Identity._get_ratchet_id(ratchet_prv.public_key().public_bytes()) shared_key = ratchet_prv.exchange(peer_pub) - plaintext = self.__migration_decrypt(shared_key, ciphertext) + plaintext = self.__decrypt(shared_key, ciphertext) if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = ratchet_id @@ -774,7 +745,7 @@ class Identity: if plaintext == None: shared_key = self.prv.exchange(peer_pub) - plaintext = self.__migration_decrypt(shared_key, ciphertext) + plaintext = self.__decrypt(shared_key, ciphertext) if ratchet_id_receiver: ratchet_id_receiver.latest_ratchet_id = None diff --git a/RNS/Link.py b/RNS/Link.py index 74d4416..f65ce12 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -130,7 +130,7 @@ class Link: MODE_PQ_RESERVED_2 = 0x05 MODE_PQ_RESERVED_3 = 0x06 MODE_PQ_RESERVED_4 = 0x07 - ENABLED_MODES = [MODE_AES128_CBC, MODE_AES256_CBC] + ENABLED_MODES = [MODE_AES256_CBC] MODE_DEFAULT = MODE_AES256_CBC MODE_DESCRIPTIONS = {MODE_AES128_CBC: "AES_128_CBC", MODE_AES256_CBC: "AES_256_CBC", diff --git a/tests/link.py b/tests/link.py index 1d966c6..9ba31bc 100644 --- a/tests/link.py +++ b/tests/link.py @@ -121,16 +121,11 @@ class TestLink(unittest.TestCase): time.sleep(LINK_UP_WAIT) self.assertEqual(l1.status, RNS.Link.CLOSED) + exc_triggered = False print("Testing AES_128_CBC mode link establishment...") - l2 = RNS.Link(dest, mode=RNS.Link.MODE_AES128_CBC) - time.sleep(LINK_UP_WAIT) - self.assertEqual(l2.status, RNS.Link.ACTIVE) - self.assertEqual(l2.mode, RNS.Link.MODE_AES128_CBC) - self.assertEqual(len(l2.derived_key), 32) - - l2.teardown() - time.sleep(LINK_UP_WAIT) - self.assertEqual(l2.status, RNS.Link.CLOSED) + try: l2 = RNS.Link(dest, mode=RNS.Link.MODE_AES128_CBC) + except TypeError as e: exc_triggered = True + self.assertEqual(exc_triggered, True) print("Testing AES_256_CBC mode link establishment...") l3 = RNS.Link(dest, mode=RNS.Link.MODE_AES256_CBC) From 799bcfc7aae1d6f41a86e78a60208c89f7722553 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Mon, 26 May 2025 19:08:03 +0200 Subject: [PATCH 91/91] Updated version --- RNS/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RNS/_version.py b/RNS/_version.py index 50533e3..f5b7730 100644 --- a/RNS/_version.py +++ b/RNS/_version.py @@ -1 +1 @@ -__version__ = "0.9.6" +__version__ = "0.9.7"