Migrated over various specifications

This commit is contained in:
str4d
2012-12-11 02:35:16 +00:00
parent 244f749529
commit d7a531a461
9 changed files with 113 additions and 101 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 %}

View File

@@ -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>

View File

@@ -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.

View File

@@ -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>

View File

@@ -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 &gt; 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>

View File

@@ -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)

View File

@@ -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