<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lundblade-cbor-serialization-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="CBOR Serialization">CBOR Serialization and Determinism</title>
    <seriesInfo name="Internet-Draft" value="draft-lundblade-cbor-serialization-00"/>
    <author initials="L." surname="Lundblade" fullname="Laurence Lundblade">
      <organization>Security Theory LLC</organization>
      <address>
        <email>lgl@securitytheory.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="13"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <keyword>cbor</keyword>
    <abstract>
      <?line 30?>

<t>This document updates and clarifies CBOR Serialization and Deterministic Encoding as defined in <xref target="RFC8949"/>.
It also provides background explanations that were not included in the original specification.</t>
    </abstract>
  </front>
  <middle>
    <?line 35?>

<section anchor="Introduction">
      <name>Introduction</name>
      <t>This document provides a complete definition of both Preferred Serialization and CBOR Deterministic Encoding Requirements (CDER) such that the reader does not need to refer to their definitions in <xref target="RFC8949"/>.</t>
      <t>The overwhelming purpose of this document is clarity and ease for the CBOR ecosystem on the subject of serialization and determinism.
Aside from one small change, this restatement of the requirements doesn’t change anything in <xref target="RFC8949"/>.
No new concepts or terminology is introduced.</t>
      <t>The small change is to Preferred Serialization.
The conditional “preference” for deterministic length encoding in <xref section="4.1" sectionFormat="of" target="RFC8949"/> is promoted to an unconditional requirement by this document.
This change is considered reasonably compatible with the extant CBOR ecosystem.
Since the publication of <xref target="RFC8949"/>, a period of five years, the CBOR community largely assumed deterministic length encoding was a requirement of Preferred Serialization.
It is better to make this minor change than to create a third serialization concept that would compound the complexity and confusion in this part of the CBOR ecosystem.</t>
    </section>
    <section anchor="information-model-data-model-and-serialization">
      <name>Information Model, Data Model and Serialization</name>
      <t>To understand CBOR serialization and determinism, it's helpful to distinguish between the general concepts of an information model, a data model, and serialization.</t>
      <table>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">Information Model</th>
            <th align="left">Data Model</th>
            <th align="left">Serialization</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Abstraction Level</td>
            <td align="left">Top level; conceptual</td>
            <td align="left">Realization of information in data structures and data types</td>
            <td align="left">Actual bytes encoded for transmission</td>
          </tr>
          <tr>
            <td align="left">Example</td>
            <td align="left">The temperature of something</td>
            <td align="left">A floating-point number representing the temperature</td>
            <td align="left">Encoded CBOR of a floating-point number</td>
          </tr>
          <tr>
            <td align="left">Standards</td>
            <td align="left"> </td>
            <td align="left">CDDL</td>
            <td align="left">CBOR</td>
          </tr>
          <tr>
            <td align="left">Implementation Representation</td>
            <td align="left"> </td>
            <td align="left">API Input to CBOR encoder library, output from CBOR decoder library</td>
            <td align="left">Encoded CBOR in memory or for transmission</td>
          </tr>
        </tbody>
      </table>
      <t>CBOR doesn't provide facilities for information models.
They are mentioned here for completeness and to provide some context.</t>
      <t>CBOR defines a palette of basic types that are the usual integers, floating-point numbers, strings, arrays, maps and other.
Extended types may be constructed from these basic types.
These basic and extended types are used to construct the data model of a CBOR protocol.
While not required, <xref target="RFC8610"/> may be used to describe the data model of a protocol.
The types in the data model are serialized per <xref target="RFC8949"/> to create encoded CBOR.</t>
      <t>CBOR allows certain data types to be serialized in multiple ways to facilitate easier implementation in constrained environments.
For example, indefinite-length encoding enables strings, arrays, and maps to be streamed without knowing their length upfront.</t>
      <t>Crucially, CBOR allows — and even expects — that some implementations will not support all serialization variants.
In contrast, JSON permits variations (e.g., representing 1 as 1, 1.0, or 0.1e1), but expects all parsers to handle them.
That is, the variation in JSON is for human readability, not to facilitate easier implementation in some environments.</t>
      <t>Since CBOR does not require implementations to support every serialization variant, defining a common serialization format is highly beneficial for those that don’t need specialized encoding.
