propagate from branch 'i2p.www' (head c8354c923fc97e3ad8c94ea4ba561087d8f68ea8)

to branch 'i2p.www.revamp' (head 93d34f791a25a0ef2f2821afd47c2f359fd41f57)
This commit is contained in:
str4d
2013-07-01 12:23:03 +00:00
17 changed files with 265 additions and 81 deletions

View File

@@ -4,13 +4,13 @@
<h1>{{ _('Download I2P') }}</h1> <h1>{{ _('Download I2P') }}</h1>
<h3>{{ _('Dependency') }}</h3> <h3>{{ _('Dependency') }}</h3>
<p>{% trans java='https://www.java.com/en/download/index.jsp', <p>{% trans java='http://java.com/download/',
openjdk='http://openjdk.java.net/install/', openjdk='http://openjdk.java.net/install/',
icedtea='http://icedtea.classpath.org/wiki/Main_Page' %} icedtea='http://icedtea.classpath.org/wiki/Main_Page' %}
Java Runtime 1.5 or higher. Java Runtime 1.5 or higher.
(<a href="{{ java }}">Oracle/Sun Java Version 6</a>, (<a href="{{ java }}">Oracle Java Version 6/7</a>,
<a href="{{ openjdk }}">OpenJDK 6</a>, or <a href="{{ openjdk }}">OpenJDK 6/7</a>, or
<a href="{{ icedtea }}">IcedTea6</a> <a href="{{ icedtea }}">IcedTea6/7</a>
recommended) recommended)
<br /> <br />
<a href="http://java.com/en/download/installed.jsp?detect=jre&amp;try=1">Determine your installed Java version here</a> <a href="http://java.com/en/download/installed.jsp?detect=jre&amp;try=1">Determine your installed Java version here</a>
@@ -140,8 +140,12 @@ or type <tt>java -version</tt> at your command prompt.
</div> </div>
</div> </div>
<div class="details"> <div class="details">
{% trans monotoneurl=site_url('get-involved/guides/new-developers'), i2pversion=ver() -%} {% trans monotoneurl=site_url('get-involved/guides/new-developers'),
Alternately, you can fetch the source from <a href="{{ monotoneurl }}#getting-the-i2p-code">monotone</a>. gitrepo='http://git.repo.i2p/w/i2p.i2p.git',
github='https://github.com/i2p/i2p.i2p',
i2pversion=ver() -%}
Alternately, you can fetch the source from <a href="{{ monotoneurl }}#getting-the-i2p-code">monotone</a>
or via Git from <a href="{{ gitrepo }}">git.repo.i2p</a> or <a href="{{ github }}">Github</a>.
<br /> <br />
Run <code>(tar xjvf i2psource_{{ i2pversion }}.tar.bz2 ; cd i2p-{{ i2pversion }} ; ant pkg)</code> then either Run <code>(tar xjvf i2psource_{{ i2pversion }}.tar.bz2 ; cd i2p-{{ i2pversion }} ; ant pkg)</code> then either
run the GUI installer or headless install as above. run the GUI installer or headless install as above.

View File

