gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lsd0004] branch master updated: struggling with indent


From: gnunet
Subject: [lsd0004] branch master updated: struggling with indent
Date: Mon, 03 Jan 2022 18:37:18 +0100

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository lsd0004.

The following commit(s) were added to refs/heads/master by this push:
     new 836f41d  struggling with indent
836f41d is described below

commit 836f41df677921b1d8f0c395fe470d2fa32b029a
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Mon Jan 3 18:37:15 2022 +0100

    struggling with indent
---
 draft-schanzen-r5n.xml | 2429 ++++++++++++++++++++++++------------------------
 1 file changed, 1214 insertions(+), 1215 deletions(-)

diff --git a/draft-schanzen-r5n.xml b/draft-schanzen-r5n.xml
index a1a20f2..7b88e35 100644
--- a/draft-schanzen-r5n.xml
+++ b/draft-schanzen-r5n.xml
@@ -28,122 +28,121 @@
 <?rfc compact="yes" ?>
 <?rfc subcompact="no" ?>
 <rfc xmlns:xi="http://www.w3.org/2001/XInclude"; category="info" 
docName="draft-schanzen-r5n-00" ipr="trust200902" obsoletes="" updates="" 
submissionType="IETF" xml:lang="en" version="3">
-<!-- xml2rfc v2v3 conversion 2.26.0 -->
-<front>
-<title abbrev="The R5N Distributed Hash Table">
-The R5N Distributed Hash Table
-</title>
-<seriesInfo name="Internet-Draft" value="draft-schanzen-r5n-00"/>
-<author fullname="Martin Schanzenbach" initials="M." surname="Schanzenbach">
-<organization>GNUnet e.V.</organization>
-<address>
-<postal>
-<street>Boltzmannstrasse 3</street>
-<city>Garching</city>
-<code>85748</code>
-<country>DE</country>
-</postal>
-<email>schanzen@gnunet.org</email>
-</address>
-</author>
-<author fullname="Christian Grothoff" initials="C." surname="Grothoff">
-<organization>Berner Fachhochschule</organization>
-<address>
-<postal>
-<street>Hoeheweg 80</street>
-<city>Biel/Bienne</city>
-<code>2501</code>
-<country>CH</country>
-</postal>
-<email>grothoff@gnunet.org</email>
-</address>
-</author>
-<author fullname="Bernd Fix" initials="B." surname="Fix">
-<organization>GNUnet e.V.</organization>
-<address>
-<postal>
-<street>Boltzmannstrasse 3</street>
-<city>Garching</city>
-<code>85748</code>
-<country>DE</country>
-</postal>
-<email>fix@gnunet.org</email>
-</address>
-</author>
-<!-- Meta-data Declarations -->
-<area>General</area>
-<workgroup>Independent Stream</workgroup>
-<keyword>distributed hash tables</keyword>
-<abstract>
-<t>This document contains the R5N DHT technical specification.</t>
-<t>
-This document defines the normative wire format of resource records,
-resolution processes, cryptographic routines and security considerations for
-use by implementers.
-</t>
-<t>
-This specification was developed outside the IETF and does not have IETF
-consensus. It is published here to guide implementation of R5N and to
-ensure interoperability among implementations.
-</t>
-</abstract>
-</front>
-<middle>
-<section anchor="introduction" numbered="true" toc="default">
-<name>Introduction</name>
+  <front>
+    <title abbrev="The R5N Distributed Hash Table">
+      The R5N Distributed Hash Table
+    </title>
+    <seriesInfo name="Internet-Draft" value="draft-schanzen-r5n-00"/>
+    <author fullname="Martin Schanzenbach" initials="M." 
surname="Schanzenbach">
+      <organization>GNUnet e.V.</organization>
+      <address>
+        <postal>
+          <street>Boltzmannstrasse 3</street>
+          <city>Garching</city>
+          <code>85748</code>
+          <country>DE</country>
+        </postal>
+        <email>schanzen@gnunet.org</email>
+        </address>
+      </author>
+      <author fullname="Christian Grothoff" initials="C." surname="Grothoff">
+        <organization>Berner Fachhochschule</organization>
+        <address>
+          <postal>
+            <street>Hoeheweg 80</street>
+            <city>Biel/Bienne</city>
+            <code>2501</code>
+            <country>CH</country>
+          </postal>
+          <email>grothoff@gnunet.org</email>
+        </address>
+      </author>
+      <author fullname="Bernd Fix" initials="B." surname="Fix">
+        <organization>GNUnet e.V.</organization>
+        <address>
+          <postal>
+            <street>Boltzmannstrasse 3</street>
+            <city>Garching</city>
+            <code>85748</code>
+            <country>DE</country>
+          </postal>
+          <email>fix@gnunet.org</email>
+        </address>
+      </author>
+      <!-- Meta-data Declarations -->
+      <area>General</area>
+      <workgroup>Independent Stream</workgroup>
+      <keyword>distributed hash tables</keyword>
+      <abstract>
+        <t>This document contains the R5N DHT technical specification.</t>
+        <t>
+          This document defines the normative wire format of resource records,
+          resolution processes, cryptographic routines and security 
considerations for
+          use by implementers.
+        </t>
+        <t>
+          This specification was developed outside the IETF and does not have 
IETF
+          consensus. It is published here to guide implementation of R5N and to
+          ensure interoperability among implementations.
+        </t>
+      </abstract>
+    </front>
+    <middle>
+      <section anchor="introduction" numbered="true" toc="default">
+        <name>Introduction</name>
 <!-- FIXME: Here we should also cite and discuss RELOAD 