This is the role of preferred serialization.
It mandates a specific variant for each data type when multiple options exist.</t>
    </section>
    <section anchor="PreferredSerialization">
      <name>Preferred Serialization</name>
      <t>The requirements in the next two sections replace the definition of Preferred Serialization in <xref target="RFC8949"/>.</t>
      <t>They are restated in normative form to be more clear and so they can be formally referenced by the restatement of <xref target="CDER"/>.</t>
      <t>As mentioned in <xref target="Introduction"/> there is one change relative to the definition of Preferred Serialization in <xref target="RFC8949"/>.</t>
      <section anchor="PreferredEncoding">
        <name>Encoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Shortest-form encoding of the argument MUST be used for all major types.
The shortest form encoding for any argument that is not a floating  point value is:  </t>
            <ul spacing="normal">
              <li>
                <t>0 to 23 and -1 to -24 MUST be encoded in the same byte as the major type.</t>
              </li>
              <li>
                <t>24 to 255 and -25 to -256 MUST be encoded only with an additional byte (ai = 0x18).</t>
              </li>
              <li>
                <t>256 to 65535 and -257 to -65536 MUST be encoded only with an additional two bytes (ai = 0x19).</t>
              </li>
              <li>
                <t>65536 to 4294967295 and -65537 to -4294967296 MUST be encoded only with an additional four bytes (ai = 0x1a).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If maps or arrays are emitted, they MUST use definite-length encoding (never indefinite-length).</t>
          </li>
          <li>
            <t>If text or byte strings are emitted, they MUST use definite-length encoding (never indefinite-length).</t>
          </li>
          <li>
            <t>If floating-point numbers are emitted, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>The length of the argument indicates half (binary16, ai = 0x19), single (binary32, ai = 0x1a) and double (binary64, ai = 0x1b) precision encoding.
If multiple of these encodings preserve the precision of the value to be encoded, only the shortest form of these MUST be emitted.
That is, encoders MUST support half-precision and single-precision floating point.
Positive and negative infinity and zero MUST be represented in half-precision floating point.</t>
              </li>
              <li>
                <t>NaNs, and thus NaN payloads MUST be supported.      </t>
                <t>
As with all floating point numbers, NaNs with payloads MUST be reduced to the shortest of double, single or half precision that preserves the NaN payload.
The reduction is performed by removing the rightmost N bits of the payload, where N is the difference in the number of bits in the significand (mantissa) between the original format and the
reduced format.
The reduction is performed only (preserves the value only) if all the rightmost bits removed are zero.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If big numbers (tags 2 and 3) are supported, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>Positive values from 0 to 2^63 - 1 MUST be encoded as a type 0 integer.</t>
              </li>
              <li>
                <t>Negative values from -1 to -(2^64) MUST be encoded as a type 1 integer.</t>
              </li>
              <li>
                <t>Leading zeros MUST not be present in the byte string content of tag 2 and 3.</t>
              </li>
              <li>
                <t>See also <xref target="BigNumPreferred"/>.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="PreferredDecoding">
        <name>Decoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Decoders MUST accept shortest-form encoded arguments.</t>
          </li>
          <li>
            <t>If arrays or maps are supported, definite-length arrays or maps MUST be accepted.</t>
          </li>
          <li>
            <t>If text or byte strings are supported, definite-length text or byte strings MUST be accepted.</t>
          </li>
          <li>
            <t>If floating-point numbers are supported, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>Half-precision values MUST be accepted.</t>
              </li>
              <li>
                <t>Double- and single-precision values SHOULD be accepted; leaving these out is only foreseen for decoders that need to work in exceptionally constrained environments.</t>
              </li>
              <li>
                <t>If double-precision values are accepted, single-precision values MUST be accepted.</t>
              </li>
              <li>
                <t>NaNs, and thus NaN payloads, MUST be accepted.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If big numbers (tags 2 and 3) are supported, type 0 and type 1 integers MUST be accepted in place of a byte string big number. Leading zeros in a big number byte string must be ignored.</t>
          </li>
        </ol>
      </section>
      <section anchor="when-to-use-preferred-serialization">
        <name>When to use Preferred Serialization</name>
        <t>It is recommended that Preferred Serialization be used unless an application has special needs.</t>
        <t>It is usually implementations in constrained environments that have special needs.
