commit f0c137ec2691128050263337049d31ff993c18c3
parent 9e30c51f6924c84cc39e0cc89344632dcd009bae
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Wed, 2 Feb 2022 22:23:46 +0100
update RRBLOCK and RR wire formats
Diffstat:
1 file changed, 33 insertions(+), 50 deletions(-)
diff --git a/draft-schanzen-gns.xml b/draft-schanzen-gns.xml
@@ -779,10 +779,9 @@ zTLD := zkl[126..129].zkl[63..125].zkl[0..62]
+-----+-----+-----+-----+-----+-----+-----+-----+
| EXPIRATION |
+-----+-----+-----+-----+-----+-----+-----+-----+
-| DATA SIZE | TYPE |
+| SIZE | FLAGS | TYPE |
+-----+-----+-----+-----+-----+-----+-----+-----+
-| FLAGS | DATA /
-+-----+-----+-----+-----+ /
+| DATA /
/ /
/ /
]]></artwork>
@@ -795,11 +794,15 @@ zTLD := zkl[126..129].zkl[63..125].zkl[0..62]
In microseconds since midnight (0 hour), January 1, 1970 in network
byte order.
</dd>
- <dt>DATA SIZE</dt>
+ <dt>SIZE</dt>
<dd>
- denotes the 32-bit size of the DATA field in bytes and in network byte
+ denotes the 16-bit size of the DATA field in bytes and in network byte
order.
</dd>
+ <dt>FLAGS</dt>
+ <dd>
+ is a 16-bit resource record flags field (see below).
+ </dd>
<dt>TYPE</dt>
<dd>
is the 32-bit resource record type. This type can be one of the GNS resource
@@ -811,10 +814,6 @@ zTLD := zkl[126..129].zkl[63..125].zkl[0..62]
while values above 2^16 are allocated by the
GNUnet Assigned Numbers Authority <xref target="GANA" />.
</dd>
- <dt>FLAGS</dt>
- <dd>
- is a 32-bit resource record flags field (see below).
- </dd>
<dt>DATA</dt>
<dd>
the variable-length resource record data payload. The contents are defined
@@ -831,7 +830,7 @@ zTLD := zkl[126..129].zkl[63..125].zkl[0..62]
If an application or implementation encounters a flag which it does not
recognize, it MUST be ignored.
<xref target="figure_flag"/>
- illustrates the flag distribution in the 32-bit flag value of a
+ illustrates the flag distribution in the 16-bit flag field of a
resource record:
</t>
<figure anchor="figure_flag">
@@ -1599,10 +1598,10 @@ q := SHA-512 (ZKDF-Public(zk, label))
<artwork name="" type="" align="left" alt=""><![CDATA[
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
-| ZONE TYPE | ZONE KEY |
-+-----+-----+-----+-----+ (BLINDED) |
-/ /
-/ /
+| SIZE | ZONE TYPE |
++-----+-----+-----+-----+-----+-----+-----+-----+
+/ ZONE KEY /
+/ (BLINDED) /
| |
+-----+-----+-----+-----+-----+-----+-----+-----+
| SIGNATURE |
@@ -1610,8 +1609,6 @@ q := SHA-512 (ZKDF-Public(zk, label))
/ /
| |
+-----+-----+-----+-----+-----+-----+-----+-----+
-| SIZE | PURPOSE |
-+-----+-----+-----+-----+-----+-----+-----+-----+
| EXPIRATION |
+-----+-----+-----+-----+-----+-----+-----+-----+
| BDATA /
@@ -1621,9 +1618,16 @@ q := SHA-512 (ZKDF-Public(zk, label))
]]></artwork>
</figure>
<t>The RRBLOCK Wire Format.</t>
- <!-- FIXME: Should we remove size and purpose from the wire format? They are entirely redundant, right?
- I (CG) also think we should then move the expiration first (before ztype), so that it is aligned. -->
<dl>
+ <dt>SIZE</dt>
+ <dd>
+ A 32-bit value containing the length of the signed data following the
+ PUBLIC KEY field in network byte order. This value always includes the
+ length of the fields SIZE (4), PURPOSE (4) and EXPIRATION (8) in
+ addition to the length of the BDATA. While a 32-bit value is used,
+ implementations MAY refuse to publish blocks beyond a certain
+ size significantly below 4 GB.
+ </dd>
<dt>ZONE TYPE</dt>
<dd>
is the 32-bit ztype.
@@ -1642,22 +1646,13 @@ q := SHA-512 (ZKDF-Public(zk, label))
the cryptosystem of the zone and the derived private key
"ZKDF-Private(d, label)" (see <xref target="zones" />).
</dd>
- <dt>SIZE</dt>
- <dd>
- A 32-bit value containing the length of the signed data following the
- PUBLIC KEY field in network byte order. This value always includes the
- length of the fields SIZE (4), PURPOSE (4) and EXPIRATION (8) in
- addition to the length of the BDATA. While a 32-bit value is used,
- implementations MAY refuse to publish blocks beyond a certain
- size significantly below 4 GB.
- </dd>
- <dt>PURPOSE</dt>
+ <!--<dt>PURPOSE</dt>
<dd>
A 32-bit signature purpose flag. For a RRBLOCK the value of this
field MUST be 15. The value is encoded in network byte order.
The value of this field corresponds to an entry in the
GANA "GNUnet Signature Purpose" registry.
- </dd>
+ </dd>FIXME: We need the signature wire format -->
<dt>EXPIRATION</dt>
<dd>
Specifies when the RRBLOCK expires and the encrypted block
@@ -1696,48 +1691,36 @@ q := SHA-512 (ZKDF-Public(zk, label))
<artwork name="" type="" align="left" alt=""><![CDATA[
0 8 16 24 32 40 48 56
+-----+-----+-----+-----+-----+-----+-----+-----+
-| RR COUNT | EXPIRA- /
-+-----+-----+-----+-----+-----+-----+-----+-----+
-/ -TION | DATA SIZE |
+| EXPIRATION |
+-----+-----+-----+-----+-----+-----+-----+-----+
-| TYPE | FLAGS |
+| SIZE | FLAGS | TYPE |
+-----+-----+-----+-----+-----+-----+-----+-----+
| DATA /
/ /
-/ |
+/ /
+-----+-----+-----+-----+-----+-----+-----+-----+
| EXPIRATION |
+-----+-----+-----+-----+-----+-----+-----+-----+
-| DATA SIZE | TYPE |
+| SIZE | FLAGS | TYPE |
++-----+-----+-----+-----+-----+-----+-----+-----+
+| DATA /
+/ /
+-----+-----+-----+-----+-----+-----+-----+-----+
-| FLAGS | DATA /
-+-----+-----+-----+-----+ /
-/ +-----------------------/
-/ | /
-+-----------------------+ /
/ PADDING /
/ /
]]></artwork>
</figure>
<t>The RDATA Wire Format.</t>
<dl>
- <dt>RR COUNT</dt>
- <dd>
- A 32-bit value containing the number of variable-length resource
- records which are
- following after this field in network byte order.
- </dd>
- <dt>EXPIRATION, DATA SIZE, TYPE, FLAGS and DATA</dt>
+ <dt>EXPIRATION, SIZE, TYPE, FLAGS and DATA</dt>
<dd>
These fields were defined
in the resource record format in <xref target="rrecords" />.
- There MUST be a total of RR COUNT of these resource records
- present.
</dd>
<dt>PADDING</dt>
<dd>
When publishing an RDATA block, the implementation MUST ensure that
- the size of the RDATA WITHOUT the RR COUNT field is a power of two
+ the size of the RDATA is a power of two
using the padding field. The field MUST be set to zero and MUST be
ignored on receipt.
As a special exception, record sets with (only) a zone delegation