<?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.27 (Ruby 3.4.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-cde-10" category="bcp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <?v3xml2rfc table_borders="light"?>
  <front>
    <title abbrev="CBOR CDE">CBOR Common Deterministic Encoding (CDE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cde-10"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2025" month="April" day="02"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <abstract>
      <?line 75?>

<t>CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
its Section 4.2, providing some flexibility for application specific
decisions.
To facilitate Deterministic Encoding to be offered as a selectable
feature of generic encoders, the present document defines a
CBOR Common Deterministic Encoding (CDE) that can be shared by a
large set of applications with potentially diverging detailed
requirements.
It also defines the term "Basic Serialization", which stops short of the
potentially more onerous requirements that make CDE fully
deterministic, while employing most of its reductions of the
variability needing to be handled by decoders.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-cde/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Concise Binary Object Representation Maintenance and Extensions (CBOR) Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/draft-ietf-cbor-cde"/>.</t>
    </note>
  </front>
  <middle>
    <?line 93?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
its Section 4.2, providing some flexibility for application specific
decisions.
To facilitate Deterministic Encoding to be offered as a selectable
feature of generic encoders, the present document defines a
CBOR Common Deterministic Encoding (CDE) that can be shared by a
large set of applications with potentially diverging detailed
requirements.
It also defines the term "Basic Serialization", which stops short of the
potentially more onerous requirements that make CDE fully
deterministic, while employing most of its reductions of the
variability needing to be handled by decoders.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t>After introductory material (this introduction and <xref target="choi"/>), <xref target="dep"/>
defines the CBOR Common Deterministic Encoding (CDE).
<xref target="cddl-support"/> defines Concise Data Definition Language (CDDL) support for indicating the use of CDE.
This is followed by the conventional sections for
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
and <xref format="title" target="sec-combined-references"/> (<xref format="counter" target="sec-combined-references"/>).</t>
        <t>For use as background material, <xref target="models"/> introduces terminology for
the layering of models used to describe CBOR.</t>
        <t>Instead of giving rise to the definition of application-specific,
non-interoperable variants of CDE, this document identifies
Application-level Deterministic Representation (ALDR) rules as a
concept that is separate from CDE itself (<xref target="aldr"/>) and therefore out of
scope for this document.
ALDR rules are situated at the application-level, i.e., on top of the
CDE, and address requirements on deterministic representation of
application data that are specific to an application or a set of
applications.
ALDR rules are often provided as part of a specification for a CBOR-based
protocol, or, if needed, can be provided by referencing a shared "ALDR
ruleset" that is defined in a separate document.</t>
        <t>The informative <xref target="impcheck"/> provides brief checklists that implementers
can use to check their CDE implementations.
<xref target="ps"/> provides a checklist for implementing Preferred Serialization.
<xref target="bs"/> introduces "Basic Serialization", a slightly more restricted form
of Preferred Serialization that may be used by encoders to hit a sweet
spot for maximizing interoperability with partial (e.g., constrained)
CBOR decoder implementations.
<xref target="cde"/> further restricts Basic Serialization to arrive at CDE.</t>
        <t><xref target="examples"/> provides a few examples for CBOR data items in CDE
encoding, as well as a few failing examples.</t>
      </section>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The conventions and definitions of <xref target="STD94"/> apply.
<xref target="models"/> provides additional discussion of the terms information
model, data model, and serialization.</t>
        <ul spacing="normal">
          <li>
            <t>The term "CBOR Application" ("application" for short) is not
explicitly defined in <xref target="STD94"/>; this document uses it in the same sense
as it is used there, specifically for applications that use CBOR as an
interchange format and use (often generic) CBOR encoders/decoders to
serialize/ingest the CBOR form of their application data to be
exchanged.</t>
          </li>
          <li>
            <t>Similarly, "CBOR Protocol" is used as in <xref target="STD94"/> for the protocol that
governs the interchange of data in CBOR format for a specific
application or set of applications.</t>
          </li>
          <li>
            <t>"Representation" stands for the process, and its result, of building
the representation format out of (information-model level) application
data.</t>
          </li>
          <li>
            <t>"Serialization" is used for the subset of this process, and its
result, that represents ("serializes") data in CBOR generic data model
form into encoded data items.  "Encoding" is often used as a synonym
when the focus is on that.</t>
          </li>
        </ul>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="choi">
      <name>Encoding Choices in CBOR</name>
      <t>In many cases, CBOR provides more than one way to encode a data item,
i.e., to serialize it into a sequence of bytes.
This flexibility can provide convenience for the generator of the
encoded data item, but handling the resulting variation can also put
an onus on the decoder.
In general, there is no single perfect encoding choice that is optimal for all
applications.
Choosing the right constraints on these encoding choices is one
element of application protocol design.
Having predefined sets of such choices is a useful way to reduce
variation between applications, enabling generic implementations.</t>
      <t>Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> provides a recommendation for a
<em>Preferred Serialization</em>.
This recommendation is useful for most CBOR applications, and it is a
good choice for most applications.
Its main constraint is to choose the shortest <em>head</em> (Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) that preserves the value of a data item.</t>
      <t>Preferred Serialization allows indefinite length encoding (Section <xref target="RFC8949" section="3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), which does not express the length of a string,
an array, or a map in its head.  Supporting both definite length and
indefinite length encoding is an additional onus on the decoder; many
applications therefore choose not to use indefinite length encoding at
all.
We call Preferred Serialization with this additional constraint
<em>Basic Serialization</em>.
Basic Serialization is a common choice for applications that need to
further reduce the variability that needs to be handled by decoders,
potentially maximizing interoperability with partial (e.g.,
constrained) CBOR decoder implementations.</t>
      <t>These constraints still allow some variation. In particular, there is
more than one serialization for data items that contain maps: The
order of serialization of map entries is ignored in CBOR (as it is in
JSON), so maps with more than one entry have all permutations of these
entries as valid Basic Serializations.
<em>Deterministic Serialization</em> builds on Basic Serialization by
defining a common (namely, lexicographic) order for the entries in a map.
For many applications, ensuring this common order is an additional
onus on the generator that is not actually needed, so they do not
choose Deterministic Serialization.
However, if the objective is minimal effort for the consuming
application, deterministic map ordering can be useful even outside the
main use cases for Deterministic Serialization that are further
discussed in <xref section="2" sectionFormat="of" target="I-D.bormann-cbor-det"/>.</t>
      <t><xref target="tab-constraints"/> summarizes the increasingly restrictive sets of
encoding choices that have been given names in this section.</t>
      <table anchor="tab-constraints">
        <name>Constraints on the Serialization of CBOR</name>
        <thead>
          <tr>
            <th align="left">Set of Encoding Choices</th>
            <th align="left">Most Important Constraint</th>
            <th align="left">Applications</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">preferred</td>
            <td align="left">shortest "head" variant</td>
            <td align="left">most</td>
          </tr>
          <tr>
            <td align="left">basic</td>
            <td align="left">+ definite lengths only</td>
            <td align="left">many</td>
          </tr>
          <tr>
            <td align="left">
              <em>deterministic</em> ("CDE")</td>
            <td align="left">+ common map order</td>
            <td align="left">specific</td>
          </tr>
        </tbody>
      </table>
      <t>Note that the objective to have a deterministic serialization for a
specific application data item can only be fulfilled if the
application itself does not generate multiple different CBOR data
items that represent that same (equivalent) application data item.
We speak of the need for Application-level Deterministic
Representation (ALDR), and we may want to aid achieving this by
the application defining rules for ALDR (see also <xref target="aldr"/>).
Where Deterministic Representation is not actually needed,
application-level representation rules of course can still be useful
to amplify the benefits of Preferred or Basic Serialization.</t>
    </section>
    <section anchor="dep">
      <name>CBOR Common Deterministic Encoding (CDE)</name>
      <t>This specification defines the <em>CBOR Common Deterministic Encoding</em>
(CDE) based on the <em>Core Deterministic Encoding
Requirements</em> defined for CBOR in
Section <xref target="RFC8949" section="4.2.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
      <t>Note that this specific set of requirements is elective — in
principle, other variants of deterministic encoding can be defined
(and have been, now being phased out, as detailed in Section <xref target="RFC8949" section="4.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
In many applications of CBOR today, deterministic encoding is not used
at all, as its restriction of choices can create some additional
performance cost and code complexity.</t>
      <t><xref target="STD94"/>'s "Core Deterministic Encoding Requirements" are designed to
provide well-understood and
easy-to-implement rules while maximizing coverage, i.e., the subset of
CBOR data items that are fully specified by these rules, and also
placing minimal burden on implementations.</t>
      <t>Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> picks up on the interaction of extensibility
(CBOR tags) and deterministic encoding.
CBOR itself uses some tags to increase the range of its basic
generic data types, e.g., tags 2/3 extend the range of basic major
types 0/1 in a seamless way.
Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> recommends handling this transition the same
way as with the transition between different integer representation
lengths in the basic generic data model, i.e., by mandating the
preferred serialization for all integers (Section <xref target="RFC8949" section="3.4.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
      <ol spacing="normal" type="1" group="1"><li>
          <t>CDE turns this
recommendation into a mandate: Integers that can be represented by
basic major type 0 and 1 are encoded using the deterministic
encoding defined for them, and integers outside this range are
encoded using the preferred serialization (Section <xref target="RFC8949" section="3.4.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) of tag 2 and 3 (i.e., no leading zero bytes).</t>
        </li>
      </ol>
      <t>Most tags capture more specific application semantics and therefore
may be harder to define a deterministic encoding for.
While the deterministic encoding of their tag internals is often
covered by the <em>Core Deterministic Encoding Requirements</em>, the mapping
of diverging platform application data types onto the tag contents may
require additional attention to perform it in a deterministic way; see
<xref section="3.2" sectionFormat="of" target="I-D.bormann-cbor-det"/> for
more explanation as well as examples.
As the CDE would continually
need to address additional issues raised by the registration of new
tags, this specification recommends that new tag registrations address
deterministic encoding in the context of CDE.</t>
      <t>A particularly difficult field to obtain deterministic encoding for is
floating point numbers, partially because they themselves are often
obtained from processes that are not entirely deterministic between platforms.
See <xref section="3.2.2" sectionFormat="of" target="I-D.bormann-cbor-det"/> for more details.
Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> presents a number of choices; these need to
be made to obtain the CBOR Common Deterministic Encoding (CDE).
Specifically, CDE specifies (in the order of the bullet list at the end of Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>):</t>
      <ol spacing="normal" type="1" group="1"><li>
          <t>Besides the mandated use of preferred serialization, there is no further
specific action for the two different zero values, e.g., an encoder
that is asked by an application to represent a negative floating
point zero will generate 0xf98000.</t>
        </li>
        <li>
          <t>There is no attempt to mix integers and floating point numbers,
i.e., all floating point values are encoded as the preferred
floating-point representation that accurately represents the value,
independent of whether the floating point value is, mathematically,
an integral value (choice 2 of the second bullet).</t>
        </li>
        <li>
          <t>Apart from finite and infinite numbers, <xref target="IEEE754"/> floating point
values include NaN (not a number) values <xref target="I-D.bormann-cbor-numbers"/>.
In CDE, there is no special handling of NaN values, except that the
preferred serialization rules also apply to NaNs (with zero or
non-zero payloads), using the canonical encoding of NaNs as defined
in Section 6.2.1 of <xref target="IEEE754"/>.
Specifically, this means that shorter forms of encodings for a NaN
are used when that can be achieved by only removing trailing zeros
in the NaN payload (example serializations are available in
<xref section="A.1.2" sectionFormat="of" target="I-D.bormann-cbor-numbers"/>).
Further clarifying a "should"-level statement in Section 6.2.1 of
<xref target="IEEE754"/>, the CBOR encoding always uses a leading bit of 1 in the
significand to encode a quiet NaN; the use of signaling NaNs by
application protocols is <bcp14>NOT RECOMMENDED</bcp14> but when presented by an
application these are encoded by using a leading bit of 0.  </t>
          <t>
Typically, most applications that employ NaNs in their storage and
communication interfaces will only use a single NaN value, quiet NaN with payload 0,
which therefore deterministically encodes as 0xf97e00.</t>
        </li>
        <li>
          <t>There is no special handling of subnormal values.</t>
        </li>
        <li>
          <t>CDE does not presume
equivalence of basic floating point values with floating point
values using other representations (e.g., tag 4/5).
Such equivalences and related deterministic representation rules
can be added at the ALDR level if desired, e.g., by stipulating
additional equivalences and deterministically choosing exactly one
representation for each such equivalence, and by restricting in
general the set of data item values actually used by an
application.</t>
        </li>
      </ol>
      <t>The main intent here is to preserve the basic generic data model, so
applications (in their ALDR rules or by referencing a separate ALDR
ruleset document, see
<xref target="aldr"/>) can
make their own decisions within that data model.
E.g., an application's ALDR rules can decide that it only ever allows a
single NaN value that would be encoded as 0xf97e00, so a CDE
implementation focusing on this application would not need to
provide processing for other NaN values.
Basing the definition of both CDE and ALDR rules on the
generic data model of CBOR also means that there is no effect on the
Concise Data Definition Language (CDDL)
<xref target="RFC8610"/>, except where the data description is documenting specific
encoding decisions for byte strings that carry embedded CBOR.</t>
    </section>
    <section anchor="cddl-support">
      <name>CDDL support</name>
      <t>CDDL defines the structure of CBOR data items at the data model level;
it enables being specific about the data items allowed in a particular
place.
It does not specify encoding, but CBOR protocols can specify the use
of CDE (or simply Basic Serialization).
For instance, it allows the specification of a floating point data item
as "float16"; this means the application data model only foresees data
that can be encoded as <xref target="IEEE754"/> binary16.
Note that specifying "float32" for a floating point data item enables
all floating point values that can be represented as binary32; this
includes values that can also be represented as binary16 and that will
be so represented in Basic Serialization.</t>
      <t><xref target="RFC8610"/> defines control operators to indicate that the contents of a
byte string carries a CBOR-encoded data item (<tt>.cbor</tt>) or a sequence of
CBOR-encoded data items (<tt>.cborseq</tt>).</t>
      <t>CDDL specifications may want to specify that the data items should be
encoded in Common CBOR Deterministic Encoding.
The present specification adds two CDDL control operators that can be used
for this.</t>
      <t>The control operators <tt>.cde</tt> and <tt>.cdeseq</tt> are exactly like <tt>.cbor</tt> and
<tt>.cborseq</tt> except that they also require the encoded data item(s) to be
encoded according to CDE.</t>
      <t>For example, a byte string of embedded CBOR that is to be encoded
according to CDE can be formalized as:</t>
      <artwork><![CDATA[
leaf = #6.24(bytes .cde any)
]]></artwork>
      <t>More importantly, if the encoded data item also needs to have a
specific structure, this can be expressed by the right-hand side
(instead of using the most general CDDL type <tt>any</tt> here).</t>
      <t>(Note that the <tt>.cdeseq</tt> control operator does not enable specifying
different deterministic encoding requirements for the elements of the
sequence.  If a use case for such a feature becomes known, it could be
added, or the CBOR sequence could be constructed with <tt>.join</tt> (<xref section="3.1" sectionFormat="of" target="RFC9741"/>).)</t>
      <t>Obviously, specifications that document ALDR rules can define related control operators
that also embody the processing required by those ALDR rules,
and are encouraged to do so.</t>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The security considerations in Section <xref target="RFC8949" section="10" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> apply.
The use of deterministic encoding can mitigate issues arising out of
the use of non-preferred serializations specially crafted by an attacker.
However, this effect only accrues if the decoder actually checks that
deterministic encoding was applied correctly.
More generally, additional security properties of deterministic
encoding can rely on this check being performed properly.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFCXXXX with the RFC
number of this RFC and remove this note.</cref></t>
      <t>This document requests IANA to register the contents of
<xref target="tbl-iana-reqs"/> into the registry
"<xref section="CDDL Control Operators" relative="#cddl-control-operators" sectionFormat="bare" target="IANA.cddl"/>" of the
<xref target="IANA.cddl"/> registry group:</t>
      <table anchor="tbl-iana-reqs">
        <name>New control operators to be registered</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">.cde</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.cdeseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </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>
        <reference anchor="IANA.cddl" target="https://www.iana.org/assignments/cddl">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing EDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies and uses registry-based extension points, using one
   to support text representations of epoch-based dates/times and of IP
   addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present
   // revision (–16) addresses the first half of the WGLC comments,
   // except for the issues around the specific way how to best achieve
   // pluggable ABNF grammars for application-extensions.  It is
   // intended for use as a reference document for the mid-WGLC CBOR WG
   // interim meeting on 2025-01-08.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-16"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-det">
          <front>
            <title>CBOR: On Deterministic Encoding and Representation</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="21" month="January" year="2025"/>
            <abstract>
              <t>   CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
   its Section 4.2.  The present document provides additional
   information about use cases, deployment considerations, and
   implementation choices for Deterministic Encoding and Representation.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-det-04"/>
        </reference>
        <reference anchor="I-D.mcnally-deterministic-cbor">
          <front>
            <title>dCBOR: A Deterministic CBOR Application Profile</title>
            <author fullname="Wolf McNally" initials="W." surname="McNally">
              <organization>Blockchain Commons</organization>
            </author>
            <author fullname="Christopher Allen" initials="C." surname="Allen">
              <organization>Blockchain Commons</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="7" month="February" year="2025"/>
            <abstract>
              <t>   The purpose of determinism is to ensure that semantically equivalent
   data items are encoded into identical byte streams.  CBOR (RFC 8949)
   defines "Deterministically Encoded CBOR" in its Section 4.2, but
   leaves some important choices up to the application developer.  The
   CBOR Common Deterministic Encoding (CDE) Internet Draft builds on
   this by specifying a baseline for application profiles that wish to
   implement deterministic encoding with CBOR.  The present document
   provides an application profile "dCBOR" that can be used to help
   achieve interoperable deterministic encoding based on CDE for a
   variety of applications wishing an even narrower and clearly defined
   set of choices.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mcnally-deterministic-cbor-12"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers and
   implementers of CBOR libraries and of the applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is a rather drafty initial revision, pieced together from
   // various components, so it has a higher level of redundancy than
   // ultimately desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-01"/>
        </reference>
        <reference anchor="UAX-15" target="https://unicode.org/reports/tr15/">
          <front>
            <title>Unicode Normalization Forms</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
          <refcontent>Unicode Standard Annex</refcontent>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9581">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Time, Duration, and Period</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="B. Gamari" initials="B." surname="Gamari"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <date month="August" year="2024"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR, RFC 8949) 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.</t>
              <t>In CBOR, one point of extensibility is the definition of CBOR tags. RFC 8949 defines two tags for time: CBOR tag 0 (RFC 3339 time as a string) and tag 1 (POSIX time as int or float). Since then, additional requirements have become known. The present document defines a CBOR tag for time that allows a more elaborate representation of time, as well as related CBOR tags for duration and time period. This document is intended as the reference document for the IANA registration of the CBOR tags defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9581"/>
          <seriesInfo name="DOI" value="10.17487/RFC9581"/>
        </reference>
        <reference anchor="RFC9679">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) Key Thumbprint</title>
            <author fullname="K. Isobe" initials="K." surname="Isobe"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <date month="December" year="2024"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a CBOR Object Signing and Encryption (COSE) Key. It specifies which fields within the COSE Key structure are included in the cryptographic hash computation, the process for creating a canonical representation of these fields, and how to hash the resulting byte sequence. The resulting hash value, referred to as a "thumbprint", can be used to identify or select the corresponding key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9679"/>
          <seriesInfo name="DOI" value="10.17487/RFC9679"/>
        </reference>
        <referencegroup anchor="STD96" target="https://www.rfc-editor.org/info/std96">
          <reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052">
            <front>
              <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
              <author fullname="J. Schaad" initials="J." surname="Schaad"/>
              <date month="August" year="2022"/>
              <abstract>
                <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
                <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="96"/>
            <seriesInfo name="RFC" value="9052"/>
            <seriesInfo name="DOI" value="10.17487/RFC9052"/>
          </reference>
          <reference anchor="RFC9338" target="https://www.rfc-editor.org/info/rfc9338">
            <front>
              <title>CBOR Object Signing and Encryption (COSE): Countersignatures</title>
              <author fullname="J. Schaad" initials="J." surname="Schaad"/>
              <date month="December" year="2022"/>
              <abstract>
                <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. CBOR Object Signing and Encryption (COSE) defines a set of security services for CBOR. This document defines a countersignature algorithm along with the needed header parameters and CBOR tags for COSE. This document updates RFC 9052.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="96"/>
            <seriesInfo name="RFC" value="9338"/>
            <seriesInfo name="DOI" value="10.17487/RFC9338"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="RFC9741">
          <front>
            <title>Concise Data Definition Language (CDDL): Additional Control Operators for the Conversion and Processing of Text</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point. RFCs have added to this extension point in both an application-specific and a more general way.</t>
              <t>The present document defines a number of additional generally applicable control operators for text conversion (bytes, integers, printf-style formatting, and JSON) and for an operation on text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9741"/>
          <seriesInfo name="DOI" value="10.17487/RFC9741"/>
        </reference>
        <reference anchor="I-D.bormann-dispatch-modern-network-unicode">
          <front>
            <title>Modern Network Unicode</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="2" month="March" year="2025"/>
            <abstract>
              <t>   BCP18 (RFC 2277) has been the basis for the handling of character-
   shaped data in IETF specifications for more than a quarter of a
   century now.  It singles out UTF-8 (STD63, RFC 3629) as the “charset”
   that MUST be supported, and pulls in the Unicode standard with that.

   Based on this, RFC 5198 both defines common conventions for the use
   of Unicode in network protocols and caters for the specific
   requirements of the legacy protocol Telnet.  In applications that do
   not need Telnet compatibility, some of the decisions of RFC 5198 can
   be cumbersome.

   The present specification defines “Modern Network Unicode” (MNU),
   which is a form of RFC 5198 Network Unicode that can be used in
   specifications that require the exchange of plain text over networks
   and where just mandating UTF-8 may not be sufficient, but there is
   also no desire to import all of the baggage of RFC 5198.

   As characters are used in different environments, MNU is defined in a
   one-dimensional (1D) variant that is useful for identifiers and
   labels, but does not use a structure of text lines.  A 2D variant is
   defined for text that is a sequence of text lines, such as plain text
   documents or markdown format.  Additional variances of these two base
   formats can be used to tailor MNU to specific areas of application.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-dispatch-modern-network-unicode-06"/>
        </reference>
      </references>
    </references>
    <?line 447?>

<section anchor="models">
      <name>Information Model, Data Model and Serialization</name>
      <t>This appendix is informative.</t>
      <t>For a good understanding of this document, it is helpful to understand the difference between an information model, a data model and serialization.</t>
      <table anchor="layers">
        <name>A three-layer model of information representation</name>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">Abstraction Level</th>
            <th align="left">Example</th>
            <th align="left">Standards</th>
            <th align="left">Implementation Representation</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Information Model</td>
            <td align="left">Top level; conceptual</td>
            <td align="left">The temperature of something</td>
            <td align="left"> </td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="left">Data Model</td>
            <td align="left">Realization of information in data structures and data types</td>
            <td align="left">A floating-point number representing the temperature</td>
            <td align="left">CDDL</td>
            <td align="left">API input to CBOR encoder library, output from CBOR decoder library</td>
          </tr>
          <tr>
            <td align="left">Serialization</td>
            <td align="left">Actual bytes encoded for transmission</td>
            <td align="left">Encoded CBOR of a floating-point number</td>
            <td align="left">CBOR</td>
            <td align="left">Encoded CBOR in memory or for transmission</td>
          </tr>
        </tbody>
      </table>
      <t>CBOR does not provide facilities for expressing information models.
They are mentioned here for completeness and to provide some context.</t>
      <t>CBOR defines a palette of basic data items that can be grouped into
data types such as the usual integer or floating-point numbers, text or
byte strings, arrays and maps, and certain special "simple values"
such as Booleans and <tt>null</tt>.
Extended data types may be constructed from these basic types.
These basic and extended types are used to construct the data model of a CBOR protocol.
One notation that is often used for describing the data model of a CBOR protocol is CDDL <xref target="RFC8610"/>.
The various types of data items in the data model are serialized per RFC 8949 <xref target="STD94"/> to create encoded CBOR data items.</t>
      <section anchor="data-model-encoding-variants-and-interoperability-with-partial-implementations">
        <name>Data Model, Encoding Variants and Interoperability with Partial Implementations</name>
        <t>In contrast to JSON, CBOR-related documents explicitly discuss the data model separately from its serialization.
Both JSON and CBOR allow variation in the way some data items can be serialized:</t>
        <ul spacing="normal">
          <li>
            <t>In JSON, the number 1 can be serialized in several different ways
(<tt>1</tt>, <tt>0.1e1</tt>, <tt>1.0</tt>, <tt>100e-2</tt>) — while it may seem obvious to use
<tt>1</tt> for this case, this is less clear for <tt>1000000000000000000000000000000</tt> vs. <tt>1e+30</tt> or <tt>1e30</tt>.
(As its serialization also doubles as a human-readable interface, JSON
also allows the introduction of blank space for readability.)
The lack of an agreed data model for JSON led to the need for a complementary
specification documenting an interoperable subset <xref target="RFC7493"/>.</t>
          </li>
          <li>
            <t>The CBOR standard addresses constrained environments, both by being
concise and by limiting variation, but also by conversely allowing
certain data items in the data model to be serialized in multiple
ways, which may ease implementation on low-resource platforms.
On the other hand, constrained environments may further save
resources by only partially implementing the decoder functionality,
e.g., by not implementing all those variations.</t>
          </li>
        </ul>
        <t>To deal with this encoding variation provided for certain data items,
CBOR defines a <em>preferred serialization</em> (Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
<em>Partial CBOR implementations</em> are more likely to interoperate if their
encoder uses preferred serialization and the decoder implements
decoding at least the preferred serialization as well.
A specific protocol for a constrained application may specify
restrictions that allow, e.g., some fields to be of fixed length,
guaranteeing interoperability even with partial implementations
optimized for this application.</t>
        <t>Another encoding variation is provided by indefinite-length encoding
for strings, arrays, and maps, which enables these to be streamed
without knowing their length upfront (Section <xref target="RFC8949" section="3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
For applications that do not perform streaming of this kind, variation
can be reduced (and often performance improved) by only allowing
definite-length encoding.
The present document coins the term <em>basic serialization</em> for combining
definite-length-only with preferred encoding, further reducing the
variation that a decoder needs to deal with.
The Common Deterministic Encoding, CDE, finally combines basic
serialization with a deterministic ordering of entries in a map
(<xref target="tab-constraints"/>).</t>
        <t>Partial implementations of a representation format are quite common in
embedded applications.
Protocols for embedded applications often reduce the footprint of an
embedded JSON implementation by explicitly restricting the breadth of
the data model, e.g., by not using floating point numbers with 64 bits
of precision or by not using floating point numbers at all.
These data-model-level restrictions do not get in the way of using
complete implementations ("generic encoders/decoders", Section <xref target="RFC8949" section="5.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
(Note that applications may need to complement deterministic
encoding with decisions on the deterministic representation of
application data into CBOR data items, see <xref target="aldr"/>.)</t>
        <t>The increasing constraints on encoding (unconstrained, preferred,
basic, CDE) are orthogonal to data-model-level data definitions as
provided by <xref target="RFC8610"/>.
To be useful in all applications, these constraints have been defined
for all possible data items, covering the full range of values offered
by CBOR's data types.
This ensures that these serialization constraints can be applied to
any CBOR protocol, without requiring protocol-specific modifications
to generic encoder/decoder implementations.</t>
      </section>
    </section>
    <section anchor="aldr">
      <name>Application-level Deterministic Representation</name>
      <t>This appendix is informative.</t>
      <t>CBOR application protocols are agreements about how to use CBOR for a
specific application or set of applications.</t>
      <t>For a CBOR protocol to provide deterministic representation, both the
encoding and application layer must be deterministic.
While CDE ensures determinism at the encoding layer, requirements at
the application layer may also be necessary.</t>
      <t>Application protocols make representation decisions in order to
constrain the variety of ways in which some aspect of the information
model could be represented in the CBOR data model for the application.
For instance, there are several CBOR tags that can be used to
represent a time stamp (such as tag 0, 1, 1001), each with some specific
properties.</t>
      <aside>
        <t>For example, an application protocol that needs to represent birthdate/times could specify:</t>
        <ul spacing="normal">
          <li>
            <t>At the sender’s convenience, the birthdate/time <bcp14>MAY</bcp14>
  be sent either in epoch date format (as in tag 1) or string date
  format (as in tag 0).</t>
          </li>
          <li>
            <t>The receiver <bcp14>MUST</bcp14> decode both formats.</t>
          </li>
        </ul>
        <t>While this specification is interoperable, it lacks determinism.
There is variability in the application layer akin to variability in the CBOR encoding layer when CDE is not required.</t>
        <t>To make this example application layer specification deterministic,
allow only one date format (or at least be deterministic when there is
a choice, e.g., by specifying string format for leap seconds only).</t>
      </aside>
      <t>Application protocols that need to represent a timestamp typically
choose a specific tag and further constrain its use where necessary
(e.g., tag 1001 was designed to cover a wide variety of applications
<xref target="RFC9581"/>).
Where no tag is available, the application protocol can design its own
format for some application data.
Even where a tag is available, the application data can choose to use
its definitions without actually encoding the tag (e.g., by using its
content in specific places in an "unwrapped" form).</t>
      <t>Another source of application layer variability comes from the variety
of number types CBOR offers.
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>
      <aside>
        <t>For instance, CWT <xref target="RFC8392"/> defines an application data type "NumericDate" which
(as an application-level rule) is formed by "unwrapping" tag 1 (see
Sections <xref target="RFC8392" section="2" sectionFormat="bare"/> and <xref target="RFC8392" section="5" sectionFormat="bare"/> of <xref target="RFC8392"/>).
CWT does stop short of using deterministic encoding.
A hypothetical deterministic variant of CWT would need to make an
additional ALDR rule for NumericDate, as
the definition of tag 1 allows both integer and floating point numbers
(Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), which allows multiple
application-level representations of integral numbers.
These application rules may choose to only ever use integers, or to always
use integers when the numeric value can be represented as such without
loss of information, or to always use floating point numbers, or some
of these for some application data and different ones for other
application data.</t>
      </aside>
      <t>Applications that require Deterministic Representation, and that
derive CBOR data items from application data without maintaining a
record of which choices are to be made when representing these
application data, generally make rules for these choices as part of
the application protocol.
In this document, we speak about these choices as Application-level
Deterministic Representation Rules (ALDR rules for short).</t>
      <aside>
        <t>As an example, <xref target="RFC9679"/> is intended to derive a (deterministic)
thumbprint from a COSE key <xref target="STD96"/>.
<xref section="4" sectionFormat="of" target="RFC9679"/> provides the rules that are used to construct a
deterministic application-level representation (ALDR rules).
Only certain data from a COSE key are selected to be included in that
ALDR, and, where the COSE can choose multiple representations of
semantically equivalent application data, the ALDR rules choose one of
them, potentially requiring a conversion (<xref section="4.2" sectionFormat="of" target="RFC9679"/>):</t>
        <blockquote>
          <t>Note: [<xref target="RFC9052"/>] supports both compressed and uncompressed point
   representations.  For interoperability, implementations adhering to
   this specification <bcp14>MUST</bcp14> use the uncompressed point representation.
   Therefore, the y-coordinate is expressed as a bstr.  If an
   implementation uses the compressed point representation, it <bcp14>MUST</bcp14>
   first convert it to the uncompressed form for the purpose of
   thumbprint calculation.</t>
        </blockquote>
      </aside>
      <t>CDE provides for encoding commonality between different applications
of CBOR once these application-level choices have been made.
It can be useful for an application or a group of applications to
document their choices aimed at deterministic representation of
application data in a general way, constraining the set of data items
handled (<em>exclusions</em>, e.g., no compressed point representations) and
defining further mappings (<em>reductions</em>, e.g., conversions to
uncompressed form)
that help the application(s) get by with the exclusions.
This can be done in the application protocol specification (as in
<xref target="RFC9679"/>) or as a separate document.</t>
      <aside>
        <t>An early example of a separate document is the dCBOR specification
<xref target="I-D.mcnally-deterministic-cbor"/>.
dCBOR specifies the use of CDE together with some application-level
rules, i.e., an ALDR ruleset, such as a requirement for all text
strings to be in Unicode Normalization Form C (NFC) <xref target="UAX-15"/> — this
specific requirement is an example for an <em>exclusion</em> of non-NFC data
at the application level, and it invites implementing a <em>reduction</em> by
routine normalization of text strings.</t>
      </aside>
      <t>ALDR rules (including rules specified in a ALDR ruleset document) enable
simply using implementations of the common CDE; they do not
"fork" CBOR in the sense of requiring distinct generic encoder/decoder
implementations for each application.</t>
      <t>An implementation of specific ALDR rules combined with a CDE
implementation produces well-formed,
deterministically encoded CBOR according to <xref target="STD94"/>, and existing
generic CBOR decoders will therefore be able to decode it, including
those that check for Deterministic Encoding ("CDE decoders", see also
<xref target="impcheck"/>).
Similarly, generic CBOR encoders will be able to produce valid CBOR
that can be ingested by an implementation that enforces an application's
ALDR rules if the encoder was handed data model level information
from an application that simply conformed to those ALDR rules.</t>
      <t>Please note that the separation between standard CBOR processing and
the processing required by the ALDR rules is a conceptual one:
Instead of employing generic encoders/decoders, both ALDR rule
processing and standard CBOR processing can be combined into a specialized
encoder/decoder specifically designed for a particular set of ALDR
rules.</t>
      <t>ALDR rules are intended to be used in conjunction with an
application, which typically will naturally use a subset of the CBOR generic
data model, which in turn
influences which subset of the ALDR rules is used by the specific application
(in particular if the application simply references a more general
ALDR ruleset document).
As a result, ALDR rules themselves place no direct
requirement on what minimum subset of CBOR is implemented.
For instance, a set of ALDR rules might include rules for the
processing of floating point values, but there is no requirement that
implementations of that set of ALDR rules support floating point
numbers (or any other kind of number, such as arbitrary precision
integers or 64-bit negative integers) when they are used with
applications that do not use them.</t>
    </section>
    <section anchor="impcheck">
      <name>Implementers' Checklists</name>
      <t>This appendix is informative.
It provides brief checklists that implementers can use to check their
implementations.
It uses <xref target="RFC2119"/> language, specifically the keyword <bcp14>MUST</bcp14>, to highlight
the specific items that implementers may want to check.
It does not contain any normative mandates.
This appendix is informative.</t>
      <t>Notes:</t>
      <ul spacing="normal">
        <li>
          <t>This is largely a restatement of parts of Section <xref target="RFC8949" section="4" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
The purpose of the restatement is to aid the work of implementers,
not to redefine anything.  </t>
          <t>
Preferred Serialization Encoders and Decoders as well as CDE
Encoders and Decoders have certain properties that are expressed
using <xref target="RFC2119"/> keywords in this appendix.</t>
        </li>
        <li>
          <t>Duplicate map keys are never valid in CBOR at all (see
list item "Major type 5" in Section <xref target="RFC8949" section="3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>)
no matter what sort of serialization is used.
Of the various strategies listed in Section <xref target="RFC8949" section="5.6" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
detecting duplicates and handling them as an error instead of
passing invalid data to the application is the most robust one;
achieving this level of robustness is a mark of quality of
implementation.</t>
        </li>
        <li>
          <t>Preferred serialization and CDE only affect serialization.
They do not place any requirements, exclusions, mappings or such on
the data model level.
ALDR rules such as the ALDR ruleset defined by dCBOR are different as they can affect
the data model by restricting some values and ranges.</t>
        </li>
        <li>
          <t>CBOR decoders in general (as opposed to "CDE decoders" specifically
advertised as supporting CDE)
are not required to check for preferred
serialization or CDE and reject inputs that do not fulfill
their requirements.
However, in an environment that employs deterministic encoding,
employing non-checking CBOR decoders negates many of its benefits.
Decoder implementations that advertise "support" for preferred
serialization or CDE need to check the encoding and reject
input that is not encoded to the encoding specification in use.
Again, ALDR rules such as those in dCBOR may pose additional
requirements, such as requiring rejection of non-conforming inputs.  </t>
          <t>
If a generic decoder needs to be used that does not "support" CDE, a
simple (but somewhat clumsy) way to check for proper CDE encoding is
to re-encode the decoded data and check for bit-to-bit equality with
the original input.</t>
        </li>
      </ul>
      <section anchor="ps">
        <name>Preferred Serialization</name>
        <t>In the following, the abbreviation "ai" will be used for the 5-bit
additional information field in the first byte of an encoded CBOR data
item, which follows the 3-bit field for the major type.</t>
        <section anchor="pse">
          <name>Preferred Serialization Encoders</name>
          <ol spacing="normal" type="1"><li>
              <t>Shortest-form encoding of the argument <bcp14>MUST</bcp14> be used for all major
types.
Major type 7 is used for floating-point and simple values; floating
point values have its specific rules for how the shortest form is
derived for the argument.
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 <bcp14>MUST</bcp14> be encoded in the same byte as the
major type.</t>
                </li>
                <li>
                  <t>24 to 255 and -25 to -256 <bcp14>MUST</bcp14> be encoded only with an additional
byte (ai = 0x18).</t>
                </li>
                <li>
                  <t>256 to 65535 and -257 to -65536 <bcp14>MUST</bcp14> be encoded only with an
additional two bytes (ai = 0x19).</t>
                </li>
                <li>
                  <t>65536 to 4294967295 and -65537 to -4294967296 <bcp14>MUST</bcp14> be encoded
only with an additional four bytes (ai = 0x1a).</t>
                </li>
              </ul>
            </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 <bcp14>MUST</bcp14> be
emitted.
That is, encoders <bcp14>MUST</bcp14> support half-precision and
single-precision floating point.</t>
                </li>
                <li>
                  <t><xref target="IEEE754"/> Infinites and NaNs, and thus NaN payloads, <bcp14>MUST</bcp14> be
supported, to the extent possible on the platform.      </t>
                  <t>
As with all floating point numbers, Infinites and NaNs <bcp14>MUST</bcp14> be
encoded in the shortest of double, single or half precision that
preserves the value:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Positive and negative infinity and zero <bcp14>MUST</bcp14> be represented in
half-precision floating point.</t>
                    </li>
                    <li>
                      <t>For NaNs, the value to be preserved includes the sign bit,
the quiet bit, and the NaN payload (whether zero or non-zero).
The shortest form is obtained by removing the rightmost N bits of the
payload, where N is the difference in the number of bits in the
significand (mantissa representation) between the original format
and the shortest format.
This trimming is performed only (preserves the value only) if all the
rightmost bits removed are zero.
(This will always represent a double or single quiet NaN with a zero
NaN payload in a half-precision quiet NaN.)</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>If tags 2 and 3 are supported, the following apply:  </t>
              <ul spacing="normal">
                <li>
                  <t>Positive integers from 0 to 2^64 - 1 <bcp14>MUST</bcp14> be encoded as a type 0 integer.</t>
                </li>
                <li>
                  <t>Negative integers from -(2^64) to -1 <bcp14>MUST</bcp14> be encoded as a type 1 integer.</t>
                </li>
                <li>
                  <t>Leading zeros <bcp14>MUST NOT</bcp14> be present in the byte string content of tag 2 and 3.</t>
                </li>
              </ul>
              <t>
(This also applies to the use of tags 2 and 3 within other tags,
such as 4 or 5.)</t>
            </li>
          </ol>
        </section>
        <section anchor="psd">
          <name>Preferred Serialization Decoders</name>
          <t>There are no special requirements that CBOR decoders need to meet to
be a Preferred Serialization Decoder.
Partial decoder implementations need to pay attention to at least the
following requirements:</t>
          <ol spacing="normal" type="1"><li>
              <t>Decoders <bcp14>MUST</bcp14> accept shortest-form encoded arguments (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
            </li>
            <li>
              <t>If arrays or maps are supported, definite-length arrays or maps <bcp14>MUST</bcp14> be accepted.</t>
            </li>
            <li>
              <t>If text or byte strings are supported, definite-length text or byte
strings <bcp14>MUST</bcp14> be accepted.</t>
            </li>
            <li>
              <t>If floating-point numbers are supported, the following apply:  </t>
              <ul spacing="normal">
                <li>
                  <t>Half-precision values <bcp14>MUST</bcp14> be accepted.</t>
                </li>
                <li>
                  <t>Double- and single-precision values <bcp14>SHOULD</bcp14> 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
<bcp14>MUST</bcp14> be accepted.</t>
                </li>
                <li>
                  <t>Infinites and NaNs, and thus NaN payloads, <bcp14>MUST</bcp14> be accepted and
presented to the application (not necessarily in the platform
number format, if that doesn't support those values).</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If big numbers (tags 2 and 3) are supported, type 0 and type 1 integers <bcp14>MUST</bcp14>
be accepted where a tag 2 or 3 would be accepted.  Leading zero bytes
in the tag content of a tag 2 or 3 <bcp14>MUST</bcp14> be ignored.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="bs">
        <name>Basic Serialization</name>
        <t>Basic Serialization further restricts Preferred Serialization by not
using indefinite length encoding.
A CBOR encoder can choose to employ Basic Serialization in order to
reduce the variability that needs to be handled by decoders,
potentially maximizing interoperability with partial (e.g.,
constrained) CBOR decoder implementations.</t>
        <section anchor="bse">
          <name>Basic Serialization Encoders</name>
          <t>The Basic Serialization Encoder requirements are identical to the
Preferred Serialization Encoder requirements, with the following additions:</t>
          <ol spacing="normal" type="1"><li>
              <t>If maps or arrays are emitted, they <bcp14>MUST</bcp14> use definite-length
encoding (never indefinite-length).</t>
            </li>
            <li>
              <t>If text or byte strings are emitted, they <bcp14>MUST</bcp14> use definite-length
encoding (never indefinite-length).</t>
            </li>
          </ol>
        </section>
        <section anchor="bsd">
          <name>Basic Serialization Decoders</name>
          <t>The Basic Serialization Decoder requirements are identical to the
Preferred Serialization Decoder requirements.</t>
        </section>
      </section>
      <section anchor="cde">
        <name>CDE</name>
        <section anchor="cde-encoders">
          <name>CDE Encoders</name>
          <ol spacing="normal" type="1"><li>
              <t>CDE encoders <bcp14>MUST</bcp14> only emit CBOR fulfilling the basic
serialization rules (<xref target="bse"/>).</t>
            </li>
            <li>
              <t>CDE encoders <bcp14>MUST</bcp14> sort maps by the CBOR representation of the map
key.
The sorting is byte-wise lexicographic order of the encoded map
key data items.</t>
            </li>
            <li>
              <t>CDE encoders <bcp14>MUST</bcp14> generate CBOR that fulfills basic validity
(Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).  Note that this includes not
emitting duplicate keys in a major type 5 map as well as emitting
only valid UTF-8 in major type 3 text strings.  </t>
              <t>
Note also that CDE does NOT include a requirement for Unicode
normalization <xref target="UAX-15"/>; <xref section="C" sectionFormat="of" target="I-D.bormann-dispatch-modern-network-unicode"/> contains some
rationale that went into not requiring routine use of Unicode normalization
processes.</t>
            </li>
          </ol>
        </section>
        <section anchor="cde-decoders">
          <name>CDE Decoders</name>
          <t>The term "CDE Decoder" is a shorthand for a CBOR decoder that
advertises <em>supporting</em> CDE (see the start of this appendix).</t>
          <ol spacing="normal" type="1"><li>
              <t>CDE decoders <bcp14>MUST</bcp14> follow the rules for preferred (and thus basic)
serialization decoders (<xref target="psd"/>).</t>
            </li>
            <li>
              <t>CDE decoders <bcp14>MUST</bcp14> check for ordering map keys and for basic
validity of the CBOR encoding (see Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which includes a check against duplicate map keys
and invalid UTF-8).  </t>
              <t>
To be called a CDE decoder, it <bcp14>MUST NOT</bcp14> present to the application
a decoded data item that fails one of these checks (except maybe via
special diagnostic channels with no potential for confusion with a
correctly CDE-decoded data item).</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="examples">
      <name>Encoding Examples</name>
      <t>The following three tables provide examples of CDE-encoded CBOR data
items, each giving Diagnostic Notation (EDN <xref target="I-D.ietf-cbor-edn-literals"/>), the encoded data
item in hexadecimal, and a comment.</t>
      <t>Implementers that want to use these examples as test input may be
interested in the file <tt>example-table-input.csv</tt> in the github
repository <tt>cbor-wg/draft-ietf-cbor-cde</tt>.</t>
      <section anchor="integer-value-examples">
        <name>Integer Value Examples</name>
        <table anchor="tab-example-int">
          <name>Integer Value Examples</name>
          <thead>
            <tr>
              <th align="left">EDN</th>
              <th align="left">CBOR (hex)</th>
              <th align="left">Comment</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">00</td>
              <td align="left">Smallest unsigned immediate int</td>
            </tr>
            <tr>
              <td align="left">-1</td>
              <td align="left">20</td>
              <td align="left">Largest negative immediate int</td>
            </tr>
            <tr>
              <td align="left">23</td>
              <td align="left">17</td>
              <td align="left">Largest unsigned immediate int</td>
            </tr>
            <tr>
              <td align="left">-24</td>
              <td align="left">37</td>
              <td align="left">Smallest negative immediate int</td>
            </tr>
            <tr>
              <td align="left">24</td>
              <td align="left">1818</td>
              <td align="left">Smallest unsigned one-byte int</td>
            </tr>
            <tr>
              <td align="left">-25</td>
              <td align="left">3818</td>
              <td align="left">Largest negative one-byte int</td>
            </tr>
            <tr>
              <td align="left">255</td>
              <td align="left">18ff</td>
              <td align="left">Largest unsigned one-byte int</td>
            </tr>
            <tr>
              <td align="left">-256</td>
              <td align="left">38ff</td>
              <td align="left">Smallest negative one-byte int</td>
            </tr>
            <tr>
              <td align="left">256</td>
              <td align="left">190100</td>
              <td align="left">Smallest unsigned two-byte int</td>
            </tr>
            <tr>
              <td align="left">-257</td>
              <td align="left">390100</td>
              <td align="left">Largest negative two-byte int</td>
            </tr>
            <tr>
              <td align="left">65535</td>
              <td align="left">19ffff</td>
              <td align="left">Largest unsigned two-byte int</td>
            </tr>
            <tr>
              <td align="left">-65536</td>
              <td align="left">39ffff</td>
              <td align="left">Smallest negative two-byte int</td>
            </tr>
            <tr>
              <td align="left">65536</td>
              <td align="left">1a00010000</td>
              <td align="left">Smallest unsigned four-byte int</td>
            </tr>
            <tr>
              <td align="left">-65537</td>
              <td align="left">3a00010000</td>
              <td align="left">Largest negative four-byte int</td>
            </tr>
            <tr>
              <td align="left">4294967295</td>
              <td align="left">1affffffff</td>
              <td align="left">Largest unsigned four-byte int</td>
            </tr>
            <tr>
              <td align="left">-4294967296</td>
              <td align="left">3affffffff</td>
              <td align="left">Smallest negative four-byte int</td>
            </tr>
            <tr>
              <td align="left">4294967296</td>
              <td align="left">1b0000000100000000</td>
              <td align="left">Smallest unsigned eight-byte int</td>
            </tr>
            <tr>
              <td align="left">-4294967297</td>
              <td align="left">3b0000000100000000</td>
              <td align="left">Largest negative eight-byte int</td>
            </tr>
            <tr>
              <td align="left">18446744073709551615</td>
              <td align="left">1bffffffffffffffff</td>
              <td align="left">Largest unsigned eight-byte int</td>
            </tr>
            <tr>
              <td align="left">-18446744073709551616</td>
              <td align="left">3bffffffffffffffff</td>
              <td align="left">Smallest negative eight-byte int</td>
            </tr>
            <tr>
              <td align="left">18446744073709551616</td>
              <td align="left">c249010000000000000000</td>
              <td align="left">Smallest unsigned bigint</td>
            </tr>
            <tr>
              <td align="left">-18446744073709551617</td>
              <td align="left">c349010000000000000000</td>
              <td align="left">Largest negative bigint</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="floating-point-value-examples">
        <name>Floating Point Value Examples</name>
        <table anchor="tab-example-flt">
          <name>Floating Point Value Examples</name>
          <thead>
            <tr>
              <th align="left">EDN</th>
              <th align="left">CBOR (hex)</th>
              <th align="left">Comment</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0.0</td>
              <td align="left">f90000</td>
              <td align="left">Zero</td>
            </tr>
            <tr>
              <td align="left">-0.0</td>
              <td align="left">f98000</td>
              <td align="left">Negative zero</td>
            </tr>
            <tr>
              <td align="left">Infinity</td>
              <td align="left">f97c00</td>
              <td align="left">Infinity</td>
            </tr>
            <tr>
              <td align="left">-Infinity</td>
              <td align="left">f9fc00</td>
              <td align="left">-Infinity</td>
            </tr>
            <tr>
              <td align="left">NaN</td>
              <td align="left">f97e00</td>
              <td align="left">NaN</td>
            </tr>
            <tr>
              <td align="left">NaN</td>
              <td align="left">f97e01</td>
              <td align="left">NaN with non-zero payload</td>
            </tr>
            <tr>
              <td align="left">5.960464477539063e-8</td>
              <td align="left">f90001</td>
              <td align="left">Smallest positive 16-bit float (subnormal)</td>
            </tr>
            <tr>
              <td align="left">0.00006097555160522461</td>
              <td align="left">f903ff</td>
              <td align="left">Largest positive subnormal 16-bit float</td>
            </tr>
            <tr>
              <td align="left">0.00006103515625</td>
              <td align="left">f90400</td>
              <td align="left">Smallest non-subnormal positive 16-bit float</td>
            </tr>
            <tr>
              <td align="left">65504.0</td>
              <td align="left">f97bff</td>
              <td align="left">Largest positive 16-bit float</td>
            </tr>
            <tr>
              <td align="left">1.401298464324817e-45</td>
              <td align="left">fa00000001</td>
              <td align="left">Smallest positive 32-bit float (subnormal)</td>
            </tr>
            <tr>
              <td align="left">1.1754942106924411e-38</td>
              <td align="left">fa007fffff</td>
              <td align="left">Largest positive subnormal 32-bit float</td>
            </tr>
            <tr>
              <td align="left">1.1754943508222875e-38</td>
              <td align="left">fa00800000</td>
              <td align="left">Smallest non-subnormal positive 32-bit float</td>
            </tr>
            <tr>
              <td align="left">3.4028234663852886e+38</td>
              <td align="left">fa7f7fffff</td>
              <td align="left">Largest positive 32-bit float</td>
            </tr>
            <tr>
              <td align="left">5.0e-324</td>
              <td align="left">fb0000000000000001</td>
              <td align="left">Smallest positive 64-bit float (subnormal)</td>
            </tr>
            <tr>
              <td align="left">2.225073858507201e-308</td>
              <td align="left">fb000fffffffffffff</td>
              <td align="left">Largest positive subnormal 64-bit float</td>
            </tr>
            <tr>
              <td align="left">2.2250738585072014e-308</td>
              <td align="left">fb0010000000000000</td>
              <td align="left">Smallest non-subnormal positive 64-bit float</td>
            </tr>
            <tr>
              <td align="left">1.7976931348623157e+308</td>
              <td align="left">fb7fefffffffffffff</td>
              <td align="left">Largest positive 64-bit float</td>
            </tr>
            <tr>
              <td align="left">-0.0000033333333333333333</td>
              <td align="left">fbbecbf647612f3696</td>
              <td align="left">Arbitrarily selected number</td>
            </tr>
            <tr>
              <td align="left">10.559998512268066</td>
              <td align="left">fa4128f5c1</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">10.559998512268068</td>
              <td align="left">fb40251eb820000001</td>
              <td align="left">Next in succession</td>
            </tr>
            <tr>
              <td align="left">295147905179352830000.0</td>
              <td align="left">fa61800000</td>
              <td align="left">2<sup>68</sup> (diagnostic notation truncates precision)</td>
            </tr>
            <tr>
              <td align="left">2.0</td>
              <td align="left">f94000</td>
              <td align="left">Number without a fractional part</td>
            </tr>
            <tr>
              <td align="left">-5.960464477539063e-8</td>
              <td align="left">f98001</td>
              <td align="left">Largest negative subnormal 16-bit float</td>
            </tr>
            <tr>
              <td align="left">-5.960464477539062e-8</td>
              <td align="left">fbbe6fffffffffffff</td>
              <td align="left">Adjacent to largest negative subnormal 16-bit float</td>
            </tr>
            <tr>
              <td align="left">-5.960464477539064e-8</td>
              <td align="left">fbbe70000000000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">-5.960465188081798e-8</td>
              <td align="left">fab3800001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">0.0000609755516052246</td>
              <td align="left">fb3f0ff7ffffffffff</td>
              <td align="left">Adjacent to largest subnormal 16-bit float</td>
            </tr>
            <tr>
              <td align="left">0.000060975551605224616</td>
              <td align="left">fb3f0ff80000000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">0.000060975555243203416</td>
              <td align="left">fa387fc001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">0.00006103515624999999</td>
              <td align="left">fb3f0fffffffffffff</td>
              <td align="left">Adjacent to smallest 16-bit float</td>
            </tr>
            <tr>
              <td align="left">0.00006103515625000001</td>
              <td align="left">fb3f10000000000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">0.00006103516352595761</td>
              <td align="left">fa38800001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">65503.99999999999</td>
              <td align="left">fb40effbffffffffff</td>
              <td align="left">Adjacent to largest 16-bit float</td>
            </tr>
            <tr>
              <td align="left">65504.00000000001</td>
              <td align="left">fb40effc0000000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">65504.00390625</td>
              <td align="left">fa477fe001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">1.4012984643248169e-45</td>
              <td align="left">fb369fffffffffffff</td>
              <td align="left">Adjacent to smallest subnormal 32-bit float</td>
            </tr>
            <tr>
              <td align="left">1.4012984643248174e-45</td>
              <td align="left">fb36a0000000000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">1.175494210692441e-38</td>
              <td align="left">fb380fffffbfffffff</td>
              <td align="left">Adjacent to largest subnormal 32-bit float</td>
            </tr>
            <tr>
              <td align="left">1.1754942106924412e-38</td>
              <td align="left">fb380fffffc0000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">1.1754943508222874e-38</td>
              <td align="left">fb380fffffffffffff</td>
              <td align="left">Adjacent to smallest 32-bit float</td>
            </tr>
            <tr>
              <td align="left">1.1754943508222878e-38</td>
              <td align="left">fb3810000000000001</td>
              <td align="left">-"-</td>
            </tr>
            <tr>
              <td align="left">3.4028234663852882e+38</td>
              <td align="left">fb47efffffdfffffff</td>
              <td align="left">Adjacent to largest 32-bit float</td>
            </tr>
            <tr>
              <td align="left">3.402823466385289e+38</td>
              <td align="left">fb47efffffe0000001</td>
              <td align="left">-"-</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="failing-examples">
        <name>Failing Examples</name>
        <table anchor="tab-example-bad">
          <name>Failing Examples</name>
          <thead>
            <tr>
              <th align="left">EDN</th>
              <th align="left">CBOR (hex)</th>
              <th align="left">Comment</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">{"b":0,"a":1}</td>
              <td align="left">a2616200616101</td>
              <td align="left">Incorrect map key ordering</td>
            </tr>
            <tr>
              <td align="left">255</td>
              <td align="left">1900ff</td>
              <td align="left">Integer not in preferred encoding</td>
            </tr>
            <tr>
              <td align="left">-18446744073709551617</td>
              <td align="left">c34a00010000000000000000</td>
              <td align="left">Bigint with leading zero bytes</td>
            </tr>
            <tr>
              <td align="left">10.5</td>
              <td align="left">fa41280000</td>
              <td align="left">Not in shortest encoding</td>
            </tr>
            <tr>
              <td align="left">NaN</td>
              <td align="left">fa7fc00000</td>
              <td align="left">Not in shortest encoding</td>
            </tr>
            <tr>
              <td align="left">65536</td>
              <td align="left">c243010000</td>
              <td align="left">Integer value too small for bigint</td>
            </tr>
            <tr>
              <td align="left">(_ h'01', h'0203')</td>
              <td align="left">5f4101420203ff</td>
              <td align="left">Indefinite length encoding</td>
            </tr>
            <tr>
              <td align="left">(Not CBOR)</td>
              <td align="left">f818</td>
              <td align="left">Simple values 24..31 not in use</td>
            </tr>
            <tr>
              <td align="left">(Not CBOR)</td>
              <td align="left">fc</td>
              <td align="left">Reserved (ai = 28..30)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <ol spacing="compact" type="1"><li>
          <t><xref target="tab-constraints">Constraints on the Serialization of CBOR</xref></t>
        </li>
        <li>
          <t><xref target="tbl-iana-reqs">New control operators to be registered</xref></t>
        </li>
        <li>
          <t><xref target="layers">A three-layer model of information representation</xref></t>
        </li>
        <li>
          <t><xref target="tab-example-int">Integer Value Examples</xref></t>
        </li>
        <li>
          <t><xref target="tab-example-flt">Floating Point Value Examples</xref></t>
        </li>
        <li>
          <t><xref target="tab-example-bad">Failing Examples</xref></t>
        </li>
      </ol>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>An early version of this document was based on the work of <contact fullname="Wolf McNally"/> and <contact fullname="Christopher Allen"/> as documented in <xref target="I-D.mcnally-deterministic-cbor"/>, which
serves as an example for an ALDR ruleset document.
We would like to explicitly acknowledge that this work has
contributed greatly to shaping the concept of a CBOR Common
Deterministic Encoding and the use of ALDR rules/rulesets on top of that.
<contact fullname="Mikolai Gütschow"/> proposed adding <xref target="choi"/>.
<contact fullname="Anders Rundgren"/> provided most of the initial text that turned into
<xref target="examples"/>.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="L." surname="Lundblade" fullname="Laurence Lundblade">
        <organization>Security Theory LLC</organization>
        <address>
          <email>lgl@securitytheory.com</email>
        </address>
      </contact>
      <t>Laurence provided most of the text that became <xref target="models"/> and <xref target="impcheck"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