For example, indefinite-length encoding is useful to send a lot of data from a device that has insufficient memory to store the data to be sent.</t>
      </section>
    </section>
    <section anchor="CDER">
      <name>CBOR Deterministic Encoding Requirements</name>
      <t>The requirements in the next two sections replace the definition of CDER from <xref target="RFC8949"/>:</t>
      <t>There are no differences between these requirements and those of <xref target="RFC8949"/>.
This restatement is only for the sake of clarity.
(<xref target="RFC8949"/> allowed indefinite-length encoding for preferred serialization but not for CDER; that is why there is a change to preferred serialization in this document but not to CDER).</t>
      <section anchor="encoder-requirements">
        <name>Encoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Preferred Serialization defined in <xref target="PreferredEncoding"/> MUST be used.</t>
          </li>
          <li>
            <t>If a map is emitted, the keys in it MUST be sorted in the bytewise lexicographic order of their deterministic encodings.</t>
          </li>
        </ol>
      </section>
      <section anchor="decoder-requirements">
        <name>Decoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Decoders MUST meet the decoder requirements for <xref target="PreferredDecoding"/>.
That is, deterministic encoding imposes no requirements over and above the requirements for decoding Preferred Serialization.</t>
          </li>
        </ol>
      </section>
      <section anchor="when-to-use-deterministic-serialization">
        <name>When to use Deterministic Serialization</name>
        <t>Most applications do not require deterministic encoding—even those that use signing or hashing to authenticate or protect the integrity of data.
For example, the payload of a COSE_Sign message does not need to be encoded deterministically, because it is transmitted along with the message.
The recipient receives the exact same bytes that were signed.</t>
        <t>Deterministic encoding becomes important when the data being protected is NOT transmitted in the form needed for authenticity or integrity checks—typically when that form is derived from other data.
This can happen for reasons such as data size, privacy concerns, or other constraints.</t>
        <t>The only difference between preferred and non-deterministic serialization is map key sorting.
Sorting can be prohibitively expensive in very constrained environments.
However, in many systems, sorting maps is not costly, and deterministic encoding can be used by default.
Deterministically encoded data is always decodable, even by receivers that do not specifically support deterministic encoding.
It can also be helpful for debugging protocols.</t>
      </section>
    </section>
    <section anchor="Tags">
      <name>Deterministic Encoding for Popular Tags</name>
      <t>The definitions of the following tags in <xref target="RFC8610"/> allow variation in the data mode, thus it is useful to define a deterministic encoding for them should a particular deterministic protocol need one.
The tags defined in <xref target="RFC8610"/> but not mentioned here have no variability in their data model.</t>
      <section anchor="date-strings-tag-0">
        <name>Date Strings, Tag 0</name>
        <t>TODO -- complete this work and remove this comment before publication</t>
      </section>
      <section anchor="epoch-date-tag-1">
        <name>Epoch Date, Tag 1</name>
        <section anchor="encoder-requirements-1">
          <name>Encoder Requirements</name>
          <t>The integer form MUST be used unless one of the following applies: (1) the date is too far in the past or future to fit in a 64-bit integer of type 0 or 1, or (2) the date requires sub-second precision.
In these cases, the floating-point form MUST be used instead.</t>
        </section>
        <section anchor="decoder-requirements-1">
          <name>Decoder Requirements</name>
          <t>The decoder MUST decode both the integer and floating-point form.</t>
        </section>
      </section>
      <section anchor="big-numbers-tags-2-and-3">
        <name>Big Numbers, Tags 2 and 3</name>
        <t>The determinism requirements for big numbers are part of the big number requirements that are part of <xref target="PreferredSerialization"/>.
