Package Summary
Identicon generation library (identicon-core by Don Park), modified to remove the commons-logging and org.cache2k dependencies.
ZXing barcode library core subset (zxing), used by net.i2p.imagegen for QR code generation.
Java SE luminance source bridge from the ZXing javase module.
Common utilities and classes for ZXing barcode and QR code processing.
Reed-Solomon error correction from the ZXing core subset.
QR code detection, decoding, and encoding for ZXing.
QR code decoding implementation for ZXing.
QR code encoding implementation for ZXing.
Reads MaxMind GeoLite2 database files, the format used by the router for GeoIP lookups.
Legacy GeoIP country and city lookups from the geoip-database files in /usr/share/GeoIP/, used only on Debian-based systems where that package is installed.
Reads MaxMind GeoLite2 database files.
Fallback implementations of cryptographic primitives.
ChaCha20 is a fast stream cipher; combined with the Poly1305 MAC it forms an authenticated-encryption (AEAD) construction that stays fast even without hardware AES support.
X25519 is a modern elliptic curve Diffie-Hellman function providing high-performance key exchange with strong security guarantees.
Provides classes for communicating via the Noise protocol.
Classes to represent, parse and serialise JSON-RPC 2.0 requests, notifications and responses.
Simple server framework for processing JSON-RPC 2.0 requests and notifications.
Utility classes for typed retrieval of JSON-RPC 2.0 request parameters on the server side.
MurmurHash and related hash functions from the crinch library, used by jrobin.
M-Lab NDT speed test plugin code imported from Vuze, used by the router console speed test.
Swing compatibility stubs for the imported Vuze M-Lab NDT client.
Web100 Network Diagnostic Tool applet behind the router console speed test.
Array and compression helpers from Benjamin Green's utility library, used by rrd4j.
CPU identification and instruction set detection via the CPUID instruction.
Fortuna pseudo-random number generator from GNU Crypto, modified for I2P.
GNU-style command-line option parsing.
GettextResource class for ngettext() plural form handling, taken unchanged from GNU gettext 0.19.8.
The SusiDNS webapp, which is the user interface for the addressbook application and the local naming service (hosts database) implemented in net.i2p.client.naming.
Utility classes for the SusiMail webmail client.
The SusiMail webapp (mail.war): webmail interface with POP3 and SMTP clients over I2P and local caching.
MIME and character encoding support for SusiMail.
POP3 client (RFC 1939) for SusiMail, including APOP authentication.
SMTP client for SusiMail, including STARTTLS and authentication.
Core I2P package providing fundamental interfaces, version information, and entry points to essential I2P services, centered on I2PAppContext.
Address book application for fetching and maintaining I2P host databases from subscription sources.
Servlet that starts and manages the addressbook DaemonThread from the SusiDNS webapp.
SSL/TLS socket factory and hostname verification extracted from Apache HttpClient 4.4.1, with minimal modifications to remove other Apache dependencies.
HTTP connection utilities extracted from Apache HttpClient 4.4.1: public-suffix matching and network address validation, with minimal modifications to remove other Apache dependencies.
Argument validation and related utilities extracted from Apache HttpCore 4.4.1, with minimal modifications to remove other Apache dependencies.
Interfaces for classes to be started and stopped via clients.config.
System tray applet that launches a browser to the router console when the router is ready.
Interfaces and factories for the base I2P SDK used to develop applications that communicate through I2P.
Provides a standard way for reading and writing messages transferred over I2P so that the recipient has an authenticated mechanism to reply to the sender.
Internal implementation of the I2P client SDK - the client side of the Invisible Internet Client Protocol (I2CP), separating implementation from the interfaces in net.i2p.client.
Naming service for resolving human-readable names (such as ident.i2p) into I2P destinations, providing a standard interface without JNDI complexity.
API, interfaces, and factory for a TCP-like (reliable, authenticated, in order) set of sockets for communicating over IP-like (unreliable, unauthenticated, unordered) I2P messages.
Implementation of a TCP-like (reliable, authenticated, in order) set of sockets for communicating over the IP-like (unreliable, unauthenticated, unordered) I2P messages.
Core cryptographic primitives used throughout I2P: symmetric ciphers (AES, ChaCha20), hashes (SHA-1, SHA-256, SHA-384, SHA-512), HMAC and HKDF key derivation, the ElGamal and DSA/EdDSA/RedDSA engines, key and certificate utilities, and the entropy harvester.
Java implementation of EdDSA, a digital signature scheme using a variant of elliptic curve cryptography based on Twisted Edwards curves.
Data structures that define curves and fields, and the mathematical operations on them.
Generic elliptic curve mathematical implementation using Java BigIntegers, serving as the reference implementation for curves without specialized optimizations.
Optimized mathematical implementation for Ed25519 using Radix 2^51 field representation for performance on 64-bit processors.
Specifications and parameter tables for EdDSA elliptic curves and keys, including the Ed25519 (Curve25519) specification and the named-curve registry.
Implementation of the ElGamal public-key cryptosystem for I2P, copied from Bouncy Castle 1.53 and adapted for the I2P security provider.
Concrete implementations of ElGamal public and private keys, based on Bouncy Castle 1.53 and modified for the I2P security provider.
Parameter specifications and key interfaces for ElGamal, copied from Bouncy Castle 1.53 and adapted for the I2P security provider.
Java Security (JCA) Provider registering I2P's EdDSA signature algorithm with the standard Java security APIs.
X25519 elliptic curve Diffie-Hellman key exchange (RFC 7748), wrapping Noise's Curve25519 operations with Java Security API parameter specifications.
Algorithm parameter specifications for the X25519 key agreement and key pair generator.
Common data structures used by the I2P protocols: Destination, LeaseSet, PublicKey, Signature, Certificate and their friends.
The Invisible Internet Client Protocol (I2CP) allows applications simplified access to I2P network without requiring them to deal with the issues involved with the Invisible Internet Network Protocol (I2NP).
Low-level messages sent between routers - the Invisible Internet Network Protocol (I2NP).
Router-specific data structures: RouterInfo and RouterIdentity with their transport addresses and capabilities, router key generation, and the optionally password-protected router private key file.
Desktop GUI for monitoring and controlling the router from the system tray: status display, start/stop/restart controls and console access.
Internationalization support for the desktop GUI, including pluralized resource handling.
Router communication for the desktop GUI: status monitoring and control commands over I2CP (the Invisible Internet Client Protocol) and the router's service interfaces.
I2P Control service: a JSON-RPC 2.0 interface for controlling and monitoring the router from external applications, served over TLS on the configured port.
Authentication and authorization for the I2P Control service: token management and keystore handling.
Request handling for the I2P Control JSON-RPC 2.0 service.
I2P Control handlers for reading and writing router configuration parameters.
I2P Control JSON-RPC 2.0 method handlers: API version, router parameters, statistics and log access.
Implementation of preconfigured tunnels for clients and servers, including special-purpose tunnels for IRC, SOCKS, HTTP and streaming.
Definition-based incoming connection filter for server tunnels, with fine-grained access control by destination.
IRC tunnel support: DCC and CTCP handling for IRC clients using a client tunnel.
Minimal embedded HTTP server used by the I2PTunnel local admin interface.
SOCKS 4, 4a and 5 server implementations exposing I2P client tunnels to SOCKS clients.
StreamR adaptive-rate streaming tunnel: streams audio and video over a single I2P tunnel, adapting the encoder rate to the measured tunnel bandwidth.
Datagram plumbing for UDP tunnels: sinks and sources that bridge a local UDP socket and an I2P stream, framing each datagram onto the stream and back.
Base classes for UDP client and server tunnels, mapping a local UDP port to an I2P tunnel through the sinks and sources in net.i2p.i2ptunnel.udp.
Public API classes for programmatic tunnel configuration and management, providing a stable API for external applications, including the Android client.
Shared helpers for the tunnel implementations, including HTTP header processing.
The I2PTunnel configuration web interface (i2ptunnel.war): servlets and helpers for creating and editing tunnels.
Webapp (imagegen.war) generating QR codes and identicon images for I2P destinations.
Helper utilities and support classes used by the I2P installer: configuration file generation, service installation helpers and platform-specific operations.
Internal communication between a router and a client running in the same JVM, using queues instead of socket-based I2CP (the Invisible Internet Client Protocol), to avoid the serialization and socket overhead.
Jetty integration: starts the embedded Jetty server for all I2P webapps.
Generic Kademlia distributed hash table implementation supporting multiple hash algorithms (SHA1, SHA256 and others).
The I2P router application handles I2P network communication.
Interface and framework for applications managed by the router via clients.config.
Router-side implementation of the Invisible Internet Client Protocol (I2CP): client sessions over plain or TLS sockets, message delivery, and lease and tunnel management on behalf of clients.
Router-specific cryptography: ElGamal+AES garlic encryption (ElGamalAESEngine), session key and tag caching for repeated peer communication (TransientSessionKeyManager), router-family shared keys (FamilyKeyCrypto), and the ratchet and pqc subpackages.
Post-quantum hybrid key encapsulation built on the bundled Bouncy Castle ML-KEM primitives.
The Double Ratchet with X25519 key agreement and ECIES hybrid encryption, used by the NTCP2 and SSU transports for session encryption.
Simplified fake implementations of router interfaces (comm system and friends) for testing and embedded builds.
Garlic message creation, parsing and handling, and the outbound message jobs: one-shot sends, source routing and delivery status handling.
The router's default naming service, BlockfileNamingService, backed by the Metanotion BlockFile database (net.metanotion) in hostsdb.dat.
Network database message handling shared by all facades: database lookup jobs and local RouterInfo publication.
The Kademlia distributed hash table (DHT) network database: lookup, store and explore jobs, the data store, the floodfill variants, and lookup throttling.
Reseeding: fetching router info lists from reseed servers, web indexes or local files, validating them (signed SU3 update files and unsigned ZIP archives) and processing them to bootstrap into the network.
Parser for the I2P news format, which follows Atom with additional metadata for the update notification feature.
Peer profiles and capacity calculation, peer test jobs, peer selection for tunnel building, and the database and tunnel history used for peer selection.
The I2P startup package loads configuration when I2P is started.
Offline analysis tools for detecting Sybil attacks and malicious peer coordination by correlating peer relationships.
Periodic maintenance jobs: stats coalescing, cryptographic algorithm checks, liveliness marking, out-of-memory handling, thread dumps, the watchdog, graceful shutdown and soft restart, update installation, republishing and config reloading.
Router time synchronization: peer-based clock sync (RouterTimestamper) and an NTP client with time zone support.
Transport framework: the transport lifecycle and pool management, connection handling and bandwidth throttling for the transports (NTCP2 over TCP, SSU over UDP) that carry I2P messages between routers, plus NAT traversal via UPnP and GeoIP country lookups.
Transport-layer key agreement: the X25519 key factory used by the NTCP2 and SSU2 session handshakes for peer authentication and session encryption.
NTCP2, the TCP transport: framed, ratchet-encrypted and mutually authenticated connections between routers.
SSU2, the UDP transport: datagram sessions with Holepunch peer discovery, plus the older SSU compatibility code.
Tunnel messages and the tunnel layer: the TunnelManagerFacade, tunnel build request and reply processing, and the inbound and outbound tunnel structures.
Tunnel pool management: pool lifecycle, peer selection, build scheduling and failure handling for client and exploratory tunnels.
Router-side update checking and installation: fetching update notifications, downloading and verifying updates, and staging them for the restart.
Router utility classes: CoDel active queue management, time-decaying collections, a diagnostics ring buffer, CIDR matching, and password management.
The router console user interface, implemented in routerconsole.jar, with these classes supporting the webapp in routerconsole.war.
Helpers and handlers for the router console user interface, packaged in routerconsole.war and accessible only from JSP files.
Router console servlets packaged in routerconsole.war, for pages that require servlet features rather than JSP helpers.
The SAM bridge: a simple text protocol server letting applications in any language use I2P streaming and datagram sessions without implementing the Invisible Internet Client Protocol (I2CP).
Demo and test client classes.
Servlet glue classes shared across I2P webapps, originally from susimail: error and default servlets, request wrapping and webapp provider configuration.
Servlet filters for I2P webapps: XSS protection and X-Forwarded header handling.
Utilities for JSP precompilation (JspC) and servlet I/O shared across I2P webapps.
SOCKS 4 and SOCKS 5 client protocol implementations, extracted from i2ptunnel for broader use across I2P applications, including SSLEepGet.
Statistics collection framework used throughout the router for adaptive operation, monitoring and debugging.
Time synchronization interface (Timestamper) and the build timestamp.
Update checking and installation interfaces: update types, version comparison, status reporting and the UpdateManager used by the router and the console to offer updates.
General utility classes shared across the core libraries and the router.
BlockFile, an embeddable single-file database engine from the Metanotion project (2006), heavily modified from the original 0.1.1 release.
I/O abstractions (streams, buffering, file access) for the Metanotion BlockFile database.
Block-level file and allocation management for the Metanotion BlockFile database.
Skip-list based indexes over BlockFile data.
Serialization of Java objects into BlockFile records.
Skip-list implementation used for BlockFile indexes.
This is a small portion of bouncycastle 1.80 for MLKEM, modified to reduce dependencies.
Base classes for the lightweight API.
Message digest classes.
Classes for parameter objects for ciphers and generators.
Interfaces and parameter base classes for the bundled Bouncy Castle post-quantum KEM primitives (ML-KEM).
This is a small portion of bouncycastle 1.80 for MLKEM, modified to reduce dependencies.
Shared implementation helpers for the bundled Bouncy Castle post-quantum KEM primitives.
General purpose utility classes used throughout the APIs.
UPnP stack from the Cybergarage project (Satoshi Konno, 2002-2004), imported for NAT traversal.
Minimal HTTP server and client used by the Cybergarage UPnP stack.
Host, interface and socket helpers used by the Cybergarage UPnP stack.
SOAP envelope handling used by the Cybergarage UPnP stack.
Core UPnP device, service and root-device model of the Cybergarage stack.
UPnP control actions and subscription messages of the Cybergarage stack.
UPnP device and service handling, including the local device description, of the Cybergarage stack.
UPnP GENA eventing of the Cybergarage stack.
SSDP discovery (multicast search and notify) of the Cybergarage stack.
Device-description and service-control XML parsing of the Cybergarage stack.
General utility classes and helper functions.
Small DOM/XML node wrapper used by the Cybergarage stack.
XML parser abstraction used by the Cybergarage xml package.
Glue classes imported from the Freenet project so UPnP can drive the Cybergarage UPnP library.
Core classes for generating SVG from Java2D drawing calls; the entry point is SVGGraphics2D.
Utility helpers for the JFreeSVG fork.
JSON parsing and serialization.
I2P version of the Snark BitTorrent client, enhanced for I2P: peers are I2P destinations, torrents can be served anonymously as hidden services, and metadata carries I2P-specific comment fields.
Bencode parsing and serialization, the canonical BitTorrent encoding used for torrent files and peer messages.
Parsing and formatting of the I2P comment metadata stored in the comment field of torrent files, carrying the I2P destination and other per-torrent data.
BitTorrent distributed hash table (DHT) implementation following the Mainline protocol, for trackerless peer discovery.
Command-line client for running Snark without the web interface.
The I2PSnark web interface (i2psnark.war): servlets and helpers for torrent management, file browsing and configuration.
BCrypt password hashing for the I2P Control service password store.
Minimal DNS message parsing and construction, used by DNSOverHTTPS for DNS-over-HTTPS lookups.
DNS record type, class and opcode constants, from the MiniDNS 1.0.0 core subset bundled in core (see org.minidns).
DNS label representation, validation and punycode conversion, from the MiniDNS 1.0.0 core subset (see org.minidns).
DNS message structures with wire-format parsing and serialization (no transport), from the MiniDNS 1.0.0 core subset (see org.minidns).
DNS name parsing, validation and comparison, from the MiniDNS 1.0.0 core subset (see org.minidns).
EDNS(0) option structures (RFC 6891), from the MiniDNS 1.0.0 core subset (see org.minidns).
IDNA2008 name-to-ASCII conversion (punycode), from the MiniDNS 1.0.0 core subset (see org.minidns).
DNS resource record types (A, AAAA, NS, SOA, MX, TXT, SRV and the DNSSEC records) with wire-format parsing, from the MiniDNS 1.0.0 core subset (see org.minidns).
Byte, hex and network helper classes, from the MiniDNS 1.0.0 core subset (see org.minidns).
RRD4J is a high performance data logging and graphing system for time series data, implementing RRDTool's functionality in Java.
core RRD4J implementation.
This package provides read-only access to natives RRD file.
Time specification parser for rrd4j update and graph arguments.
RRD4J data management classes and interfaces.
Provides data sources, processors, aggregators, and utilities for Round Robin Database (RRD) operations and calculations.
RRD4J graph capabilities.
Bloom filter interfaces and implementation from the xlattice project, used by DecayingBloomFilter.