Introduction
ri2p (Rust-i2p) is a free and open-source project that aims to implement the i2p specifications in a minimal, lightweight and memory safe program.
ri2p is written in the Rust systems programming language in order to gain the benefits that Rust provides such as; memory management, memory and type safety, systems-level performance, native cross-compiling support, and an easy-to-use dependency (package) registry.
This website is created using the mdBooks Rust crate, and allows documentation to be transpiled from Markdown to static HTML.
There is another portion of the documentation website, located at chrisbilger.com/ri2p/doc/doc/ri2p, that is built from Rust's native cargo doc
feature. That portion of the documentation is for other developers to quickly read about the Rust codebase for ri2p.
Click here to quickly go to the ri2p Git repository.
NetDB
The i2p networking database (NetDB) is a specialized distributed database, also known as a distributed hash table (DHT).
All data that lives inside of the NetDB must be cryptographically signed and all data that is retrieved from the NetDB must be cryptographically verified for authenticity. This data also has information regarding the timeframe that it is healthy to be inside of the database.
The NetDb is distributed using a "floodfill". A portion of all i2p routers, aptly named "floodfill routers", maintain the NetDB DHT.
Supplemental Information
I2NP
The Invisible Internet Network Protocol (I2NP) is a networking layer that resides above the I2P Transport Protocol layer. The I2NP layer manages the routing of inter-router communications, as well as self determining which transport protocol to use if there are multiple transport protocols to choose from.
"I2NP (I2P Network Protocol) messages can be used for one-hop, router-to-router, point-to-point messages. By encrypting and wrapping messages in other messages, they can be sent in a secure way through multiple hops to the ultimate destination." [1]
"All routers must publish their I2NP protocol version in the "router.version" field in the RouterInfo properties. This version field is the API version, indiciating the level of support for various I2NP protocol features, and is not necessarily the actual router version." [2]
Supplemental Information
Transports
"A "transport" in I2P is a method for direct, point-to-point communication between two routers. Transports must provide confidentiality and integrity against external adversaries while authenticating that the router contacted is the one who should receive a given message." [1]
ri2p supports multiple transports simultaneously. These are the two transports currently supported:
Supplemental Information
SSU
Secure Semireliable UDP (SSU) is a transport layer, for UDP messages, that is: "secured" via end-to-end encryption, and "semireliable" via unacknowledged message retransmissions.
Like the NTCP transport, SSU provides reliable, encrypted, connection-oriented, point-to-point data transport. Unique to SSU, it also provides IP detection and NAT traversal services, including:
- Cooperative NAT/Firewall traversal using introducers
- Local IP detection by inspection of incoming packets and peer testing
- Communication of firewall status and local IP, and changes to either to NTCP
- Communication of firewall status and local IP, and changes to either, to the router and the user interface
[1]
Supplemental Information
NTCP2
The NIO Transmission Control Protocol v2 (NTCP2) is a key-exchange protocol for TCP traffic, that improves upon the security and resilience of NTCP.
"As with other I2P transports, NTCP2 is defined solely for point-to-point (router-to-router) transport of I2NP messages. It is not a general-purpose data pipe." [1]
Supplemental Information
Encryption
ri2p supports multiple encryption methods simultaneously. These are the four major categories:
Symmetric
Coming soon. ™
Asymmetric
Coming soon. ™
Signatures
Coming soon. ™
Hashing
Coming soon. ™