That is, the Preferred Serialization of big numbers is deterministic. See also <xref target="BigNumPreferred"/>.</t>
      </section>
      <section anchor="big-floats-and-decimal-fractions-tags-4-and-5">
        <name>Big Floats and Decimal Fractions, Tags 4 and 5</name>
        <section anchor="encoder-requirements-2">
          <name>Encoder Requirements</name>
          <t>The mantissa MUST be encoded in the preferred serialization form specified in Section 3.4.3 of RFC 8949.</t>
          <t>The mantissa MUST NOT contain trailing zeros. For example, the decimal fraction with value 10 must be encoded with a mantissa of 1 and an exponent of 1. For big floats, the mantissa must not include any trailing zero bits if encoded as a type 0 or 1 integer, and no trailing zero bytes if encoded as a big number</t>
        </section>
        <section anchor="decoder-requirements-2">
          <name>Decoder Requirements</name>
          <t>Both the integer and big number forms of the mantissa MUST be decoded.</t>
        </section>
      </section>
    </section>
    <section anchor="general-protocol-considerations-for-determinism">
      <name>General Protocol Considerations for Determinism</name>
      <t>This is the section that covers what is know as ALDR in some discussions.</t>
      <t><cref anchor="rfced">RFC Editor:</cref> Please remove above sentence before publication</t>
      <t>In addition to <xref target="CDER"/> and <xref target="Tags"/>, there are considerations in the design of any deterministic protocol.</t>
      <t>For a protocol to be deterministic, both the encoding (serialization) and data model (application) layer must be deterministic.
While CDER ensures determinism at the encoding layer, requirements at the application layer may also be necessary.</t>
      <t>Here’s an example application layer specification:</t>
      <ul empty="true">
        <li>
          <ul empty="true">
            <li>
              <t>At the sender’s convenience, the birth date MAY be sent either as an integer epoch date or string date. The receiver MUST decode both formats.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>While this specification is interoperable, it lacks determinism.
There is variability in the data model layer akin to variability in the CBOR encoding layer when CDER is not required.</t>
      <t>To make this example application layer specification deterministic, specify one date format and prohibit the other.</t>
      <t>A more interesting source of application layer variability comes from CBOR’s variety of number types. For instance, the number 2 can be represented as an integer, float, big number, decimal fraction and other.
Most protocols designs will just specify one number type to use, and that will give determinism, but here’s an example specification that doesn’t:</t>
      <ul empty="true">
        <li>
          <ul empty="true">
            <li>
              <t>At the sender’s convenience, the fluid level measurement MAY be encoded as an integer or a floating-point number. This allows for minimal encoding size while supporting a large range. The receiver MUST be able to accept both integers and floating-point numbers for the measurement.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Again, this ensures interoperability but not determinism—identical fluid level measurements can be represented in more than one way.
Determinism can be achieved by allowing only floating-point, though that doesn’t minimize encoding size.</t>
      <t>A better solution requires the fluid level always be encoded using the smallest representation for every particular value.
For example, a fluid level of 2 is always encoding as an integer, never as a floating-point number.
2.000001 is always be encoded as a floating-point number so as to not lose precision.
See the numeric reduction defined by dCBOR.</t>
      <t>Although this is not strictly a CBOR issue, deterministic CBOR protocol designers should be mindful of variability in Unicode text, as some characters can be encoded in multiple ways.</t>
      <t>While this is not an exhaustive list of application-layer considerations for deterministic CBOR protocols, it highlights the nature of variability in the data model layer and some sources of variability in the CBOR data model (i.e., in the application layer).</t>
    </section>
    <section anchor="cddl-support">
      <name>CDDL Support</name>
      <t>TODO -- complete work and remove this comment</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations in <xref section="10" sectionFormat="of" target="RFC8949"/> apply.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO -- complete work and remove this comment before publication</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC8949">
        <front>
          <title>Concise Binary Object Representation (CBOR)</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
          <date month="December" year="2020"/>
          <abstract>
            <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="94"/>
        <seriesInfo name="RFC" value="8949"/>
        <seriesInfo name="DOI" value="10.17487/RFC8949"/>
      </reference>
      <reference anchor="RFC8610">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="C. Vigano" initials="C." surname="Vigano"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
    </references>
    <?line 278?>

