From 75f353d7e277981dced4273cb2b498def94dc8e9 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 21 Sep 2023 19:12:34 +0200 Subject: [PATCH] Updated documentation --- docs/Reticulum Manual.epub | Bin 2489737 -> 2490270 bytes docs/Reticulum Manual.pdf | Bin 2400198 -> 2401618 bytes docs/manual/searchindex.js | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index c97aa2ebe409ec84a71de11109b6533aea40f9dc..759790d262bc18bc93628d55b48ca80971637e4d 100644 GIT binary patch delta 12477 zcmZ{~byOTd*Y1lG2KT`UFt`VI2<{Nv3GObz26rbg!QF$qyL)igU_pcXA?IE1x%WHk z-tP6Ar*==(-ql^b>W^Me#1jNM>kR^3O$rSzOX1XHhK^(Bf`fv>!h(WAhJu1Jaj$=s9X(IEq@$Reb-qz{TgfYVnlN|_u_^IrX#v8TQDnENJR&!H52TH87xf%yA=LhcZ~^a zgsHiR>p};N*&&s8^*C!l+E0ACjK&TjvdxNA z%#{n%QoOA=n&_VT-RC6rT4&8oY_VN?`e2mv(Y4TRp?I^R=uBMorm5qIUsg?mBifr# zS3V2y2nYuEx51NeNYRKf)qiU4sUr$u*|rsmI8eE8@L-NT(!9 zRk6+`{77VoA3SBxjhhi#8lk_)YTv>}lZ3V@cKsw^^jSk=@dBwUIEtD1%a`<=9ejEGoqG$~*5&+*{3Zrl$~J(_I7#UyA>yp)G7gRvA+P0q3p#?QWL7a;AMLIJ7MyN$}E} z>&>;>n9t(7Z(oH{82M@0AV#mWQXA#y8!0R_`T0C72iUXEOu$I@_qG1tO5oSimUfK`J> zF!*{qTy^f{E?FLvJpbX>6`K2WJMF|816$M4gz z&2Se!WFMyS*6%HPO1(-rZnj%-Ubi7Cdj3IzUYm6cYHdrr2ZZuhfjdQduyv>2->f)! zb+DOXAoDkqzDfI=R;=7{Te`RRuy+@*-j1uUo~zHUs{$Q%uSRDFtNY7#SBM9p2dXn#j+klRwdors^ccp!h9m{F%%^{i1a)Xy_w_x_PbhWcR^<8yd<4L>~%!VmnK0I7j&YZFzBeEOIS`c1u6iY0&SlCwfrz+X` zAyF%nQjiuE)AD%EeQRxKL}r_1dIjZglu6Z4aJCUXAEG}%fh9tb@L)y(-Tqv>i|)Yu z>inny9xs>pJ9=fX^S0xjQ1E-Er@ibie&*!Fgu;{g^kihYq61gDoBd@btlv?{D8z4f zf@hr4t7-F8kx$!zwEb_eC$A=ZKl+7JE zz~(fD`b;^wW<-8Zi+}P<(?+$M%B_W7i1TAFbrdj2^ zoprCIzl1O(5dOMW$2+Zfswgwa;;OMlgT06YKjgF411M1{80{)VfI1)~SR6m?{a?Px zR-GqXyP7Nq9sC1G2A2l=Rmb={ss-Bcwdjm;ShxUf09`Ldr$)#y;8Fs&RJNZ284|(Q zZ&;@mA>qSW72GNcXYkv2W1=5+QbtSmd-C+K$V z2)J+4tt$6qO>!g7AtB{3)=~aou==2|mNlL0q2z_*g2J;?r7AQm)BazbmJ{}%KsAjb znw8%|G)JgcK(9_<@)DJwbe9#W zS6Y}rqg770(j`S0CVdY$v9y{=`fH1}${>>>1exr>#Ps(n3WDMfBW;}SJ=4O%3R7s# zoewBNIIO$kCC2Ww;UrR*5LhuIcZMlnilv$G%5)0MDBR;9qp7&3fM79Zd^ z@ABGxCGSj(dM0v05e`~7sy{$ zPCg7_HHIZ`{DrkJ&BV?J|54+3h9!mstWS73~eU)v89HwAEka)fXpDE zQ`{_iVVj!ypy3R}DN{x}HOh`KUwFWGEPyd8D_T)|VRFa@zA)n_Gx-txI!YM?tcae0 z|6W)r+Ldq{JlP24O_v}y%`ehOyQ~9LFfY~{LsY=>T7W^Gm9qx5Gvjqv09O!hiAvRp z2AL(+vkEoRy&injDG(bb1aRo7_q*X@#u&FZ#3dS`><}fxcs#=KupZOJ@JG@N>3r5$ zb+xq#>dbDyqdNKm@!9}eao^yz0ii9P`Ot-W9UHro3j2@JA{3&&6PSl;y;HTv@tASc zhGj4v=+;cSP*WZ;gf7~Z1oC1OjaUoot4zV1oM^&C`ZfSs?QA>qao5Y~C~blCJSr85 z+QP`(Fzzd0j4&`g+H_1F3o(ukdJq8T7=yvlk=p^b@*+}rHl1zlORk)-=b&3F*=V)=0{Ek6t%fvctSral;@E?6&}n(vfm5zIa}Ls2v~Bk>5W6eGVvI`M>Ka-T znh*)RD_h>mgPI6Jp&6|}+2+0cf$dYCQDrVfbr>%KMJtmDc}`Uq9mPS8q3m>go{VZ z)@Vwp&UDmd=7RueDg!3^D@rC>k?g9>CXKY-w4*slot*Lf|Krk~ggm7&#UE$1923C}6cgLp#4S>??vIuuZ6vt*};Oznp(>w|QrY0F`!r0jLF1ZcnF?>HHs5I8)04so#1d3Gg*wkgY_8v$JRBLUnG3ei zYhYBZt@=aJIYo7X`}!2Y!}ii=E2li`8caBt){~IVeU-~2X>ebBG zcGS1GF5ov>g9FrGQ=_ubt6q(ou&q|TEqM!$F#py7)g?uPp6UYc508M0oY-0Y5uU;b zRD+0`2Cob(+@3wyrT)nY(!iY9uE%wwTZO_WZp|ouNsju@UJs4~4dLhpsMLM0t~NX>L?j3AZJJLq2WY~%VsAe%F*8Rpj@UJd1LqOXPQ3S zhFE2Z00gcNDVDl&!Hl)-CI+x=eMC6O2C_5I3}Kc)2#^8-kAN0KxLoY{%S%U>)A4Z9 zk%4!$=$;w-yu7777Sq!ag|Lm3YdwhsOTxBu{FmHnvE0|WpoW1b+jC2B(v`6a7FQCg zqor70WxA5$BFX13vwUnxM9J}i7IdXZ!TY0mRDbjC;`6&jM$KH;)}6fAHUeZxGswv^ zL8h4gCw|rGzb>#q$3oloq^}6D)%IoIveT4-tk$7M*MTHyuqc@1sYw`_Q`UthOz1mg zQN{*2RKe7T>86^8n@Mrt=J7kE9Ym%@`F&Bb5~AQ%F=(gjJtc86HX_#Js5F^cjjcAmVbiPt(NPU zW;MRCVZR$ha&#FbWep&FTD46Nx%4FalXj#^{K-ZEXmTJy#$Xt;k5Sp zcpt)}@%s1JfJMn5yr~ISqylw?C=t2qOEH-}d6@S+Xa@_CH60#cq>w>xo)mNNk*Lb# zM;80?EK^uo9dl?JTu>S7Dv^y0VcFSdjaHeHkc--)%OklqfJ%R4azce)Hk!fj(TH;9 zS`6c?LCyBGpo{Q6a5Qiy$Lkh@N>iYX4cHeUVNI?Otyd&Mu-!uMQBoo(TVVbtQxxuF zBN_+54^?%Tx>*tJsyU5&y`Z9=H7sW!Hl|KK?3I@V%}+pRz|A05zZYdgE_#|awE8$c zn}>HGLU*{9K1DPnJ|@o-XNz{UW6%F;XtRU&HxvR4Yc!oR*fV&s&<&Ue1A@73VR`bF zBN627Amty#>C+WB=1r5-sao`d3$edbo$E}mVr*FPoWar;>)|vV4ZCXO(X?i13Dsor zi>H%UP6OhI=tiNf-VC4i24XeK!Nn0Jw4=^?)^c5O!CkwoM>XhtdE3HO97Rmub%3Zh z8l2<(oxE-V&oP2Mf%|z{3$lfuMYj}zhP(K$ad_)%{@~An6UV|#Bgu^Fz*Lc@SxJu` znWv%6x3Ol+RQz!>F9}QoR=p$K&!mwHqsfJb<%8^~hdY zo!rcT3uEdm^Le@UTjiowsK&kWFf0sWqti<$5XW$^lb}o=t$q+4+hi1TBGJh@Y4?E4 z*M+ZX+qy;1B@L)3*Y+ge9^Jg*mb8618Q61joLvWbKNxVG;wT*Jz$f9tys=6-{uG*|q$yST_Tpq>)Y2}m{_k_b)ljZ9=={k_knWNN)2!^=bA z%b_;`E=+Fp$ZN2YKn|f*xo56|H9`v+WiU`;&1;Ys6~VX^BSTcorV z)s{-o{<4}-#VX1kc0kH2@B>-GOXE{pzRIW$I5tch#mY*l$}BL7Z+^F*F~w(&K&$xi zj;V!Iqo{yZn$Bnk&pT3HaPXoTy)HHcH53~Ybk$;D#aYT1M!g4JS3_$#K^O#0iwh)9 z`i*Zl&RyqYtK9dAKnIwdGygMD!Ztyjy0VBtwFy8&WkxYw&(wfz`OC3HzP2m`66B{1 zRtxytW=o}=fUQ$zleWmkV`0^Dh-?ySK)D8+*jzUI-S)XT5`PP#+OB9rl*!~zx+suO z1yHJFk|O3qwy<}tt&GPno1pJ7D5D;^y#_?v)h9)1u=K>A2OTGdHmm9W4fmHvZh$1P zVO2m|QR;O3%7e$^bgUPnth2I7FLj0jlMxOcbAD=Tzf)V$U{ImNvx}nuDk%syMi{u^ z&Egk26TY3=AU1b8emJH@#r_@bP5jO2)6f1ETcEU9_X4qoP7%By(O_cWix-e?$lm1Z z5mfRlar_W!AChx6m&ummsMPgd1|_nZQf=r=4>7g_Q>^{!6IKrTk7`XaIi%5Ja0OSe zNG4hO;$(`F(8?3uBiq1(MdjbOPZKm#PjlzDh!tn`^XZWrdjpoYUpZbGg*u9*2Q2hH zvy5ZTvH1ac(Hj)6+8WRQGt?5Z8%Nx(q8Iz36cpqz>9 zmQR0Y;%?u0Jqff z0?_)NB1v!PhV<~Ja`N_V}w;mjcdO^qP+xUHmPAjKc1ed;T$!@Ze z=7%AxC$<_7V`^#@Ec5ippyE8!3`^5N5tZ_CVPnzhnH1_^T|Oz@zZ9GO4EKxJ95)RT zCY)H=;y5X7bBzj+7n~_cMa4skjoaMD#LPm%Y~tjzt&bg}v`er=s;>8vDQ;W-#UDJm zLhAp31R@e_=@nxxbW0310|PxJ?s}fOc4LTbgL-`rHyjf~2i10=US7ft@+)LD#+>ZJL}|*)aHt zP=9edPm!rz@Mmt^LR=60B2Th=0Q>@VzCHa+BcJQ19BPmfXe zeLhq%y6k7h7b9T|kF!y-A*u=HI3VKsX4!KNd;EUuf?L zgE_lDQOv9cF-|pjP1gMq*D!OE&{aV)XNR^RmUi!JhTHu58v$wfcenmTVQloF2oM1P z_Fa4YK>nc+1m+@Gr)lDF;QaJ5wD=lX_0mw^u!PZk4?ZBK%=<9%$;KdSh@(bWTwzmpT8_c%h^A*8XA(vh=Dx?h1@gl*k zf*7=1Udc_}OH;hNKurrbognFBWC|Actq{9xw`1#6$+5%fx^^ z6K6Y;pR$Y;QP$PWTMsy9Hql>aX7c&T88cD)n5V%^ncb3lsq;yK;jaDMiot1}s-CCr zXgV9^H<&yvy0|m)F{mawG)P7%CjZruFxb?IR&Q#r{R^B+z&)ia;!gu^!dt02X^B3S zE}EASX|&MwRKjS4gfurA*xz@pNk`pelU}~ODRs+6SkcseaMX5d=w74zOglEj;stkN zKKNnN&H4hq<)ANr@hCElA6~M-o>JQLQd*d@CR5(%<+7F`U&~0#=0a`XPOJ6CsHHNblG;6 zC1)jmBwmQI*^T@no4 zBVj0ClJ1zd@_n7pewxq=UY?Wjm+?BO0jJt1cZY9mRcRzJBIqb(I@0vBRN;qPD z-MOjnRWc>snfTz{ysPFyx@t@lm26$J>riQLd<=J)mq5^h_J>Wlr@nNd)r-J?HFkal zh0dqCZnXSV#C?6c_B<#ZuwTp3q5*!K_mb%Q7?b39rOx28M|!M~zrQ?bzQDqTBShlX z-Bx3ywLSx7K5Z``wbKb-OLX$jO1G@Pv%uC<#+ zzJF$X{W|+CiHJsT3y#019*xbc!V9UuIBHRRa5*7lFgi%VgW0 zQDHDs21wLLza>~5Ez%_fpiB3PQ$AMwRAT&yjzyR0WP?<#CAJ;KlwVrPBi*H5vru>=O7tt=b@MuuDlG~@5}G4V#9W)US-jNp-HP;N6y?a}#{ zhfBX*s3y_Z^`H0@>**AyS@fH$8M0wB#ya+_z(kQD}4%$_Y>DS`^` zW&#BNbU#%7f{Pb9LLCqoll$nf2hgG~wdEijHefwbDk|eYit`1thl8Q)?hvPFTn^}7;p{R{3<-&QPQ zND1VMC*oFdh3w?@7w_?va!xXRi)~g6sALbKT}~Ckf%C=6Go+g7C0l|Ld17a_<9c$c z7{y4rn>b0SR zXe7Sdtqs*#ukZ+EkeBmFZLIIvxTuUpdl1+%g&ll7$|SS?RPlWZlCUPzt^4EVkNZa# zmtby9@&_mmA>~7)?w;6~R<{hhD?c&?VBlA@rCBIAfN zZxw=m_!Z@<4+mCb&O@Qm03J~x5$g1Q3md5jywtVs9U1h9G$A2gmx z_okpXf_%cL3tkF+ygr4!Wqew#D`4V51yvsV$A0UXU4_3450rnJoMr}D2sTLGd1$=`F;7X7Hx3mV9_4EDCRGBfGdL%A${Ge&%=(a#BF6VH_} zf^=cv^%2G&JN!K*L~x%uqp4?m=Ex9(3^>kY!3!kUu)@H*^U>8}A3~Rm)T1g?-D94I z#pWZfA#4p1nb(c1^_cufnl7<6{?jWMeizjl zk)tn16+T;q1m-OoZLojDuG=eK@6gIB6_ee-p38ra9lo-Ecy?q>ee`P*CMmC8OiDVV zIz$cai#We?uM`5)x^4uGIJ4DU3}&qzkiyybV!Quo`Z^lqGv#d8!RQ_PMwLDBwbWtP zKfS#4m%J3$?gdptd1=gjE-ZF@rgvUMeSx3x^~E|XxxM%l3eI$0PnEh?ZZF~xDJMre zn3CW&m-;QCyltwE*=v%ALR3$`YqU6N-aO%&qA22u0*EJ%X5(%2cJ0B3CV*NCf297o zKZ8@Vs%|FOMKZ2)kx*pHuROw}^9zDh>0UWw{P!*lXmwZJLd*4!f zn-6%YL0aZYRJRbrpKa@aXZvi}yY;gmU!VOjJf_Th^T}@|4j6esIoI2_t~%2Dm;7Zy zNH81rSp+rie}g;eDRyzY#g1I;-M+;YtLnDr*LB}NdnRg(9PksZiQryT=8zu)z$dZA&Ooqjz1utmF0yU$oS zx)#U<9L6g$zoyf-%)GDFzMo*!#XM_bJmZx~)apXz$Kd&VYtNXa%eWz5+zv9ehrWA4 z;94AejGEHL^n!)FEkPZb!5hhD7!qgy#I`+(dAwK+i^JbH6Pdr?J6&ET9Q5evxG!*1 zhTYGuQTMh%J;N?W1y+9m!^Z$@UsH=uK$dlmZy4DFGH+3AZ%O1+-n(EEr*wicMM_lN z6QxHT5zn_2ENzmCIIu1Hf*o`V3_=`{zmh;T&2U?Dms87T{xlf&nS17qa0fgEzY{9G zFk!NSd9#UWk~w3nnBZhKEi@;`-QdxPq5F!*mU$UVNjtpKonZxr+0JARQ8Xh*YF66V zj#~|9+^ev%`mtVslO{>QVN6W2CoQRc%%LRoiAr&ztwGf}{0qh!Tw99=p{onhm*xe- zJ0=v6A4wBZC=za;#(~V+EivW;nyYaYqNlmkhw;~*?M$rIm6Q8s*}!!PKiul(o& z1u++A#$kJo-zHGOKUkR;+2Y`NjJx!7Pu8m9M)kUwja}{zs!-*xOZaDcm+Ze7?g*2O zY)Emtlk$}N=PU=d06M1!W0+DyU@rT0pKnk*&c@7^BC*sO?=KUD*h>Py%#73D>@KHk z!aZi}Byy7bJ-{ZT-1}eL(*G1{{u;ww-70 z{jd)rxf4z()N#jZt+x%dpqL8u7nHFhhb(+2gDf}lWiRuawc?jJSPWS4e)1CB%(OkO zu}*CyOCpmJ|DkY^A&j*yP!7|#pJ_rP1CSChHjdMMG~ApPSGc?=p=4N;%)_3(fXY(#|ul8YcRL;hJ7G~zyDX*5?6g(WRR^B7%`+u}m%}oMR z)22-U{N}EIWKxu+9TgYreynz8J~ql*msAy$*ELsyb1FyM{dts{(1Nr$H^cK55Mw?H zH(G{)KLZ+ku<1~KZtIYq+ULeFHQ~Yt%I#LX+K(laRZJzCe-s-XUg$NF(P0al3MDlz zjq@ohEXkf%OV|GuWX~6kvq?Tcu2O3WPg^n9%6-3{k;HV^A~$D?zFhh0ex}ZgsO2yO zy?IaoHf*K(E}K_qwrvw-f^A1T@N<*MqYdqzaoV_SWTPMGyjTadC);HNbpvlkUo2Y3 z^e2RQqsvOnQCPc-eyr?URPHbME!wNj7lrDr4g&@Zi8f^M1UJKDtd?lxkBUd3HiD@$ zO?8DA9xF!Wx*s%xp&EGc2L3Jz(t;!mWqj7{z&BF)n^(_9u(MnJ{DHkzBASwY4z%pd zpO&yHP=DJ@%X2$@U|Lm?CaRFkjS>z@Yu_$+xNM3MTWD>8O*Y91bq8H4+0$L#h}Vl( zO?AxfSF0SPGwxkC%2p&3i;mFY+b+qhet!IWdwR4SMwS)^zra7vdogufdnsQ$fn$}9H_OiCuwtdEaLab%B{}37@nUF_uk1@~DncL)- z^kZg*^zm>vv$Kcp+x(zfI`cOinn7T3bRxSuF-()hb^z%^HOwlQXOXK>u zv^ScW#`HuY`%)RU93%f^dm3=tt+}T-()WVGrQ3%$UfNQICw|Cn;>c>&N&9|dArTzG zM;&&=EM_Yb(1?tk>)B;<6UBCHcokU3?)+xyjzmI5p=L6Ru%EZP6ECs6 zMF%(dITu%Ioq0mF-w>Q{2dDirso5bpX^8N&OKl81$duu?5gCIH1 zA6iuOP_mOxUU5EBDX|4#i?Y#w#Lm&N=$;DSE>uP|m@X#{W*qjpsMvsio%C`qPHoS- z05}d-P+?bAGSXo^CvM;rtpQ%kra(IxF8_!+(WQIHloM$Umui-`=cm(-NVitx7S6qy z+TM!r@;@G0bM|>{{77m;lpdA8|1cyfIkjK#k)iBRjLCYBUC>vWhNO=~f9qi=Kg3}2 zrPJ!0p#()NiJm+~u}dZDS(s^h+I2UXt$s(ZTdbHbz0Pz{IT zW+(Lt2AXRoyDd;OP#*}$J#7CiWa-zE-~Mu6yKAux&<&i4*L;Kh ze>)b#g8QJ~fq4h^9k_Sk-$8f>@tqIvAiV>42l*Y8cTnF!dk6g;jCU~K!FmV#9h`S? z-@$ta{~h2v1n&^OL-Y>uJ0$OrzC-p7`8yxqp=b*3qugl!=W{gmr;^0^*ZBFJ>H_t> z5tfxl)s&S7Di!^ARb~%VjE?kw9NmzID-i4ZbqK>Xh?u|y9tz6U!Gzh~#8X)g8U_dU zzs5|6(fi-fBM{$f5XryZ8UMmGNXs>d^k2CA9tstwLqS=X*<0D0ntA@mP5D1_aB9Y| zg7V;~pr9%sP*A{k%jbWOf&jmwr1T;}h{6pBn15YHPB3ID&T7F5jSmcF~r zDJ1{n*!+J6TCYPv{r^^kO#jOx06Dz@k^M`HcKaUMLKtrUa}%=vLSBf)Er?X-Ulow! z828(|#a$Kv1%>+G67O0N5UdUj<>Kb(=-}-7|9xjRox`uyVo*@T@6*BlA44l4o3|he zvVZyiZ{O*E`xOMlLCEhwg#V@}a0eoWi5YIvMKtA4sBw!5UAeQ%_&oEq0kcxl0O9J`(Pj&Ag+z%ir7)51>{{u)2w%C^h zQsqqogseZjkG6w@AU%S_VIzK0LK4a-Ng?)+|9SF0kMH&E0wHOSAVC=8c*yeOdoKM1 z2ig9JrD1yoRm zF0RI|RwgWtwr(!Wj`kM+_d9_W9~qnf{v>c=prHP}ZT~$A0*VVDThAa77@tB2#S4h~ lUp3hm5HY3dJ_yR**!{l?0gv!+2<`ic^uBK38_;|7zW}Szw`BkT delta 11904 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index c7bdf74cada491a9a7c619cbeb1101bcbcc39c2b..e151063aa19f5f53024607213c09511079aacc96 100644 GIT binary patch delta 34285 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 YWN%_>m#v>94huFmHZlq&B}Gq03d(~@RR910 delta 32831 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 IKO_pF diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index eda87ad..46d9626 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9, 10], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": 0, "minimum": [0, 5, 6, 9], "setup": [0, 2, 4, 5], "requir": [0, 2, 5, 6, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 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, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 5, 6, 7, 9, 10], "destin": [0, 2, 4, 5, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9, 10], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": 0, "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 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], "autoomat": 0, "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 5, 6, 7, 9, 11], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prove": [0, 9], "packet": [0, 2, 4, 5, 6, 7, 10, 11], "adress": [0, 7, 9], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 10, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 2, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 6, 10], "action": 0, "store": [0, 3, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9, 10], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 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, 7, 9], "happen": [0, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 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, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 3, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7, 10], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 9, 11], "server_ident": 0, "queri": [0, 2, 7], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9, 10, 11], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 10, 11], "wai": [0, 2, 5, 6, 7, 9], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9], "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, 10], "dbm": [0, 5, 10], "snr": [0, 10], "db": [0, 10], "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9], "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, "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 10, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7, 10], "kei": [0, 4, 6, 7, 10, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7, 10], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 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, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7, 10], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 2, 5, 10], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9, 10], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 9, 10], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 10, 11], "serial": [0, 2, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10], "stringmessag": 0, "convei": 0, "timestamp": 0, "msgtype": [0, 7], "variabl": [0, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 7, 9, 11], "across": [0, 3, 6], "0xf000": [0, 7], "reserv": [0, 7, 9], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 9, 10], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9, 10], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": 0, "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 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, 6, 9], "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, 6, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 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, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 5, 7, 9, 10], "normal": [0, 2, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 7, 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, "m": [0, 2, 9, 10], "g": [0, 10], "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "manag": [2, 6, 7, 9, 10, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 7, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "offlin": 2, "py3": 2, "whl": 2, "mai": [2, 5, 7, 9, 10], "case": [2, 3, 5, 6, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "miss": 2, "even": [2, 5, 6, 9, 10, 11], "pre": [2, 7, 9], "built": [2, 5, 9, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 10, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 4, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 6, 9, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "devic": [2, 4, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 9, 10], "rnsh": [2, 10], "fulli": [2, 3, 9, 10, 11], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "facilit": 2, "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": [2, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 9], "maco": 2, "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "come": [2, 9], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 5, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": 2, "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": 2, "most": [2, 3, 5, 6, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "daemon": [2, 5, 7, 10], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9, 10], "failur": [2, 5], "guarante": [2, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": 2, "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 10, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 6, 9, 10], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 9], "termux": 2, "f": [2, 10], "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "attempt": [2, 3, 7], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "startig": 2, "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "32": [2, 9], "rasperri": 2, "os": [2, 5], "april": 2, "2023": [2, 10], "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "restor": [2, 5], "behaviour": [2, 5, 10], "edit": [2, 10], "conf": 2, "break": [2, 7, 9, 11], "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "cours": [2, 5, 9], "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "_could_": 2, "obscur": 2, "rnspure": 2, "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "addition": [3, 5, 9], "common": [3, 4, 6, 9, 10, 11], "briefli": [3, 9], "describ": [3, 5, 7, 9], "emploi": [3, 9], "pattern": [3, 9], "high": [3, 5, 9, 11], "capac": [3, 5, 7, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": 3, "either": [3, 5, 6, 7, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "depend": [3, 4, 6, 7, 9, 10], "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 5, 6, 9], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "platform": [3, 4, 9], "esp32": 3, "manufactur": 3, "io": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "switch": [3, 5, 9, 10], "fiber": 3, "optic": [3, 11], "virtual": [3, 5, 6, 9, 10, 11], "adapt": [3, 6], "tun": 3, "tap": 3, "serialinterfac": [3, 5], "usb": [3, 6, 9, 10], "freedv": 3, "tnc": [3, 5, 7, 10, 11], "dire": 3, "wolf": 3, "aim": [4, 9], "particip": [4, 6, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "resolv": [4, 5, 10], "issu": [4, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "radio": [4, 5, 6, 7, 9, 10, 11], "android": 4, "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "debian": [4, 9, 10], "bookworm": 4, "ubuntu": [4, 10], "lunar": 4, "pure": [4, 9], "rnid": 4, "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "modem": [4, 5, 6, 7, 9, 11], "udp": [4, 6, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "buffer": [4, 5, 7], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9], "interface_en": [5, 10], "lan": 5, "group": [5, 7, 9], "group_id": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "multicast": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": 5, "eas": [5, 9], "simpler": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": [5, 10], "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7, 10], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "window": 5, "approxim": 5, "enforc": 5, "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "pair": [5, 7, 9, 10], "laser": 5, "baud": [5, 10], "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": 5, "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, "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": 5, "report": [5, 8, 10], "guess": 5, "per": [5, 7, 9, 10, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9, 10], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9, 10], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "leav": [6, 9], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": 6, "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "decid": [6, 7, 9], "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "cabl": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "previous": [6, 7, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": 6, "newli": [6, 7, 9], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": 6, "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 10, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "507": 7, "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "drop": [7, 9, 10], "individu": [7, 9, 11], "static": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x25519": [7, 9, 11], "concaten": 7, "256": [7, 9, 10], "128": [7, 9, 11], "constant": 7, "truncat": [7, 9], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "hold": [7, 9], "ciphertext_token": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "secreci": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "6": [7, 10], "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], "get_establishment_r": 7, "ocur": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "bool": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "adjust": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "document": [7, 9], "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "seek": 9, "solv": 9, "solut": [9, 10], "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, "alter": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "usabl": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "modifi": [9, 10], "interest": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "multi": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "recap": 9, "indirectli": 9, "ledger": 9, "therefor": [9, 11], "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "topic": 9, "necessarili": 9, "person": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "asymmetr": [9, 10, 11], "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "retransmit": 9, "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newer": 9, "newest": 9, "discard": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "travers": 9, "rememb": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "rotat": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "practic": [9, 11], "neglig": 9, "1200": 9, "96": 9, "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "x": [9, 10], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "recent": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "compos": 9, "field": 9, "context": 9, "465": 9, "vari": [9, 10], "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, "exclud": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "ie": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "panic": 10, "unrecover": 10, "occur": [10, 11], "panic_on_interface_error": 10, "warn": 10, "debug": 10, "unus": 10, "teach": 10, "task": 10, "08": 10, "18": 10, "17": 10, "59": 10, "56": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "30": 10, "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "posit": 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, "w": 10, "decreas": 10, "overwrit": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "probe": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "allowed_ident": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "silent": 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, "max": 10, "fw": 10, "nocheck": 10, "flash": 10, "baud_flash": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "hexbyt": 10, "attach": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "consol": 10, "unlock": 10, "perman": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "outsid": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "friendli": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "transform": 11, "fact": 11, "strength": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11, "touch": 11, "probe_destination_en": [], "respond_to_prob": 10, "rnstransport": 10, "781": 10, "e7536ee90bd4a440e130490b87a25124": 10, "809": 10, "73": 10}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 2, 1, "", "MDU"], [7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "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, "", "MTU"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": 2, "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "raspberri": 2, "pi": 2, "debian": 2, "bookworm": 2, "ubuntu": 2, "lunar": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 5, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "devic": [3, 11], "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "destin": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "configur": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnid": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Raspberry Pi": [[2, "raspberry-pi"]], "Debian Bookworm": [[2, "debian-bookworm"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Ethernet-based Hardware": [[3, "ethernet-based-hardware"]], "Serial Lines & Devices": [[3, "serial-lines-devices"]], "Packet Radio Modems": [[3, "packet-radio-modems"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Supported Interfaces": [[5, "supported-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "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"]], "API Reference": [[7, "api-reference"]], "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"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[7, "RNS.Link"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.MDU"]], "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"]], "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"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_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"]], "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_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "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", "Supported Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9, 10], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": 0, "minimum": [0, 5, 6, 9], "setup": [0, 2, 4, 5], "requir": [0, 2, 5, 6, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 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, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 5, 6, 7, 9, 10], "destin": [0, 2, 4, 5, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9, 10], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": 0, "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 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], "autoomat": 0, "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 5, 6, 7, 9, 11], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "prove": [0, 9], "packet": [0, 2, 4, 5, 6, 7, 10, 11], "adress": [0, 7, 9], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 10, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 2, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 6, 10], "action": 0, "store": [0, 3, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9, 10], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 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, 7, 9], "happen": [0, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 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, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 3, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7, 10], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 9, 11], "server_ident": 0, "queri": [0, 2, 7], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9, 10, 11], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 10, 11], "wai": [0, 2, 5, 6, 7, 9], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9], "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, 10], "dbm": [0, 5, 10], "snr": [0, 10], "db": [0, 10], "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9], "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, "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 10, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7, 10], "kei": [0, 4, 6, 7, 10, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7, 10], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 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, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7, 10], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": 0, "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 2, 5, 10], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9, 10], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 9, 10], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 10, 11], "serial": [0, 2, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10], "stringmessag": 0, "convei": 0, "timestamp": 0, "msgtype": [0, 7], "variabl": [0, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 7, 9, 11], "across": [0, 3, 6], "0xf000": [0, 7], "reserv": [0, 7, 9], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 9, 10], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9, 10], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": 0, "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 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, 6, 9], "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, 6, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 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, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 5, 7, 9, 10], "normal": [0, 2, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "setdaemon": 0, "detect": 0, "shown": 0, "progress": [0, 7, 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, "m": [0, 2, 9, 10], "g": [0, 10], "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "manag": [2, 6, 7, 9, 10, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 7, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "offlin": 2, "py3": 2, "whl": 2, "mai": [2, 5, 7, 9, 10], "case": [2, 3, 5, 6, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "miss": 2, "even": [2, 5, 6, 9, 10, 11], "pre": [2, 7, 9], "built": [2, 5, 9, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 10, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 4, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 6, 9, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "devic": [2, 4, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 9, 10], "rnsh": [2, 10], "fulli": [2, 3, 9, 10, 11], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "facilit": 2, "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": [2, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 9], "maco": 2, "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "come": [2, 9], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 5, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": 2, "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": 2, "most": [2, 3, 5, 6, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "daemon": [2, 5, 7, 10], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9, 10], "failur": [2, 5], "guarante": [2, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": 2, "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 10, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 6, 9, 10], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 9], "termux": 2, "f": [2, 10], "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "attempt": [2, 3, 7], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "startig": 2, "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "32": [2, 9], "rasperri": 2, "os": [2, 5], "april": 2, "2023": [2, 10], "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "restor": [2, 5], "behaviour": [2, 5, 10], "edit": [2, 10], "conf": 2, "break": [2, 7, 9, 11], "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "cours": [2, 5, 9], "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "_could_": 2, "obscur": 2, "rnspure": 2, "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "addition": [3, 5, 9], "common": [3, 4, 6, 9, 10, 11], "briefli": [3, 9], "describ": [3, 5, 7, 9], "emploi": [3, 9], "pattern": [3, 9], "high": [3, 5, 9, 11], "capac": [3, 5, 7, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": 3, "either": [3, 5, 6, 7, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "depend": [3, 4, 6, 7, 9, 10], "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 5, 6, 9], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "platform": [3, 4, 9], "esp32": 3, "manufactur": 3, "io": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "switch": [3, 5, 9, 10], "fiber": 3, "optic": [3, 11], "virtual": [3, 5, 6, 9, 10, 11], "adapt": [3, 6], "tun": 3, "tap": 3, "serialinterfac": [3, 5], "usb": [3, 6, 9, 10], "freedv": 3, "tnc": [3, 5, 7, 10, 11], "dire": 3, "wolf": 3, "aim": [4, 9], "particip": [4, 6, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "resolv": [4, 5, 10], "issu": [4, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "radio": [4, 5, 6, 7, 9, 10, 11], "android": 4, "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "debian": [4, 9, 10], "bookworm": 4, "ubuntu": [4, 10], "lunar": 4, "pure": [4, 9], "rnid": 4, "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "modem": [4, 5, 6, 7, 9, 11], "udp": [4, 6, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "buffer": [4, 5, 7], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9], "interface_en": [5, 10], "lan": 5, "group": [5, 7, 9], "group_id": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "multicast": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": 5, "eas": [5, 9], "simpler": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": [5, 10], "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7, 10], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "window": 5, "approxim": 5, "enforc": 5, "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "pair": [5, 7, 9, 10], "laser": 5, "baud": [5, 10], "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": 5, "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, "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": 5, "report": [5, 8, 10], "guess": 5, "per": [5, 7, 9, 10, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9, 10], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9, 10], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "leav": [6, 9], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": 6, "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "decid": [6, 7, 9], "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "cabl": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "previous": [6, 7, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": 6, "newli": [6, 7, 9], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": 6, "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 10, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "507": 7, "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "drop": [7, 9, 10], "individu": [7, 9, 11], "static": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x25519": [7, 9, 11], "concaten": 7, "256": [7, 9, 10], "128": [7, 9, 11], "constant": 7, "truncat": [7, 9], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "hold": [7, 9], "ciphertext_token": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "secreci": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "6": [7, 10], "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], "get_establishment_r": 7, "ocur": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "bool": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "adjust": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "document": [7, 9], "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "seek": 9, "solv": 9, "solut": [9, 10], "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, "alter": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "usabl": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "modifi": [9, 10], "interest": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "multi": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "recap": 9, "indirectli": 9, "ledger": 9, "therefor": [9, 11], "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "topic": 9, "necessarili": 9, "person": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "asymmetr": [9, 10, 11], "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "retransmit": 9, "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newer": 9, "newest": 9, "discard": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "travers": 9, "rememb": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "rotat": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "practic": [9, 11], "neglig": 9, "1200": 9, "96": 9, "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "x": [9, 10], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "recent": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "compos": 9, "field": 9, "context": 9, "465": 9, "vari": [9, 10], "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, "exclud": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "ie": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "panic": 10, "unrecover": 10, "occur": [10, 11], "panic_on_interface_error": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "debug": 10, "unus": 10, "teach": 10, "task": 10, "08": 10, "18": 10, "17": 10, "59": 10, "56": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "30": 10, "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "posit": 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, "w": 10, "decreas": 10, "overwrit": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "rnstransport": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "781": 10, "e7536ee90bd4a440e130490b87a25124": 10, "809": 10, "73": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "allowed_ident": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "silent": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "max": 10, "fw": 10, "nocheck": 10, "flash": 10, "baud_flash": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "hexbyt": 10, "attach": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "consol": 10, "unlock": 10, "perman": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "outsid": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "friendli": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "transform": 11, "fact": 11, "strength": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11, "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, 2, 1, "", "MDU"], [7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "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, "", "MTU"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": 2, "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "raspberri": 2, "pi": 2, "debian": 2, "bookworm": 2, "ubuntu": 2, "lunar": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 5, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "devic": [3, 11], "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "destin": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "configur": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnid": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Raspberry Pi": [[2, "raspberry-pi"]], "Debian Bookworm": [[2, "debian-bookworm"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Ethernet-based Hardware": [[3, "ethernet-based-hardware"]], "Serial Lines & Devices": [[3, "serial-lines-devices"]], "Packet Radio Modems": [[3, "packet-radio-modems"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Supported Interfaces": [[5, "supported-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The 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"]], "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"]], "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 (class in rns)": [[7, "RNS.Link"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.MDU"]], "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"]], "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"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_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"]], "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_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file