From 0d6820fb224030e3d2da616b11e230c513a04fba Mon Sep 17 00:00:00 2001
From: dev
Date: Wed, 12 Jun 2013 06:34:15 +0000
Subject: [PATCH 1/9] Added next goals.
---
www.i2p2/pages/bounty_netdb.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/www.i2p2/pages/bounty_netdb.html b/www.i2p2/pages/bounty_netdb.html
index c21d9aa1..e0fcb8dc 100644
--- a/www.i2p2/pages/bounty_netdb.html
+++ b/www.i2p2/pages/bounty_netdb.html
@@ -66,8 +66,8 @@ still maintain an unlimited search horizon.
Investigate multirouter
Investigate the maturity of multirouter, which will simplify development tremendously.
- More to come
- ...
+ Select base implementation
+ i2p.zzz.kademlia / i2psnarkdht is the most likely base implementation.
None yet |
From 3dfa79dfcb212b05cb38aaee507be78440dc3a79 Mon Sep 17 00:00:00 2001
From: zzz
Date: Sat, 15 Jun 2013 13:28:20 +0000
Subject: [PATCH 2/9] - Recommend Java 7 - DLM encrypted flag update
---
www.i2p2/pages/download.html | 6 +++---
www.i2p2/pages/download_ar.html | 6 +++---
www.i2p2/pages/download_cs.html | 2 +-
www.i2p2/pages/download_de.html | 6 +++---
www.i2p2/pages/download_el.html | 6 +++---
www.i2p2/pages/download_es.html | 6 +++---
www.i2p2/pages/download_fr.html | 6 +++---
www.i2p2/pages/download_ru.html | 2 +-
www.i2p2/pages/download_zh.html | 4 ++--
www.i2p2/pages/i2np_spec.html | 8 ++++----
10 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/www.i2p2/pages/download.html b/www.i2p2/pages/download.html
index afe6d107..c83d88de 100644
--- a/www.i2p2/pages/download.html
+++ b/www.i2p2/pages/download.html
@@ -4,9 +4,9 @@
Download I2P
Dependency
Java Runtime 1.5 or higher.
-(Oracle/Sun Java Version 6,
-OpenJDK 6, or
-IcedTea6
+(Oracle Java Version 6/7,
+OpenJDK 6/7, or
+IcedTea6/7
recommended)
Determine your installed Java version here
diff --git a/www.i2p2/pages/download_ar.html b/www.i2p2/pages/download_ar.html
index 992bf7bb..7d8d598c 100644
--- a/www.i2p2/pages/download_ar.html
+++ b/www.i2p2/pages/download_ar.html
@@ -4,9 +4,9 @@
تحميل I2P
المتطلبات البرمجية
اصدار 1.5 من Java Runtime (أو أعلى)
-(Oracle/Sun Java Version 6,
-OpenJDK 6, or
-IcedTea6
+(Oracle Java Version 6/7,
+OpenJDK 6/7, or
+IcedTea6/7
منصوح بهم)
اعرف نسخة الجافا المثبتة لديك من هنا
diff --git a/www.i2p2/pages/download_cs.html b/www.i2p2/pages/download_cs.html
index 8e56d764..bd1f11df 100644
--- a/www.i2p2/pages/download_cs.html
+++ b/www.i2p2/pages/download_cs.html
@@ -3,7 +3,7 @@
{% block content %}
Stáhnout I2P
Požadavky pro instalaci
-Sun Java 1.5 nebo novější (doporučená verze Sun Java 1.6), nebo ekvivalentní JRE.
+Oracle Java 1.5 nebo novější (doporučená verze Oracle Java 6/7), nebo ekvivalentní JRE.
Svou aktuální nainstalovanou verzi Javy si můžete ověřit na této stránce
nebo z příkazové řádky pomocí příkazu java -version
diff --git a/www.i2p2/pages/download_de.html b/www.i2p2/pages/download_de.html
index 181994c6..27da972a 100644
--- a/www.i2p2/pages/download_de.html
+++ b/www.i2p2/pages/download_de.html
@@ -4,9 +4,9 @@
Download I2P
Abhängigkeiten
Java Runtime 1.5 oder neuer.
-(Oracle/Sun Java Version 6,
-OpenJDK 6, oder
-IcedTea6
+(Oracle Java Version 6/7,
+OpenJDK 6/7, oder
+IcedTea6/7
recommended)
Bestimme hier deine Java Version
diff --git a/www.i2p2/pages/download_el.html b/www.i2p2/pages/download_el.html
index 487f8245..8fb62240 100644
--- a/www.i2p2/pages/download_el.html
+++ b/www.i2p2/pages/download_el.html
@@ -4,9 +4,9 @@
Ληψη I2P
Εξάρτηση
Java Runtime 1.5 ή νεότερο.
-(Oracle/Sun Java Version 6,
-OpenJDK 6, ή
-IcedTea6
+(Oracle Java Version 6/7,
+OpenJDK 6/7, ή
+IcedTea6/7
συνιστάται)
Βρείτε την έκδοση Java που έχετε εδώ
diff --git a/www.i2p2/pages/download_es.html b/www.i2p2/pages/download_es.html
index d8c296dd..2851cf47 100644
--- a/www.i2p2/pages/download_es.html
+++ b/www.i2p2/pages/download_es.html
@@ -4,9 +4,9 @@
Descargar I2P
Dependencias
Java Runtime 1.5 o superior.
-(Oracle/Sun Java Versión 6,
-OpenJDK 6, o
-IcedTea6
+(Oracle Java Versión 6/7,
+OpenJDK 6/7, o
+IcedTea6/7
recomendado)
Determina aquí tu versión instalada de Java
diff --git a/www.i2p2/pages/download_fr.html b/www.i2p2/pages/download_fr.html
index 16c7d2ab..a0e3bbd2 100644
--- a/www.i2p2/pages/download_fr.html
+++ b/www.i2p2/pages/download_fr.html
@@ -5,9 +5,9 @@ Traduction de juillet 2011. Version anglaise actuelleTélécharger I2P
Prérequis
Java Runtime 1.5 ou plus récent.
-(Oracle/Sun Java Version 6,
-OpenJDK 6, ou
-IcedTea6
+(Oracle Java Version 6/7,
+OpenJDK 6/7, ou
+IcedTea6/7
recommandé)
Déterminez la version de Java installée
diff --git a/www.i2p2/pages/download_ru.html b/www.i2p2/pages/download_ru.html
index 9cb08f3c..7c23f88b 100644
--- a/www.i2p2/pages/download_ru.html
+++ b/www.i2p2/pages/download_ru.html
@@ -6,7 +6,7 @@
Требования для установки
-Sun Java 1.5 или новее (рекомендуется Sun Java 1.6), либо иная совместимая JRE.
+Oracle Java 1.5 или новее (рекомендуется Oracle Java 6/7), либо иная совместимая JRE.
Узнать, какая версия Java установлена на Вашем компьютере можно на этой странице, либо набрав в командной строке java -version
diff --git a/www.i2p2/pages/download_zh.html b/www.i2p2/pages/download_zh.html
index 602c4ced..d0e05eb2 100644
--- a/www.i2p2/pages/download_zh.html
+++ b/www.i2p2/pages/download_zh.html
@@ -3,8 +3,8 @@
{% block content %}
下载 I2P
依赖关系
-Sun Java 1.5 或更高版本,或等效的 JRE。
-(推荐使用 Sun Java 1.6)
+Oracle Java 1.5 或更高版本,或等效的 JRE。
+(推荐使用 Oracle Java 6/7)
确定您安装的 Java 版本可以点这里
或在命令行中输入 java -version 。
diff --git a/www.i2p2/pages/i2np_spec.html b/www.i2p2/pages/i2np_spec.html
index f0413b09..a4f9efbe 100644
--- a/www.i2p2/pages/i2np_spec.html
+++ b/www.i2p2/pages/i2np_spec.html
@@ -640,24 +640,24 @@ excludedPeers:
reply key:
32 byte SessionKey
- Only included if encryptionFlag == 1
+ Only included if encryptionFlag == 1, only as of release 0.9.7
tags:
1 byte Integer
valid range: 1-32 (typically 1)
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:
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
{% endfilter %}
Notes
-
-Encryption flag, reply key, and reply tags are preliminary, not yet implemented.
+Encryption flag, reply key, and reply tags as of release 0.9.7.
-
Encrypted replies are only useful when the response is through a tunnel.
-
From 8c7fed4571a5c82c5cb2949df33b9fbf039cbcfd Mon Sep 17 00:00:00 2001
From: zzz
Date: Mon, 17 Jun 2013 19:50:59 +0000
Subject: [PATCH 3/9] updates
---
www.i2p2/pages/how_networkdatabase.html | 38 ++++++++++++++++++++++---
www.i2p2/pages/i2np_spec.html | 22 ++++++++++----
2 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/www.i2p2/pages/how_networkdatabase.html b/www.i2p2/pages/how_networkdatabase.html
index 69ced10a..def0b669 100644
--- a/www.i2p2/pages/how_networkdatabase.html
+++ b/www.i2p2/pages/how_networkdatabase.html
@@ -291,7 +291,10 @@
the hash of the router in question to determine closeness.
A modification to this algorithm is done to increase the costs of Sybil attacks.
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.
@@ -317,6 +320,26 @@
without requiring any LeaseSet lookups, or requiring the communicating Destinations to have published LeaseSets at all.
+Floodfill Selection
+
+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.
+
+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.
+
+
RouterInfo Storage to Floodfills
@@ -362,11 +385,14 @@
After a floodfill router receives a DatabaseStoreMessage containing a
valid RouterInfo or LeaseSet which is newer than that previously stored in its
local NetDb, it "floods" it.
- To flood a NetDb entry, it looks up the 7 floodfill routers closest to the key
- of the NetDb entry. (The key is the SHA256 Hash of the RouterIdentity or Destination with the date (yyyyMMdd) appended.)
+ To flood a NetDb entry, it looks up several (currently 4) floodfill routers closest to the routing key
+ 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.
- It then directly connects to each of the 7 peers
+ The floodfill then directly connects to each of those peers
and sends it a I2NP DatabaseStoreMessage
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
@@ -635,6 +661,10 @@ 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.
diff --git a/www.i2p2/pages/i2np_spec.html b/www.i2p2/pages/i2np_spec.html
index a4f9efbe..cef68b16 100644
--- a/www.i2p2/pages/i2np_spec.html
+++ b/www.i2p2/pages/i2np_spec.html
@@ -657,6 +657,9 @@ reply tags:
Notes
-
+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.
+
-
Encryption flag, reply key, and reply tags as of release 0.9.7.
-
Encrypted replies are only useful when the response is through a tunnel.
@@ -722,12 +725,11 @@ key:
num:
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
- SHA256 of the RouterInfo that the other router thinks are close to the key
- $num entries
+ SHA256 of the RouterIdentity that the other router thinks is close to the key
from:
32 bytes
@@ -736,9 +738,17 @@ from:
Notes
-
+
-
The 'from' hash is unauthenticated and cannot be trusted.
-
+
-
+ The returned peer hashes are not necessarily closer to the key
+ than the router being queried.
+
-
+ Typical number of hashes returned: 3
+
+
+
+
DeliveryStatus
Description
From 6f619efe75295ffa4d5adac666219779dc3ea7c6 Mon Sep 17 00:00:00 2001
From: zzz
Date: Tue, 18 Jun 2013 18:46:12 +0000
Subject: [PATCH 4/9] updates
---
www.i2p2/pages/how_networkdatabase.html | 3 ++
www.i2p2/pages/i2np.html | 38 +++++++++++--------------
www.i2p2/pages/i2np_spec.html | 6 ++++
3 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/www.i2p2/pages/how_networkdatabase.html b/www.i2p2/pages/how_networkdatabase.html
index def0b669..0c98fe03 100644
--- a/www.i2p2/pages/how_networkdatabase.html
+++ b/www.i2p2/pages/how_networkdatabase.html
@@ -295,6 +295,9 @@
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.
+
+ Routing keys are never sent on-the-wire in any I2NP message, they are only used locally for
+ determination of distance.
diff --git a/www.i2p2/pages/i2np.html b/www.i2p2/pages/i2np.html
index 480e4b83..45810594 100644
--- a/www.i2p2/pages/i2np.html
+++ b/www.i2p2/pages/i2np.html
@@ -1,7 +1,9 @@
{% extends "_layout.html" %}
{% block title %}I2NP{% endblock %}
{% block content %}
-Updated August 2010, current as of router version 0.8
+
+Updated June 2013, current as of router version 0.9.6
+
I2P Network Protocol (I2NP)
The I2P Network Protocol (I2NP),
@@ -17,16 +19,11 @@ I2NP (I2P Network Protocol) messages can be used for one-hop, router-to-router,
By encrypting and wrapping messages in other messages, they can be sent in a secure way
through multiple hops to the ultimate destination.
Priority is only used locally at the origin, i.e. when queuing for outbound delivery.
-
-Both the NTCP and UDP transports implement priority transmission,
-but in quite different manners.
-UDP has complex code with queues for each priority, however it treats
-messages with priorities 400-499, for example, the same.
-(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.
+The priorities listed below may not be current and are subject to change.
+See the
+OutNetMessage Javadocs
+for the current priority settings.
+Priority queueing implementation may vary.
Message Format
@@ -85,9 +82,8 @@ which is wrapped in a DataMessage.
DatabaseLookupMessage
2
|
- | 100/400
- | 400 normally; 100 if from HarvesterJob and sent directly;
-400 for a router lookup
+ | 500
+ | May vary
|
DatabaseSearchReplyMessage
| 3
@@ -99,8 +95,8 @@ three floodfill routers are returned.
DatabaseStoreMessage
| 1
| Varies
- | 100/400
- | Usually 100 (why?)
+ | 460
+ | Priority may vary.
Size is 898 bytes for a typical 2-lease leaseSet.
RouterInfo structures are compressed, and size varies; however
there is a continuing effort to reduce the amount of data published in a RouterInfo
@@ -109,8 +105,8 @@ as we approach release 1.0.
DataMessage
| 20
| 4 - 62080
- | 400
- |
+ | 425
+ | Priority may vary on a per-destination basis
|
DeliveryStatusMessage
| 10
@@ -128,8 +124,8 @@ but when unwrapped, given a priority of 100 by the forwarding router
TunnelBuildMessage
| 21
| 4224
- | 300/500
- | Usually 500 (why?)
+ | 500
+ |
|
TunnelBuildReplyMessage
| 22
@@ -154,7 +150,7 @@ TunnelGatewayMessage
VariableTunnelBuildMessage
| 23
| 1057 - 4225
- | 300/500
+ | 500
| Shorter TunnelBuildMessage as of 0.7.12
|
VariableTunnelBuildReplyMessage
diff --git a/www.i2p2/pages/i2np_spec.html b/www.i2p2/pages/i2np_spec.html
index cef68b16..b77af16c 100644
--- a/www.i2p2/pages/i2np_spec.html
+++ b/www.i2p2/pages/i2np_spec.html
@@ -534,6 +534,8 @@ data:
Notes
-
For security, the reply fields are ignored if the message is received down a tunnel.
+
-
+The key is the "real" hash of the RouterIdentity or Destination, NOT the routing key.
@@ -666,6 +668,8 @@ Encrypted replies are only useful when the response is through a tunnel.
-
The number of included tags could be greater than one if alternative DHT lookup strategies
(for example, recursive lookups) are implemented.
+
-
+The lookup key and exclude keys are the "real" hashes, NOT routing keys.
@@ -745,6 +749,8 @@ from:
than the router being queried.
-
Typical number of hashes returned: 3
+
-
+The lookup key, peer hashes, and from hash are "real" hashes, NOT routing keys.
From 9938104d3e5df504c11622ae400bb685704908e7 Mon Sep 17 00:00:00 2001
From: dev
Date: Wed, 19 Jun 2013 07:59:13 +0000
Subject: [PATCH 5/9] Added the next sub-bounty.
---
www.i2p2/pages/bounty_netdb.html | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/www.i2p2/pages/bounty_netdb.html b/www.i2p2/pages/bounty_netdb.html
index e0fcb8dc..8e425a39 100644
--- a/www.i2p2/pages/bounty_netdb.html
+++ b/www.i2p2/pages/bounty_netdb.html
@@ -63,17 +63,36 @@ still maintain an unlimited search horizon.
- Investigate refactoring
- Investigate I2P NetDB refactoring strategy.
- - Investigate multirouter
- - Investigate the maturity of multirouter, which will simplify development tremendously.
+ - Investigate and fix MultiRouter
+ - Investigate the usability of MultiRouter, and fix issues found. MultiRouter will simplify further development.
- Select base implementation
- i2p.zzz.kademlia / i2psnarkdht is the most likely base implementation.
|
-None yet |
+Trac |
162.5€ |
+
+
+Begin implementation of the most basic DHT |
+
+
+ - Investigate I2CP
+ - Investigate and design/select an I2NP message.
+
+ - Implement iterative DHT lookups
+ - Implement support for iterative DHT lookups
+
+
+ |
+None yet |
+325€ |
+
+
+
+
More to come |
... |
From 7d633c6161b5c4d2ac743ec8a55da114dff16176 Mon Sep 17 00:00:00 2001
From: zzz
Date: Thu, 20 Jun 2013 23:24:29 +0000
Subject: [PATCH 6/9] Correct SSU documentation of session and MAC keys (ticket
#716)
---
www.i2p2/pages/udp_spec.html | 46 ++++++++++++++++++++++++++++++++++--
1 file changed, 44 insertions(+), 2 deletions(-)
diff --git a/www.i2p2/pages/udp_spec.html b/www.i2p2/pages/udp_spec.html
index 16f2ae0e..4ba6ae44 100644
--- a/www.i2p2/pages/udp_spec.html
+++ b/www.i2p2/pages/udp_spec.html
@@ -33,8 +33,9 @@ key. The specific construct of the MAC is the first 16 bytes from:
where '||' means append.
The payload is the message starting with the flag byte.
-The macKey is either the introduction key or the
-session key, as specified for each message below.
+The macKey is either the introduction key or is constructed from the
+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.
WARNING - the HMAC-MD5-128 used here is non-standard,
see the cryptography page for details.
@@ -50,6 +51,47 @@ 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
using this flag are.
+Session Key Details
+The 32-byte session key is created as follows:
+-
+Take the exchanged DH key, represented as a positive minimal-length BigInteger byte array (two's complement big-endian)
+
-
+If the most significant bit is 1 (i.e. array[0] & 0x80 != 0),
+prepend a 0x00 byte, as in Java's BigInteger.toByteArray() representation
+
-
+If the byte array is greater than or equal to 32 bytes, use the first (most significant) 32 bytes
+
-
+If the byte array is less than 32 bytes, append 0x00 bytes to extend to 32 bytes
+
+
+MAC Key Details
+The 32-byte MAC key is created as follows:
+-
+Take the exchanged DH key byte array, prepended with a 0x00 byte if necessary,
+from step 2 in the Session Key Details above.
+
-
+If that byte array is greater than or equal to 64 bytes, the MAC key is
+bytes 33-64 from that byte array.
+
-
+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.
+Broken - See note below
+
-
+If that byte array is equal to 32 bytes, the MAC key is all zeros.
+Broken - See note below
+
-
+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.
+See note below
+
+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.
+
+
+Header Format
Within the AES encrypted payload, there is a minimal common structure
to the various messages - a one byte flag and a four byte sending
timestamp (seconds since the unix epoch). The flag byte contains
From 756c370d274196fc47ce356b4b0e362320bd3e83 Mon Sep 17 00:00:00 2001
From: zzz
Date: Mon, 24 Jun 2013 13:22:45 +0000
Subject: [PATCH 7/9] SSU padding and acks
---
www.i2p2/pages/udp_spec.html | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/www.i2p2/pages/udp_spec.html b/www.i2p2/pages/udp_spec.html
index 4ba6ae44..07b55272 100644
--- a/www.i2p2/pages/udp_spec.html
+++ b/www.i2p2/pages/udp_spec.html
@@ -2,7 +2,7 @@
{% block title %}SSU Protocol Specification{% endblock %}
{% block content %}
-Updated May 2013 for release 0.9.6. IPv6 information is preliminary.
+Updated June 2013 for release 0.9.6. IPv6 information is preliminary.
See the SSU page for an overview of the SSU transport.
@@ -61,7 +61,8 @@ prepend a 0x00 byte, as in Java's BigInteger.toByteArray() representation
-
If the byte array is greater than or equal to 32 bytes, use the first (most significant) 32 bytes
-
-If the byte array is less than 32 bytes, append 0x00 bytes to extend to 32 bytes
+If the byte array is less than 32 bytes, append 0x00 bytes to extend to 32 bytes.
+Won't happen - See note below
MAC Key Details
@@ -157,6 +158,12 @@ provide a significant amount of protection.
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
fragmentation to external adversaries.
+
+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.
@@ -450,7 +457,7 @@ Signed-on time appears to be unused or unverified in the current implementation.
SessionDestroyed (type 8)
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.
@@ -790,6 +797,10 @@ While we use the I2NP message ID as the SSU message ID, from the SSU
protocol view, they are random numbers.
In fact, since the router uses a single Bloom filter for all peers,
the message ID must be an actual random number.
+-
+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.
From 4737840b7ffc36f2731cb9b8b29e0008367872dd Mon Sep 17 00:00:00 2001
From: zzz
Date: Sat, 29 Jun 2013 15:21:34 +0000
Subject: [PATCH 8/9] - Add github link on download pages - Minor correction on
tunnel-alt-creation - Add "digit" dev agreement (awaiting pubkey)
---
www.i2p2/pages/download.html | 3 ++-
www.i2p2/pages/download_cs.html | 3 ++-
www.i2p2/pages/download_de.html | 3 ++-
www.i2p2/pages/download_el.html | 3 ++-
www.i2p2/pages/download_es.html | 3 ++-
www.i2p2/pages/download_fr.html | 3 ++-
www.i2p2/pages/download_ru.html | 3 ++-
www.i2p2/pages/license-agreements.html | 24 +++++++++++++++++++++++
www.i2p2/pages/license-agreements_de.html | 23 ++++++++++++++++++++++
www.i2p2/pages/tunnel-alt-creation.html | 3 ++-
10 files changed, 63 insertions(+), 8 deletions(-)
diff --git a/www.i2p2/pages/download.html b/www.i2p2/pages/download.html
index c83d88de..77fe404d 100644
--- a/www.i2p2/pages/download.html
+++ b/www.i2p2/pages/download.html
@@ -61,7 +61,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- Alternately, you can fetch the source from monotone.
+ Alternately, you can fetch the source from monotone
+ or github.
Run (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
then either
run the GUI installer or headless install as above
diff --git a/www.i2p2/pages/download_cs.html b/www.i2p2/pages/download_cs.html
index bd1f11df..b27fdaff 100644
--- a/www.i2p2/pages/download_cs.html
+++ b/www.i2p2/pages/download_cs.html
@@ -55,7 +55,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- Alternativně lze zdrojový kód stáhnout z repozitáře monotone.
+ Alternativně lze zdrojový kód stáhnout z repozitáře monotone
+ github.
Spusťte sestavení programu příkazem (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
a potom
spusťte grafický instalační program nebo instalaci z příkazové řádky (viz výše).
diff --git a/www.i2p2/pages/download_de.html b/www.i2p2/pages/download_de.html
index 27da972a..77080abf 100644
--- a/www.i2p2/pages/download_de.html
+++ b/www.i2p2/pages/download_de.html
@@ -60,7 +60,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- Alternativ kannst Du den Quelltext aus Monotone kopieren.
+ Alternativ kannst Du den Quelltext aus Monotone
+ github kopieren.
Führe folgendes aus: (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p_0.9.6 ; ant pkg)
und starte dann den GUI Installer oder die headless Installation wie oben beschrieben
diff --git a/www.i2p2/pages/download_el.html b/www.i2p2/pages/download_el.html
index 8fb62240..604f7fa9 100644
--- a/www.i2p2/pages/download_el.html
+++ b/www.i2p2/pages/download_el.html
@@ -61,7 +61,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- Εναλλακτικά, μπορείτε να πάρετε τον πηγαίο κώδικα από το monotone.
+ Εναλλακτικά, μπορείτε να πάρετε τον πηγαίο κώδικα από το monotone
+ github.
Εκτελέστε (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
και μετά
είτε τρέξτε την εγκατάσταση με γραφικό περιβάλλον είτε από τη γραμμή εντολών όπως παραπάνω.
diff --git a/www.i2p2/pages/download_es.html b/www.i2p2/pages/download_es.html
index 2851cf47..2d48fdfb 100644
--- a/www.i2p2/pages/download_es.html
+++ b/www.i2p2/pages/download_es.html
@@ -60,7 +60,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
(SHA256
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- De forma alternativa, puedes obtener las fuentes usando monotone.
+ De forma alternativa, puedes obtener las fuentes usando monotone
+ github.
Ejecuta tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg ;
después puedes arrancar el instalador gráfico o bien hacer la instalación desde la línea de comandos descritas anteriormente.
diff --git a/www.i2p2/pages/download_fr.html b/www.i2p2/pages/download_fr.html
index a0e3bbd2..e2924def 100644
--- a/www.i2p2/pages/download_fr.html
+++ b/www.i2p2/pages/download_fr.html
@@ -57,7 +57,8 @@ ou tapez java -version à l'invite de commande.
i2psource_0.9.6.tar.bz2
(SHA256 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- Vous pouvez si vous préférez récupérer les sources sur monotone.
+ Vous pouvez si vous préférez récupérer les sources sur monotone
+ github.
Exécuter (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
puis, soit
lancer l'installeur graphique, soit passer par la ligne de commande.
diff --git a/www.i2p2/pages/download_ru.html b/www.i2p2/pages/download_ru.html
index 7c23f88b..0e1d1539 100644
--- a/www.i2p2/pages/download_ru.html
+++ b/www.i2p2/pages/download_ru.html
@@ -62,7 +62,8 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
- (Как вариант, можете скачать текущий исходный код из monotone-репозитория.)
+ (Как вариант, можете скачать текущий исходный код из monotone-репозитория
+ github.)
Запустите процесс сборки (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
, затем воспользуйтесь собранным инсталлятором в графическом или консольном режиме (см. предыдущие способы установки).
diff --git a/www.i2p2/pages/license-agreements.html b/www.i2p2/pages/license-agreements.html
index 38c8c1a8..12cd97f2 100644
--- a/www.i2p2/pages/license-agreements.html
+++ b/www.i2p2/pages/license-agreements.html
@@ -764,5 +764,29 @@ QUamNO18hBy7N/YdF2DPoV41ntobkM+kVfmR0jLCbiNjisMg1eO8mQ1ynY4Kf2F1
=7u31
-----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-----
+
+
{% endblock %}
diff --git a/www.i2p2/pages/license-agreements_de.html b/www.i2p2/pages/license-agreements_de.html
index 64f2b32d..4a400a2f 100644
--- a/www.i2p2/pages/license-agreements_de.html
+++ b/www.i2p2/pages/license-agreements_de.html
@@ -753,5 +753,28 @@ QUamNO18hBy7N/YdF2DPoV41ntobkM+kVfmR0jLCbiNjisMg1eO8mQ1ynY4Kf2F1
=7u31
-----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-----
+
{% endblock %}
diff --git a/www.i2p2/pages/tunnel-alt-creation.html b/www.i2p2/pages/tunnel-alt-creation.html
index ef0064c3..1da71f75 100644
--- a/www.i2p2/pages/tunnel-alt-creation.html
+++ b/www.i2p2/pages/tunnel-alt-creation.html
@@ -84,6 +84,7 @@ message ID that the message (or reply) should use.
Bit 7 indicates that the hop will be an inbound gateway (IBGW).
Bit 6 indicates that the hop will be an outbound endpoint (OBEP).
If neither bit is set, the hop will be an intermediate participant.
+Both cannot be set at once.
Request Record Creation
@@ -119,7 +120,7 @@ for the hop in question.
When a hop receives a TunnelBuildMessage, it looks through the
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,
they make sure the tunnel request is not a duplicate by feeding the
AES-256 reply key into a bloom filter.
From a585aab5d2e6e82266926f8be95efba01840451c Mon Sep 17 00:00:00 2001
From: str4d
Date: Mon, 1 Jul 2013 09:31:15 +0000
Subject: [PATCH 9/9] Add git.repo.i2p link next to Github
---
www.i2p2/pages/download.html | 2 +-
www.i2p2/pages/download_cs.html | 2 +-
www.i2p2/pages/download_de.html | 2 +-
www.i2p2/pages/download_el.html | 2 +-
www.i2p2/pages/download_es.html | 2 +-
www.i2p2/pages/download_fr.html | 2 +-
www.i2p2/pages/download_ru.html | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/www.i2p2/pages/download.html b/www.i2p2/pages/download.html
index 77fe404d..bac57849 100644
--- a/www.i2p2/pages/download.html
+++ b/www.i2p2/pages/download.html
@@ -62,7 +62,7 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
Alternately, you can fetch the source from monotone
- or github.
+ or via Git from git.repo.i2p or Github.
Run (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
then either
run the GUI installer or headless install as above
diff --git a/www.i2p2/pages/download_cs.html b/www.i2p2/pages/download_cs.html
index b27fdaff..52e16e69 100644
--- a/www.i2p2/pages/download_cs.html
+++ b/www.i2p2/pages/download_cs.html
@@ -56,7 +56,7 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
Alternativně lze zdrojový kód stáhnout z repozitáře monotone
- github.
+ git.repo.i2p Github.
Spusťte sestavení programu příkazem (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
a potom
spusťte grafický instalační program nebo instalaci z příkazové řádky (viz výše).
diff --git a/www.i2p2/pages/download_de.html b/www.i2p2/pages/download_de.html
index 77080abf..40c57fb5 100644
--- a/www.i2p2/pages/download_de.html
+++ b/www.i2p2/pages/download_de.html
@@ -61,7 +61,7 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
Alternativ kannst Du den Quelltext aus Monotone
- github kopieren.
+ git.repo.i2p Github kopieren.
Führe folgendes aus: (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p_0.9.6 ; ant pkg)
und starte dann den GUI Installer oder die headless Installation wie oben beschrieben
diff --git a/www.i2p2/pages/download_el.html b/www.i2p2/pages/download_el.html
index 604f7fa9..0fd1fb54 100644
--- a/www.i2p2/pages/download_el.html
+++ b/www.i2p2/pages/download_el.html
@@ -62,7 +62,7 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
Εναλλακτικά, μπορείτε να πάρετε τον πηγαίο κώδικα από το monotone
- github.
+ git.repo.i2p Github.
Εκτελέστε (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
και μετά
είτε τρέξτε την εγκατάσταση με γραφικό περιβάλλον είτε από τη γραμμή εντολών όπως παραπάνω.
diff --git a/www.i2p2/pages/download_es.html b/www.i2p2/pages/download_es.html
index 2d48fdfb..14981861 100644
--- a/www.i2p2/pages/download_es.html
+++ b/www.i2p2/pages/download_es.html
@@ -61,7 +61,7 @@ bf7d11f0a36acff9cd51ad3ef89d66975b0b0de344ca72719a5576159ec965d1
fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
De forma alternativa, puedes obtener las fuentes usando monotone
- github.
+ git.repo.i2p Github.
Ejecuta tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg ;
después puedes arrancar el instalador gráfico o bien hacer la instalación desde la línea de comandos descritas anteriormente.
diff --git a/www.i2p2/pages/download_fr.html b/www.i2p2/pages/download_fr.html
index e2924def..812104c4 100644
--- a/www.i2p2/pages/download_fr.html
+++ b/www.i2p2/pages/download_fr.html
@@ -58,7 +58,7 @@ ou tapez java -version à l'invite de commande.
(SHA256 fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
Vous pouvez si vous préférez récupérer les sources sur monotone
- github.
+ git.repo.i2p Github.
Exécuter (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
puis, soit
lancer l'installeur graphique, soit passer par la ligne de commande.
diff --git a/www.i2p2/pages/download_ru.html b/www.i2p2/pages/download_ru.html
index 0e1d1539..15dcba2e 100644
--- a/www.i2p2/pages/download_ru.html
+++ b/www.i2p2/pages/download_ru.html
@@ -63,7 +63,7 @@ fd2aa881d68b3164c43de9d91dcb04a93a36228d416582ada14ae40031436d18
sig)
(Как вариант, можете скачать текущий исходный код из monotone-репозитория
- github.)
+ git.repo.i2p Github.)
Запустите процесс сборки (tar xjvf i2psource_0.9.6.tar.bz2 ; cd i2p-0.9.6 ; ant pkg)
, затем воспользуйтесь собранным инсталлятором в графическом или консольном режиме (см. предыдущие способы установки).