<?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.18 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-cde-03" category="bcp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="CBOR CDE">CBOR Common Deterministic Encoding (CDE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cde-03"/>
    <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="2024" month="July" day="09"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <abstract>
      <?line 58?>

<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) Profile that can be shared by a
large set of applications with potentially diverging detailed
requirements.</t>
      <t>This document also introduces the concept of Application Profiles,
which are layered on top of the CBOR CDE Profile and can address
more application specific requirements.
Application Profiles are defined in separate documents.</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 77?>

<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) Profile that can be shared by a
large set of applications with potentially diverging detailed
requirements.</t>
      <t>This document also introduces the concept of Application Profiles,
which are layered on top of the CBOR CDE Profile and can address
more application specific requirements.
Application Profiles are defined in separate documents.
<xref target="I-D.mcnally-deterministic-cbor"/> is an example for such a document.</t>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <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 BCP 14 <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="dep">
      <name>CBOR Common Deterministic Encoding Profile (CDE)</name>
      <t>This specification defines the <em>CBOR Common Deterministic Encoding
Profile</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>In many cases, CBOR provides more than one way to encode a data item,
but also provides a recommendation for a <em>Preferred Serialization</em>.
The <em>CoRE Deterministic Encoding Requirements</em> generally pick the
preferred serializations as mandatory; they also pick additional choices
such as definite-length encoding.
Finally, it defines a map ordering based on lexicographic ordering of
the (deterministically) encoded map keys.</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 slowly, 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 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>The CBOR Common Deterministic Encoding Profile (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 on the tag contents may
be hard to do 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 this Profile.</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, which need to
be made to obtain a CBOR Common Deterministic Encoding Profile (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>There is no special handling of NaN values, except that the
preferred serialization rules also apply to NaNs with payloads, using
the canonical encoding of NaNs as defined in <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 payload.
Further clarifying <xref target="IEEE754"/>, the CBOR encoding uses a leading bit
of 1 to encode a quiet NaN; encoding of signaling NaN is <bcp14>NOT
RECOMMENDED</bcp14> but is achieved by using a leading bit of 0.  </t>
          <t>
Typically, most applications that employ NaNs in their storage and
communication interfaces will only use the 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>The CBOR Common Deterministic Encoding Profile does not presume
equivalence of basic floating point values with floating point
values using other representations (e.g., tag 4/5).</t>
        </li>
      </ol>
      <t>The main intent here is to preserve the basic generic data model, so
applications (or Application Profiles, see <xref target="application-profiles"/>) can
make their own decisions within that data model.
E.g., an application (profile) can decide that it only ever allows a
single NaN value that would encoded as 0xf97e00, so a CDE
implementation focusing on this application (profile) would not need to
provide processing for other NaN values.
Basing the definition of both CDE and Application Profiles 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 documents encoding decisions
for byte strings carrying embedded CBOR.</t>
    </section>
    <section anchor="application-profiles">
      <name>Application Profiles</name>
      <t>While the CBOR Common Deterministic Encoding Profile (CDE) provides
for commonality between different applications of CBOR, it is useful
to further constrain the set of data items handled in a group of
applications (<em>exclusions</em>) and to define further mappings
(<em>reductions</em>) that help the applications in such a group get by with
the exclusions.</t>
      <t>For example, the dCBOR Application Profile specifies the use of
Deterministic Encoding as defined in Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> (see also
<xref target="I-D.bormann-cbor-det"/> for more information) together with some application-level rules.
See <xref target="I-D.mcnally-deterministic-cbor"/> for a definition of the dCBOR Application Profile that
makes use of CDE.</t>
      <t>In general, the application-level rules specified by an Application Profile are
based on the shared CBOR Common Deterministic Encoding Profile; they do
not "fork" CBOR in the sense of requiring distinct generic
encoder/decoder implementations.</t>
      <t>An Application Profile 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 processed by Application Profile implementations, if
handed Application Profile conforming data model level information
from an application.</t>
      <t>Please note that the separation between standard CBOR processing and
the processing required by the Application Profile is a conceptual
one: Instead of employing generic encoders/decoders, both Application
Profile processing and standard CBOR processing
can be combined into a encoder/decoder specifically designed for the
Application Profile.</t>
      <t>An Application Profile is intended to be used in conjunction with an
application, which typically will use a subset of the CBOR generic
data model, which in turn
influences which subset of the application profile is used.
As a result, an Application Profile itself places no direct
requirement on what minimum subset of CBOR is implemented.
For instance, an application profile might define rules for the
processing of floating point values, but there is no requirement that
implementations of that Application Profile 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="cddl-support">
      <name>CDDL support</name>
      <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.
This 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
in Common CBOR Deterministic Encoding.</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>.cborseq</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.)</t>
      <t>Obviously, Application Profiles can define similar control operators
that also embody the processing required by the Application Profile,
and are encouraged to do so.</t>
    </section>
    <section anchor="security-considerations">
      <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="iana-considerations">
      <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 <xref target="IANA.cddl"/>:</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="http://www.iana.org/assignments/cddl">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="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">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.bormann-cbor-det">
          <front>
            <title>CBOR: On Deterministic Encoding</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="3" month="March" year="2024"/>
            <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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-det-02"/>
        </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>
            <date day="10" month="June" year="2024"/>
            <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-10"/>
        </reference>
      </references>
    </references>
    <?line 329?>

<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>
        </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.
Application profiles such as dCBOR are different as they can affect
the data model by restricting some values and ranges.</t>
        </li>
        <li>
          <t>CBOR decoders in general are not required to check for preferred
serialization or CDE and reject inputs that do not do not fulfill
their requirements.
However, in an environment that employs deterministic encoding, this
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, application profiles such as 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="preferred-serialization">
        <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 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>
            <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.
Positive and negative infinity and zero <bcp14>MUST</bcp14> be represented in
half-precision floating point.</t>
                </li>
                <li>
                  <t>NaNs, and thus NaN payloads <bcp14>MUST</bcp14> be supported.      </t>
                  <t>
As with all floating point numbers, NaNs with payloads <bcp14>MUST</bcp14> be
reduced to the shortest of double, single or half precision that
preserves the NaN payload.
The reduction is performed by removing the rightmost N bits of the
payload, where N is the difference in the number of bits in the
significand (mantissa) between the original format and the
reduced format.
The reduction is performed only (preserves the value only) if all the
rightmost bits removed are zero.
(This will always reduce a double or single quiet NaN with a zero
NaN payload to a half-precision quiet NaN.)</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="psd">
          <name>Preferred Serialization Decoders</name>
          <ol spacing="normal" type="1"><li>
              <t>Decoders <bcp14>MUST</bcp14> accept shortest-form encoded arguments.</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>NaNs, and thus NaN payloads, <bcp14>MUST</bcp14> be accepted.</t>
                </li>
              </ul>
            </li>
          </ol>
        </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 preferred
serialization rules (<xref target="pse"/>).</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>
            </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 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>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>An earlier version of this document was based on the work of Wolf
McNally and Christopher Allen as documented in <xref target="I-D.mcnally-deterministic-cbor"/>; more
recent revisions of that document now make use of the present document
and the concept of Application Profile.
We would like to explicitly acknowledge that this work has
contributed greatly to shaping the concept of a CBOR Common
Deterministic Encoding and Application Profiles on top of that.</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 the text that became <xref target="impcheck"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