(https://datatracker.ietf.org/doc/html/rfc6940)
 and establish why we need this spec and are not a "Topology plugin"
 in RELOAD. The argumentation revolves around the trust model (openness) and
 security aspects (path signatures).
 -->
-<t>
-Distributed Hash Tables (DHTs) are a key data structure for the
-construction of completely decentralized applications.
-DHTs are important because they generally provide a robust and
-efficient means to distribute the storage and retrieval of
-key-value pairs.
-</t>
-<t>
-While <xref target="RFC6940"/> already provides a peer-to-peer (P2P)
-signaling protocol with extensible routing and topology mechanisms,
-it also relies on strict admission control through the use of either
-centralized enrollment servers or pre-shared keys.
-Modern decentralized applications require a more open system that
-enables ad-hoc participation and other means to prevent common attacks
-on P2P overlays.
-</t>
-<t>
-This document contains the technical specification
-of the R5N DHT <xref target="R5N"/>, a secure DHT routing algorithm
-and data structure for decentralized applications.
-R5N is an open P2P overlay routing mechanism which supports ad-hoc
-participation and security properties including support for
-topologies in restricted-route environments and path signatures.
-</t>
-<t>
-This document defines the normative wire format of peer-to-peer
-messages, routing algorithms, cryptographic routines and security
-considerations for use by implementors.
-</t>
-<section numbered="true" toc="default">
-<name>Requirements Notation</name>
-<t>
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
-"OPTIONAL" in this document are to be interpreted as described in
-BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
-when, they appear in all capitals, as shown here.
-</t>
-</section>
-</section>
-<section anchor="architecture" numbered="true" toc="default">
-<name>Architecture</name>
-<t>
-R5N is an overlay network with a pluggable transport layer.
-The following figure shows the R5N architecture.
-</t>
-<figure>
-<artwork><![CDATA[
+        <t>
+          Distributed Hash Tables (DHTs) are a key data structure for the
+          construction of completely decentralized applications.
+          DHTs are important because they generally provide a robust and
+          efficient means to distribute the storage and retrieval of
+          key-value pairs.
+        </t>
+        <t>
+          While <xref target="RFC6940"/> already provides a peer-to-peer (P2P)
+          signaling protocol with extensible routing and topology mechanisms,
+          it also relies on strict admission control through the use of either
+          centralized enrollment servers or pre-shared keys.
+          Modern decentralized applications require a more open system that
+          enables ad-hoc participation and other means to prevent common 
attacks
+          on P2P overlays.
+        </t>
+        <t>
+          This document contains the technical specification
+          of the R5N DHT <xref target="R5N"/>, a secure DHT routing algorithm
+          and data structure for decentralized applications.
+          R5N is an open P2P overlay routing mechanism which supports ad-hoc
+          participation and security properties including support for
+          topologies in restricted-route environments and path signatures.
+        </t>
+        <t>
+          This document defines the normative wire format of peer-to-peer
+          messages, routing algorithms, cryptographic routines and security
+          considerations for use by implementors.
+        </t>
+        <section numbered="true" toc="default">
+          <name>Requirements Notation</name>
+          <t>
+            The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+            "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", 
and
+            "OPTIONAL" in this document are to be interpreted as described in
+            BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and 
only
+            when, they appear in all capitals, as shown here.
+          </t>
+        </section>
+      </section>
+      <section anchor="architecture" numbered="true" toc="default">
+        <name>Architecture</name>
+        <t>
+          R5N is an overlay network with a pluggable transport layer.
+          The following figure shows the R5N architecture.
+        </t>
+        <figure>
+          <artwork><![CDATA[
              |  +-----------------+  +-------+
 Applications |  | GNU Name System |  | CADET |  ...
              |  +-----------------+  +-------+
@@ -166,466 +165,466 @@ Connectivity | |Underlay|  |Underlay|
              | |Link    |  |Link    |
              | +--------+  +--------+
 ]]>
-</artwork>
-</figure>
-<dl>
-<dt>Applications</dt>
-<dd>
-Applications are components which directly use the DHT overlay
-interfaces. Possible applications include the GNU Name System
-<xref target="I-D.draft-schanzen-gns"/> or the CADET transport system
-<xref target="cadet"/>.
-</dd>
-<dt>Overlay Interface</dt>
-<dd>
-The Overlay Interface exposes the core operations of the DHT overlay
-to applications.
-This includes querying and retrieving data from the DHT.
-</dd>
-<dt>Block Storage</dt>
-<dd>
-The Block Storage component is used to persist and manage data
-by nodes. It includes logic for quotas, caching stragegies and
-data validation.
-</dd>
-<dt>Message Processing</dt>
-<dd>
-The Message Processing component processes requests from and responses
-to applications as well as messages from the underlay network.
-</dd>
-<dt>Routing</dt>
-<dd>
-The Routing component includes the routing table as well as
-routing and node selection logic. It facilitates the R5N routing
-algorithm with required data structures and algorithms.
-</dd>
-<dt>Underlay Interface</dt>
-<dd>
-The DHT Underlay Interface is an abstraction layer on top of the
-supported links of a node. Nodes may be linked by a variety of
-different transports, including "classical" protocols such as
-TCP, UDP and TLS or advanced protocols such as GNUnet, L2P or Tor.
-</dd>
-</dl>
-<t>
-Other glossary
-</t>
-<dl>
-<dt>Node</dt>
-<dd>
-A node is participant in the network and addressable through the
-network overlay.
-</dd>
-<dt>Node Address</dt>
-<dd>
-The <tt>Node Address</tt> is the identifier used on the Overlay
-to address a node.
-</dd>
-<dt>Node ID</dt>
-<dd>
-The <tt>Node ID</tt> is the identity which is used to authenticate
-a node in the underlay.
-The <tt>Node Address</tt> is derived from the <tt>Node ID</tt>.
-</dd>
-<dt>Peer</dt>
-<dd>
-A peer is a node which is directly connected to our peer.
-</dd>
-</dl>
-</section>
-<section anchor="overlay" numbered="true" toc="default">
-<name>Overlay</name>
-<t>
-In the DHT overlay, a node is addressable by its
-<tt>Node Address</tt>.
-The <tt>Node Address</tt> is a SHA-512 hash <xref target="RFC4634"/>
-of the <tt>Node ID</tt>.
-<!-- FIXME should the node ID be agile? Should the signature then
-also be agile?-->
-<!--The node public key is the public key of the corresponding
-Ed25519<xref target="ed25519" /> node private key.-->
-</t>
-<t>
-Any implementation of this specification MUST expose the two API
-procedures "GET" and "PUT".
-</t>
-<section>
-<name>The GET procedure</name>
-<t>
-The GET procedure is defined as follows:
-</t>
-<t>
-<tt>GET(Key[, GetParams]) -> Results as List</tt>
-</t>
-<t>
-The procedure takes a single additional <tt>QueryParams</tt>
-argument in order to specify detailed query parameters.
-The <tt>GetParams</tt> consist of the following parameters:
-</t>
-<dl>
-<dt>BlockType</dt>
-<dd>
-The default setting of this parameter is to request any type of
-block types under the key.
-</dd>
-<dt>ReplicationLevel</dt>
-<dd>The default setting of this parameter is X (FIXME).</dd>
-<dt>RouteOptions</dt>
-<dd>
-are used in order to indicate certain
-processing requirements for messages.
-Any combination of options as defined in <xref target="route_options"/>
-may be specificied.
-The default setting of this parameter is that no option is set.
-</dd>
-<dt>XQuery</dt>
-<dd>
-is extended query medatadata which may be
-required depending on the respective <tt>BlockType</tt>.
-A <tt>BlockType</tt> must define if the <tt>XQuery</tt> can or must
-be used and what the specific format of its contents should be.
-See also <xref target="block_types"/>.
-The default setting of this parameter is empty.
-</dd>
-</dl>
-<t>
-The <tt>RouteOptions</tt> consist of the following flags:
-</t>
-<dl anchor="route_options">
-<dt>DemultiplexEverywhere</dt>
-<dd>
-indicates that each node along the way should process the request.
-</dd>
-<dt>RecordRoute</dt>
-<dd>
-indicates to keep track of the route that the message takes
-in the P2P network.
-</dd>
-<dt>FindNode</dt>
-<dd>
-indicates that this is a request used to find additional nodes.
-This is a special flag which modifies the message processing to
-allow approximate results.
-</dd>
-</dl>
-<t>
-As the time it takes for results to arrive may vary an implementation
-may either return a list of results after a timeout or allow the
-caller to provide a callback function which is called for any result
-received from the DHT until the procedure is cancelled.
-</t>
-</section>
-<section>
-<name>The PUT procedure</name>
-<t>
-The PUT procedure is defined as follows:
-</t>
-<t>
-<tt>PUT(Key, Block, BlockType[, PutParams])</tt>
-</t>
-<t>
-The procedure takes three mandatory arguments.
-The first argument is the query
-key under which the block is to be stored.
-The second parameter is the block payload.
-The third parameter is the type of the block payload.
-Block types are defined in <xref target="block_types"/>.
-The PUT procedure also allows an optional <tt>PutParams</tt>
-parameter.
-</t>
-<dl>
-<dt>ReplicationLevel</dt>
-<dd>The default setting of this parameter is X (FIXME).</dd>
-<dt>RouteOptions</dt>
-<dd>
-are used in order to indicate certain
-processing requirements for messages.
-Any combination of options as defined in <xref target="route_options"/>
-may be specificied.
-The default setting of this parameter is that no option is set.
-</dd>
-<dt>Expiration</dt>
-<dd>
-is the requested expiration date for the block payload.
-</dd>
-</dl>
-</section>
-</section>
-<section anchor="underlay" numbered="true" toc="default">
-<name>Underlay</name>
-<t>
-In the network underlay, a node is addressable by traditional
-means out of scope of this document. For example, the node may
-have a TCP/IP address, or a HTTPS endpoint.
-While the specific addressing options and mechanisms are out of scope
-for this document, it is necessary to define a universal addressing
-format in order to facilitate the distribution of connectivity
-information to other nodes in the DHT overlay.
-This format is the "HELLO" message.
-</t>
-<!--
-1) The current API is always fire+forget, it doesn't allow for flow
-control. I think we need to add that, possibly for sending and receiving.
+          </artwork>
+        </figure>
+        <dl>
+          <dt>Applications</dt>
+          <dd>
+            Applications are components which directly use the DHT overlay
+            interfaces. Possible applications include the GNU Name System
+            <xref target="I-D.draft-schanzen-gns"/> or the CADET transport 
system
+            <xref target="cadet"/>.
+          </dd>
+          <dt>Overlay Interface</dt>
+          <dd>
+            The Overlay Interface exposes the core operations of the DHT 
overlay
+            to applications.
+            This includes querying and retrieving data from the DHT.
+          </dd>
+          <dt>Block Storage</dt>
+          <dd>
+            The Block Storage component is used to persist and manage data
+            by nodes. It includes logic for quotas, caching stragegies and
+            data validation.
+          </dd>
+          <dt>Message Processing</dt>
+          <dd>
+            The Message Processing component processes requests from and 
responses
+            to applications as well as messages from the underlay network.
+          </dd>
+          <dt>Routing</dt>
+          <dd>
+            The Routing component includes the routing table as well as
+            routing and node selection logic. It facilitates the R5N routing
+            algorithm with required data structures and algorithms.
+          </dd>
+          <dt>Underlay Interface</dt>
+          <dd>
+            The DHT Underlay Interface is an abstraction layer on top of the
+            supported links of a node. Nodes may be linked by a variety of
+            different transports, including "classical" protocols such as
+            TCP, UDP and TLS or advanced protocols such as GNUnet, L2P or Tor.
+          </dd>
+        </dl>
+        <t>
+          Other glossary
+        </t>
+        <dl>
+          <dt>Node</dt>
+          <dd>
+            A node is participant in the network and addressable through the
+            network overlay.
+          </dd>
+          <dt>Node Address</dt>
+          <dd>
+            The <tt>Node Address</tt> is the identifier used on the Overlay
+            to address a node.
+          </dd>
+          <dt>Node ID</dt>
+          <dd>
+            The <tt>Node ID</tt> is the identity which is used to authenticate
+            a node in the underlay.
+            The <tt>Node Address</tt> is derived from the <tt>Node ID</tt>.
+          </dd>
+          <dt>Peer</dt>
+          <dd>
+            A peer is a node which is directly connected to our peer.
+          </dd>
+        </dl>
+      </section>
+      <section anchor="overlay" numbered="true" toc="default">
+        <name>Overlay</name>
+        <t>
+          In the DHT overlay, a node is addressable by its
+          <tt>Node Address</tt>.
+          The <tt>Node Address</tt> is a SHA-512 hash <xref target="RFC4634"/>
+          of the <tt>Node ID</tt>.
+          <!-- FIXME should the node ID be agile? Should the signature then
+          also be agile?-->
+          <!--The node public key is the public key of the corresponding
+          Ed25519<xref target="ed25519" /> node private key.-->
+        </t>
+        <t>
+          Any implementation of this specification MUST expose the two API
+          procedures "GET" and "PUT".
+        </t>
+        <section>
+          <name>The GET procedure</name>
+          <t>
+            The GET procedure is defined as follows:
+          </t>
+          <t>
+            <tt>GET(Key[, GetParams]) -> Results as List</tt>
+          </t>
+          <t>
+            The procedure takes a single additional <tt>QueryParams</tt>
+            argument in order to specify detailed query parameters.
+            The <tt>GetParams</tt> consist of the following parameters:
+          </t>
+          <dl>
+            <dt>BlockType</dt>
+            <dd>
+              The default setting of this parameter is to request any type of
+              block types under the key.
+            </dd>
+            <dt>ReplicationLevel</dt>
+            <dd>The default setting of this parameter is X (FIXME).</dd>
+            <dt>RouteOptions</dt>
+            <dd>
+              are used in order to indicate certain
+              processing requirements for messages.
+              Any combination of options as defined in <xref 
target="route_options"/>
+              may be specificied.
+              The default setting of this parameter is that no option is set.
+            </dd>
+            <dt>XQuery</dt>
+            <dd>
+              is extended query medatadata which may be
+              required depending on the respective <tt>BlockType</tt>.
+              A <tt>BlockType</tt> must define if the <tt>XQuery</tt> can or 
must
+              be used and what the specific format of its contents should be.
+              See also <xref target="block_types"/>.
+              The default setting of this parameter is empty.
+            </dd>
+          </dl>
+          <t>
+            The <tt>RouteOptions</tt> consist of the following flags:
+          </t>
+          <dl anchor="route_options">
+            <dt>DemultiplexEverywhere</dt>
+            <dd>
+              indicates that each node along the way should process the 
request.
+            </dd>
+            <dt>RecordRoute</dt>
+            <dd>
+              indicates to keep track of the route that the message takes
+              in the P2P network.
+            </dd>
+            <dt>FindNode</dt>
+            <dd>
+              indicates that this is a request used to find additional nodes.
+              This is a special flag which modifies the message processing to
+              allow approximate results.
+            </dd>
+          </dl>
+          <t>
+            As the time it takes for results to arrive may vary an 
implementation
+            may either return a list of results after a timeout or allow the
+            caller to provide a callback function which is called for any 
result
+            received from the DHT until the procedure is cancelled.
+          </t>
+        </section>
+        <section>
+          <name>The PUT procedure</name>
+          <t>
+            The PUT procedure is defined as follows:
+          </t>
+          <t>
+            <tt>PUT(Key, Block, BlockType[, PutParams])</tt>
+          </t>
+          <t>
+            The procedure takes three mandatory arguments.
+            The first argument is the query
+            key under which the block is to be stored.
+            The second parameter is the block payload.
+            The third parameter is the type of the block payload.
+            Block types are defined in <xref target="block_types"/>.
+            The PUT procedure also allows an optional <tt>PutParams</tt>
+            parameter.
+          </t>
+          <dl>
+            <dt>ReplicationLevel</dt>
+            <dd>The default setting of this parameter is X (FIXME).</dd>
+            <dt>RouteOptions</dt>
+            <dd>
+              are used in order to indicate certain
+              processing requirements for messages.
+              Any combination of options as defined in <xref 
target="route_options"/>
+              may be specificied.
+              The default setting of this parameter is that no option is set.
+            </dd>
+            <dt>Expiration</dt>
+            <dd>
+              is the requested expiration date for the block payload.
+            </dd>
+          </dl>
+        </section>
+      </section>
+      <section anchor="underlay" numbered="true" toc="default">
+        <name>Underlay</name>
+        <t>
+          In the network underlay, a node is addressable by traditional
+          means out of scope of this document. For example, the node may
+          have a TCP/IP address, or a HTTPS endpoint.
+          While the specific addressing options and mechanisms are out of scope
+          for this document, it is necessary to define a universal addressing
+          format in order to facilitate the distribution of connectivity
+          information to other nodes in the DHT overlay.
+          This format is the "HELLO" message.
+        </t>
+        <!--
+          1) The current API is always fire+forget, it doesn't allow for flow
+          control. I think we need to add that, possibly for sending and 
receiving.
 
-IDK.
+          IDK.
 
-2) I'm not sure what to do with the crypto: mandate EdDSA or allow the
-underlay to do whatever public keys it likes.
+          2) I'm not sure what to do with the crypto: mandate EdDSA or allow 
the
+          underlay to do whatever public keys it likes.
 
-We need keys in the overlay. (Path signatures). Do they need to
-be the same keys???
+          We need keys in the overlay. (Path signatures). Do they need to
+          be the same keys???
 
