i2p.i2p
I2P is an anonymizing network, offering a simple layer that identity-sensitive applications can use to securely communicate. All data is wrapped with several layers of encryption, and the network is both distributed and dynamic, with no trusted parties.
Top Related Projects
Monero: the secure, private, untraceable cryptocurrency
unofficial git repo -- report bugs/issues/pull requests on https://gitlab.torproject.org/ --
Freenet REference Daemon
Go implementation of the Ethereum protocol
Zcash - Internet Money
Quick Overview
I2P (Invisible Internet Project) is an anonymous network layer that allows for secure and private communication over the internet. It provides a platform for various applications to operate with enhanced privacy and security, offering features like end-to-end encryption, decentralized routing, and protection against network surveillance.
Pros
- Strong focus on privacy and anonymity
- Decentralized network architecture for improved resilience
- Supports various applications, including web browsing, file sharing, and messaging
- Active development and community support
Cons
- Slower speeds compared to regular internet connections due to multiple layers of encryption
- Steeper learning curve for new users
- Limited adoption compared to other privacy-focused networks
- Potential for misuse by malicious actors
Getting Started
To get started with I2P:
- Download the I2P software from the official website: https://geti2p.net/
- Install the software on your system
- Launch the I2P router and wait for it to connect to the network
- Configure your browser or other applications to use I2P as a proxy
- Start using I2P-enabled services or create your own hidden services
For developers interested in integrating I2P into their applications, refer to the official documentation and API guides available in the repository.
Competitor Comparisons
Monero: the secure, private, untraceable cryptocurrency
Pros of Monero
- Focuses on privacy-centric cryptocurrency transactions
- More active development with frequent updates
- Larger community and wider adoption in the cryptocurrency space
Cons of Monero
- More complex codebase due to cryptographic algorithms
- Higher resource requirements for running a full node
- Narrower scope compared to I2P's general-purpose anonymity network
Code Comparison
Monero (C++):
crypto::public_key tx_pub_key = get_tx_pub_key_from_extra(tx);
crypto::key_derivation derivation;
if (!generate_key_derivation(tx_pub_key, prv_view_key, derivation))
return false;
I2P (Java):
public void processDeliveryStatus(DeliveryStatusMessage msg) {
long messageId = msg.getMessageId();
long nonce = msg.getNonce();
int status = msg.getStatus();
}
Monero focuses on cryptographic operations for transaction privacy, while I2P deals with network messaging and routing for general anonymity. Monero's codebase is more specialized for financial transactions, whereas I2P provides a broader anonymity network infrastructure.
unofficial git repo -- report bugs/issues/pull requests on https://gitlab.torproject.org/ --
Pros of Tor
- More widely adopted and recognized, with a larger user base
- Better suited for accessing clearnet websites anonymously
- Generally faster for web browsing due to its circuit-based routing
Cons of Tor
- Centralized directory servers, potentially vulnerable to attacks
- Exit nodes can potentially monitor traffic
- Less resistant to correlation attacks compared to I2P
Code Comparison
Tor (C):
static void circuit_build_failed(origin_circuit_t *circ, int reason) {
control_event_circuit_status(circ, CIRC_EVENT_FAILED, reason);
circuit_mark_for_close(TO_CIRCUIT(circ), reason);
}
I2P (Java):
public void failed(String reason) {
if (_state == BuildState.FAILED) return;
_state = BuildState.FAILED;
_failedReason = reason;
_log.info("Tunnel build failed: " + reason);
_manager.tunnelBuildFailed(this);
}
Both projects implement error handling for failed connections, but use different programming languages and approaches. Tor's implementation is in C and focuses on circuit building, while I2P's Java code handles tunnel building failures.
Freenet REference Daemon
Pros of fred
- More active development with frequent updates and commits
- Larger community of contributors and users
- Better documentation and user guides
Cons of fred
- Higher resource consumption and system requirements
- Steeper learning curve for new users
- Less focus on anonymity compared to I2P
Code Comparison
fred (Java):
public class Node {
private final NodeCrypto crypto;
private final NodeIPDetector ipDetector;
private final NodeConnectionManager connectionManager;
// ...
}
I2P (Java):
public class Router {
private final RouterContext _context;
private final CommSystemFacade _commSystem;
private final NetDbFacade _netDb;
// ...
}
Both projects use Java and have similar core structures, but fred's codebase appears more modular and focused on specific components, while I2P's codebase is more tightly integrated with its router context.
fred tends to have more descriptive class and method names, potentially improving code readability. I2P's codebase, on the other hand, uses more compact naming conventions and relies heavily on its router context for various operations.
Overall, both projects aim to provide decentralized, anonymous communication networks but take different approaches in their implementation and focus areas.
Go implementation of the Ethereum protocol
Pros of go-ethereum
- Larger community and more active development
- Comprehensive documentation and extensive ecosystem
- Better performance and scalability for blockchain operations
Cons of go-ethereum
- Higher complexity and steeper learning curve
- More resource-intensive to run a full node
- Less focused on privacy compared to I2P
Code Comparison
i2p.i2p (Java):
public class RouterContext extends I2PAppContext {
private final RouterService _routerService;
private volatile boolean _initialized;
private volatile boolean _started;
}
go-ethereum (Go):
type Ethereum struct {
config *Config
chainConfig *params.ChainConfig
shutdownChan chan bool
stop chan struct{}
scope event.SubscriptionScope
}
Summary
I2P focuses on anonymous communication and network privacy, while go-ethereum is designed for blockchain and smart contract operations. I2P is written in Java and emphasizes user privacy, whereas go-ethereum is implemented in Go and prioritizes blockchain functionality. Go-ethereum has a larger community and more extensive documentation, but it's also more complex and resource-intensive. I2P offers better privacy features but may have limited blockchain capabilities compared to go-ethereum.
Zcash - Internet Money
Pros of Zcash
- Focuses on privacy-centric cryptocurrency with advanced cryptographic features
- More active development and frequent updates
- Larger community and wider adoption in the cryptocurrency space
Cons of Zcash
- Narrower scope, primarily focused on financial transactions
- Requires more computational resources for privacy features
- Higher complexity in implementation and usage
Code Comparison
I2P (Java):
public void startRouter() {
_context = new RouterContext();
_context.initAll();
_context.router().setKillJob(new RouterKillJob());
_context.router().runRouter();
}
Zcash (C++):
void StartNode(boost::thread_group& threadGroup, CScheduler& scheduler, const CChainParams& chainparams)
{
uiInterface.InitMessage(_("Loading block index..."));
threadGroup.create_thread(boost::bind(&ThreadImport, boost::cref(chainparams)));
}
Both projects use different programming languages and have distinct architectures. I2P focuses on network routing and anonymity, while Zcash emphasizes secure financial transactions. The code snippets demonstrate their respective initialization processes, with I2P setting up a router context and Zcash starting the blockchain node.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
I2P
This is the source code for the reference Java implementation of I2P.
Latest release: https://geti2p.net/download
Installing
See INSTALL.txt or https://geti2p.net/download for installation instructions.
Documentation
API: http://docs.i2p-projekt.de/javadoc/ or run 'ant javadoc' then start at build/javadoc/index.html
How to contribute / Hack on I2P
Please check out HACKING.md and other documents in the docs directory.
Building packages from source
To get development branch from source control: https://geti2p.net/newdevelopers
Prerequisites
- Java SDK (preferably Oracle or OpenJDK) 8 or higher
- Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
- Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 6
- Apache Ant 1.9.8 or higher
- The xgettext, msgfmt, and msgmerge tools installed from the GNU gettext package http://www.gnu.org/software/gettext/
- Build environment must use a UTF-8 locale.
Ant build process
On x86 systems do:
ant pkg
On non-x86, use one of the following instead:
ant installer-linux
ant installer-freebsd
ant installer-osx
Run 'ant' with no arguments to see other build options.
Gradle build process
Full builds of installers or updates are not yet possible, but the code can be compiled with:
./gradlew assemble
This will download dependencies over the clearnet by default, including Gradle
itself. To download through a SOCKS proxy (e.g. Tor), add the following lines to
your ~/.gradle/gradle.properties
:
systemProp.socksProxyHost=localhost
systemProp.socksProxyPort=9150
Development builds
Automatic CI builds are available at the continuous integration page.
Docker
For more information how to run I2P in Docker, see Docker.md
Contact info
Need help? See the IRC channel #i2p on irc.freenode.net
Bug reports: https://i2pgit.org/i2p-hackers/i2p.i2p/-/issues http://git.idk.i2p/i2p-hackers/i2p.i2p/-/issues
Contact information, security issues, press inquiries: https://geti2p.net/en/contact
Licenses
See LICENSE.txt
Top Related Projects
Monero: the secure, private, untraceable cryptocurrency
unofficial git repo -- report bugs/issues/pull requests on https://gitlab.torproject.org/ --
Freenet REference Daemon
Go implementation of the Ethereum protocol
Zcash - Internet Money
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot