forked from I2P_Developers/i2p.www
Migrated over various specifications
This commit is contained in:
@@ -53,6 +53,18 @@
|
||||
<li><a href="{{ site_url('docs/transport/ssu') }}"><span>{{ _('SSU') }}</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="has-sub"><a href="#"><span>{{ _('Specifications') }}</span></a>
|
||||
<ul>
|
||||
<li><a href="{{ site_url('docs/specs/blockfile') }}"><span>{{ _('Blockfile') }}</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/common_structures') }}"><span>{{ _('Common structures') }}</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/configuration') }}"><span>{{ _('Configuration files') }}</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/datagrams') }}"><span>{{ _('Datagrams') }}</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/i2cp') }}"><span>I2CP</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/i2np') }}"><span>I2NP</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/plugin') }}"><span>{{ _('Plugins') }}</span></a></li>
|
||||
<li><a href="{{ site_url('docs/specs/tunnel_message') }}"><span>{{ _('Tunnel messages') }}</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="{{ site_url('docs/papers') }}"><span>{{ _('Papers and presentations') }}</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}I2P Blockfile Specification{% endblock %}
|
||||
{% block content %}
|
||||
<h2>
|
||||
@@ -166,7 +166,7 @@ The maximum number of entries per span is 16.
|
||||
"%%__INFO__%%" is the master database skiplist with String/Properties key/value entries containing only one entry:
|
||||
</p>
|
||||
<pre>
|
||||
"info": a Properties (UTF-8 String/String Map), serialized as a <a href="common_structures_spec#type_Mapping">Mapping</a>:
|
||||
"info": a Properties (UTF-8 String/String Map), serialized as a <a href="{{ site_url('docs/specs/common_structures') }}#type_Mapping">Mapping</a>:
|
||||
"version": "2"
|
||||
"created": Java long time (ms)
|
||||
"upgraded": Java long time (ms) (as of database version 2)
|
||||
@@ -181,7 +181,7 @@ The maximum number of entries per span is 16.
|
||||
</p>
|
||||
<pre>
|
||||
The skiplist keys are 4-byte Integers, the first 4 bytes of the hash of the Destination.
|
||||
The skiplist values are each a Properties (a UTF-8 String/String Map) serialized as a <a href="common_structures_spec#type_Mapping">Mapping</a>
|
||||
The skiplist values are each a Properties (a UTF-8 String/String Map) serialized as a <a href="{{ site_url('docs/specs/common_structures') }}#type_Mapping">Mapping</a>
|
||||
There may be multiple entries in the properties, each one is a reverse mapping,
|
||||
as there may be more than one hostname for a given destination,
|
||||
or there could be collisions with the same first 4 bytes of the hash.
|
||||
@@ -197,8 +197,8 @@ The keys/values in these skiplists are as follows:
|
||||
</p>
|
||||
<pre>
|
||||
key: a UTF-8 String (the hostname)
|
||||
value: a DestEntry, which is a Properties (a UTF-8 String/String Map) serialized as a <a href="common_structures_spec#type_Mapping">Mapping</a>
|
||||
followed by a binary Destination (serialized <a href="common_structures_spec#struct_Destination">as usual</a>).
|
||||
value: a DestEntry, which is a Properties (a UTF-8 String/String Map) serialized as a <a href="{{ site_url('docs/specs/common_structures') }}#type_Mapping">Mapping</a>
|
||||
followed by a binary Destination (serialized <a href="{{ site_url('docs/specs/common_structures') }}#struct_Destination">as usual</a>).
|
||||
</pre>
|
||||
|
||||
<p>
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Common structure Specification{% endblock %}
|
||||
{% block content %}
|
||||
Updated March 2012, current as of router version 0.8.13
|
||||
@@ -7,7 +7,7 @@ Updated March 2012, current as of router version 0.8.13
|
||||
This document describes some data types common to all I2P protocols, like
|
||||
<a href="i2np.html">I2NP</a>,
|
||||
<a href="i2cp.html">I2CP</a>,
|
||||
<a href="udp.html">SSU</a>,
|
||||
<a href="{{ site_url('docs/transport/ssu') }}">SSU</a>,
|
||||
etc.
|
||||
</p>
|
||||
|
||||
@@ -61,7 +61,7 @@ Deprecated - unused
|
||||
<h4>Description</h4>
|
||||
<p>
|
||||
This structure is used in ElGamal encryption, representing only the exponent, not the primes, which are constant and defined in
|
||||
<a href="how_cryptography.html#elgamal">the cryptography specification</a>.
|
||||
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">the cryptography specification</a>.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
@@ -74,7 +74,7 @@ Deprecated - unused
|
||||
<h4>Description</h4>
|
||||
<p>
|
||||
This structure is used in ElGamal decryption, representing only the exponent, not the primes which are constant and defined in
|
||||
<a href="how_cryptography.html#elgamal">the cryptography specification</a>.
|
||||
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">the cryptography specification</a>.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
@@ -98,7 +98,7 @@ Deprecated - unused
|
||||
<h2 id="type_SigningPublicKey">SigningPublicKey</h2>
|
||||
<h4>Description</h4>
|
||||
<p>
|
||||
This structure is used for verifying <a href="how_cryptography.html#DSA">DSA</a> signatures.
|
||||
This structure is used for verifying <a href="{{ site_url('docs/how/cryptography') }}#DSA">DSA</a> signatures.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
@@ -110,7 +110,7 @@ Deprecated - unused
|
||||
<h2 id="type_SigningPrivateKey">SigningPrivateKey</h2>
|
||||
<h4>Description</h4>
|
||||
<p>
|
||||
This structure is used for creating <a href="how_cryptography.html#DSA">DSA</a> signatures.
|
||||
This structure is used for creating <a href="{{ site_url('docs/how/cryptography') }}#DSA">DSA</a> signatures.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
@@ -122,7 +122,7 @@ Deprecated - unused
|
||||
<h2 id="type_Signature">Signature</h2>
|
||||
<h4>Description</h4>
|
||||
<p>
|
||||
This structure represents the <a href="how_cryptography.html#DSA">DSA</a> signature of some data.
|
||||
This structure represents the <a href="{{ site_url('docs/how/cryptography') }}#DSA">DSA</a> signature of some data.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
@@ -204,9 +204,9 @@ payload :: data
|
||||
<li>
|
||||
For <a href="#struct_RouterIdentity">Router Identities</a>, the Certificate is always NULL, no others are currently implemented.
|
||||
</li><li>
|
||||
For <a href="i2np_spec.html#struct_GarlicClove">Garlic Cloves</a>, the Certificate is always NULL, no others are currently implemented.
|
||||
For <a href="{{ site_url('docs/specs/i2np') }}#struct_GarlicClove">Garlic Cloves</a>, the Certificate is always NULL, no others are currently implemented.
|
||||
</li><li>
|
||||
For <a href="i2np_spec.html#msg_Garlic">Garlic Messages</a>, the Certificate is always NULL, no others are currently implemented.
|
||||
For <a href="{{ site_url('docs/specs/i2np') }}#msg_Garlic">Garlic Messages</a>, the Certificate is always NULL, no others are currently implemented.
|
||||
</li><li>
|
||||
For <a href="#struct_Destination">Destinations</a>, the Certificate may be non-NULL,
|
||||
however non-NULL certs are not widely used, and any checking is left to the application-level.
|
||||
@@ -518,7 +518,7 @@ signature :: Signature
|
||||
The public key of the destination was used for the old i2cp-to-i2cp encryption
|
||||
which was disabled in version 0.6, it is currently unused?
|
||||
</li><li>
|
||||
The encryption key is used for end-to-end <a href="how_elgamalaes.html">ElGamal/AES+SessionTag</a> encryption.
|
||||
The encryption key is used for end-to-end <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> encryption.
|
||||
It is currently generated anew at every router startup, it is not persistent.
|
||||
</li><li>
|
||||
The signature may be verified using the signing public key of the destination.
|
||||
@@ -680,6 +680,6 @@ The signature may be verified using the signing public key of the router_ident.
|
||||
|
||||
|
||||
<h2 id="struct_DeliveryInstructions">Delivery Instructions</h2>
|
||||
Defined in the <a href="tunnel_message_spec.html#delivery">Tunnel Message Specification</a>.
|
||||
Defined in the <a href="{{ site_url('docs/specs/tunnel_message') }}#delivery">Tunnel Message Specification</a>.
|
||||
|
||||
{% endblock %}
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Configuration File Specification{% endblock %}
|
||||
{% block content %}
|
||||
Updated September 2012, current as of router version 0.9.2
|
||||
@@ -40,7 +40,7 @@ Reads and writes are implemented in
|
||||
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/DataHelper.html">DataHelper loadProps() and storeProps()</a>.
|
||||
Note that the file format is significantly different than the
|
||||
serialized format for I2P protocols specified in
|
||||
<a href="common_structures_spec#type_Mapping">Mapping</a>.
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_Mapping">Mapping</a>.
|
||||
</p>
|
||||
|
||||
<h2>Core library and router</h2>
|
||||
@@ -57,7 +57,7 @@ Configured via /configlogging in the router console.
|
||||
|
||||
<h3>Individual Plugin (xxx/plugin.config)</h3>
|
||||
<p>
|
||||
See <a href="plugin_spec.html">the plugin specification</a>.
|
||||
See <a href="{{ site_url('docs/specs/plugin') }}">the plugin specification</a>.
|
||||
</p>
|
||||
|
||||
<h3>Plugins (plugins.config)</h3>
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Datagram Specification{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
@@ -12,9 +12,9 @@ message. This is necessary for some applications since the base I2P message is
|
||||
completely raw - it has no "from" address (unlike IP packets). In addition, the
|
||||
message and sender are authenticated by signing the payload.</p>
|
||||
<p>
|
||||
Datagrams, like <a href="streaming.html">streaming library packets</a>,
|
||||
Datagrams, like <a href="{{ site_url('docs/api/streaming') }}">streaming library packets</a>,
|
||||
are an application-level construct.
|
||||
These protocols are independent of the low-level <a href="transports.html">transports</a>;
|
||||
These protocols are independent of the low-level <a href="{{ site_url('docs/transport') }}">transports</a>;
|
||||
the protocols are converted to I2NP messages by the router, and
|
||||
either protocol may be carried by either transport.
|
||||
</p>
|
||||
@@ -23,8 +23,8 @@ either protocol may be carried by either transport.
|
||||
<p>Applications written in Java may use the
|
||||
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/datagram/package-summary.html">datagram API</a>,
|
||||
while applications in other languages
|
||||
can use <a href="sam">SAM</a>'s datagram support.
|
||||
There is also limited support in i2ptunnel in the <a href="socks.html">SOCKS proxy</a>,
|
||||
can use <a href="{{ site_url('docs/api/sam') }}">SAM</a>'s datagram support.
|
||||
There is also limited support in i2ptunnel in the <a href="{{ site_url('docs/api/socks') }}">SOCKS proxy</a>,
|
||||
the 'streamr' tunnel types, and udpTunnel classes.
|
||||
</p>
|
||||
|
||||
@@ -37,7 +37,7 @@ by an intermediate hop. Messages larger than a few KB are not recommended.
|
||||
</p>
|
||||
<p>
|
||||
Also note that the various overheads added by lower layers, in particular asymmetric
|
||||
<a href="how_elgamalaes.html">ElGamal/AES</a>, place a large burden on intermittent messages
|
||||
<a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES</a>, place a large burden on intermittent messages
|
||||
such as used by a Kademlia-over-UDP application. The implementations are currently tuned
|
||||
for frequent traffic using the streaming library. There are a high number
|
||||
of session tags delivered, and a short session tag lifetime, for example.
|
||||
@@ -78,11 +78,11 @@ There is no checksum field in the datagram protocol.
|
||||
|
||||
<h3>Packet Encapsulation</h3>
|
||||
Each datagram is sent through I2P as a single message (or as an individual clove in a
|
||||
<a href="how_garlicrouting.html">Garlic Message</a>).
|
||||
<a href="{{ site_url('docs/how/garlicrouting') }}">Garlic Message</a>).
|
||||
Message encapsulation is implemented in the underlying
|
||||
<a href="i2cp.html">I2CP</a>,
|
||||
<a href="i2np.html">I2NP</a>, and
|
||||
<a href="tunnel_message_spec.html">tunnel message</a> layers.
|
||||
<a href="{{ site_url('docs/specs/tunnel_message') }}">tunnel message</a> layers.
|
||||
There is no packet delimiter mechanism or length field in the datagram protocol.
|
||||
|
||||
|
||||
@@ -107,9 +107,9 @@ Length: 0 - unlimited (see notes)
|
||||
|
||||
<h4>Notes</h4>
|
||||
The practical length is limited by lower layers of protocols - the
|
||||
<a href="tunnel_message_spec.html#notes">tunnel message spec</a>
|
||||
<a href="{{ site_url('docs/specs/tunnel_message') }}#notes">tunnel message spec</a>
|
||||
limits messages to about 61.2 KB and the
|
||||
<a href="transports.html">transports</a>
|
||||
<a href="{{ site_url('docs/transport') }}">transports</a>
|
||||
currently limit messages to about 32 KB, although this may be raised in the future.
|
||||
|
||||
|
||||
@@ -143,13 +143,13 @@ Repliable datagrams contain a 'from' address and a signature. These add 427 byte
|
||||
|
||||
|
||||
|
||||
from :: a <a href="common_structures_spec#type_Destination">Destination</a>
|
||||
from :: a <a href="{{ site_url('docs/specs/common_structures') }}#type_Destination">Destination</a>
|
||||
length: 387+ bytes
|
||||
The originator and signer of the datagram
|
||||
|
||||
signature :: a <a href="common_structures_spec#type_Signature">Signature</a>
|
||||
signature :: a <a href="{{ site_url('docs/specs/common_structures') }}#type_Signature">Signature</a>
|
||||
length: 40 bytes
|
||||
The <a href="how_cryptography.html#DSA">DSA</a> signature of the SHA256 hash of the payload, which may be verified by the
|
||||
The <a href="{{ site_url('docs/how/cryptography') }}#DSA">DSA</a> signature of the SHA256 hash of the payload, which may be verified by the
|
||||
DSA signing public key of the 'from' Destination
|
||||
|
||||
payload :: The data
|
||||
@@ -162,7 +162,7 @@ Total length: Payload length + 427+
|
||||
|
||||
<h4>Notes</h4>
|
||||
The practical length is limited by lower layers of protocols - the
|
||||
<a href="transports.html">transports</a>
|
||||
<a href="{{ site_url('docs/transport') }}">transports</a>
|
||||
currently limit messages to about 32 KB, so the data length here is limited to about
|
||||
31.5 KB.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}I2CP Specification{% endblock %}
|
||||
{% block content %}
|
||||
Updated November 2012, current as of router version 0.9.3
|
||||
@@ -158,9 +158,9 @@ as they generally disconnect the session upon reception of an unsupported messag
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a> specifying the length of the message body
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> specifying the length of the message body
|
||||
</li><li>
|
||||
1 byte <a href="common_structures_spec#type_Integer">Integer</a> specifying the message type.
|
||||
1 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> specifying the message type.
|
||||
</li><li>
|
||||
The I2CP message body, 0 or more bytes
|
||||
</li></ol>
|
||||
@@ -181,7 +181,7 @@ point in time.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -200,7 +200,7 @@ Destination to another.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a> length
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> length
|
||||
</li><li>
|
||||
That many bytes
|
||||
</li></ol>
|
||||
@@ -221,14 +221,14 @@ Defines the configuration options for a particular client session.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
<a href="common_structures_spec#struct_Destination">Destination</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_Destination">Destination</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#type_Mapping">Mapping</a> of options
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_Mapping">Mapping</a> of options
|
||||
</li><li>
|
||||
Creation <a href="common_structures_spec#type_Date">Date</a>
|
||||
Creation <a href="{{ site_url('docs/specs/common_structures') }}#type_Date">Date</a>
|
||||
</li><li>
|
||||
DSA <a href="common_structures_spec#type_Signature">Signature</a> of the previous 3 fields, signed by the
|
||||
<a href="common_structures_spec#type_SigningPrivateKey">Signing Private Key</a>
|
||||
DSA <a href="{{ site_url('docs/specs/common_structures') }}#type_Signature">Signature</a> of the previous 3 fields, signed by the
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_SigningPrivateKey">Signing Private Key</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -249,7 +249,7 @@ time.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
2 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
2 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -396,28 +396,28 @@ Sent from Router to Client in response to a Get Bandwidth Limits Message.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Client inbound limit (KBps)
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Client outbound limit (KBps)
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Router inbound limit (KBps)
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Router inbound burst limit (KBps)
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Router outbound limit (KBps)
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Router outbound burst limit (KBps)
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a>
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a>
|
||||
Router burst time (seconds)
|
||||
</li><li>
|
||||
Nine 4-byte <a href="common_structures_spec#type_Integer">Integers</a>
|
||||
Nine 4-byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integers</a>
|
||||
undefined
|
||||
</li></ol>
|
||||
|
||||
@@ -441,11 +441,11 @@ Sent from Client to Router.
|
||||
<ol><li>
|
||||
<a href="#struct_SessionId">Session ID</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#type_SigningPrivateKey">Signing Private Key</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_SigningPrivateKey">Signing Private Key</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#type_PrivateKey">Private Key</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_PrivateKey">Private Key</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#struct_LeaseSet">LeaseSet</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_LeaseSet">LeaseSet</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -497,7 +497,7 @@ The router responds with a <a href="#msg_DestReply">Dest Reply Message</a>.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
<a href="common_structures_spec#struct_Hash">SHA-256 Hash</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_Hash">SHA-256 Hash</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -516,9 +516,9 @@ Sent from Router to Client in response to a Dest Lookup Message.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
<a href="common_structures_spec#struct_Destination">Destination</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_Destination">Destination</a>
|
||||
on success, or
|
||||
<a href="common_structures_spec#struct_Hash">Hash</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_Hash">Hash</a>
|
||||
on failure
|
||||
</li></ol>
|
||||
|
||||
@@ -561,7 +561,7 @@ Sent either from router to client or from client to router.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
Reason <a href="common_structures_spec#struct_String">String</a>
|
||||
Reason <a href="{{ site_url('docs/specs/common_structures') }}#struct_String">String</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -599,7 +599,7 @@ The router responds with a <a href="#msg_SetDate">Set Date Message</a>.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
I2CP Version <a href="common_structures_spec#struct_String">String</a>
|
||||
I2CP Version <a href="{{ site_url('docs/specs/common_structures') }}#struct_String">String</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -651,11 +651,11 @@ For an outgoing message, this is a response to a
|
||||
</li><li>
|
||||
<a href="#struct_MessageId">Message ID</a>
|
||||
</li><li>
|
||||
1 byte <a href="common_structures_spec#type_Integer">Integer</a> status
|
||||
1 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> status
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a> size
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> size
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a> nonce
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> nonce
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -760,10 +760,10 @@ Sent either from router to client or from client to router.
|
||||
<ol><li>
|
||||
<a href="#struct_SessionId">Session ID</a>
|
||||
</li><li>
|
||||
1 byte <a href="common_structures_spec#type_Integer">Integer</a> abuse severity
|
||||
1 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> abuse severity
|
||||
(0 is minimally abusive, 255 being extremely abusive)
|
||||
</li><li>
|
||||
Reason <a href="common_structures_spec#struct_String">String</a>
|
||||
Reason <a href="{{ site_url('docs/specs/common_structures') }}#struct_String">String</a>
|
||||
</li><li>
|
||||
<a href="#struct_MessageId">Message ID</a>
|
||||
</li></ol>
|
||||
@@ -789,16 +789,16 @@ The client responds with a <a href="#msg_SessionStatus">Create LeaseSet Message<
|
||||
<ol><li>
|
||||
<a href="#struct_SessionId">Session ID</a>
|
||||
</li><li>
|
||||
1 byte <a href="common_structures_spec#type_Integer">Integer</a> number of tunnels
|
||||
1 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> number of tunnels
|
||||
</li><li>
|
||||
That many pairs of:
|
||||
<ol><li>
|
||||
<a href="common_structures_spec#struct_RouterIdentity">Router Identity</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_RouterIdentity">Router Identity</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#type_TunnelId">Tunnel ID</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_TunnelId">Tunnel ID</a>
|
||||
</li></ol>
|
||||
</li><li>
|
||||
End <a href="common_structures_spec#type_Date">Date</a>
|
||||
End <a href="{{ site_url('docs/specs/common_structures') }}#type_Date">Date</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -821,11 +821,11 @@ The router responds with a <a href="#msg_MessageStatus">Message Status Message</
|
||||
<ol><li>
|
||||
<a href="#struct_SessionId">Session ID</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#struct_Destination">Destination</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_Destination">Destination</a>
|
||||
</li><li>
|
||||
<a href="#struct_Payload">Payload</a>
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a> nonce
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> nonce
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -858,15 +858,15 @@ Sent from Client to Router. Same as Send Message Message, except includes an exp
|
||||
<ol><li>
|
||||
<a href="#struct_SessionId">Session ID</a>
|
||||
</li><li>
|
||||
<a href="common_structures_spec#struct_Destination">Destination</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#struct_Destination">Destination</a>
|
||||
</li><li>
|
||||
<a href="#struct_Payload">Payload</a>
|
||||
</li><li>
|
||||
4 byte <a href="common_structures_spec#type_Integer">Integer</a> nonce
|
||||
4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> nonce
|
||||
</li><li>
|
||||
2 bytes of flags (options)
|
||||
</li><li>
|
||||
Expiration <a href="common_structures_spec#type_Date">Date</a>
|
||||
Expiration <a href="{{ site_url('docs/specs/common_structures') }}#type_Date">Date</a>
|
||||
truncated from 8 bytes to 6 bytes
|
||||
</li></ol>
|
||||
|
||||
@@ -961,7 +961,7 @@ Sent from Router to Client.
|
||||
<ol><li>
|
||||
<a href="#struct_SessionId">Session ID</a>
|
||||
</li><li>
|
||||
1 byte <a href="common_structures_spec#type_Integer">Integer</a> status
|
||||
1 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> status
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
||||
@@ -981,9 +981,9 @@ Sent from Router to Client as a part of the initial handshake.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<ol><li>
|
||||
<a href="common_structures_spec#type_Date">Date</a>
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_Date">Date</a>
|
||||
</li><li>
|
||||
I2CP Version <a href="common_structures_spec#struct_String">String</a>
|
||||
I2CP Version <a href="{{ site_url('docs/specs/common_structures') }}#struct_String">String</a>
|
||||
</li></ol>
|
||||
|
||||
<h4>Notes</h4>
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}I2NP Specification{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
@@ -24,11 +24,11 @@ They are not complete messages.
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
1 byte <a href="common_structures_spec#type_Integer">Integer</a> specifying the type of this message,
|
||||
followed by a 4 byte <a href="common_structures_spec#type_Integer">Integer</a> specifying the message-id.
|
||||
After that there is an expiration <a href="common_structures_spec#type_Date">Date</a>,
|
||||
followed by a 2 byte <a href="common_structures_spec#type_Integer">Integer</a> specifying
|
||||
the length of the message payload, followed by a <a href="common_structures_spec#type_Hash">Hash</a>,
|
||||
1 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> specifying the type of this message,
|
||||
followed by a 4 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> specifying the message-id.
|
||||
After that there is an expiration <a href="{{ site_url('docs/specs/common_structures') }}#type_Date">Date</a>,
|
||||
followed by a 2 byte <a href="{{ site_url('docs/specs/common_structures') }}#type_Integer">Integer</a> specifying
|
||||
the length of the message payload, followed by a <a href="{{ site_url('docs/specs/common_structures') }}#type_Hash">Hash</a>,
|
||||
which is truncated to the first byte. After that the actual message data follows.
|
||||
</p>
|
||||
<pre>
|
||||
@@ -90,7 +90,7 @@ data :: Data
|
||||
</pre>
|
||||
<h4>Notes</h4>
|
||||
<ul><li>
|
||||
When transmitted over <a href="udp.html">SSU</a>,
|
||||
When transmitted over <a href="{{ site_url('docs/transport/ssu') }}">SSU</a>,
|
||||
the 16-byte standard header is not used.
|
||||
Only a 1-byte type and a 4-byte expiration in seconds is included.
|
||||
The message id and size are
|
||||
@@ -116,7 +116,7 @@ where the far-end router's version is known and checksum generation can be disab
|
||||
</p>
|
||||
<h4>Contents</h4>
|
||||
<p>
|
||||
<a href="common_structures_spec#type_TunnelId">TunnelId</a> to receive messages on, followed by the <a href="common_structures_spec#type_Hash">Hash</a> of our <a href="common_structures_spec#struct_RouterIdentity">RouterIdentity</a>. After that the <a href="common_structures_spec#type_TunnelId">TunnelId</a> and the <a href="common_structures_spec#type_Hash">Hash</a> of the next router's <a href="common_structures_spec#struct_RouterIdentity">RouterIdentity</a> follow.
|
||||
<a href="{{ site_url('docs/specs/common_structures') }}#type_TunnelId">TunnelId</a> to receive messages on, followed by the <a href="{{ site_url('docs/specs/common_structures') }}#type_Hash">Hash</a> of our <a href="{{ site_url('docs/specs/common_structures') }}#struct_RouterIdentity">RouterIdentity</a>. After that the <a href="{{ site_url('docs/specs/common_structures') }}#type_TunnelId">TunnelId</a> and the <a href="{{ site_url('docs/specs/common_structures') }}#type_Hash">Hash</a> of the next router's <a href="{{ site_url('docs/specs/common_structures') }}#struct_RouterIdentity">RouterIdentity</a> follow.
|
||||
</p>
|
||||
<h4>Definition</h4>
|
||||
<pre>
|
||||
@@ -272,7 +272,7 @@ total length: 528
|
||||
<ul><li>
|
||||
In the 512-byte encrypted record,
|
||||
the ElGamal data contains bytes 1-256 and 258-513 of the
|
||||
<a href="how_cryptography.html#elgamal">514-byte ElGamal encrypted block</a>.
|
||||
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">514-byte ElGamal encrypted block</a>.
|
||||
The two padding bytes from the block (the zero bytes at locations 0 and 257) are removed.
|
||||
</li><li>
|
||||
See the <a href="tunnel-alt-creation.html">tunnel creation specification</a> for details on field contents.
|
||||
@@ -341,7 +341,7 @@ unencrypted:
|
||||
<h4>Definition</h4>
|
||||
<pre>
|
||||
unencrypted:
|
||||
Delivery Instructions :: <a href="tunnel_message_spec.html#delivery">as defined here</a>
|
||||
Delivery Instructions :: <a href="{{ site_url('docs/specs/tunnel_message') }}#delivery">as defined here</a>
|
||||
Length varies but is typically 39, 43, or 47 bytes
|
||||
|
||||
I2NP Message :: Any I2NP Message
|
||||
@@ -363,9 +363,9 @@ Certificate :: Always NULL in the current implementation (3 bytes total, all zer
|
||||
If 1, the clove is encrypted, and a 32 byte Session Key immediately follows the flag byte.
|
||||
Clove encryption is not fully implemented.
|
||||
<li>
|
||||
See also the <a href="how_garlicrouting.html">garlic routing specification</a>.
|
||||
See also the <a href="{{ site_url('docs/how/garlicrouting') }}">garlic routing specification</a>.
|
||||
<li>
|
||||
See also <a href="tunnel_message_spec.html#delivery">Delivery Instructions definition</a>
|
||||
See also <a href="{{ site_url('docs/specs/tunnel_message') }}#delivery">Delivery Instructions definition</a>
|
||||
<li>
|
||||
Maximum length is a function of the total length of all the cloves and the
|
||||
maximum length of the GarlicMessage.
|
||||
@@ -509,7 +509,7 @@ reply token:
|
||||
reply tunnelId:
|
||||
4 byte Tunnel ID
|
||||
only included if reply token > 0
|
||||
This is the <a href="common_structures_spec#type_TunnelID">tunnel ID</a> of the inbound gateway of the tunnel the response should be sent to
|
||||
This is the <a href="{{ site_url('docs/specs/common_structures') }}#type_TunnelID">tunnel ID</a> of the inbound gateway of the tunnel the response should be sent to
|
||||
|
||||
reply gateway:
|
||||
32 bytes
|
||||
@@ -714,7 +714,7 @@ time stamp: Date
|
||||
It appears that the time stamp is always set by the creator to the current time.
|
||||
However there are several uses of this in the code, and more may be added in the future.
|
||||
</li><li>
|
||||
This message is also used as a session established confirmation in <a href="udp.html#establishDirect">SSU</a>.
|
||||
This message is also used as a session established confirmation in <a href="{{ site_url('docs/transport/ssu') }}#establishDirect">SSU</a>.
|
||||
In this case, the message ID is set to a random number, and the
|
||||
"arrival time" is set to the current network-wide ID, which is 2
|
||||
(i.e. 0x0000000000000002).
|
||||
@@ -804,9 +804,9 @@ Expiration :: Date (8 bytes)
|
||||
<li>
|
||||
Actual max length is less than 64 KB; see the <a href="i2np.html">I2NP Overview</a>.
|
||||
<li>
|
||||
See also the <a href="how_elgamalaes.html">ElGamal/AES specification</a>.
|
||||
See also the <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES specification</a>.
|
||||
<li>
|
||||
See also the <a href="how_garlicrouting.html">garlic routing specification</a>.
|
||||
See also the <a href="{{ site_url('docs/how/garlicrouting') }}">garlic routing specification</a>.
|
||||
<li>
|
||||
The 128 byte minimum size of the AES encrypted block is not currently configurable,
|
||||
however the minimum size of a DataMessage in a GarlicClove in a GarlicMessage, with
|
||||
@@ -852,7 +852,7 @@ data:
|
||||
<h4>Notes</h4>
|
||||
<ul>
|
||||
<li>
|
||||
See also the <a href="tunnel_message_spec.html">Tunnel Message Specification</a>
|
||||
See also the <a href="{{ site_url('docs/specs/tunnel_message') }}">Tunnel Message Specification</a>
|
||||
</ul>
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}I2P Plugin Specification{% endblock %}
|
||||
{% block content %}
|
||||
<h2>
|
||||
@@ -59,7 +59,7 @@ system, the router, executing external programs, etc.
|
||||
foo.xpi2p is a sud file containing the following:
|
||||
<pre>
|
||||
Standard .sud header prepended to the zip file, containing the following:
|
||||
40-byte <a href="how_cryptography.html#DSA">DSA signature</a>
|
||||
40-byte <a href="{{ site_url('docs/how/cryptography') }}#DSA">DSA signature</a>
|
||||
16-byte plugin version in UTF-8, padded with trailing zeroes if necessary
|
||||
|
||||
Zip file containing the following:
|
||||
@@ -74,7 +74,7 @@ foo.xpi2p is a sud file containing the following:
|
||||
*name (will be installed in this directory name)
|
||||
For native plugins, you may want separate names in different packages -
|
||||
foo-windows and foo-linux, for example
|
||||
*key (<a href="how_cryptography.html#DSA">DSA public key</a> as 172 B64 chars ending with '=')
|
||||
*key (<a href="{{ site_url('docs/how/cryptography') }}#DSA">DSA public key</a> as 172 B64 chars ending with '=')
|
||||
*signer (yourname@mail.i2p recommended)
|
||||
|
||||
*version (must be in a format VersionComparator can parse, e.g. 1.2.3-4)
|
@@ -1,4 +1,4 @@
|
||||
{% extends "_layout.html" %}
|
||||
{% extends "global/layout.html" %}
|
||||
{% block title %}Tunnel Message Specification{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
@@ -166,11 +166,11 @@ set, this is a follow on fragment.</p>
|
||||
|
||||
<p>
|
||||
Note that Delivery Instructions are also used inside
|
||||
<a href="i2np_spec#struct_GarlicClove">Garlic Cloves</a>,
|
||||
<a href="{{ site_url('docs/specs/i2np') }}#struct_GarlicClove">Garlic Cloves</a>,
|
||||
where the format is slightly different. In a Garlic Clove,
|
||||
messages are not fragmented, and the fragment bit in the flag byte is
|
||||
redefined. See the
|
||||
<a href="i2np_spec#struct_GarlicClove">Garlic Clove documentation</a>
|
||||
<a href="{{ site_url('docs/specs/i2np') }}#struct_GarlicClove">Garlic Clove documentation</a>
|
||||
for more details.
|
||||
|
||||
|
||||
@@ -238,7 +238,7 @@ Message ID:
|
||||
4 bytes
|
||||
Optional, present if this message is the first of 2 or more fragments
|
||||
An ID that uniquely identifies all fragments as belonging to a single message
|
||||
(the current implementation uses the <a href="i2np_spec.html#struct_header">I2NP Message ID</a>)
|
||||
(the current implementation uses the <a href="{{ site_url('docs/specs/i2np') }}#struct_header">I2NP Message ID</a>)
|
||||
|
||||
Extended Options:
|
||||
2 or more bytes
|
Reference in New Issue
Block a user