-3) I think we may want to mandate that the lower layer at least
-authenticate the other node (i.e. every UDP message could be in
-cleartext, but would need to come with an EdDSA signature, alas 92 byte
-overhead and a signature verification _required_).  Otherwise, I don't
-see how we can offer even the most minimal protections against node
-impersonation attacks. WDYT?
+          3) I think we may want to mandate that the lower layer at least
+          authenticate the other node (i.e. every UDP message could be in
+          cleartext, but would need to come with an EdDSA signature, alas 92 
byte
+          overhead and a signature verification _required_).  Otherwise, I 
don't
+          see how we can offer even the most minimal protections against node
+          impersonation attacks. WDYT?
 
-Security considerations? Prerequisites?
--->
-<t>
-It is expected that there are basic mechanisms available to
-manage node connectivity and addressing.
-The required functionality are abstracted through the following
-procedures and events:
-</t>
-<dl>
-<dt>
-<tt>PEER_CONNECTED(P)</tt>
-</dt>
-<dd>
-is a signal that allows the DHT to react to a newly connected peer
-<tt>N</tt>.
-Such an event triggers, for example, updates in the
-routing table.
-</dd>
-<dt>
-<tt>PEER_DISCONNECTED(P)</tt>
-</dt>
-<dd>
-is a signal that allows the DHT to react to a recently disconnected
-peer.
-Such an event triggers, for example, updates in the
-routing table.
-</dd>
-<dt>
-<tt>TRY_CONNECT(N, A)</tt>
-</dt>
-<dd>
-A function which allows the local node to attempt the establishment of
-a connection to another node <tt>N</tt> using an address <tt>A</tt>.
-When the connection attempt is successful, information on the new
-peer is offered through the <tt>PEER_CONNECTED</tt> signal.
-</dd>
-<dt>
-<tt>HOLD(P)</tt>
-</dt>
-<dd>
-A function which tells the underlay to keep a hold on the connection
-to a peer <tt>P</tt>. FIXME what is this needed for?
-</dd>
-<dt>
-<tt>DROP(P)</tt>
-</dt>
-<dd>
-A function which tells the underlay to drop the connection to a
-peer <tt>P</tt>. FIXME what is this needed for?
-</dd>
-<dt>
-<tt>RECEIVE(P, M)</tt>
-</dt>
-<dd>
-A function or event that allows the local node to receive a protocol
-message <tt>M</tt> as defined in this document from a peer <tt>P</tt>.
-</dd>
-<dt>
-<tt>SEND(P, M)</tt>
-</dt>
-<dd>
-A function that allows the local node to send a protocol message
-<tt>M</tt> as defined in this document to a peer <tt>P</tt>.
-If call to SEND fails, the message has not been sent.
-</dd>
-<dt>
-<tt>NETWORK_SIZE_ESTIMATE(S)</tt>
-</dt>
-<dd>
-A function or event that provides estimates on the network size
-<tt>S</tt> for use in the DHT routing algorithms.
-FIXME: What is S and give an example.
-</dd>
-<dt>
-<tt>ADDRESS_ADDED(A)</tt>
-</dt>
-<dd>
-The underlay signals us that an address <tt>A</tt> was added for our
-local node.
-This information is used to advertise
-connectivity information to the local node.
-<tt>A</tt> is a string suitable for inclusion in a HELLO payload
-<xref target="hello_block"/>.
-</dd>
-<dt>
-<tt>ADDRESS_DELETED(A)</tt>
-</dt>
-<dd>
-The underlay signals us that an address <tt>A</tt> was removed.
-This information is used, for example, to no longer advertise
-this address.
-</dd>
-<dt>
-<tt>VERIFY(blob)</tt>
-</dt>
-<dd>
-Signature verification by underlay. FIXME unclear. Required?
-</dd>
-</dl>
-</section>
-<section>
-<name>Bootstrapping</name>
-<t>
-It is assumed that the node is already connected to at least
-one other node.
-First, those initial nodes are sorted into their respective buckets.
-</t>
-<t>
-In order to find the closest nodes in the network to itself, an
-implementation MUST now periodically send HELLO GET queries for its own
-node address.
-Both the "record route" and "find node" message options are set in the
-GET queries in order to learn nodes and network topology from the
-message route and in order to receive approximate replies to the
-query key (the node address).
-</t>
-<t>FIXME: Periodically -&gt; more specific? No. Frequency may be adapted 
depending on network conditions, known nodes, busy/idle etc.</t>
-<t>
-Any implementation encountering a HELLO GET request initially
-sends its own node address if it.
-</t>
-</section>
-<section anchor="routing" numbered="true" toc="default">
-<name>Routing</name>
-<section anchor="peer_storage">
-<name>Peer Storage</name>
-<t>
-A R5N implementation must store the information on connected nodes
-and update changes accordingly in a local persistance component such
-as a database.
-Upon receiving a connection notification from the Underlay through
-<tt>NODE_CONNECTED</tt>, information on the new peer is added to the
-local peer storage.
-When disconnect is indicated by the Underlay through
-<tt>NODE_DISCONNECTED</tt> the peer MUST be removed from the local
-peer storage.
-The data structure for managing connected nodes and their
-metadata may be implemented using the k-buckets concept of
-<xref target="Kademlia"/>.
-In order to select nodes which are suitable destinations for
-routing messages, R5N uses a hybrid approach:
-Given an estimated network size N, the node selection for the
-first N hops is random. After the initial N hops, node selection
-follows an XOR-based node distance calculation.
-</t>
-</section>
-<section anchor="routing_table">
-<name>Routing Table</name>
-<t>
-As the message traverses a random path through the network for the
-first N hops, it is essential that routing loops are avoided.
-In R5N, a bloomfilter is used as part of the routing metadata in
-messages. The bloomfilter is updates at each hop with the hops
-node identity.
-For the next hop selection in both the random and the deterministic
-case, any node which is in the bloomfilter for the respective message
-is not included in the node selection process.
-</t>
-<t>
-The R5N routing component MUST implement the following functions:
-</t>
-<dl>
-<dt>
-<tt>GetDistance(A, B) -&gt; Distance as Integer</tt>
-</dt>
-<dd>
-this function calculates the binary XOR between A and B.
-The resulting distance is interpreted as an integer where
-the leftmost bit is the most significant bit.
-</dd>
-<dt>
-<tt>SelectClosestNode(K, B) -&gt; N</tt>
-</dt>
-<dd>
-This function selects the connected node <tt>N</tt> from our
-routing table with the shortest XOR-distance to the key <tt>K</tt>.
-This means that for all other nodes <tt>N'</tt> in the routing table
-<tt>GetDistance(N, K) &lt; GetDistance(N',K)</tt>.
-Nodes in the bloomfilter <tt>B</tt> are not considered.
-</dd>
-<dt>
-<tt>SelectRandomNode(B) -&gt; N</tt>
-</dt>
-<dd>
-This function selects a random node <tt>N</tt> from all connected
-nodes.
-Nodes in the bloomfilter <tt>B</tt> are not considered.
-</dd>
-<dt>
-<tt>SelectNode(K, H, B) -&gt; N</tt>
-</dt>
-<dd>
-This function selects a node <tt>N</tt> depending on the
-number of hops <tt>H</tt> parameter.
-If <tt>H &lt; NETWORK_SIZE_ESTIMATE</tt>
-this function MUST return <tt>SelectRandomNode()</tt> and
-<tt>SelectClosestnode(K)</tt> otherwise.
-Nodes in the bloomfilter <tt>B</tt> are not considered.
-</dd>
-<dt>
-<tt>IsClosestNode(N, K, B) -&gt; true | false</tt>
-</dt>
-<dd>
-checks if <tt>N</tt> is the closest node for <tt>K</tt>
-(cf. <tt>SelectClosestNode(K)</tt>).
-Nodes in the bloomfilter <tt>B</tt> are not considered.
-</dd>
-</dl>
-</section>
-</section>
-<section anchor="p2p_messages" numbered="true" toc="default">
-<name>Message Processing</name>
-<t>
-The implementation MUST listen for <tt>RECEIVE(P, M)</tt> signals
-from the Underlay and respond to the respective messages sent by
-the peer <tt>P</tt>.
-In the following, the wire formats of the messages and the required
-processing are detailed.
-The local node address is referred to as <tt>N</tt>.
-</t>
-<section anchor="p2p_bf" numbered="true" toc="default">
-<name>Bloomfilter</name>
-<t>
-In order to prevent circular routes, GET and PUT messages contain
-a 128-bit Bloom filter (m=128). The Bloom filter is used to detect duplicate
-node addresses along the route.
-A Bloom filter "bf" is initially empty, consisting only of zeroes.
-There are two functions which can be invoked on the Bloom filter:
-BF-SET(bf, e) and BF-TEST(bf, e) where "e" is an element which is to
-be added to the Bloom filter or queried against the set.
-Any bloom filter uses k=16 different hash functions each of which is
-defined as follows:
-</t>
-</section>
-<section anchor="p2p_xq" numbered="true" toc="default">
-<name>Extended query</name>
-<t>TODO: Talk about XQuery in the context of messages.</t>
-</section>
-<section anchor="p2p_put" numbered="true" toc="default">
-<name>PutMessage</name>
-<section anchor="p2p_put_wire">
-<name>Wire Format</name>
-<figure anchor="figure_putmsg">
-<artwork name="" type="" align="left" alt=""><![CDATA[
+          Security considerations? Prerequisites?
+        -->
+        <t>
+          It is expected that there are basic mechanisms available to
+          manage node connectivity and addressing.
+          The required functionality are abstracted through the following
+          procedures and events:
+        </t>
+        <dl>
+          <dt>
+            <tt>PEER_CONNECTED(P)</tt>
+          </dt>
+          <dd>
+            is a signal that allows the DHT to react to a newly connected peer
+            <tt>N</tt>.
+            Such an event triggers, for example, updates in the
+            routing table.
+          </dd>
+          <dt>
+            <tt>PEER_DISCONNECTED(P)</tt>
+          </dt>
+          <dd>
+            is a signal that allows the DHT to react to a recently disconnected
+            peer.
+            Such an event triggers, for example, updates in the
+            routing table.
+          </dd>
+          <dt>
+            <tt>TRY_CONNECT(N, A)</tt>
+          </dt>
+          <dd>
+            A function which allows the local node to attempt the 
establishment of
+            a connection to another node <tt>N</tt> using an address 
<tt>A</tt>.
+            When the connection attempt is successful, information on the new
+            peer is offered through the <tt>PEER_CONNECTED</tt> signal.
+          </dd>
+          <dt>
+            <tt>HOLD(P)</tt>
+          </dt>
+          <dd>
+            A function which tells the underlay to keep a hold on the 
connection
+            to a peer <tt>P</tt>. FIXME what is this needed for?
+          </dd>
+          <dt>
+            <tt>DROP(P)</tt>
+          </dt>
+          <dd>
+            A function which tells the underlay to drop the connection to a
+            peer <tt>P</tt>. FIXME what is this needed for?
+          </dd>
+          <dt>
+            <tt>RECEIVE(P, M)</tt>
+          </dt>
+          <dd>
+            A function or event that allows the local node to receive a 
protocol
+            message <tt>M</tt> as defined in this document from a peer 
<tt>P</tt>.
+          </dd>
+          <dt>
+            <tt>SEND(P, M)</tt>
+          </dt>
+          <dd>
+            A function that allows the local node to send a protocol message
+            <tt>M</tt> as defined in this document to a peer <tt>P</tt>.
+            If call to SEND fails, the message has not been sent.
+          </dd>
+          <dt>
+            <tt>NETWORK_SIZE_ESTIMATE(S)</tt>
+          </dt>
+          <dd>
+            A function or event that provides estimates on the network size
+            <tt>S</tt> for use in the DHT routing algorithms.
+            FIXME: What is S and give an example.
+          </dd>
+          <dt>
+            <tt>ADDRESS_ADDED(A)</tt>
+          </dt>
+          <dd>
+            The underlay signals us that an address <tt>A</tt> was added for 
our
+            local node.
+            This information is used to advertise
+            connectivity information to the local node.
+            <tt>A</tt> is a string suitable for inclusion in a HELLO payload
+            <xref target="hello_block"/>.
+          </dd>
+          <dt>
+            <tt>ADDRESS_DELETED(A)</tt>
+          </dt>
+          <dd>
+            The underlay signals us that an address <tt>A</tt> was removed.
+            This information is used, for example, to no longer advertise
+            this address.
+          </dd>
+          <dt>
+            <tt>VERIFY(blob)</tt>
+          </dt>
+          <dd>
+            Signature verification by underlay. FIXME unclear. Required?
+          </dd>
+        </dl>
+      </section>
+      <section>
+        <name>Bootstrapping</name>
+        <t>
+          It is assumed that the node is already connected to at least
+          one other node.
+          First, those initial nodes are sorted into their respective buckets.
+        </t>
+        <t>
+          In order to find the closest nodes in the network to itself, an
+          implementation MUST now periodically send HELLO GET queries for its 
own
+          node address.
+          Both the "record route" and "find node" message options are set in 
the
+          GET queries in order to learn nodes and network topology from the
+          message route and in order to receive approximate replies to the
+          query key (the node address).
+        </t>
+        <t>FIXME: Periodically -&gt; more specific? No. Frequency may be 
adapted depending on network conditions, known nodes, busy/idle etc.</t>
+        <t>
+          Any implementation encountering a HELLO GET request initially
+          sends its own node address if it.
+        </t>
+      </section>
+      <section anchor="routing" numbered="true" toc="default">
+        <name>Routing</name>
+        <section anchor="peer_storage">
+          <name>Peer Storage</name>
+          <t>
+            A R5N implementation must store the information on connected nodes
+            and update changes accordingly in a local persistance component 
such
+            as a database.
+            Upon receiving a connection notification from the Underlay through
+            <tt>NODE_CONNECTED</tt>, information on the new peer is added to 
the
+            local peer storage.
+            When disconnect is indicated by the Underlay through
+            <tt>NODE_DISCONNECTED</tt> the peer MUST be removed from the local
+            peer storage.
+            The data structure for managing connected nodes and their
+            metadata may be implemented using the k-buckets concept of
+            <xref target="Kademlia"/>.
+            In order to select nodes which are suitable destinations for
+            routing messages, R5N uses a hybrid approach:
+            Given an estimated network size N, the node selection for the
+            first N hops is random. After the initial N hops, node selection
+            follows an XOR-based node distance calculation.
+          </t>
+        </section>
+        <section anchor="routing_table">
+          <name>Routing Table</name>
+          <t>
+            As the message traverses a random path through the network for the
+            first N hops, it is essential that routing loops are avoided.
+            In R5N, a bloomfilter is used as part of the routing metadata in
+            messages. The bloomfilter is updates at each hop with the hops
+            node identity.
+            For the next hop selection in both the random and the deterministic
+            case, any node which is in the bloomfilter for the respective 
message
+            is not included in the node selection process.
+          </t>
+          <t>
+            The R5N routing component MUST implement the following functions:
+          </t>
+          <dl>
+            <dt>
+              <tt>GetDistance(A, B) -&gt; Distance as Integer</tt>
+            </dt>
+            <dd>
+              this function calculates the binary XOR between A and B.
+              The resulting distance is interpreted as an integer where
+              the leftmost bit is the most significant bit.
+            </dd>
+            <dt>
+              <tt>SelectClosestNode(K, B) -&gt; N</tt>
+            </dt>
+            <dd>
+              This function selects the connected node <tt>N</tt> from our
+              routing table with the shortest XOR-distance to the key 
<tt>K</tt>.
+              This means that for all other nodes <tt>N'</tt> in the routing 
table
+              <tt>GetDistance(N, K) &lt; GetDistance(N',K)</tt>.
+              Nodes in the bloomfilter <tt>B</tt> are not considered.
+            </dd>
+            <dt>
+              <tt>SelectRandomNode(B) -&gt; N</tt>
+            </dt>
+            <dd>
+              This function selects a random node <tt>N</tt> from all connected
+              nodes.
+              Nodes in the bloomfilter <tt>B</tt> are not considered.
+            </dd>
+            <dt>
+              <tt>SelectNode(K, H, B) -&gt; N</tt>
+            </dt>
+            <dd>
+              This function selects a node <tt>N</tt> depending on the
+              number of hops <tt>H</tt> parameter.
+              If <tt>H &lt; NETWORK_SIZE_ESTIMATE</tt>
+              this function MUST return <tt>SelectRandomNode()</tt> and
+              <tt>SelectClosestnode(K)</tt> otherwise.
+              Nodes in the bloomfilter <tt>B</tt> are not considered.
+            </dd>
+            <dt>
+              <tt>IsClosestNode(N, K, B) -&gt; true | false</tt>
+            </dt>
+            <dd>
+              checks if <tt>N</tt> is the closest node for <tt>K</tt>
+              (cf. <tt>SelectClosestNode(K)</tt>).
+              Nodes in the bloomfilter <tt>B</tt> are not considered.
+            </dd>
+          </dl>
+        </section>
+      </section>
+      <section anchor="p2p_messages" numbered="true" toc="default">
+        <name>Message Processing</name>
+        <t>
+          The implementation MUST listen for <tt>RECEIVE(P, M)</tt> signals
+          from the Underlay and respond to the respective messages sent by
+          the peer <tt>P</tt>.
+          In the following, the wire formats of the messages and the required
+          processing are detailed.
+          The local node address is referred to as <tt>N</tt>.
+        </t>
+        <section anchor="p2p_bf" numbered="true" toc="default">
+          <name>Bloomfilter</name>
+          <t>
+            In order to prevent circular routes, GET and PUT messages contain
+            a 128-bit Bloom filter (m=128). The Bloom filter is used to detect 
duplicate
+            node addresses along the route.
+            A Bloom filter "bf" is initially empty, consisting only of zeroes.
+            There are two functions which can be invoked on the Bloom filter:
+            BF-SET(bf, e) and BF-TEST(bf, e) where "e" is an element which is 
to
+            be added to the Bloom filter or queried against the set.
+            Any bloom filter uses k=16 different hash functions each of which 
is
+            defined as follows:
+          </t>
+        </section>
+        <section anchor="p2p_xq" numbered="true" toc="default">
+          <name>Extended query</name>
+          <t>TODO: Talk about XQuery in the context of messages.</t>
+        </section>
+        <section anchor="p2p_put" numbered="true" toc="default">
+          <name>PutMessage</name>
+          <section anchor="p2p_put_wire">
+            <name>Wire Format</name>
+            <figure anchor="figure_putmsg">
+              <artwork name="" type="" align="left" alt=""><![CDATA[
 0     8     16    24    32    40    48    56
 +-----+-----+-----+-----+-----+-----+-----+-----+
 |  MSIZE    |   MTYPE   |         BTYPE         |
@@ -645,132 +644,132 @@ defined as follows:
 /              BLOCK (variable length)        /
 +-----+-----+-----+-----+-----+-----+-----+-----+
 ]]></artwork>
-</figure>
-<t>where:</t>
-<dl>
-<dt>MSIZE</dt>
-<dd>
-denotes the size of this message in network byte order.
-</dd>
-<dt>MTYPE</dt>
-<dd>
-is the 16-bit message type. This type can be one of the DHT message
-types but for put messages it must be set to
-the value 146 in network byte order.
-</dd>
-<dt>BTYPE</dt>
-<dd>
-is a 32-bit block type field. The block type indicates the content
-type of the payload. In network byte order.
-</dd>
-<dt>OPTIONS</dt>
-<dd>
-is a 16-bit options field (see below).
-</dd>
-<dt>HOPCOUNT</dt>
-<dd>
-is a 16-bit number indicating how many hops this message has
-traversed to far. In network byte order.
-</dd>
-<dt>REPL_LVL</dt>
-<dd>
-is a 16-bit number indicating the desired replication level of
-the data. In network byte order.
-</dd>
-<dt>PATH_LEN</dt>
-<dd>
-is a 16-bit number indicating the length of the PUT path recorded
-in PUTPATH.
-As PUTPATH is optional, this value may be zero.
-In network byte order.
-</dd>
-<dt>EXPIRATION</dt>
-<dd>
-denotes the absolute 64-bit expiration date of the content.
-In microseconds since midnight (0 hour), January 1, 1970 in network
-byte order.
-</dd>
-<dt>BLOOMFILTER</dt>
-<dd>
-A bloomfilter (for node addresses) to stop circular routes.
-</dd>
-<dt>KEY</dt>
-<dd>
-The key under which the PUT request wants to store content
-under.
-</dd>
-<dt>PUTPATH</dt>
-<dd>
-the variable-length PUT path.
-The path consists of a list of PATH_LEN node addresses.
-</dd>
-<dt>BLOCK</dt>
-<dd>
-the variable-length block payload. The contents are determined
-by the BTYPE field.
-</dd>
-</dl>
-</section>
-<section anchor="p2p_put_processing">
-<name>Processing</name>
-<t>
-Upon receiving a <tt>PutMessage</tt> from a peer <tt>P</tt>.
-An implementation MUST process it step by step as follows:
-</t>
-<ol>
-<li>
-The <tt>EXPIRATION</tt> field is evaluated.
-If the message is expired, it MUST be discarded.
-</li>
-<li>
-If the <tt>BTYPE</tt> is not supported by the implementation,
-no validation of the block payload is performed and processing
-continues at (4).
-Else, the block MUST be validated as defined in (3).
-</li>
-<li>
-The block payload of the message is evaluated using according
-to the <tt>BTYPE</tt> using the respective
-<tt>ValidateBlockStoreRequest</tt> procedure.
-If the block payload is invalid or does not match the key,
-it MUST be discarded.
-</li>
-<li>
-The node address of the sender peer <tt>P</tt> SHOULD be in 
<tt>BLOOMFILTER</tt>.
-If not, the implementation MAY log an error, but MUST continue.
-</li>
-<li>
-If the <tt>RecordRoute</tt> flag is set in OPTIONS,
-the local node address MUST be appended to the <tt>PUTPATH</tt>
-of the message.
-</li>
-<li>
-If the local node is the closest node
-(cf. <tt>IsClosestNode(N, Key)</tt>) or the <tt>DemultiplexEverywhere</tt>
-options flag ist set, the message MUST
-be stored locally in the block storage.
-</li>
-<li>
-Given the value in <tt>REPL_LVL</tt>, the number of peers to
-forward to MUST be calculated. If there is at least one
-peers to forward to, the implementation SHOULD select up to this
-number of peers to forward the message to. The implementation MAY
-forward to fewer or no peers in order to handle resource constraints
-such as bandwidth.
-Finally, the local node address MUST be added to the
-<tt>BLOOMFILTER</tt> of the forwarded message.
-For all peers with node address <tt>P</tt> chosen to forward the message
-to, <tt>SEND(P, PutMessage)</tt> is called.
-</li>
-</ol>
-</section>
-</section>
-<section anchor="p2p_get" numbered="true" toc="default">
-<name>GetMessage</name>
-<section anchor="p2p_get_wire">
-<name>Wire Format</name>
-<figure anchor="figure_getmsg">
-<artwork name="" type="" align="left" alt=""><![CDATA[
+            </figure>
+            <t>where:</t>
+            <dl>
+              <dt>MSIZE</dt>
+              <dd>
+                denotes the size of this message in network byte order.
+              </dd>
+              <dt>MTYPE</dt>
+              <dd>
+                is the 16-bit message type. This type can be one of the DHT 
message
+                types but for put messages it must be set to
+                the value 146 in network byte order.
+              </dd>
+              <dt>BTYPE</dt>
+              <dd>
+                is a 32-bit block type field. The block type indicates the 
content
+                type of the payload. In network byte order.
+              </dd>
+              <dt>OPTIONS</dt>
+              <dd>
+                is a 16-bit options field (see below).
+              </dd>
+              <dt>HOPCOUNT</dt>
+              <dd>
+                is a 16-bit number indicating how many hops this message has
+                traversed to far. In network byte order.
+              </dd>
+              <dt>REPL_LVL</dt>
+              <dd>
+                is a 16-bit number indicating the desired replication level of
+                the data. In network byte order.
+              </dd>
+              <dt>PATH_LEN</dt>
+              <dd>
+                is a 16-bit number indicating the length of the PUT path 
recorded
+                in PUTPATH.
+                As PUTPATH is optional, this value may be zero.
+                In network byte order.
+              </dd>
+              <dt>EXPIRATION</dt>
+              <dd>
+                denotes the absolute 64-bit expiration date of the content.
+                In microseconds since midnight (0 hour), January 1, 1970 in 
network
+                byte order.
+              </dd>
+              <dt>BLOOMFILTER</dt>
+              <dd>
+                A bloomfilter (for node addresses) to stop circular routes.
+              </dd>
+              <dt>KEY</dt>
+              <dd>
+                The key under which the PUT request wants to store content
+                under.
+              </dd>
+              <dt>PUTPATH</dt>
+              <dd>
+                the variable-length PUT path.
+                The path consists of a list of PATH_LEN node addresses.
+              </dd>
+              <dt>BLOCK</dt>
+              <dd>
+                the variable-length block payload. The contents are determined
+                by the BTYPE field.
+              </dd>
+            </dl>
+          </section>
+          <section anchor="p2p_put_processing">
+            <name>Processing</name>
+            <t>
+              Upon receiving a <tt>PutMessage</tt> from a peer <tt>P</tt>.
+              An implementation MUST process it step by step as follows:
+            </t>
+            <ol>
+              <li>
+                The <tt>EXPIRATION</tt> field is evaluated.
+                If the message is expired, it MUST be discarded.
+              </li>
+              <li>
+                If the <tt>BTYPE</tt> is not supported by the implementation,
+                no validation of the block payload is performed and processing
+                continues at (4).
+                Else, the block MUST be validated as defined in (3).
+              </li>
+              <li>
+                The block payload of the message is evaluated using according
+                to the <tt>BTYPE</tt> using the respective
+                <tt>ValidateBlockStoreRequest</tt> procedure.
+                If the block payload is invalid or does not match the key,
+                it MUST be discarded.
+              </li>
+              <li>
+                The node address of the sender peer <tt>P</tt> SHOULD be in 
<tt>BLOOMFILTER</tt>.
+                If not, the implementation MAY log an error, but MUST continue.
+              </li>
+              <li>
+                If the <tt>RecordRoute</tt> flag is set in OPTIONS,
+                the local node address MUST be appended to the <tt>PUTPATH</tt>
+                of the message.
+              </li>
+              <li>
+                If the local node is the closest node
+                (cf. <tt>IsClosestNode(N, Key)</tt>) or the 
<tt>DemultiplexEverywhere</tt>
+                options flag ist set, the message MUST
+                be stored locally in the block storage.
+              </li>
+              <li>
+                Given the value in <tt>REPL_LVL</tt>, the number of peers to
+                forward to MUST be calculated. If there is at least one
+                peers to forward to, the implementation SHOULD select up to 
this
+                number of peers to forward the message to. The implementation 
MAY
+                forward to fewer or no peers in order to handle resource 
constraints
+                such as bandwidth.
+                Finally, the local node address MUST be added to the
+                <tt>BLOOMFILTER</tt> of the forwarded message.
+                For all peers with node address <tt>P</tt> chosen to forward 
the message
+                to, <tt>SEND(P, PutMessage)</tt> is called.
+              </li>
+            </ol>
+          </section>
+        </section>
+        <section anchor="p2p_get" numbered="true" toc="default">
+          <name>GetMessage</name>
+          <section anchor="p2p_get_wire">
+            <name>Wire Format</name>
+            <figure anchor="figure_getmsg">
+              <artwork name="" type="" align="left" alt=""><![CDATA[
 0     8     16    24    32    40    48    56
 +-----+-----+-----+-----+-----+-----+-----+-----+
 |  MSIZE    |   MTYPE   |         BTYPE         |
@@ -790,134 +789,134 @@ to, <tt>SEND(P, PutMessage)</tt> is called.
 /              BF_RESULT (variable length)      /
 +-----+-----+-----+-----+-----+-----+-----+-----+
 ]]></artwork>
-</figure>
-<t>where:</t>
-<dl>
-<dt>MSIZE</dt>
-<dd>
-denotes the size of this message in network byte order.
-</dd>
-<dt>MTYPE</dt>
-<dd>
-is the 16-bit message type. It must be set to
-the value 147 in network byte order.
-</dd>
-<dt>BTYPE</dt>
-<dd>
-is a 32-bit block type field. The block type indicates the content
-type of the payload. In network byte order.
-</dd>
-<dt>OPTIONS</dt>
-<dd>
-is a 16-bit options field (see below).
-</dd>
-<dt>HOPCOUNT</dt>
-<dd>
-is a 16-bit number indicating how many hops this message has
-traversed to far. In network byte order.
-</dd>
-<dt>REPL_LVL</dt>
-<dd>
-is a 16-bit number indicating the desired replication level of
-the data. In network byte order.
-</dd>
-<dt>XQ_SIZE</dt>
-<dd>
-is a 32-bit number indicating the length of the optional
-extended query XQUERY. In network byte order.
-</dd>
-<dt>BLOOMFILTER</dt>
-<dd>
-A bloomfilter (for node identities) to stop circular routes.
-</dd>
-<dt>KEY</dt>
-<dd>
-The key under which the PUT request wants to store content
-under.
-</dd>
-<dt>XQUERY</dt>
-<dd>
-the variable-length extended query. Optional.
-</dd>
-<dt>BF_MUTATOR</dt>
-<dd>
-The 32-bit bloomfilter mutator for the result bloomfilter.
-</dd>
-<dt>RESULT_BF</dt>
-<dd>
-the variable-length result bloomfilter.
-</dd>
-</dl>
-</section>
-<section anchor="p2p_get_processing">
-<name>Processing</name>
-<t>
-Upon receiving a <tt>GetMmessage</tt> from a peer an
-implementation MUST process it step by step as follows:
-</t>
-<ol>
-<li>
-The <tt>KEY</tt> and <tt>XQUERY</tt> is validated against the
-requested <tt>BTYPE</tt> as defined by its respective
-<tt>ValidateBlockQuery</tt> procedure.
-If the <tt>BTYPE</tt> is not supported, or if the block key
-does not match or if the <tt>XQUERY</tt> is malformed,
-the message MUST be discarded.
-</li>
-<li>
-The node address of the sender peer <tt>P</tt> SHOULD be in the
-BLOOMFILTER. If not, the
-implementation MAY log an error, but MUST continue.
-</li>
-<li>
-<t>
-If the local node is the closest node
-(cf. <tt>IsClosestNode (N, Key)</tt>) or the
-<tt>DemultiplexEverywhere</tt> options flag is set, a reply
-MUST be produced:
-</t>
-<ol>
-<li>
-If <tt>OPTIONS</tt> indicate a <tt>FindNode</tt> request,
-FIXME the node selection
-foo from buckets that probably needs fixing. Take into account
-<tt>REPLY_BF</tt>
-</li>
-<li>
-Else, if there is a block in the local Block Storage which is
-not already in the <tt>RESULT_BF</tt>,
-a ResultMessage MUST be sent.
-FIXME link to how the result is sent?
-</li>
-</ol>
-</li>
-<li>
-FIXME: We only handle if not GNUNET_BLOCK_EVALUATION_OK_LAST.
-This means that we must evaluate the Reply produced in the
-previous step using <tt>ValidateBlockReply</tt> for this
-<tt>BTYPE</tt>
-</li>
-<li>
-Given the value in REPL_LVL, the number of nodes to forward to
-MUST be calculated (NUM-FORWARD-nodeS). If there is at least one
-node to forward to, the implementation SHOULD select up to this
-number of nodes to forward the message to. The implementation MAY
-forward to fewer or no nodes in order to handle resource constraints
-such as bandwidth.
-The message BLOOMFILTER MUST be updated with the local node 
-address <tt>N</tt>.
-For all peers with node address <tt>P'</tt> chosen to forward the message
-to, <tt>SEND(P', PutMessage)</tt> is called.
-</li>
-</ol>
-</section>
-</section>
-<section anchor="p2p_result" numbered="true" toc="default">
-<name>ResultMessage</name>
-<section anchor="p2p_result_wire">
-<name>Wire Format</name>
-<figure anchor="figure_resmsg">
-<artwork name="" type="" align="left" alt=""><![CDATA[
+            </figure>
+            <t>where:</t>
+            <dl>
+              <dt>MSIZE</dt>
+              <dd>
+                denotes the size of this message in network byte order.
+              </dd>
+              <dt>MTYPE</dt>
+              <dd>
+                is the 16-bit message type. It must be set to
+                the value 147 in network byte order.
+              </dd>
+              <dt>BTYPE</dt>
+              <dd>
+                is a 32-bit block type field. The block type indicates the 
content
+                type of the payload. In network byte order.
+              </dd>
+              <dt>OPTIONS</dt>
+              <dd>
+                is a 16-bit options field (see below).
+              </dd>
+              <dt>HOPCOUNT</dt>
+              <dd>
+                is a 16-bit number indicating how many hops this message has
+                traversed to far. In network byte order.
+              </dd>
+              <dt>REPL_LVL</dt>
+              <dd>
+                is a 16-bit number indicating the desired replication level of
+                the data. In network byte order.
+              </dd>
+              <dt>XQ_SIZE</dt>
+              <dd>
+                is a 32-bit number indicating the length of the optional
+                extended query XQUERY. In network byte order.
+              </dd>
+              <dt>BLOOMFILTER</dt>
+              <dd>
+                A bloomfilter (for node identities) to stop circular routes.
+              </dd>
+              <dt>KEY</dt>
+              <dd>
+                The key under which the PUT request wants to store content
+                under.
+              </dd>
+              <dt>XQUERY</dt>
+              <dd>
+                the variable-length extended query. Optional.
+              </dd>
+              <dt>BF_MUTATOR</dt>
+              <dd>
+                The 32-bit bloomfilter mutator for the result bloomfilter.
+              </dd>
+              <dt>RESULT_BF</dt>
+              <dd>
+                the variable-length result bloomfilter.
+              </dd>
+            </dl>
+          </section>
+          <section anchor="p2p_get_processing">
+            <name>Processing</name>
+            <t>
+              Upon receiving a <tt>GetMmessage</tt> from a peer an
+              implementation MUST process it step by step as follows:
+            </t>
+            <ol>
+              <li>
+                The <tt>KEY</tt> and <tt>XQUERY</tt> is validated against the
+                requested <tt>BTYPE</tt> as defined by its respective
+                <tt>ValidateBlockQuery</tt> procedure.
+                If the <tt>BTYPE</tt> is not supported, or if the block key
+                does not match or if the <tt>XQUERY</tt> is malformed,
+                the message MUST be discarded.
+              </li>
+              <li>
+                The node address of the sender peer <tt>P</tt> SHOULD be in the
+                BLOOMFILTER. If not, the
+                implementation MAY log an error, but MUST continue.
+              </li>
+              <li>
+                <t>
+                  If the local node is the closest node
+                  (cf. <tt>IsClosestNode (N, Key)</tt>) or the
+                  <tt>DemultiplexEverywhere</tt> options flag is set, a reply
+                  MUST be produced:
+                </t>
+                <ol>
+                  <li>
+                    If <tt>OPTIONS</tt> indicate a <tt>FindNode</tt> request,
+                    FIXME the node selection
+                    foo from buckets that probably needs fixing. Take into 
account
+                    <tt>REPLY_BF</tt>
+                  </li>
+                  <li>
+                    Else, if there is a block in the local Block Storage which 
is
+                    not already in the <tt>RESULT_BF</tt>,
+                    a ResultMessage MUST be sent.
+                    FIXME link to how the result is sent?
+                  </li>
+                </ol>
+              </li>
+              <li>
+                FIXME: We only handle if not GNUNET_BLOCK_EVALUATION_OK_LAST.
+                This means that we must evaluate the Reply produced in the
+                previous step using <tt>ValidateBlockReply</tt> for this
+                <tt>BTYPE</tt>
+              </li>
+              <li>
+                Given the value in REPL_LVL, the number of nodes to forward to
+                MUST be calculated (NUM-FORWARD-nodeS). If there is at least 
one
+                node to forward to, the implementation SHOULD select up to this
+                number of nodes to forward the message to. The implementation 
MAY
+                forward to fewer or no nodes in order to handle resource 
constraints
+                such as bandwidth.
+                The message BLOOMFILTER MUST be updated with the local node 
+                address <tt>N</tt>.
+                For all peers with node address <tt>P'</tt> chosen to forward 
the message
+                to, <tt>SEND(P', PutMessage)</tt> is called.
+              </li>
+            </ol>
+          </section>
+        </section>
+        <section anchor="p2p_result" numbered="true" toc="default">
+          <name>ResultMessage</name>
+          <section anchor="p2p_result_wire">
+            <name>Wire Format</name>
+            <figure anchor="figure_resmsg">
+              <artwork name="" type="" align="left" alt=""><![CDATA[
 0     8     16    24    32    40    48    56
 +-----+-----+-----+-----+-----+-----+-----+-----+
 |  MSIZE    |   MTYPE   |        BTYPE          |
@@ -939,229 +938,229 @@ to, <tt>SEND(P', PutMessage)</tt> is called.
 /              (variable length)                /
 +-----+-----+-----+-----+-----+-----+-----+-----+
 ]]></artwork>
-</figure>
-<t>where:</t>
-<dl>
-<dt>MSIZE</dt>
-<dd>
-denotes the size of this message in network byte order.
-</dd>
-<dt>MTYPE</dt>
-<dd>
-is the 16-bit message type. This type can be one of the DHT message
-types but for put messages it must be set to
-the value 148 in network byte order.
-</dd>
-<dt>OPTIONS</dt>
-<dd>
-is a 16-bit options field (see below).
-</dd>
-<dt>BTYPE</dt>
-<dd>
-is a 32-bit block type field. The block type indicates the content
-type of the payload. In network byte order.
-</dd>
-<dt>PUTPATH_L</dt>
-<dd>
-is a 16-bit number indicating the length of the PUT path recorded
-in PUTPATH. As PUTPATH is optiona, this value may be zero.
-In network byte order.
-</dd>
-<dt>GET_PATH_LEN</dt>
-<dd>
-is a 16-bit number indicating the length of the GET path recorded
-in GETPATH. As PUTPATH is optiona, this value may be zero.
-In network byte order.
-</dd>
-<dt>EXPIRATION</dt>
-<dd>
-denotes the absolute 64-bit expiration date of the content.
-In microseconds since midnight (0 hour), January 1, 1970 in network
-byte order.
-</dd>
-<dt>KEY</dt>
-<dd>
-The key under which the PUT request wants to store content
-under.
-</dd>
-<dt>PUTPATH</dt>
-<dd>
-the variable-length PUT path.
-The path consists of a list of PATH_LEN node addresses.
-</dd>
-<dt>GETPATH</dt>
-<dd>
-the variable-length PUT path.
-The path consists of a list of PATH_LEN node addresses.
-</dd>
-<dt>BLOCK</dt>
-<dd>
-the variable-length resource record data payload.
-The contents are defined by the respective type of the resource record.
-</dd>
-</dl>
-</section>
-<section anchor="p2p_result_processing">
-<name>Processing</name>
-<t>
-Upon receiving a <tt>ResultMessage</tt> from a connected node.
-An implementation MUST process it step by step as follows:
-</t>
-<ol>
-<li>
-The <tt>EXPIRATION</tt> field is evaluated.
-If the message is expired, it MUST be discarded.
-</li>
-<li>
-If the MTYPE of the message indicates a HELLO block, it
-must be validated according to <xref target="hello_block"/>.
-The payload MUST be considered for the local routing table by
-trying to establish a connection to the node using the information
-from the HELLO block. If a connection can be established,
-the node is added to the <tt>KBuckets</tt> routing table.
-</li>
-<li>
-If the sender node of the message is already found in the
-GETPATH, the path MUST be truncated at this position.
-The implementation MAY log a warning in such a case.
-</li>
-<li>
-If the <tt>KEY</tt> of this <tt>ResultMessage</tt> is found in the
-list of pending local queries, the <tt>KEY</tt> and <tt>XQUERY</tt>
-are validated against the requested BTYPE using the respective
-block type implementation of <tt>ValidateBlockReply</tt>.
-If the BTYPE is not supported, or if the block key
-does not match the BTYPE or if the XQUERY is malformed,
-the message MUST be discarded.
-</li>
-<li>
-The implementation MAY cache RESULT messages.
-</li>
-<li>
-<t>
-If requests by other nodes for this KEY or BTYPE are known,
-the result block is validated against each request using
-the respective <tt>ValidateBlockReply</tt> function.
-</t>
-<t>
-If the request options include <tt>FindNode</tt> and the result
-message block type is HELLO the block validation must use the
-key derived using <tt>DeriveBlockKey</tt> as the key included in
-the request is only approximate. (FIXME: So we extract the key
-to then check it again against the block? This does not make sense...)
-</t>
-<t>
-If the result message block cannot be verified against the
-<tt>KEY</tt> of the result message or if <tt>BLOCK</tt> is
-malformed, the message MUST be discarded.
-</t>
-<t>
-For each pending request the reply is routed to the requesting
-node <tt>N'</tt>. FIXME routed to node or forwarded to peer?
-</t>
-</li>
-</ol>
-</section>
-</section>
-</section>
-<section anchor="blockstorage" numbered="true" toc="default">
-<name>Block Storage</name>
-<section>
-<name>Block Processing</name>
-<t>RequestEvaluationResult</t>
-<dl>
-<dt>REQUEST_VALID</dt>
-<dd>Query is valid, no reply given.</dd>
-<dt>REQUEST_INVALID</dt>
-<dd>
-Query format does not match block type. For example, XQuery not
-given or of size of XQuery is not appropriate for type.
-</dd>
-</dl>
-<t>ReplyEvaluationResult</t>
-<dl>
-<dt>OK_MORE</dt>
-<dd>Valid result, and there may be more.</dd>
-<dt>OK_LAST</dt>
-<dd>Last possible valid result.</dd>
-<dt>OK_DUPLICATE</dt>
-<dd>Valid result, but duplicate.</dd>
-<dt>RESULT_INVALID</dt>
-<dd>Invalid result. Block does not match query. Value = 4.</dd>
-<dt>RESULT_IRRELEVANT</dt>
-<dd>Block does not match xquery. Valid result, but not relevant for the 
request.</dd>
-</dl>
-</section>
-<section anchor="block_functions">
-<name>Block Functions</name>
-<t>
-Any block type implementation MUST implement the following functions.
-</t>
-<dl>
-<dt>ValidateBlockQuery(Key, XQuery) -&gt; RequestEvaluationResult</dt>
-<dd>
-is used to evaluate the request for a block. It is used as part of
-<tt>GetMessage</tt> processing, where the block payload is still unkown,
-but the block <tt>XQuery</tt> (FIXME: Undefined here) and <tt>Key</tt> can and
-MUST be verified, if possible.
-</dd>
-<dt>ValidateBlockStoreRequest(Block, Key) -&gt; RequestEvaluationResult</dt>
-<dd>
-is used to evaluate a block including its key and payload.
-It is used as part of <tt>PutMessage</tt> processing.
-The validation MUST include a check of the block payload against the
-<tt>Key</tt> under which it is requested to be stored.
-</dd>
-<dt>ValidateBlockReply(Block, XQuery, Key) -&gt; ReplyEvaluationResult</dt>
-<dd>
-is used to evaluate a block including its <tt>Key</tt> and payload.
-It is used as part <tt>ResultMessage</tt> processing.
-The validation of the respective <tt>Block</tt> requires a pending local query
-or a previously routed request of another node and its associated
-XQuery data and Key.
-The validation MUST include a check of the block payload against the
-key under which it is requested to be stored.
-</dd>
-<dt>DeriveBlockKey(Block) -&gt; Key</dt>
-<dd>
-is used to synthesize the block key from the block payload
-and metadata. It is used as part of FIND-node message processing.
-</dd>
-<dt>FilterResult(Block, XQuery, Key) -&gt; ReplyEvaluationResult</dt>
-<dd>
-is used to filter results stored in the local block storage for local
-queries. Locally stored blocks from previously observed
-<tt>ResultMessages</tt> and <tt>PutMessages</tt> MAY use this
-function instead of <tt>ValidateBlockReply</tt> in order to
-avoid revalidation of the block and only perform filtering based on
-request parameters.
-</dd>
-</dl>
-</section>
-<section anchor="block_types">
-<name>Block Types</name>
-<t>
-Applications can and should define their own block types.
-The block type determines the format and handling of the block
-payload by nodes in PUT and RESULT messages.
-Block types MUST be registered with GANA <xref target="gana"/>.
-</t>
-<t>
-For bootstrapping and node discovery, the DHT implementation uses
-its own block type called "HELLO". A block with this block type
-contains the NodeID of the node initiating the GET request.
-</t>
-<section anchor="hello_block">
-<name>HELLO</name>
-<t>
-The HELLO block type wire format is illustrated in
-<xref target="figure_hello"/>. A query for block of type HELLO MUST
-NOT include extended query data (XQuery). Any implementation
-encountering a HELLO block with XQuery data MUST consider the
-block invalid and ignore it.
-</t>
-<figure anchor="figure_hello">
-<artwork name="" type="" align="left" alt=""><![CDATA[
+            </figure>
+            <t>where:</t>
+            <dl>
+              <dt>MSIZE</dt>
+              <dd>
+                denotes the size of this message in network byte order.
+              </dd>
+              <dt>MTYPE</dt>
+              <dd>
+                is the 16-bit message type. This type can be one of the DHT 
message
+                types but for put messages it must be set to
+                the value 148 in network byte order.
+              </dd>
+              <dt>OPTIONS</dt>
+              <dd>
+                is a 16-bit options field (see below).
+              </dd>
+              <dt>BTYPE</dt>
+              <dd>
+                is a 32-bit block type field. The block type indicates the 
content
+                type of the payload. In network byte order.
+              </dd>
+              <dt>PUTPATH_L</dt>
+              <dd>
+                is a 16-bit number indicating the length of the PUT path 
recorded
+                in PUTPATH. As PUTPATH is optiona, this value may be zero.
+                In network byte order.
+              </dd>
+              <dt>GET_PATH_LEN</dt>
+              <dd>
+                is a 16-bit number indicating the length of the GET path 
recorded
+                in GETPATH. As PUTPATH is optiona, this value may be zero.
+                In network byte order.
+              </dd>
+              <dt>EXPIRATION</dt>
+              <dd>
+                denotes the absolute 64-bit expiration date of the content.
+                In microseconds since midnight (0 hour), January 1, 1970 in 
network
+                byte order.
+              </dd>
+              <dt>KEY</dt>
+              <dd>
+                The key under which the PUT request wants to store content
+                under.
+              </dd>
+              <dt>PUTPATH</dt>
+              <dd>
+                the variable-length PUT path.
+                The path consists of a list of PATH_LEN node addresses.
+              </dd>
+              <dt>GETPATH</dt>
+              <dd>
+                the variable-length PUT path.
+                The path consists of a list of PATH_LEN node addresses.
+              </dd>
+              <dt>BLOCK</dt>
+              <dd>
+                the variable-length resource record data payload.
+                The contents are defined by the respective type of the 
resource record.
+              </dd>
+            </dl>
+          </section>
+          <section anchor="p2p_result_processing">
+            <name>Processing</name>
+            <t>
+              Upon receiving a <tt>ResultMessage</tt> from a connected node.
+              An implementation MUST process it step by step as follows:
+            </t>
+            <ol>
+              <li>
+                The <tt>EXPIRATION</tt> field is evaluated.
+                If the message is expired, it MUST be discarded.
+              </li>
+              <li>
+                If the MTYPE of the message indicates a HELLO block, it
+                must be validated according to <xref target="hello_block"/>.
+                The payload MUST be considered for the local routing table by
+                trying to establish a connection to the node using the 
information
+                from the HELLO block. If a connection can be established,
+                the node is added to the <tt>KBuckets</tt> routing table.
+              </li>
+              <li>
+                If the sender node of the message is already found in the
+                GETPATH, the path MUST be truncated at this position.
+                The implementation MAY log a warning in such a case.
+              </li>
+              <li>
+                If the <tt>KEY</tt> of this <tt>ResultMessage</tt> is found in 
the
+                list of pending local queries, the <tt>KEY</tt> and 
<tt>XQUERY</tt>
+                are validated against the requested BTYPE using the respective
+                block type implementation of <tt>ValidateBlockReply</tt>.
+                If the BTYPE is not supported, or if the block key
+                does not match the BTYPE or if the XQUERY is malformed,
+                the message MUST be discarded.
+              </li>
+              <li>
+                The implementation MAY cache RESULT messages.
+              </li>
+              <li>
+                <t>
+                  If requests by other nodes for this KEY or BTYPE are known,
+                  the result block is validated against each request using
+                  the respective <tt>ValidateBlockReply</tt> function.
+                </t>
+                <t>
+                  If the request options include <tt>FindNode</tt> and the 
result
+                  message block type is HELLO the block validation must use the
+                  key derived using <tt>DeriveBlockKey</tt> as the key 
included in
+                  the request is only approximate. (FIXME: So we extract the 
key
+                  to then check it again against the block? This does not make 
sense...)
+                </t>
+                <t>
+                  If the result message block cannot be verified against the
+                  <tt>KEY</tt> of the result message or if <tt>BLOCK</tt> is
+                  malformed, the message MUST be discarded.
+                </t>
+                <t>
+                  For each pending request the reply is routed to the 
requesting
+                  node <tt>N'</tt>. FIXME routed to node or forwarded to peer?
+                </t>
+              </li>
+            </ol>
+          </section>
+        </section>
+      </section>
+      <section anchor="blockstorage" numbered="true" toc="default">
+        <name>Block Storage</name>
+        <section>
+          <name>Block Processing</name>
+          <t>RequestEvaluationResult</t>
+          <dl>
+            <dt>REQUEST_VALID</dt>
+            <dd>Query is valid, no reply given.</dd>
+            <dt>REQUEST_INVALID</dt>
+            <dd>
+              Query format does not match block type. For example, XQuery not
+              given or of size of XQuery is not appropriate for type.
+            </dd>
+          </dl>
+          <t>ReplyEvaluationResult</t>
+          <dl>
+            <dt>OK_MORE</dt>
+            <dd>Valid result, and there may be more.</dd>
+            <dt>OK_LAST</dt>
+            <dd>Last possible valid result.</dd>
+            <dt>OK_DUPLICATE</dt>
+            <dd>Valid result, but duplicate.</dd>
+            <dt>RESULT_INVALID</dt>
+            <dd>Invalid result. Block does not match query. Value = 4.</dd>
+            <dt>RESULT_IRRELEVANT</dt>
+            <dd>Block does not match xquery. Valid result, but not relevant 
for the request.</dd>
+          </dl>
+        </section>
+        <section anchor="block_functions">
+          <name>Block Functions</name>
+          <t>
+            Any block type implementation MUST implement the following 
functions.
+          </t>
+          <dl>
+            <dt>ValidateBlockQuery(Key, XQuery) -&gt; 
RequestEvaluationResult</dt>
+            <dd>
+              is used to evaluate the request for a block. It is used as part 
of
+              <tt>GetMessage</tt> processing, where the block payload is still 
unkown,
+              but the block <tt>XQuery</tt> (FIXME: Undefined here) and 
<tt>Key</tt> can and
+              MUST be verified, if possible.
+            </dd>
+            <dt>ValidateBlockStoreRequest(Block, Key) -&gt; 
RequestEvaluationResult</dt>
+            <dd>
+              is used to evaluate a block including its key and payload.
+              It is used as part of <tt>PutMessage</tt> processing.
+              The validation MUST include a check of the block payload against 
the
+              <tt>Key</tt> under which it is requested to be stored.
+            </dd>
+            <dt>ValidateBlockReply(Block, XQuery, Key) -&gt; 
ReplyEvaluationResult</dt>
+            <dd>
+              is used to evaluate a block including its <tt>Key</tt> and 
payload.
+              It is used as part <tt>ResultMessage</tt> processing.
+              The validation of the respective <tt>Block</tt> requires a 
pending local query
+              or a previously routed request of another node and its associated
+              XQuery data and Key.
+              The validation MUST include a check of the block payload against 
the
+              key under which it is requested to be stored.
+            </dd>
+            <dt>DeriveBlockKey(Block) -&gt; Key</dt>
+            <dd>
+              is used to synthesize the block key from the block payload
+              and metadata. It is used as part of FIND-node message processing.
+            </dd>
+            <dt>FilterResult(Block, XQuery, Key) -&gt; 
ReplyEvaluationResult</dt>
+            <dd>
+              is used to filter results stored in the local block storage for 
local
+              queries. Locally stored blocks from previously observed
+              <tt>ResultMessages</tt> and <tt>PutMessages</tt> MAY use this
+              function instead of <tt>ValidateBlockReply</tt> in order to
+              avoid revalidation of the block and only perform filtering based 
on
+              request parameters.
+            </dd>
+          </dl>
+        </section>
+        <section anchor="block_types">
+          <name>Block Types</name>
+          <t>
+            Applications can and should define their own block types.
+            The block type determines the format and handling of the block
+            payload by nodes in PUT and RESULT messages.
+              Block types MUST be registered with GANA <xref target="gana"/>.
+            </t>
+            <t>
+              For bootstrapping and node discovery, the DHT implementation uses
+              its own block type called "HELLO". A block with this block type
+              contains the NodeID of the node initiating the GET request.
+            </t>
+            <section anchor="hello_block">
+              <name>HELLO</name>
+              <t>
+                The HELLO block type wire format is illustrated in
+                <xref target="figure_hello"/>. A query for block of type HELLO 
MUST
+                NOT include extended query data (XQuery). Any implementation
+                encountering a HELLO block with XQuery data MUST consider the
+                block invalid and ignore it.
+              </t>
+              <figure anchor="figure_hello">
+                <artwork name="" type="" align="left" alt=""><![CDATA[
 0     8     16    24    32    40    48    56
 +-----+-----+-----+-----+-----+-----+-----+-----+
 |   TYPE    |   SIZE    |         NODEID        /
@@ -1172,98 +1171,98 @@ block invalid and ignore it.
 /               (variable length)               |
 +-----+-----+-----+-----+-----+-----+-----+-----+
 ]]></artwork>
-</figure>
-<dl>
-<dt>TYPE</dt>
-<dd>
-is the type of HELLO. A 16-bit number in network byte order.
-This value determines the type of the NODEID field.
-</dd>
-<dt>SIZE</dt>
-<dd>
-is the SIZE of the following fields NODEID and ADDRESSES in bytes.
-In network byte order.
-</dd>
-<dt>NODEID</dt>
-<dd>
-is the Node ID of the node which has generated this HELLO.
-The length content of this field is determined by the TYPE.
-Usually, this is a cryptographic public key which allows the
-Underlay to uniquely identify and authenticate the node.
-</dd>
-<dt>ADDRESSES</dt>
-<dd>
-is a list of UTF-8 strings <xref target="RFC3629"/> which can be
-used as addresses to contact the node.
-The strings MUST be 0-terminated.
-FIXME: Examples? Format determined?
-</dd>
-</dl>
-<t>
-A HELLO reply block MAY be empty. Otherwise, it contains the
-HELLO of a node.
-</t>
-<t>
-For the string representation of the node public key,
-the base-32 encoding "StringEncode" is used.
-However, instead of following <xref target="RFC4648"/> the
-character map is based on the optical character recognition friendly
-proposal of Crockford <xref target="CrockfordB32"/>.
-The only difference to Crockford is that the letter
-"U" decodes to the same base-32 value as the letter "V" (27).
-</t>
-<t>
-The <tt>ADDRESSES</tt> part of the <tt>HELLO</tt> indicate endpoints
-which can be used by the Underlay in order to establish a connection
-with the node identified by <tt>NODEKEY</tt>.
-An example of an addressing scheme used throughout
-this document is "ip+tcp", which refers to a standard TCP/IP socket
-connection. The "hier"-part of the URI must provide a suitable
-address for the given addressing scheme.
-The following is a non-normative example of address strings:
-</t>
-<figure>
-<artwork name="" type="" align="left" alt=""><![CDATA[
+              </figure>
+              <dl>
+                <dt>TYPE</dt>
+                <dd>
+                  is the type of HELLO. A 16-bit number in network byte order.
+                  This value determines the type of the NODEID field.
+                </dd>
+                <dt>SIZE</dt>
+                <dd>
+                  is the SIZE of the following fields NODEID and ADDRESSES in 
bytes.
+                  In network byte order.
+                </dd>
+                <dt>NODEID</dt>
+                <dd>
+                  is the Node ID of the node which has generated this HELLO.
+                  The length content of this field is determined by the TYPE.
+                  Usually, this is a cryptographic public key which allows the
+                  Underlay to uniquely identify and authenticate the node.
+                </dd>
+                <dt>ADDRESSES</dt>
+                <dd>
+                  is a list of UTF-8 strings <xref target="RFC3629"/> which 
can be
+                  used as addresses to contact the node.
+                  The strings MUST be 0-terminated.
+                  FIXME: Examples? Format determined?
+                </dd>
+              </dl>
+              <t>
+                A HELLO reply block MAY be empty. Otherwise, it contains the
+                HELLO of a node.
+              </t>
+              <t>
+                For the string representation of the node public key,
+                the base-32 encoding "StringEncode" is used.
+                However, instead of following <xref target="RFC4648"/> the
+                character map is based on the optical character recognition 
friendly
+                proposal of Crockford <xref target="CrockfordB32"/>.
+                The only difference to Crockford is that the letter
+                "U" decodes to the same base-32 value as the letter "V" (27).
+              </t>
+              <t>
+                The <tt>ADDRESSES</tt> part of the <tt>HELLO</tt> indicate 
endpoints
+                which can be used by the Underlay in order to establish a 
connection
+                with the node identified by <tt>NODEKEY</tt>.
+                An example of an addressing scheme used throughout
+                this document is "ip+tcp", which refers to a standard TCP/IP 
socket
+                connection. The "hier"-part of the URI must provide a suitable
+                address for the given addressing scheme.
+                The following is a non-normative example of address strings:
+              </t>
+              <figure>
+                <artwork name="" type="" align="left" alt=""><![CDATA[
 ip+tcp://1.2.3.4:6789 \
 gnunet+tcp://12.3.4.5/ \
 i2p+udp://1.2.4.5:424/ \
 tor+onionv3://rasdflkjasdfliasduf.onion/
 ]]></artwork>
-</figure>
-</section>
-</section>
-</section>
-<section anchor="security" numbered="true" toc="default">
-<name>Security Considerations</name>
-<!-- FIXME: Here we should (again) discuss how the system is open and
-does not have/require a trust anchor a priori. This is (again) in contrast
-to RELOAD -->
-</section>
-<section anchor="gana" numbered="true" toc="default">
-<name>GANA Considerations</name>
-<t>
-GANA <xref target="GANA"/>
-is requested to create a "DHT Block Types" registry.
-The registry shall record for each entry:
-</t>
-<ul>
-<li>Name: The name of the block type (case-insensitive ASCII
-string, restricted to alphanumeric characters</li>
-<li>Number: 32-bit</li>
-<li>Comment: Optionally, a brief English text describing the purpose of
-the block type (in UTF-8)</li>
-<li>Contact: Optionally, the contact information of a person to contact for
-further information</li>
-<li>References: Optionally, references describing the record type
-(such as an RFC)</li>
-</ul>
-<t>
-The registration policy for this sub-registry is "First Come First
-Served", as described in <xref target="RFC8126"/>.
-GANA is requested to populate this registry as follows:
-</t>
-<figure anchor="figure_btypenums">
-<artwork name="" type="" align="left" alt=""><![CDATA[
+              </figure>
+            </section>
+          </section>
+        </section>
+        <section anchor="security" numbered="true" toc="default">
+          <name>Security Considerations</name>
+          <!-- FIXME: Here we should (again) discuss how the system is open and
+            does not have/require a trust anchor a priori. This is (again) in 
contrast
+          to RELOAD -->
+        </section>
+        <section anchor="gana" numbered="true" toc="default">
+          <name>GANA Considerations</name>
+          <t>
+            GANA <xref target="GANA"/>
+            is requested to create a "DHT Block Types" registry.
+            The registry shall record for each entry:
+          </t>
+          <ul>
+            <li>Name: The name of the block type (case-insensitive ASCII
+              string, restricted to alphanumeric characters</li>
+            <li>Number: 32-bit</li>
+            <li>Comment: Optionally, a brief English text describing the 
purpose of
+              the block type (in UTF-8)</li>
+            <li>Contact: Optionally, the contact information of a person to 
contact for
+              further information</li>
+            <li>References: Optionally, references describing the record type
+              (such as an RFC)</li>
+          </ul>
+          <t>
+            The registration policy for this sub-registry is "First Come First
+            Served", as described in <xref target="RFC8126"/>.
+            GANA is requested to populate this registry as follows:
+          </t>
+          <figure anchor="figure_btypenums">
+            <artwork name="" type="" align="left" alt=""><![CDATA[
 Number | Name   | Contact | References | Description
 -------+--------+---------+------------+-------------------------
 0       ANY      N/A       [This.I-D]   Reserved
@@ -1271,98 +1270,98 @@ Number | Name   | Contact | References | Description
 a HELLO for a node
 11      GNS      N/A       GNS          Block for storing record data
 ]]></artwork>
-</figure>
-<t>
-GANA is requested to amend the "GNUnet Signature Purpose" registry
-as follows:
-</t>
-<figure anchor="figure_purposenums">
-<artwork name="" type="" align="left" alt=""><![CDATA[
+          </figure>
+          <t>
+            GANA is requested to amend the "GNUnet Signature Purpose" registry
+            as follows:
+          </t>
+          <figure anchor="figure_purposenums">
+            <artwork name="" type="" align="left" alt=""><![CDATA[
 Purpose | Name            | References | Description
 --------+-----------------+------------+--------------------------
 ]]></artwork>
-</figure>
-</section>
-<!-- gana -->
-<section>
-<name>Test Vectors</name>
-</section>
-</middle>
-<back>
-<references><name>Normative References</name>
+          </figure>
+        </section>
+        <!-- gana -->
+        <section>
+          <name>Test Vectors</name>
+        </section>
+      </middle>
+      <back>
+        <references><name>Normative References</name>
 
-&RFC2119;
-&RFC3629;
-&RFC4634;
-&RFC4648;
-&RFC6940;
-&RFC8126;
-&RFC8174;
+            &RFC2119;
+            &RFC3629;
+            &RFC4634;
+            &RFC4648;
+            &RFC6940;
+            &RFC8126;
+            &RFC8174;
 
-<reference anchor="ed25519" 
target="http://link.springer.com/chapter/10.1007/978-3-642-23951-9_9";><front><title>High-Speed
 High-Security Signatures</title><author initials="D." surname="Bernstein" 
fullname="Daniel Bernstein"><organization>University of Illinois at 
Chicago</organization></author><author initials="N." surname="Duif" 
fullname="Niels Duif"><organization>Technische Universiteit 
Eindhoven</organization></author><author initials="T." surname="Lange" 
fullname="Tanja Lange"><orga [...]
+          <reference anchor="ed25519" 
target="http://link.springer.com/chapter/10.1007/978-3-642-23951-9_9";><front><title>High-Speed
 High-Security Signatures</title><author initials="D." surname="Bernstein" 
fullname="Daniel Bernstein"><organization>University of Illinois at 
Chicago</organization></author><author initials="N." surname="Duif" 
fullname="Niels Duif"><organization>Technische Universiteit 
Eindhoven</organization></author><author initials="T." surname="Lange" 
fullname="Tanja La [...]
 
-<reference anchor="CrockfordB32" 
target="https://www.crockford.com/base32.html";><front><title>Base32</title><author
 initials="D." surname="Douglas" fullname="Crockford">
-</author><date year="2019" month="March"/></front></reference>
+          <reference anchor="CrockfordB32" 
target="https://www.crockford.com/base32.html";><front><title>Base32</title><author
 initials="D." surname="Douglas" fullname="Crockford">
+          </author><date year="2019" month="March"/></front></reference>
 
-<reference anchor="GANA" 
target="https://gana.gnunet.org/";><front><title>GNUnet Assigned Numbers 
Authority (GANA)</title><author><organization>GNUnet 
e.V.</organization></author><date month="April" 
year="2020"/></front></reference>
+          <reference anchor="GANA" 
target="https://gana.gnunet.org/";><front><title>GNUnet Assigned Numbers 
Authority (GANA)</title><author><organization>GNUnet 
e.V.</organization></author><date month="April" 
year="2020"/></front></reference>
 
 
 
-</references>
-<references>
-<name>Informative References</name>
-<reference anchor="R5N" target="https://doi.org/10.1109/ICNSS.2011.6060022";>
-<front>
-<title>R5N: Randomized recursive routing for restricted-route networks</title>
-<author initials="N. S." surname="Evans" fullname="Nathan S. Evans">
-<organization>Technische Universität München</organization>
-</author>
-<author initials="C." surname="Grothoff" fullname="Christian Grothoff">
-<organization>Technische Universität München</organization>
-</author>
-<date year="2011"/>
-</front>
-</reference>
-<reference anchor="Kademlia" 
target="http://css.csail.mit.edu/6.824/2014/papers/kademlia.pdf";>
-<front>
-<title>Kademlia: A peer-to-peer information system based on the xor 
metric.</title>
-<author initials="P." surname="Maymounkov" fullname="Petar Maymounkov">
-</author>
-<author initials="D." surname="Mazieres" fullname="David Mazieres">
-</author>
-<date year="2002"/>
-</front>
-</reference>
-<reference anchor="cadet" 
target="https://doi.org/10.1109/MedHocNet.2014.6849107";>
-<front>
-<title>CADET: Confidential ad-hoc decentralized end-to-end transport</title>
-<author initials="B." surname="Polot" fullname="Bartlomiej Polot">
-<organization>Technische Universität München</organization>
-</author>
-<author initials="C." surname="Grothoff" fullname="Christian Grothoff">
-<organization>Technische Universität München</organization>
-</author>
-<date year="2014"/>
-</front>
-</reference>
-<reference anchor="I-D.draft-schanzen-gns" 
target="https://datatracker.ietf.org/doc/draft-schanzen-gns/";>
-<front>
-<title>The GNU Name System</title>
-<author initials="M." surname="Schanzenbach" fullname="Martin Schanzenbach">
-<organization>GNUnet e.V.</organization>
-</author>
-<author initials="C." surname="Grothoff" fullname="Christian Grothoff">
-<organization>GNUnet e.V.</organization>
-</author>
-<author initials="B." surname="Fix" fullname="Bernd Fix">
-<organization>GNUnet e.V.</organization>
-</author>
-<date year="2021"/>
-</front>
-</reference>
-</references>
-<!-- Change Log
-v00 2017-07-23  MS   Initial version
--->
-</back>
-</rfc>
+        </references>
+        <references>
+          <name>Informative References</name>
+          <reference anchor="R5N" 
target="https://doi.org/10.1109/ICNSS.2011.6060022";>
+            <front>
+              <title>R5N: Randomized recursive routing for restricted-route 
networks</title>
+              <author initials="N. S." surname="Evans" fullname="Nathan S. 
Evans">
+                <organization>Technische Universität München</organization>
+              </author>
+              <author initials="C." surname="Grothoff" fullname="Christian 
Grothoff">
+                <organization>Technische Universität München</organization>
+              </author>
+              <date year="2011"/>
+            </front>
+          </reference>
+          <reference anchor="Kademlia" 
target="http://css.csail.mit.edu/6.824/2014/papers/kademlia.pdf";>
+            <front>
+              <title>Kademlia: A peer-to-peer information system based on the 
xor metric.</title>
+              <author initials="P." surname="Maymounkov" fullname="Petar 
Maymounkov">
+              </author>
+              <author initials="D." surname="Mazieres" fullname="David 
Mazieres">
+              </author>
+              <date year="2002"/>
+            </front>
+          </reference>
+          <reference anchor="cadet" 
target="https://doi.org/10.1109/MedHocNet.2014.6849107";>
+            <front>
+              <title>CADET: Confidential ad-hoc decentralized end-to-end 
transport</title>
+              <author initials="B." surname="Polot" fullname="Bartlomiej 
Polot">
+                <organization>Technische Universität München</organization>
+              </author>
+              <author initials="C." surname="Grothoff" fullname="Christian 
Grothoff">
+                <organization>Technische Universität München</organization>
+              </author>
+              <date year="2014"/>
+            </front>
+          </reference>
+          <reference anchor="I-D.draft-schanzen-gns" 
target="https://datatracker.ietf.org/doc/draft-schanzen-gns/";>
+            <front>
+              <title>The GNU Name System</title>
+              <author initials="M." surname="Schanzenbach" fullname="Martin 
Schanzenbach">
+                <organization>GNUnet e.V.</organization>
+              </author>
+              <author initials="C." surname="Grothoff" fullname="Christian 
Grothoff">
+                <organization>GNUnet e.V.</organization>
+              </author>
+              <author initials="B." surname="Fix" fullname="Bernd Fix">
+                <organization>GNUnet e.V.</organization>
+              </author>
+              <date year="2021"/>
+            </front>
+          </reference>
+        </references>
+        <!-- Change Log
+          v00 2017-07-23  MS   Initial version
+        -->
+      </back>
+    </rfc>

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]