@@ -309,7 +309,15 @@ The SHA256 hash of the key being looked up or stored is XOR-ed with
the hash of the router in question to determine closeness. the hash of the router in question to determine closeness.
A modification to this algorithm is done to increase the costs of <a href="#sybil-partial">Sybil attacks</a>. A modification to this algorithm is done to increase the costs of <a href="#sybil-partial">Sybil attacks</a>.
Instead of the SHA256 hash of the key being looked up of stored, the SHA256 hash is taken Instead of the SHA256 hash of the key being looked up of stored, the SHA256 hash is taken
of the key appended with the date: yyyyMMdd (SHA256(key + yyyyMMdd). of the 32-byte binary key appended with the UTC date represented as an 8-byte ASCII string yyyyMMdd, i.e. SHA256(key + yyyyMMdd).
This is called the "routing key", and it changes every day at midnight UTC.
The daily transformation of the DHT is sometimes called "keyspace rotation",
although it isn't strictly a rotation.
{%- endtrans %}</p>
<p>{% trans -%}
Routing keys are never sent on-the-wire in any I2NP message, they are only used locally for
determination of distance.
{%- endtrans %}</p> {%- endtrans %}</p>
@@ -332,6 +340,28 @@ This allows an initial response, and later responses, to be sent to an appropria
without requiring any LeaseSet lookups, or requiring the communicating Destinations to have published LeaseSets at all. without requiring any LeaseSet lookups, or requiring the communicating Destinations to have published LeaseSets at all.
{%- endtrans %}</p> {%- endtrans %}</p>
<h3>Floodfill Selection</h3>
<p>{% trans -%}
The DatabaseStoreMessage should be sent to the floodfill that is closest
to the current routing key for the RouterInfo or LeaseSet being stored.
Currently, the closest floodfill is found by a search in the local database.
Even if that floodfill is not actually closest, it will flood it "closer" by
sending it to multiple other floodfills.
This provides a high degree of fault-tolerance.
{%- endtrans %}</p>
<p>{% trans -%}
In traditional Kademlia, a peer would do a "find-closest" search before inserting
an item in the DHT to the closest target. As the verify operation will tend to
discover closer floodfills if they are present, a router will quickly improve
its knowledge of the DHT "neighborhood" for the RouterInfo and LeaseSets it regularly publishes.
While I2NP does not define a "find-closest" message, if it becomes necessary,
a router may simply do an iterative search for a key with the least significant bit flipped
(i.e. key ^ 0x01) until no closer peers are received in the DatabaseSearchReplyMessages.
This ensures that the true closest peer will be found even if a more-distant peer had
the netdb item.
{%- endtrans %}</p>
<h3>{% trans %}RouterInfo Storage to Floodfills{% endtrans %}</h3> <h3>{% trans %}RouterInfo Storage to Floodfills{% endtrans %}</h3>
<p>{% trans i2np=site_url('docs/protocol/i2np') -%} <p>{% trans i2np=site_url('docs/protocol/i2np') -%}
@@ -372,12 +402,15 @@ This message is sent back to one of the client's inbound tunnels.
After a floodfill router receives a DatabaseStoreMessage containing a After a floodfill router receives a DatabaseStoreMessage containing a
valid RouterInfo or LeaseSet which is newer than that previously stored in its valid RouterInfo or LeaseSet which is newer than that previously stored in its
local NetDb, it "floods" it. local NetDb, it "floods" it.
To flood a NetDb entry, it looks up the 7 floodfill routers closest to the key To flood a NetDb entry, it looks up several (currently 4) floodfill routers closest to the routing key
of the NetDb entry. (The key is the SHA256 Hash of the RouterIdentity or Destination with the date (yyyyMMdd) appended.) of the NetDb entry. (The routing key is the SHA256 Hash of the RouterIdentity or Destination with the date (yyyyMMdd) appended.)
By flooding to those closest to the key, not closest to itself, the floodfill ensures that the storage
gets to the right place, even if the storing router did not have good knowledge of the
DHT "neighborhood" for the routing key.
{%- endtrans %}</p> {%- endtrans %}</p>
<p>{% trans i2np=site_url('docs/protocol/i2np') -%} <p>{% trans i2np=site_url('docs/protocol/i2np') -%}
It then directly connects to each of the 7 peers The floodfill then directly connects to each of those peers
and sends it a <a href="{{ i2np }}">I2NP</a> DatabaseStoreMessage and sends it a <a href="{{ i2np }}">I2NP</a> DatabaseStoreMessage
with a zero Reply Token. The message is not end-to-end garlic encrypted, with a zero Reply Token. The message is not end-to-end garlic encrypted,
as this is a direct connection, so there are no intervening routers as this is a direct connection, so there are no intervening routers
@@ -658,6 +691,19 @@ to the target key, or to each other.
<p>{% trans -%} <p>{% trans -%}
This attack becomes more difficult as the network size grows. This attack becomes more difficult as the network size grows.
However, recent research demonstrates that the keyspace rotation is not particularly effective.
An attacker can precompute numerous router hashes in advance,
and only a few routers are sufficient to "eclipse" a portion
of the keyspace within a half hour after rotation.
{%- endtrans %}</p>
<p>{% trans -%}
One consequence of daily keyspace rotation is that the distributed network database
may become unreliable for a few minutes after the rotation --
lookups will fail because the new "closest" router has not received a store yet.
The extent of the issue, and methods for mitigation
(for example netdb "handoffs" at midnight)
are a topic for further study.
{%- endtrans %}</p> {%- endtrans %}</p>
<p>{% trans -%} <p>{% trans -%}

View File

@@ -1,7 +1,7 @@
{% extends "global/layout.html" %} {% extends "global/layout.html" %}
{% block title %}I2NP{% endblock %} {% block title %}I2NP{% endblock %}
{% block lastupdated %}{% trans %}August 2010{% endtrans %}{% endblock %} {% block lastupdated %}{% trans %}June 2013{% endtrans %}{% endblock %}
{% block accuratefor %}0.8{% endblock %} {% block accuratefor %}0.9.6{% endblock %}
{% block content %} {% block content %}
<h2>{% trans %}I2P Network Protocol{% endtrans %} (I2NP)</h2> <h2>{% trans %}I2P Network Protocol{% endtrans %} (I2NP)</h2>
<p>{% trans -%} <p>{% trans -%}
@@ -20,16 +20,11 @@ through multiple hops to the ultimate destination.
Priority is only used locally at the origin, i.e. when queuing for outbound delivery. Priority is only used locally at the origin, i.e. when queuing for outbound delivery.
{%- endtrans %}</p> {%- endtrans %}</p>
<p>{% trans -%} <p>{% trans outnetmessage='http://docs.i2p-projekt.de/javadoc/net/i2p/router/OutNetMessage.html' -%}
Both the NTCP and UDP transports implement priority transmission, The priorities listed below may not be current and are subject to change.
but in quite different manners. See the <a href="{{ outnetmessage }}">OutNetMessage Javadocs</a>
UDP has complex code with queues for each priority, however it treats for the current priority settings.
messages with priorities 400-499, for example, the same. Priority queueing implementation may vary.
(The priority queues are 100, 200, 300, 400, 500, and 1000)
These are global queues for all peers.
NTCP has a trivial linear search for the highest priority within
each buffer for a particular peer.
This is much less effective.
{%- endtrans %}</p> {%- endtrans %}</p>
<h3>{% trans %}Message Format{% endtrans %}</h3> <h3>{% trans %}Message Format{% endtrans %}</h3>
@@ -104,13 +99,8 @@ which is wrapped in a DataMessage.
DatabaseLookupMessage DatabaseLookupMessage
<td align=right>2 <td align=right>2
<td>&nbsp; <td>&nbsp;
<td align=right>100/400 <td align=right>500
<td>{% trans -%} <td>{% trans %}May vary{% endtrans %}</td>
400 normally; 100 if from HarvesterJob and sent directly;
400 for a router lookup
{%- endtrans %}</td>
</tr>
<tr><td> <tr><td>
DatabaseSearchReplyMessage DatabaseSearchReplyMessage
<td align=right>3 <td align=right>3
@@ -126,9 +116,9 @@ three floodfill routers are returned.
DatabaseStoreMessage DatabaseStoreMessage
<td align=right>1 <td align=right>1
<td align=right>{% trans %}Varies{% endtrans %}</td> <td align=right>{% trans %}Varies{% endtrans %}</td>
<td align=right>100/400 <td align=right>460
<td>{% trans -%} <td>{% trans -%}
Usually 100 (why?) Priority may vary.
Size is 898 bytes for a typical 2-lease leaseSet. Size is 898 bytes for a typical 2-lease leaseSet.
RouterInfo structures are compressed, and size varies; however RouterInfo structures are compressed, and size varies; however
there is a continuing effort to reduce the amount of data published in a RouterInfo there is a continuing effort to reduce the amount of data published in a RouterInfo
@@ -140,8 +130,10 @@ as we approach release 1.0.
DataMessage DataMessage
<td align=right>20 <td align=right>20
<td align=right>4 - 62080 <td align=right>4 - 62080
<td align=right>400 <td align=right>425
<td> <td>{% trans -%}
Priority may vary on a per-destination basis
{%- endtrans %}</td>
</tr> </tr>
<tr><td> <tr><td>
@@ -167,8 +159,8 @@ but when unwrapped, given a priority of 100 by the forwarding router
<a href="{{ site_url('docs/spec/tunnel-creation') }}#tunnelCreate.requestRecord">TunnelBuildMessage</a> <a href="{{ site_url('docs/spec/tunnel-creation') }}#tunnelCreate.requestRecord">TunnelBuildMessage</a>
<td align=right>21 <td align=right>21
<td align=right>4224 <td align=right>4224
<td align=right>300/500 <td align=right>500
<td>{% trans %}Usually 500 (why?){% endtrans %}</td> <td>
</tr> </tr>
<tr><td> <tr><td>
@@ -203,7 +195,7 @@ TunnelGatewayMessage
VariableTunnelBuildMessage VariableTunnelBuildMessage
<td align=right>23 <td align=right>23
<td align=right>1057 - 4225 <td align=right>1057 - 4225
<td align=right>300/500 <td align=right>500
<td>{% trans %}Shorter TunnelBuildMessage as of 0.7.12{% endtrans %}</td> <td>{% trans %}Shorter TunnelBuildMessage as of 0.7.12{% endtrans %}</td>
</tr> </tr>

View File

@@ -519,6 +519,8 @@ data:
<h4>Notes</h4> <h4>Notes</h4>
<ul><li> <ul><li>
For security, the reply fields are ignored if the message is received down a tunnel. For security, the reply fields are ignored if the message is received down a tunnel.
</li><li>
The key is the "real" hash of the RouterIdentity or Destination, NOT the routing key.
</li></ul> </li></ul>
@@ -622,28 +624,33 @@ excludedPeers ::
reply_key :: reply_key ::
32 byte SessionKey 32 byte SessionKey
only included if encryptionFlag == 1 only included if encryptionFlag == 1, only as of release 0.9.7
tags :: tags ::
1 byte Integer 1 byte Integer
valid range: 1-32 (typically 1) valid range: 1-32 (typically 1)
the number of reply tags that follow the number of reply tags that follow
only included if encryptionFlag == 1 only included if encryptionFlag == 1, only as of release 0.9.7
reply_tags :: reply_tags ::
one or more 32 byte SessionTags (typically one) one or more 32 byte SessionTags (typically one)
only included if encryptionFlag == 1 only included if encryptionFlag == 1, only as of release 0.9.7
{% endhighlight %} {% endhighlight %}
<h4>Notes</h4> <h4>Notes</h4>
<ul><li> <ul><li>
Encryption flag, reply key, and reply tags are preliminary, not yet implemented. The key may be for a RouterInfo or LeaseSet, as they are in the same key space,
and there is no flag to request only a particular type of data.
</li><li>
Encryption flag, reply key, and reply tags as of release 0.9.7.
</li><li> </li><li>
Encrypted replies are only useful when the response is through a tunnel. Encrypted replies are only useful when the response is through a tunnel.
</li><li> </li><li>
The number of included tags could be greater than one if alternative DHT lookup strategies The number of included tags could be greater than one if alternative DHT lookup strategies
(for example, recursive lookups) are implemented. (for example, recursive lookups) are implemented.
</li><li>
The lookup key and exclude keys are the "real" hashes, NOT routing keys.
</li></ul> </li></ul>
@@ -700,12 +707,11 @@ key ::
num :: num ::
1 byte Integer 1 byte Integer
number of peer hashes that follow number of peer hashes that follow, 0-255
peer_hash :: peer_hash ($num entries) ::
32 bytes 32 bytes
SHA256 of the RouterInfo that the other router thinks are close to the key SHA256 of the RouterIdentity that the other router thinks is close to the key
$num entries
from :: from ::
32 bytes 32 bytes
@@ -713,9 +719,19 @@ from ::
{% endhighlight %} {% endhighlight %}
<h4>Notes</h4> <h4>Notes</h4>
<p> <ul><li>
The 'from' hash is unauthenticated and cannot be trusted. The 'from' hash is unauthenticated and cannot be trusted.
</p> </li><li>
The returned peer hashes are not necessarily closer to the key
than the router being queried.
</li><li>
Typical number of hashes returned: 3
</li><li>
The lookup key, peer hashes, and from hash are "real" hashes, NOT routing keys.
</li>
<h3 id="msg_DeliveryStatus">DeliveryStatus</h3> <h3 id="msg_DeliveryStatus">DeliveryStatus</h3>
<h4>Description</h4> <h4>Description</h4>

View File

@@ -1,6 +1,6 @@
{% extends "global/layout.html" %} {% extends "global/layout.html" %}
{% block title %}SSU Protocol Specification{% endblock %} {% block title %}SSU Protocol Specification{% endblock %}
{% block lastupdated %}May 2013{% endblock %} {% block lastupdated %}June 2013{% endblock %}
{% block accuratefor %}0.9.6{% endblock %} {% block accuratefor %}0.9.6{% endblock %}
{% block content %} {% block content %}
@@ -35,8 +35,9 @@ key. The specific construct of the MAC is the first 16 bytes from:</p>
</pre> </pre>
where '||' means append. where '||' means append.
The payload is the message starting with the flag byte. The payload is the message starting with the flag byte.
The macKey is either the introduction key or the The macKey is either the introduction key or is constructed from the
session key, as specified for each message below. exchanged DH key (see details below), as specified for each message below.
Note that protocolVersion is 0, so the exclusive or is a no-op.
<b>WARNING</b> - the HMAC-MD5-128 used here is non-standard, <b>WARNING</b> - the HMAC-MD5-128 used here is non-standard,
see <a href="{{ site_url('docs/how/cryptography') }}#udp">the cryptography page</a> for details. see <a href="{{ site_url('docs/how/cryptography') }}#udp">the cryptography page</a> for details.
@@ -52,6 +53,48 @@ and is currently set to 0. Peers using a different protocol version will
not be able to communicate with this peer, though earlier versions not not be able to communicate with this peer, though earlier versions not
using this flag are.</p> using this flag are.</p>
<h3>Session Key Details</h3>
The 32-byte session key is created as follows:
<ol><li>
Take the exchanged DH key, represented as a positive minimal-length BigInteger byte array (two's complement big-endian)
</li><li>
If the most significant bit is 1 (i.e. array[0] & 0x80 != 0),
prepend a 0x00 byte, as in Java's BigInteger.toByteArray() representation
</li><li>
If the byte array is greater than or equal to 32 bytes, use the first (most significant) 32 bytes
</li><li>
If the byte array is less than 32 bytes, append 0x00 bytes to extend to 32 bytes.
<i>Won't happen - See note below</i>
</li></ol>
<h3>MAC Key Details</h3>
The 32-byte MAC key is created as follows:
<ol><li>
Take the exchanged DH key byte array, prepended with a 0x00 byte if necessary,
from step 2 in the Session Key Details above.
</li><li>
If that byte array is greater than or equal to 64 bytes, the MAC key is
bytes 33-64 from that byte array.
</li><li>
If that byte array is greater than 32 bytes but less than 64 bytes, the MAC key is formed from
the bytes starting at byte 33, followed by 0x00 bytes to extend the MAC key to 32 bytes.
<i>Broken - See note below</i>
</li><li>
If that byte array is equal to 32 bytes, the MAC key is all zeros.
<i>Broken - See note below</i>
</li><li>
If that byte array is less than 32 bytes, the MAC key is the SHA-256 Hash of the 32-bytes
from step 3 in the Session Key Details above.
<i>See note below</i>
</li></ol>
Important note: It appears that the existing code is buggy and does not correctly handle DH key byte arrays
between 32 and 63 bytes (steps 3 and 4 above) and the connection will fail.
As these cases won't ever work, they are subject to change (probably using SHA-256).
Since the nominal exchanged DH key is 256 bytes, the chances of the mininimal representation
being less than 64 bytes is vanishingly small.
<h3>Header Format</h3>
<p>Within the AES encrypted payload, there is a minimal common structure <p>Within the AES encrypted payload, there is a minimal common structure
to the various messages - a one byte flag and a four byte sending to the various messages - a one byte flag and a four byte sending
timestamp (seconds since the unix epoch). The flag byte contains timestamp (seconds since the unix epoch). The flag byte contains
@@ -117,6 +160,12 @@ provide a significant amount of protection.
In the future, additional padding in the transport layer up to In the future, additional padding in the transport layer up to
a set of fixed packet sizes may be appropriate to further hide the data a set of fixed packet sizes may be appropriate to further hide the data
fragmentation to external adversaries. fragmentation to external adversaries.
</p><p>
Through release 0.9.6, messages were only padded to the next 16 byte boundary,
and messages not a multiple of 16 bytes could possibly be invalid.
As of release 0.9.7, messages may be padded to any length as long as the current MTU is honored.
Any extra 1-15 padding bytes beyond the last block of 16 bytes cannot be encrypted or decrypted and will be ignored.
However, the full length and all padding is included in the MAC calculation.
</p> </p>
@@ -412,7 +461,7 @@ Signed-on time appears to be unused or unverified in the current implementation.
<h3 id="sessionDestroyed">SessionDestroyed (type 8)</h3> <h3 id="sessionDestroyed">SessionDestroyed (type 8)</h3>
<p> <p>
The Session Destroyed message was implemented (reception only) in release 0.8.1, The Session Destroyed message was implemented (reception only) in release 0.8.1,
and is never sent. Transmission implemented as of release 0.8.9. and is sent as of release 0.8.9.
</p> </p>
<table border="1"> <table border="1">
@@ -752,6 +801,10 @@ While we use the I2NP message ID as the SSU message ID, from the SSU
protocol view, they are random numbers. protocol view, they are random numbers.
In fact, since the router uses a single Bloom filter for all peers, In fact, since the router uses a single Bloom filter for all peers,
the message ID must be an actual random number. the message ID must be an actual random number.
</li><li>
Because there are no sequence numbers, there is no way to be sure an ACK was received.
The current implementation routinely sends a large amount of duplicate ACKs.
Duplicate ACKs should not be taken as an indication of congestion.
</li></ul> </li></ul>

View File

@@ -85,6 +85,7 @@ message ID that the message (or reply) should use.</p>
Bit 7 indicates that the hop will be an inbound gateway (IBGW). Bit 7 indicates that the hop will be an inbound gateway (IBGW).
Bit 6 indicates that the hop will be an outbound endpoint (OBEP). Bit 6 indicates that the hop will be an outbound endpoint (OBEP).
If neither bit is set, the hop will be an intermediate participant. If neither bit is set, the hop will be an intermediate participant.
Both cannot be set at once.
<h4>Request Record Creation</h4> <h4>Request Record Creation</h4>
<p> <p>
@@ -120,7 +121,7 @@ for the hop in question.
<p>When a hop receives a TunnelBuildMessage, it looks through the <p>When a hop receives a TunnelBuildMessage, it looks through the
records contained within it for one starting with their own identity records contained within it for one starting with their own identity
hash (trimmed to 8 bytes). It then decrypts the ElGamal block from hash (trimmed to 16 bytes). It then decrypts the ElGamal block from
that record and retrieves the protected cleartext. At that point, that record and retrieves the protected cleartext. At that point,
they make sure the tunnel request is not a duplicate by feeding the they make sure the tunnel request is not a duplicate by feeding the
AES-256 reply key into a bloom filter. AES-256 reply key into a bloom filter.

View File

@@ -66,17 +66,36 @@ still maintain an unlimited search horizon.
<dt><b>Investigate refactoring</b></dt> <dt><b>Investigate refactoring</b></dt>
<dd>Investigate I2P NetDB refactoring strategy.</dd> <dd>Investigate I2P NetDB refactoring strategy.</dd>
<dt><b>Investigate multirouter</b></dt> <dt><b>Investigate and fix MultiRouter</b></dt>
<dd>Investigate the maturity of multirouter, which will simplify development tremendously.</dd> <dd>Investigate the usability of MultiRouter, and fix issues found. MultiRouter will simplify further development.</dd>
<dt><b>Select base implementation</b></dt>
<dd>i2p.zzz.kademlia / i2psnarkdht is the most likely base implementation.</dd>
</dl>
</td>
<td><p><a href="http://trac.i2p2.de/changeset/0f0a99298bfbd4652d3dad2885ee1f0e1472c156">Trac</a></p></td>
<td><p>162.5&euro;</p></td>
</tr>
<tr>
<td><h4>Begin implementation of the most basic DHT</h4></td>
<td>
<dl>
<dt><b>Investigate I2CP</b></dt>
<dd>Investigate and design/select an I2NP message.</dd>
<dt><b>Implement iterative DHT lookups</b></dt>
<dd>Implement support for iterative DHT lookups</dd>
<dt><b>More to come</b></dt>
<dd>...</dd>
</dl> </dl>
</td> </td>
<td><p>None yet</p></td> <td><p>None yet</p></td>
<td><p>162.5&euro;</p></td> <td><p>325&euro;</p></td>
</tr> </tr>
<tr> <tr>
<td><h4>More to come</h4></td> <td><h4>More to come</h4></td>
<td>...</td> <td>...</td>

View File

@@ -769,5 +769,29 @@ QUamNO18hBy7N/YdF2DPoV41ntobkM+kVfmR0jLCbiNjisMg1eO8mQ1ynY4Kf2F1
=7u31 =7u31
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----
digit:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Applicable to the code I contribute to the I2P project,
I hereby state that:
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
* I have the right to release the code I commit under the terms I am committing it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (MingW32)
iQEcBAEBAgAGBQJRzgXbAAoJEAhQLmhPD07oWTkH/0nonFM5g0gw5SlqLKTxuBal
OMomT+4+FFaCDgXOSXnnlw38no7c234LeKpuvlr0LLxjiRdfcsnnuvqIWmeeY4cq
m3w6xGI+wNO2c/FYwTVumJO165sPc0Rg3b8d+zdUBncactRMdxcWUJTSHPdNzW2/
tmtChmVft6SOj+qgBQEMW0IjYm/4+vg4NEO4OAg8ncogea8dubpIFJjE2UbSr7dE
jkBoHiRXn4EN20Id4puCwXQK4QbbGwJGlKAUPgZXMd7nLqu9MljwLDkDWBMY9nRl
Zf9i4Wqw8wKgkWIIbZ2+V+zP83FLcX6ga+GMr8tf/bwWjSe1PN7mZAQlPB4p8Qc=
=NxxT
-----END PGP SIGNATURE-----
</pre> </pre>
{% endblock %} {% endblock %}

View File

@@ -4,9 +4,9 @@
<h1>تحميل I2P</h1> <h1>تحميل I2P</h1>
<h3>المتطلبات البرمجية</h3> <h3>المتطلبات البرمجية</h3>
اصدار 1.5 من Java Runtime (أو أعلى) اصدار 1.5 من Java Runtime (أو أعلى)
(<a href="http://java.com/download/">Oracle/Sun Java Version 6</a>, (<a href="http://java.com/download/">Oracle Java Version 6/7</a>,
<a href="http://openjdk.java.net/install/">OpenJDK 6</a>, or <a href="http://openjdk.java.net/install/">OpenJDK 6/7</a>, or
<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6</a> <a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6/7</a>
منصوح بهم) منصوح بهم)
<br> <br>
<a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">اعرف نسخة الجافا المثبتة لديك من هنا</a> <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">اعرف نسخة الجافا المثبتة لديك من هنا</a>

View File

@@ -3,7 +3,7 @@
{% block content %} {% block content %}
<h1>Stáhnout I2P</h1> <h1>Stáhnout I2P</h1>
<h3>Požadavky pro instalaci</h3> <h3>Požadavky pro instalaci</h3>
<a href="http://java.com/download/">Sun Java</a> 1.5 nebo novější (doporučená verze <a href="http://java.com/download/">Sun Java 1.6</a>), nebo ekvivalentní JRE. <a href="http://java.com/download/">Oracle Java</a> 1.5 nebo novější (doporučená verze <a href="http://java.com/download/">Oracle Java 6/7</a>), nebo ekvivalentní JRE.
<br> <br>
Svou aktuální nainstalovanou verzi Javy si můžete ověřit <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">na této stránce</a> Svou aktuální nainstalovanou verzi Javy si můžete ověřit <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">na této stránce</a>
nebo z příkazové řádky pomocí příkazu <tt>java -version</tt> nebo z příkazové řádky pomocí příkazu <tt>java -version</tt>
@@ -55,7 +55,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256 (SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br /> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br />
Alternativně lze zdrojový kód stáhnout <a href="newdevelopers#getting-the-i2p-code">z repozitáře monotone</a>.<br/> Alternativně lze zdrojový kód stáhnout <a href="newdevelopers#getting-the-i2p-code">z repozitáře monotone</a>
<a href="http://git.repo.i2p/w/i2p.i2p.git">git.repo.i2p</a> <a href="https://github.com/i2p/i2p.i2p">Github</a>.<br/>
Spusťte sestavení programu příkazem <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code> a potom Spusťte sestavení programu příkazem <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code> a potom
spusťte grafický instalační program nebo instalaci z příkazové řádky (viz výše).</li> spusťte grafický instalační program nebo instalaci z příkazové řádky (viz výše).</li>
</ul> </ul>

View File

@@ -4,9 +4,9 @@
<h1>Download I2P</h1> <h1>Download I2P</h1>
<h3>Abh&auml;ngigkeiten</h3> <h3>Abh&auml;ngigkeiten</h3>
Java Runtime 1.5 oder neuer. Java Runtime 1.5 oder neuer.
(<a href="http://java.com/download/">Oracle/Sun Java Version 6</a>, (<a href="http://java.com/download/">Oracle Java Version 6/7</a>,
<a href="http://openjdk.java.net/install/">OpenJDK 6</a>, oder <a href="http://openjdk.java.net/install/">OpenJDK 6/7</a>, oder
<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6</a> <a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6/7</a>
recommended) recommended)
<br> <br>
<a href="http://java.com/de/download/installed.jsp?detect=jre&try=1">Bestimme hier deine Java Version</a> <a href="http://java.com/de/download/installed.jsp?detect=jre&try=1">Bestimme hier deine Java Version</a>
@@ -60,7 +60,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256 (SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br /> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br />
Alternativ kannst Du den Quelltext aus <a href="newdevelopers_de#getting-the-i2p-code">Monotone</a> kopieren. Alternativ kannst Du den Quelltext aus <a href="newdevelopers_de#getting-the-i2p-code">Monotone</a>
<a href="http://git.repo.i2p/w/i2p.i2p.git">git.repo.i2p</a> <a href="https://github.com/i2p/i2p.i2p">Github</a> kopieren.<br/>
<br/> <br/>
F&uuml;hre folgendes aus: <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p_0.9.6 ; ant pkg)</code> F&uuml;hre folgendes aus: <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p_0.9.6 ; ant pkg)</code>
und starte dann den GUI Installer oder die headless Installation wie oben beschrieben</li> und starte dann den GUI Installer oder die headless Installation wie oben beschrieben</li>

View File

@@ -4,9 +4,9 @@
<h1>Ληψη I2P</h1> <h1>Ληψη I2P</h1>
<h3>Εξάρτηση</h3> <h3>Εξάρτηση</h3>
Java Runtime 1.5 ή νεότερο. Java Runtime 1.5 ή νεότερο.
(<a href="http://java.com/download/">Oracle/Sun Java Version 6</a>, (<a href="http://java.com/download/">Oracle Java Version 6/7</a>,
<a href="http://openjdk.java.net/install/">OpenJDK 6</a>, ή <a href="http://openjdk.java.net/install/">OpenJDK 6/7</a>, ή
<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6</a> <a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6/7</a>
συνιστάται) συνιστάται)
<br /> <br />
<a href="http://java.com/en/download/installed.jsp?detect=jre&amp;try=1">Βρείτε την έκδοση Java που έχετε εδώ</a> <a href="http://java.com/en/download/installed.jsp?detect=jre&amp;try=1">Βρείτε την έκδοση Java που έχετε εδώ</a>
@@ -61,7 +61,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256 (SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br /> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br />
Εναλλακτικά, μπορείτε να πάρετε τον πηγαίο κώδικα από το <a href="newdevelopers#getting-the-i2p-code">monotone</a>. Εναλλακτικά, μπορείτε να πάρετε τον πηγαίο κώδικα από το <a href="newdevelopers#getting-the-i2p-code">monotone</a>
<a href="http://git.repo.i2p/w/i2p.i2p.git">git.repo.i2p</a> <a href="https://github.com/i2p/i2p.i2p">Github</a>.
<br /> <br />
Εκτελέστε <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code> και μετά Εκτελέστε <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code> και μετά
είτε τρέξτε την εγκατάσταση με γραφικό περιβάλλον είτε από τη γραμμή εντολών όπως παραπάνω. είτε τρέξτε την εγκατάσταση με γραφικό περιβάλλον είτε από τη γραμμή εντολών όπως παραπάνω.

View File

@@ -4,9 +4,9 @@
<h1>Descargar I2P</h1> <h1>Descargar I2P</h1>
<h3>Dependencias</h3> <h3>Dependencias</h3>
Java Runtime 1.5 o superior. Java Runtime 1.5 o superior.
(<a href="http://java.com/download/">Oracle/Sun Java Versión 6</a>, (<a href="http://java.com/download/">Oracle Java Versión 6/7</a>,
<a href="http://openjdk.java.net/install/">OpenJDK 6</a>, o <a href="http://openjdk.java.net/install/">OpenJDK 6/7</a>, o
<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6</a> <a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6/7</a>
recomendado) recomendado)
<br> <br>
<a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">Determina aquí tu versión instalada de Java</a> <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">Determina aquí tu versión instalada de Java</a>
@@ -60,7 +60,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256 (SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br /> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br />
De forma alternativa, puedes obtener las fuentes usando <a href="newdevelopers#getting-the-i2p-code">monotone</a>. De forma alternativa, puedes obtener las fuentes usando <a href="newdevelopers#getting-the-i2p-code">monotone</a>
<a href="http://git.repo.i2p/w/i2p.i2p.git">git.repo.i2p</a> <a href="https://github.com/i2p/i2p.i2p">Github</a>.
<br/> <br/>
Ejecuta <code>tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg ;</code> después puedes arrancar el instalador gráfico o bien hacer la instalación desde la línea de comandos descritas anteriormente.</li> Ejecuta <code>tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg ;</code> después puedes arrancar el instalador gráfico o bien hacer la instalación desde la línea de comandos descritas anteriormente.</li>
</ul> </ul>

View File

@@ -5,9 +5,9 @@ Traduction de juillet 2011. <a href="download.html">Version anglaise actuelle</a
<h1>Télécharger I2P</h1> <h1>Télécharger I2P</h1>
<h3>Prérequis</h3> <h3>Prérequis</h3>
Java Runtime 1.5 ou plus récent. Java Runtime 1.5 ou plus récent.
(<a href="http://java.com/download/">Oracle/Sun Java Version 6</a>, (<a href="http://java.com/download/">Oracle Java Version 6/7</a>,
<a href="http://openjdk.java.net/install/">OpenJDK 6</a>, ou <a href="http://openjdk.java.net/install/">OpenJDK 6/7</a>, ou
<a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6</a> <a href="http://icedtea.classpath.org/wiki/Main_Page">IcedTea6/7</a>
recommandé) recommandé)
<br> <br>
<a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">Déterminez la version de Java installée</a> <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">Déterminez la version de Java installée</a>
@@ -57,7 +57,8 @@ ou tapez <tt>java -version</tt> à l'invite de commande.
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2">i2psource_0.9.6.tar.bz2</a> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2">i2psource_0.9.6.tar.bz2</a>
(SHA256 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 (SHA256 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br /> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br />
Vous pouvez si vous préférez récupérer les sources sur <a href="newdevelopers#getting-the-i2p-code">monotone</a>. Vous pouvez si vous préférez récupérer les sources sur <a href="newdevelopers#getting-the-i2p-code">monotone</a>
<a href="http://git.repo.i2p/w/i2p.i2p.git">git.repo.i2p</a> <a href="https://github.com/i2p/i2p.i2p">Github</a>.
<br/> <br/>
Exécuter <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code> puis, soit Exécuter <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code> puis, soit
lancer l'installeur graphique, soit passer par la ligne de commande.</li> lancer l'installeur graphique, soit passer par la ligne de commande.</li>

View File

@@ -6,7 +6,7 @@
<h3>Требования для установки</h3> <h3>Требования для установки</h3>
<a href="http://java.com/download/">Sun Java</a> 1.5 или новее (рекомендуется <a href="http://java.com/download/">Sun Java 1.6</a>), либо иная совместимая JRE. <a href="http://java.com/download/">Oracle Java</a> 1.5 или новее (рекомендуется <a href="http://java.com/download/">Oracle Java 6/7</a>), либо иная совместимая JRE.
<br> <br>
Узнать, какая версия Java установлена на Вашем компьютере можно <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">на этой странице</a>, либо набрав в командной строке <tt>java -version</tt> Узнать, какая версия Java установлена на Вашем компьютере можно <a href="http://java.com/en/download/installed.jsp?detect=jre&try=1">на этой странице</a>, либо набрав в командной строке <tt>java -version</tt>
@@ -62,7 +62,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
<a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br /> <a href="http://mirror.i2p2.de/i2psource_0.9.6.tar.bz2.sig">sig</a>)<br />
(Как вариант, можете скачать текущий исходный код из <a href="newdevelopers#getting-the-i2p-code">monotone-репозитория</a>.) (Как вариант, можете скачать текущий исходный код из <a href="newdevelopers#getting-the-i2p-code">monotone-репозитория</a>
<a href="http://git.repo.i2p/w/i2p.i2p.git">git.repo.i2p</a> <a href="https://github.com/i2p/i2p.i2p">Github</a>.)
<br/> <br/>
Запустите процесс сборки <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code>, затем воспользуйтесь собранным инсталлятором в графическом или консольном режиме (см. предыдущие способы установки). Запустите процесс сборки <code>(tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)</code>, затем воспользуйтесь собранным инсталлятором в графическом или консольном режиме (см. предыдущие способы установки).
</li> </li>

View File

@@ -3,8 +3,8 @@
{% block content %} {% block content %}
<h1>下载 I2P</h1> <h1>下载 I2P</h1>
<h3>依赖关系</h3> <h3>依赖关系</h3>
<a href="http://java.com/zh_CN/download/">Sun Java</a> 1.5 或更高版本,或等效的 JRE。 <a href="http://java.com/zh_CN/download/">Oracle Java</a> 1.5 或更高版本,或等效的 JRE。
(推荐使用 <a href="http://java.com/zh_CN/download/">Sun Java 1.6</a>) (推荐使用 <a href="http://java.com/zh_CN/download/">Oracle Java 6/7</a>)
<br> <br>
确定您安装的 Java 版本可以<a href="http://java.com/zh_CN/download/installed.jsp?detect=jre&try=1">点这里</a> 确定您安装的 Java 版本可以<a href="http://java.com/zh_CN/download/installed.jsp?detect=jre&try=1">点这里</a>
或在命令行中输入 <tt>java -version</tt> 或在命令行中输入 <tt>java -version</tt>

View File

@@ -753,5 +753,28 @@ QUamNO18hBy7N/YdF2DPoV41ntobkM+kVfmR0jLCbiNjisMg1eO8mQ1ynY4Kf2F1
=7u31 =7u31
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----
digit:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Applicable to the code I contribute to the I2P project,
I hereby state that:
* Unless marked otherwise, all code I commit is implicitly licensed under the component's primary license
* If specified in the source, the code may be explicitly licensed under one of the component's alternate licenses
* I have the right to release the code I commit under the terms I am committing it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (MingW32)
iQEcBAEBAgAGBQJRzgXbAAoJEAhQLmhPD07oWTkH/0nonFM5g0gw5SlqLKTxuBal
OMomT+4+FFaCDgXOSXnnlw38no7c234LeKpuvlr0LLxjiRdfcsnnuvqIWmeeY4cq
m3w6xGI+wNO2c/FYwTVumJO165sPc0Rg3b8d+zdUBncactRMdxcWUJTSHPdNzW2/
tmtChmVft6SOj+qgBQEMW0IjYm/4+vg4NEO4OAg8ncogea8dubpIFJjE2UbSr7dE
jkBoHiRXn4EN20Id4puCwXQK4QbbGwJGlKAUPgZXMd7nLqu9MljwLDkDWBMY9nRl
Zf9i4Wqw8wKgkWIIbZ2+V+zP83FLcX6ga+GMr8tf/bwWjSe1PN7mZAQlPB4p8Qc=
=NxxT
-----END PGP SIGNATURE-----
</pre> </pre>
{% endblock %} {% endblock %}