<section anchor="examples-and-test-vectors">
      <name>Examples and Test Vectors</name>
      <t>TODO -- complete work and remove this comment before publication</t>
    </section>
    <section anchor="BigNumPreferred">
      <name>Explanation for Big Number Preferred Serialization</name>
      <t>All requirements defined for Preferred Serialization address the intentional variability in CBOR serialization designed to support constrained environments—with one exception: the handling of big numbers.</t>
      <t>Specifically, all Preferred Serialization rules apply strictly to serialization concerns and not to the data model, except for the requirement regarding integers that can be encoded using major types 0 or 1.</t>
      <t>The rule that such integers MUST be encoded using major type 0 or 1, rather than as bignums (tags 2 or 3), represents a constraint at the data model level.
It does not serve to limit variability in serialization format and is therefore conceptually distinct from other Preferred Serialization requirements.</t>
      <t>This exception is included in Preferred Serialization to promote a consistent and widely supported representation of 128-bit integers.
While such integers are desirable for many applications, they exceed the range supported by the base CBOR data model, which is limited to 64-bit integers.
Incorporating this constraint within Preferred Serialization enables consistent encoding practices for extended integer ranges without modifying the core CBOR data model.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIANSRI2gAA7Vb624bSXb+309RWP9YKSAJUZa9Yw2yiMayMwo0tmFpsgiC
bFDsLpI17gtT1S2ZozHgh9g/CyQv5yfJuVV1dZOUvcFmMIDFvpw6da7fOXV6
Op1md+fqaZa1ti3NuXr5w9v36sY4q0v7q25tUytdF+rStMZVtra+yvRi4czd
vkezoslrXQGZwullOy27uliUujDTfNG4qU+fnZa6Nb7Nct2eK98WWVbAhfMs
b2pvat/5c9W6zmS+dUZX5+rq1e3rzG4cXfbt6cnJi5PTTMPNc6V+d7HZlDYn
wp4Yfm90Ob21lflddt+4DyvXdBtmOftgtnCpOFfIVJZlumvXjTvPpsrWsOr1
TF0HvjOleD/XunOmzs3gVuNW5yCAvHO23arbtWncVl1fv4RbptK2PFflqvwn
Lw+0dH+WN1WW1Y2rgNk72K9S71+//O7F2YvAD194Pj+BC0VRAoPT6VTpBQhC
522W3a6tVyDorjJ1q7oNio33nJfa2aWFX1/VYmtz9arOm8LWK6WBnlna2hQg
AfXwQNr69GmWXbVKl75RG9fc2QLoLnROogRa5uOm1LVIvF3rVt0bZ1TdtEAk
L7uCqcGuQU52ZWtdKr8xOTDIeprxxioLmzRZ9kRd1a1rii4ndh+epD8/jbcd
OdIKBLopYWO8B0tvN0u1aNq1eufM0jgHrOwKg2R0QCLvzX911hlcyqujl5ev
3h8r3+Vr3ijuCeyuMA4YAh5wz7WBRdpG0YL4BzxkXcKTH8kWNgSSuTPufm3K
ChfddG7TeIPMt4PNwt+kWjAyZNxoeGjZOOKDdmHyxm99ayrVsMR9t/jF5C2S
8jsbL3pfnmUXHsSolq7Bd+HFSpelyte6XpkJs+HAS8HEiBNiDTefiAdFUH/5
/NdWXoM1wNZxQ8MNv2lASPegLnCjDbyHGyA+mrJZbXGTVjRuChFPyg0+AGI9
oNEZPQ+0CxI22NqXz/+9oWfRbb98/h+SWDFQd2nqFRiJCVonfsGfSVJnszlu
V9jH1cHmqqZlNetadXW6XCIStdgOFThj4+33gTEOxI67ADvyQGBRbsmQYTOL
0qh7265J0uZjq4HiUMuz7MZiLMIHNt0iBD5kN8p7Ap6xAQk1BV5eQqhRW6Od
n/RWA+tVXY1WBca1MsCB9h4YLr4ipnuNbpduGFY4qJcrst+FaVv2i0p/MCwe
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
k4Tuwzk1q14VtsUPt/8XZ8uHJcU+AAA=

-->

</rfc>
