diff --git a/README.md b/README.md index f343e58..6b30885 100755 --- a/README.md +++ b/README.md @@ -18,12 +18,13 @@ For more info, see [unsigned.io/projects/reticulum](https://unsigned.io/projects ## Notable Features - Coordination-less globally unique adressing and identification - Fully self-configuring multi-hop routing - - Asymmetric RSA encryption and signatures as basis for all communication - - Perfect Forward Secrecy on links with ephemereal Elliptic Curve Diffie-Hellman keys (on Curve25519) - - Reticulum uses the [Fernet](https://github.com/fernet/spec/blob/master/Spec.md) specification for encryption on links and to group destinations + - Asymmetric X25519 encryption and Ed25519 signatures as a basis for all communication + - Forward Secrecy with ephemereal Elliptic Curve Diffie-Hellman keys (on Curve25519) + - Reticulum uses the [Fernet](https://github.com/fernet/spec/blob/master/Spec.md) specification for encryption - AES-128 in CBC mode with PKCS7 padding - HMAC using SHA256 for authentication - IVs are generated through os.urandom() + - Keys are ephemeral and derived from an ECDH key exchange on Curve25519 - Unforgeable packet delivery confirmations - A variety of supported interface types - An intuitive and easy-to-use API diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 37de794..e61e007 100644 Binary files a/docs/Reticulum Manual.pdf and b/docs/Reticulum Manual.pdf differ diff --git a/docs/manual/.buildinfo b/docs/manual/.buildinfo index 085df54..e75ab37 100644 --- a/docs/manual/.buildinfo +++ b/docs/manual/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 010a10c5bc670583cef4151858e38839 +config: 205a0b937612ce08d1a58b1cbb471256 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/manual/_images/nomadnet1.png b/docs/manual/_images/nomadnet1.png deleted file mode 100644 index 69c665f..0000000 Binary files a/docs/manual/_images/nomadnet1.png and /dev/null differ diff --git a/docs/manual/_sources/whatis.rst.txt b/docs/manual/_sources/whatis.rst.txt index 0a4180e..b6113da 100644 --- a/docs/manual/_sources/whatis.rst.txt +++ b/docs/manual/_sources/whatis.rst.txt @@ -54,7 +54,7 @@ What does Reticulum Offer? Where can Reticulum be Used? ============================ -On practically any hardware that can support at least a half-duplex channel +Over practically any medium that can support at least a half-duplex channel with 1.000 bits per second throughput, and an MTU of 500 bytes. Data radios, modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes, ad-hoc WiFi, free-space optical links and similar systems are all examples diff --git a/docs/manual/_static/documentation_options.js b/docs/manual/_static/documentation_options.js index 0810a78..5eb22a9 100644 --- a/docs/manual/_static/documentation_options.js +++ b/docs/manual/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.2.0 beta', + VERSION: '0.2.1 beta', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/manual/examples.html b/docs/manual/examples.html index d3357b9..c42848b 100644 --- a/docs/manual/examples.html +++ b/docs/manual/examples.html @@ -5,7 +5,7 @@ - Examples — Reticulum Network Stack 0.2.0 beta documentation + Examples — Reticulum Network Stack 0.2.1 beta documentation @@ -31,7 +31,7 @@
  • previous |
  • - + @@ -380,7 +380,7 @@ over the network.

    # We specify a callback that will get called every time # the destination receives data. - broadcast_destination.packet_callback(packet_callback) + broadcast_destination.set_packet_callback(packet_callback) # Everything's ready! # Let's hand over control to the main loop @@ -522,7 +522,7 @@ the Packet interface.

    # Tell the destination which function in our program to # run when a packet is received. We do this so we can # print a log message when the server receives a request - echo_destination.packet_callback(server_callback) + echo_destination.set_packet_callback(server_callback) # Everything's ready! # Let's Wait for client requests or user input @@ -645,7 +645,7 @@ the Packet interface.

    # We can then set a delivery callback on the receipt. # This will get automatically called when a proof for # this specific packet is received from the destination. - packet_receipt.delivery_callback(packet_delivered) + packet_receipt.set_delivery_callback(packet_delivered) # Tell the user that the echo request was sent RNS.log("Sent echo request to "+RNS.prettyhexrep(request_destination.hash)) @@ -659,7 +659,7 @@ the Packet interface.

    # receives a proof packet. def packet_delivered(receipt): if receipt.status == RNS.PacketReceipt.DELIVERED: - rtt = receipt.rtt() + rtt = receipt.get_rtt() if (rtt >= 1): rtt = round(rtt, 3) rttstring = str(rtt)+" seconds" @@ -803,7 +803,7 @@ destination, and passing traffic back and forth over the link.

    # We configure a function that will get called every time # a new client creates a link to this destination. - server_destination.link_established_callback(client_connected) + server_destination.set_link_established_callback(client_connected) # Everything's ready! # Let's Wait for client requests or user input @@ -835,8 +835,8 @@ destination, and passing traffic back and forth over the link.

    global latest_client_link RNS.log("Client connected") - link.link_closed_callback(client_disconnected) - link.packet_callback(server_packet_received) + link.set_link_closed_callback(client_disconnected) + link.set_packet_callback(server_packet_received) latest_client_link = link def client_disconnected(link): @@ -908,12 +908,12 @@ destination, and passing traffic back and forth over the link.

    # We set a callback that will get executed # every time a packet is received over the # link - link.packet_callback(client_packet_received) + link.set_packet_callback(client_packet_received) # We'll also set up functions to inform the # user when the link is established or closed - link.link_established_callback(link_established) - link.link_closed_callback(link_closed) + link.set_link_established_callback(link_established) + link.set_link_closed_callback(link_closed) # Everything is set up, so let's enter a loop # for the user to interact with the example @@ -940,8 +940,18 @@ destination, and passing traffic back and forth over the link.

    # If not, send the entered text over the link if text != "": data = text.encode("utf-8") - RNS.Packet(server_link, data).send() + if len(data) <= RNS.Link.MDU: + RNS.Packet(server_link, data).send() + else: + RNS.log( + "Cannot send this packet, the data size of "+ + str(len(data))+" bytes exceeds the link packet MDU of "+ + str(RNS.Link.MDU)+" bytes", + RNS.LOG_ERROR + ) + except Exception as e: + RNS.log("Error while sending data over the link: "+str(e)) should_quit = True server_link.teardown() @@ -1110,7 +1120,7 @@ interface to efficiently pass files of any size over a Reticulum # We configure a function that will get called every time # a new client creates a link to this destination. - server_destination.link_established_callback(client_connected) + server_destination.set_link_established_callback(client_connected) # Everything's ready! # Let's Wait for client requests or user input @@ -1147,7 +1157,7 @@ interface to efficiently pass files of any size over a Reticulum if os.path.isdir(serve_path): RNS.log("Client connected, sending file list...") - link.link_closed_callback(client_disconnected) + link.set_link_closed_callback(client_disconnected) # We pack a list of files for sending in a packet data = umsgpack.packb(list_files()) @@ -1159,7 +1169,7 @@ interface to efficiently pass files of any size over a Reticulum list_packet = RNS.Packet(link, data) list_receipt = list_packet.send() list_receipt.set_timeout(APP_TIMEOUT) - list_receipt.delivery_callback(list_delivered) + list_receipt.set_delivery_callback(list_delivered) list_receipt.timeout_callback(list_timeout) else: RNS.log("Too many files in served directory!", RNS.LOG_ERROR) @@ -1170,7 +1180,7 @@ interface to efficiently pass files of any size over a Reticulum # open until the client requests a file. We'll # configure a function that get's called when # the client sends a packet with a file request. - link.packet_callback(client_request) + link.set_packet_callback(client_request) else: RNS.log("Client connected, but served path no longer exists!", RNS.LOG_ERROR) link.teardown() @@ -1299,18 +1309,18 @@ interface to efficiently pass files of any size over a Reticulum # We expect any normal data packets on the link # to contain a list of served files, so we set # a callback accordingly - link.packet_callback(filelist_received) + link.set_packet_callback(filelist_received) # We'll also set up functions to inform the # user when the link is established or closed - link.link_established_callback(link_established) - link.link_closed_callback(link_closed) + link.set_link_established_callback(link_established) + link.set_link_closed_callback(link_closed) # And set the link to automatically begin # downloading advertised resources link.set_resource_strategy(RNS.Link.ACCEPT_ALL) - link.resource_started_callback(download_began) - link.resource_concluded_callback(download_concluded) + link.set_resource_started_callback(download_began) + link.set_resource_concluded_callback(download_concluded) menu() @@ -1705,7 +1715,7 @@ interface to efficiently pass files of any size over a Reticulum previous | - + diff --git a/docs/manual/genindex.html b/docs/manual/genindex.html index 318cecc..b564941 100644 --- a/docs/manual/genindex.html +++ b/docs/manual/genindex.html @@ -5,7 +5,7 @@ - Index — Reticulum Network Stack 0.2.0 beta documentation + Index — Reticulum Network Stack 0.2.1 beta documentation @@ -23,7 +23,7 @@
  • index
  • - + @@ -80,8 +80,12 @@ @@ -98,8 +102,6 @@ +

    F

    @@ -144,11 +152,13 @@
  • (RNS.Identity method)
  • - - + - + @@ -230,19 +238,13 @@ - +
    @@ -256,23 +258,15 @@
  • register_announce_handler() (RNS.Transport static method)
  • + + - @@ -283,14 +277,34 @@
  • send() (RNS.Packet method)
  • set_default_app_data() (RNS.Destination method) +
  • +
  • set_delivery_callback() (RNS.PacketReceipt method) +
  • +
  • set_link_established_callback() (RNS.Destination method) +
  • +
  • set_packet_callback() (RNS.Destination method) + +
  • +
  • set_proof_requested_callback() (RNS.Destination method)
  • set_proof_strategy() (RNS.Destination method)
  • -
  • set_resource_strategy() (RNS.Link method) +
  • set_resource_callback() (RNS.Link method)