design: Codify usage of CN + 1 bytes everywhere

This commit is contained in:
Sasha Koshka 2025-10-12 13:11:47 -04:00
parent f5de450c39
commit 5778616965

View File

@ -75,16 +75,16 @@ connection. Thus, the value may range from 0 to 31 if unsigned, and from -16 to
17 if signed. 17 if signed.
#### Large Integer (LI) #### Large Integer (LI)
LI encodes an integer of up to 256 bits, which are stored in the payload. The CN LI encodes an integer of up to 256 bits, which are stored in the payload. The
determine the length of the payload in bytes. The integer is big-endian. Whether length of the payload (in bytes) is CN + 1. The integer is big-endian. Whether
the payload is interpreted as unsigned or as signed two's complement is semantic the payload is interpreted as unsigned or as signed two's complement is semantic
information and must be agreed upon by both sides of the connection. Thus, the information and must be agreed upon by both sides of the connection. Thus, the
value may range from 0 to 31 if unsigned, and from -16 to 17 if signed. value may range from 0 to 31 if unsigned, and from -16 to 17 if signed.
#### Floating Point (FP) #### Floating Point (FP)
FP encodes an IEEE 754 floating point number of up to 256 bits, which are stored FP encodes an IEEE 754 floating point number of up to 256 bits, which are stored
in the payload. The CN determines the length of the payload in bytes, and it may in the payload. The length of the payload (in bytes) is CN + 1. The only
only be one of these values: 16, 32, 64, 128, or 256. supported bit widths for floats are as follows: 16, 32, 64, 128, and 256.
#### Small Byte Array (SBA) #### Small Byte Array (SBA)
SBA encodes an array of up to 32 bytes, which are stored in the paylod. The SBA encodes an array of up to 32 bytes, which are stored in the paylod. The
@ -98,15 +98,16 @@ in bytes is determined by the CN.
#### One-Tag Array (OTA) #### One-Tag Array (OTA)
OTA encodes an array of up to 2^256 items, which are stored in the payload after OTA encodes an array of up to 2^256 items, which are stored in the payload after
the length field and the item tag, where the length field comes first. Each item the length field and the item tag, where the length field comes first. Each item
must be the same length, as they all share the same tag. The length of the data must be the same length, as they all share the same tag. The length of the
length field in bytes is determined by the CN. length field (in bytes) is CN + 1.
#### Key-Tag-Value Table (KTV) #### Key-Tag-Value Table (KTV)
KTV encodes a table of up to 2^256 key/value pairs, which are stored in the KTV encodes a table of up to 2^256 key/value pairs, which are stored in the
payload after the length field. The pairs themselves consist of a 16-bit payload after the length field. The pairs themselves consist of a 16-bit
unsigned big-endian key followed by a tag and then the payload. Pair values can unsigned big-endian key followed by a tag and then the payload. Pair values can
be of different types and sizes. The order of the pairs is not significant and be of different types and sizes. The order of the pairs is not significant and
should never be treated as such. should never be treated as such. The length of the length field (in bytes) is
CN + 1.
## Transports ## Transports
A transport is a protocol that HOPP connections can run on top of. HOPP A transport is a protocol that HOPP connections can run on top of. HOPP