<?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.2 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-cbor-dcbor-04" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="dCBOR">The CDE-based Application Profile dCBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-dcbor-04"/>
    <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="2023" month="November" day="05"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <abstract>
      <?line 87?>

<t>CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
its Section 4.2, providing some flexibility for application specific
decisions.
The CBOR Common Deterministic Encoding (CDE) Profile provides a more
detail common base for Deterministic Encoding, facilitating it be
offered as a selectable feature of generic encoders, as well as
the concept of Application Profiles that are layered on top of CDE.
This document defines the application profile "dCBOR" as an
example of such an application profile.</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-bormann-cbor-dcbor/"/>.
      </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/cabo/det"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<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.
The CBOR Common Deterministic Encoding (CDE) Profile provides a more
detail common base for Deterministic Encoding, facilitating it be
offered as a selectable feature of generic encoders, as well as
the concept of Application Profiles that are layered on top of CDE.
This document defines the application profile "dCBOR" as an
example of such an application profile.</t>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The definitions of <xref target="STD94"/> and the Common Deterministic Encoding (CDE)
Profile <xref target="I-D.bormann-cbor-cde"/> apply.</t>
        <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="dcbor">
      <name>Gordian dCBOR</name>
      <t>Gordian dCBOR <xref target="I-D.mcnally-deterministic-cbor"/> provides an application profile that
requires encoders to produce valid CBOR in deterministic encoding as
defined in CDE).
Gordian dCBOR also requires dCBOR decoders to reject CBOR data items
that were not deterministically encoded.</t>
      <t>Beyond CDE, dCBOR imposes
certain limitations on the CBOR basic generic data model.
Some items that can be represented in the CBOR basic generic data
model are entirely outlawed by this application profile.
Other items are represented by what are considered equivalent data
items by the dCBOR equivalence model, so a recipient application might
receive data that may not be the same data in the CBOR equivalence
model as the ones the generating application produced.</t>
      <t>These restrictions mainly are about numeric values, which are therefore
the subject of the main subsection of this section.</t>
      <section anchor="removing-simple-values">
        <name>Removing Simple Values</name>
        <t>Only the three simple values <tt>false</tt> (0xf4), <tt>true</tt> (0xf5), and <tt>null</tt>
(0xf6) are allowed at the application level; the remaining 253 values
must be rejected.</t>
      </section>
      <section anchor="removing-integer-values">
        <name>Removing Integer Values</name>
        <t>Only the integer values in range [<tt>-2</tt><sup><tt>63</tt></sup>,
<tt>2</tt><sup><tt>64</tt></sup><tt>-1</tt>] can be expressed in dCBOR ("basic dCBOR integers").
Note that the range is asymmetric, with only 2<sup>63</sup> negative
values, but 2<sup>64</sup> unsigned (non-negative) values, creating an
(approximately) 64.6 bit integer.</t>
        <t>This maps to a choice between a platform 64-bit two's complement
signed integer (often called int64) and a 64-bit unsigned integer (uint64).
(Specific applications will, of course, further restrict ranges of
integers that are considered valid for the application, based on their
position and semantics in the CBOR data item.)</t>
      </section>
      <section anchor="dcbor-num">
        <name>Numeric Reduction of Floating-Point Values</name>
        <t>dCBOR implementations that do support floating point numbers <bcp14>MUST</bcp14>
perform the following two reductions of numeric values when
constructing CBOR data items:</t>
        <ol spacing="normal" type="1"><li>
            <t>When representing integral floating point values (floating point
values with a zero fractional part), check whether the
mathematically identical value can be represented as a dCBOR
integer value, i.e., is in the range [<tt>-2</tt><sup><tt>63</tt></sup>,
<tt>2</tt><sup><tt>64</tt></sup><tt>-1</tt>] given above.
If that is the case, convert the integral floating point
to that mathematically identical integer value before encoding it.
(Deterministic Encoding will then ensure the shortest length encoding
is used.)
This means that if a floating point value has a non-zero fractional part, or an
exponent that takes it out of the given range of basic dCBOR integers, the
original floating point value is used for encoding.
(Specifically, conversion to a bignum is never considered.)  </t>
            <t>
This also means that the three representations of a zero number in CBOR
(0, 0.0, -0.0 in diagnostic notation) are all reduced to the basic
integer 0 (with preferred encoding 0x00).  </t>
            <t>
Note that this reduction can turn valid maps into invalid ones, as it
can create duplicate keys, e.g., for:  </t>
            <sourcecode type="cbor-diag"><![CDATA[
{
   10: "integer ten",
   10.0: "floating ten"
}
]]></sourcecode>
            <t>
This means that, at the application level, the application <bcp14>MUST</bcp14>
prevent the creation of maps that would turn invalid in dCBOR
processing.</t>
          </li>
          <li>
            <t>In addition, before encoding, represent all <tt>NaN</tt> values by using
the quiet <tt>NaN</tt> value having the half-width CBOR representation
<tt>0xf97e00</tt>.</t>
          </li>
        </ol>
        <t>dCBOR-based applications <bcp14>MUST</bcp14> accept these "reduced" numbers in place
of the original value, e.g., a dCBOR-based application that expects a
floating point value needs to accept a basic dCBOR integer in its
place (and, if needed, convert it to a floating point value for its
own further processing).</t>
        <t>dCBOR-based applications <bcp14>MUST NOT</bcp14> accept numbers that have not been
reduced as specified in this section, except maybe by making the
unreduced numbers available for their diagnostic value when there has
been an explicit request to do so.
This is similar to a checking flag mentioned in Section 5.1 (API
Considerations) of <xref target="I-D.bormann-cbor-det"/> being set by default.</t>
      </section>
    </section>
    <section anchor="extensibility">
      <name>Extensibility</name>
      <t><xref target="I-D.mcnally-deterministic-cbor"/> does not discuss extensibility.
A meaningful way to handle extensibility in this application profile
would be to lift value range restrictions, keeping the
profile-specific equivalence rules shown here intact and possibly
adding equivalences as needed for newly allowed values.</t>
      <t>This subsection presents two speculative extensions of dCBOR, called
dCBOR-wide1 and dCBOR-wide2, to point out different objectives that
can lead the development of an extension.</t>
      <section anchor="wide1">
        <name>dCBOR-wide1</name>
        <t>This speculative extension of dCBOR attempts to meet two objectives:</t>
        <ol spacing="normal" type="1" group="w1"><li>
            <t>All instances that meet dCBOR are also instances of dCBOR-wide1;
due to the nature of deterministic serialization this also means
that dCBOR-wide1 instances that only use application data model
values that are allowed by dCBOR are also dCBOR instances.</t>
          </li>
          <li>
            <t>The range of integers that can be provided by an application and
can be interchanged as exact numbers is
expanded to [<tt>-2</tt><sup><tt>127</tt></sup>, <tt>2</tt><sup><tt>128</tt></sup><tt>-1</tt>],
now also covering the types i128 and u128 in Rust <xref target="i128"/><xref target="u128"/>.</t>
          </li>
        </ol>
        <t>This extension is achieved by simply removing the integers in the
extended range from the exclusion range of dCBOR.
The numeric reduction rule is not changed, so it still applies only to
integral-valued floating-point numbers in the range
[<tt>-2</tt><sup><tt>63</tt></sup>, <tt>2</tt><sup><tt>64</tt></sup><tt>-1</tt>].</t>
        <t>Examples for the application-to-CDE mapping of dCBOR-wide1 are shown
in <xref target="tab-wide1"/>.
In the dCBOR column, items that are not excluded in dCBOR are marked
✓, items that are excluded in dCBOR and therefore are new in
dCBOR-wide1 are marked 👎.</t>
        <table anchor="tab-wide1">
          <name>Speculative "dCBOR-wide1" application profile</name>
          <thead>
            <tr>
              <th align="left">Application data   Numeric reduction (if any)   Encoding via CDE</th>
              <th align="left">dCBOR?</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0</tt> <br/>  <tt>—</tt> <br/> <tt>00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt> <br/>  <tt>0</tt> <br/> <tt>00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt> <br/>  <tt>0</tt> <br/> <tt>00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>4.0</tt> <br/>  <tt>4</tt> <br/> <tt>04</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-4.0</tt> <br/>  <tt>-4</tt> <br/> <tt>23</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.0e+19</tt> <br/>  <tt>10000000000000000000</tt> <br/> <tt>1B8AC7230489E80000</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-1.0e+19</tt> <br/>  <tt>—</tt> <br/> <tt>FBC3E158E460913D00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>10000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>1B8AC7230489E80000</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-10000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>3B8AC7230489E7FFFF</tt></td>
              <td align="left">👎 <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.0e+38</tt> <br/>  <tt>—</tt> <br/> <tt>FB47D2CED32A16A1B1</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-1.0e+38</tt> <br/>  <tt>—</tt> <br/> <tt>FBC7D2CED32A16A1B1</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>100000000000000000000000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>C2504B3B4CA85A86C47A098A224000000000</tt></td>
              <td align="left">👎 <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-100000000000000000000000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>C3504B3B4CA85A86C47A098A223FFFFFFFFF</tt></td>
              <td align="left">👎 <br/></td>
            </tr>
          </tbody>
        </table>
        <t>This speculative extended profile does not meet a potential objective
number 3 that unextended dCBOR does meet:</t>
        <ol spacing="normal" type="1" group="w1"><li>
            <t>All integral-valued floating point numbers coming from an
application that fit into an integer representation allowed
by the application profile are represented as such.</t>
          </li>
        </ol>
        <t>Objective 1 prevents numeric reduction from being applied to values
that are not excluded in dCBOR but do to receive numeric reduction
there.</t>
      </section>
      <section anchor="wide2">
        <name>dCBOR-wide2</name>
        <t>The speculative dCBOR-wide2 extension of dCBOR attempts to meet
objectives 2 and 3 mentioned in <xref target="wide1"/>.  It cannot meet objective 1:
items in <xref target="tab-wide2"/> marked with a 💣 character are allows in dCBOR
but have different serializations.</t>
        <table anchor="tab-wide2">
          <name>Speculative "dCBOR-wide2" application profile</name>
          <thead>
            <tr>
              <th align="left">Application data   Numeric reduction (if any)   Encoding via CDE</th>
              <th align="left">dCBOR?</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0</tt> <br/>  <tt>—</tt> <br/> <tt>00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt> <br/>  <tt>0</tt> <br/> <tt>00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt> <br/>  <tt>0</tt> <br/> <tt>00</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>4.0</tt> <br/>  <tt>4</tt> <br/> <tt>04</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-4.0</tt> <br/>  <tt>-4</tt> <br/> <tt>23</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.0e+19</tt> <br/>  <tt>10000000000000000000</tt> <br/> <tt>1B8AC7230489E80000</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-1.0e+19</tt> <br/>  <tt>-10000000000000000000</tt> <br/> <tt>3B8AC7230489E7FFFF</tt></td>
              <td align="left">✓ <br/> 💣</td>
            </tr>
            <tr>
              <td align="left">
                <tt>10000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>1B8AC7230489E80000</tt></td>
              <td align="left">✓ <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-10000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>3B8AC7230489E7FFFF</tt></td>
              <td align="left">👎 <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.0e+38</tt> <br/>  <tt>99999999999999997748809823456034029568</tt> <br/> <tt>C2504B3B4CA85A86C4000000000000000000</tt></td>
              <td align="left">✓ <br/> 💣</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-1.0e+38</tt> <br/>  <tt>-99999999999999997748809823456034029568</tt> <br/> <tt>C3504B3B4CA85A86C3FFFFFFFFFFFFFFFFFF</tt></td>
              <td align="left">✓ <br/> 💣</td>
            </tr>
            <tr>
              <td align="left">
                <tt>100000000000000000000000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>C2504B3B4CA85A86C47A098A224000000000</tt></td>
              <td align="left">👎 <br/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>-100000000000000000000000000000000000000</tt> <br/>  <tt>—</tt> <br/> <tt>C3504B3B4CA85A86C47A098A223FFFFFFFFF</tt></td>
              <td align="left">👎 <br/></td>
            </tr>
          </tbody>
        </table>
        <t>This extension is achieved by removing the integers in the
extended range from the exclusion range of dCBOR, and by adding the
extended range to the target range of numeric reduction.</t>
      </section>
    </section>
    <section anchor="cddl-support">
      <name>CDDL support</name>
      <t>Similar to the CDDL <xref target="RFC8610"/> support in <xref target="I-D.bormann-cbor-cde"/>,
this specification adds two CDDL control operators that can be used
to specify that the data items should be
encoded in CBOR Common Deterministic Encoding (CDE), with the dCBOR
application profile applied as well.</t>
      <t>The control operators <tt>.dcbor</tt> and <tt>.dcborseq</tt> are exactly like <tt>.cde</tt> and
<tt>.cdeseq</tt> except that they also require the encoded data item(s) to
conform to the dCBOR application profile.</t>
      <t>For example, the normative comment in <xref section="3" sectionFormat="of" target="I-D.draft-mcnally-envelope-03"/>:</t>
      <artwork><![CDATA[
leaf = #6.24(bytes)  ; MUST be dCBOR
]]></artwork>
      <t>...can now be formalized as:</t>
      <artwork><![CDATA[
leaf = #6.24(bytes .dcbor any)
]]></artwork>
    </section>
    <section removeInRFC="true" anchor="implementation-status">
      <name>Implementation Status</name>
      <t>(Boilerplate as per <xref section="2.1" sectionFormat="of" target="RFC7942"/>:)</t>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -22?>
      </t>
      <section anchor="gordian-dcbor-application-profile">
        <name>Gordian dCBOR Application Profile</name>
        <section anchor="typescript">
          <name>TypeScript</name>
          <ul spacing="normal">
            <li>
              <t>Implementation Location: <xref target="bc-dcbor-ts"/></t>
            </li>
            <li>
              <t>Primary Maintainer:</t>
            </li>
            <li>
              <t>Languages: TypeScript (transpiles to JavaScript)</t>
            </li>
            <li>
              <t>Coverage:</t>
            </li>
            <li>
              <t>Testing:</t>
            </li>
            <li>
              <t>Licensing:</t>
            </li>
          </ul>
        </section>
        <section anchor="swift">
          <name>Swift</name>
          <ul spacing="normal">
            <li>
              <t>Implementation Location: <xref target="BCSwiftDCBOR"/></t>
            </li>
            <li>
              <t>Primary Maintainer:</t>
            </li>
            <li>
              <t>Languages: Swift</t>
            </li>
            <li>
              <t>Coverage:</t>
            </li>
            <li>
              <t>Testing:</t>
            </li>
            <li>
              <t>Licensing: BSD-2-Clause-Patent</t>
            </li>
          </ul>
        </section>
        <section anchor="rust">
          <name>Rust</name>
          <ul spacing="normal">
            <li>
              <t>Implementation Location: <xref target="bc-dcbor-rust"/></t>
            </li>
            <li>
              <t>Primary Maintainer:</t>
            </li>
            <li>
              <t>Languages: Rust</t>
            </li>
            <li>
              <t>Coverage:</t>
            </li>
            <li>
              <t>Testing:</t>
            </li>
            <li>
              <t>Licensing: Custom</t>
            </li>
          </ul>
        </section>
        <section anchor="ruby">
          <name>Ruby</name>
          <ul spacing="normal">
            <li>
              <t>Implementation Location: <xref target="cbor-dcbor"/></t>
            </li>
            <li>
              <t>Primary Maintainer: Carsten Bormann</t>
            </li>
            <li>
              <t>Languages: Ruby</t>
            </li>
            <li>
              <t>Coverage: Complete specification; complemented by CBOR
encoder/decoder and command line interface from <xref target="cbor-diag"/> and
deterministic encoding from <xref target="cbor-deterministic"/>.
Checking of dCBOR exclusions not yet implemented.</t>
            </li>
            <li>
              <t>Testing:
Also available at <eref target="https://cbor.me">https://cbor.me</eref></t>
            </li>
            <li>
              <t>Licensing: Apache-2.0</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</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">.dcbor</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.dcborseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="STD94">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <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>
        <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="9" month="August" year="2023"/>
            <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-01"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-cde">
          <front>
            <title>CBOR Common Deterministic Encoding (CDE)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="5" month="November" year="2023"/>
            <abstract>
              <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.

   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.  To demonstrate how Application
   Profiles can be built on the CDE, a companion document defines the
   application profile "dCBOR".

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-cde-00"/>
        </reference>
        <reference anchor="I-D.mcnally-deterministic-cbor">
          <front>
            <title>Gordian 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>
            <date day="8" month="August" year="2023"/>
            <abstract>
              <t>   CBOR (RFC 8949) defines "Deterministically Encoded CBOR" in its
   Section 4.2.  The present document provides the application profile
   "dCBOR" that can be used to help achieve interoperable deterministic
   encoding.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/BlockchainCommons/WIPs-IETF-draft-deterministic-
   cbor.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mcnally-deterministic-cbor-05"/>
        </reference>
        <reference anchor="bc-dcbor-ts" target="https://github.com/BlockchainCommons/bc-dcbor-ts">
          <front>
            <title>Blockchain Commons Deterministic CBOR ("dCBOR") for TypeScript</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BCSwiftDCBOR" target="https://github.com/BlockchainCommons/BCSwiftDCBOR">
          <front>
            <title>Blockchain Commons Deterministic CBOR ("dCBOR") for Swift</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="bc-dcbor-rust" target="https://github.com/BlockchainCommons/bc-dcbor-rust">
          <front>
            <title>Blockchain Commons Deterministic CBOR ("dCBOR") for Rust</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="cbor-dcbor" target="https://github.com/cabo/cbor-dcbor">
          <front>
            <title>PoC of the McNally/Allen "dCBOR" application-level CBOR representation rules</title>
            <author initials="C." surname="Bormann" fullname="Carsten Bormann">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="cbor-diag" target="https://github.com/cabo/cbor-diag">
          <front>
            <title>CBOR diagnostic utilities</title>
            <author initials="C." surname="Bormann" fullname="Carsten Bormann">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="cbor-deterministic" target="https://github.com/cabo/cbor-deterministic">
          <front>
            <title>cbor-deterministic gem</title>
            <author initials="C." surname="Bormann" fullname="Carsten Bormann">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.draft-mcnally-envelope-03">
          <front>
            <title>The Gordian Envelope Structured Data Format</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>
            <date day="17" month="August" year="2023"/>
            <abstract>
              <t>   Gordian Envelope specifies a structured format for hierarchical
   binary data focused on the ability to transmit it in a privacy-
   focused way, offering support for privacy as described in RFC-6973
   and human rights as described in RFC-8280.  Envelopes are designed to
   facilitate "smart documents" and have a number of unique features
   including: easy representation of a variety of semantic structures, a
   built-in Merkle-like digest tree, deterministic representation using
   CBOR, and the ability for the holder of a document to selectively
   elide specific parts of a document without invalidating the digest
   tree structure.  This document specifies the base Envelope format,
   which is designed to be extensible.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mcnally-envelope-03"/>
        </reference>
        <reference anchor="i128" target="https://doc.rust-lang.org/std/primitive.i128.html">
          <front>
            <title>Primitive Type i128</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="u128" target="https://doc.rust-lang.org/std/primitive.u128.html">
          <front>
            <title>Primitive Type u128</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 461?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document is based on the work of Wolf McNally and Christopher
Allen as documented in <xref target="I-D.mcnally-deterministic-cbor"/> and discussed in 2023 in the CBOR
working group.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="W." surname="McNally" fullname="Wolf McNally">
        <organization>Blockchain Commons</organization>
        <address>
          <email>wolf@wolfmcnally.com</email>
        </address>
      </contact>
      <contact initials="C." surname="Allen" fullname="Christopher Allen">
        <organization>Blockchain Commons</organization>
        <address>
          <email>christophera@lifewithalacrity.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
CRhCwosZ0XFNCk4YCkSnDyRu0j+uW6SOzRFc3vawil5uO+drpi7O7tTlvrwF
8jmTM4Z8Vx7sFqk7OT0j5MPOrm0YrGzs2MApRF/4U3lAcn+RNGpxQRqXS0S3
Rn3RN3VOFmLYrKXQk6WfvYVj+vFf/3lr0I4BcjIhBTAhrG/o1GuTV6Gq/vTH
f/wHLPz71rkO29mPf/jPKm+v922Pkpxkvc+PqzzqOvKpAqu+Fy4+A72r3pV6
Ns0efwqo9eMf/sV+uQLgQjcsxj7lvl6jd+/9fd2f0nnU7Duq+452EW51duve
g+GO3n2vp3/VP6oH9HvbPxWJ/snhePJ0MOyNDo/ODuXRNgNbNJuCe34yGZ71
nxyejQ56R/3h6U4S72OiTe6BHD2Y3rBJ7+lz/BA9Uq8tqQ0P71vh6OnpYHJ2
OhyM+wfj/kn/XiHdT2LyYRK7FvXgdU4GT3qjk+HJaDI+fDI+PJiMno57R4fj
wWDUGLm98p2ifPisw/tmHT63P1uz3h6rR5UfkqP7TzqXDUhhLqdIh687u2Ag
UMN9WIT8jj1PqhApgwkfKKkgVIwkqIIjjsnuh+K+yqQiYk6FiAQN34ItQwtb
dkeAjapfkC4ZmlNkkqLKVrI1kzJvSmHd5k4bd1sMmKDh5iRl1zHa5gkN5TNl
sIBDvbDLVn2bQ+c7wiBzKWmABDwGCKbC/4HYQAVwZCl8iCZHNVv0ncIcnrZg
5sDAzMGdHEI3d7bZ6wGI02lA3wEHn2E7H7q9tVFQqRcMrSotSWsRHZtDq1bo
HCDTMVHK1Eb/9Md/+ndCC1Q+w5ZVoC+vKw4kFM41a3TewqL5/we7/6vB7r3B
5p74UhNl3fizDIFHGz9Pn44OD+HcB8PRk4PecNQbHD05OHxPANrF307RbMdO
96dOvhmH6vDTikMP3JeHx78/z6g7+FDUHXwo6t6brP2iWZocT1OeK7WXHTRM
wi83/OrhWyGH61eT09OX9nTOcS7r2hmfENJDvg0VxnDx9hCPfb9ckeo6hUUc
fAwhETkMpZLD4/nKeQp4saLSWrqRutO5hlOkhsK6PoGoz+8oWZMCl2Muk9hz
h4fc6jIH1VVW5+xEByaimwt15srXNudXHlf3ruSOgHzJ9bdXJsVDsEMKHEdv
NR5CPtzP4Y/cy5RJ7RrXrTs3su1mgdXq9/J9yqnBipyNpo38dPeluud0SCTZ
sRwWVHfj+Y4ixVneQFv/HJJyuM3Lqnd3AHZ0MhFrf6Y+UY8OvMFob7ouNJhR
H0v5eGrlyUcYnufRhlLpY8p13SXFcZbovbSUyI/jtlChS4CtA2R1if9lDktl
IwL6ymYBLG7vJMViMzrW17Rp2KDGigZen9b0+vnk6dEI2OR43wJj0wEojG/y
8Rkiz0D93yZU7Nw8wZajAiqWFmkAZbC3qOzdoA3VN8dn0ZJtbkUlba5AiJ3Q
VY8s0YV7SteGxZbRXB3b+7SPGOTTPPWtPef29rNqNZ7cXZXnK3vKs8n2Rome
alv8vowpbPl5HuXCK73XY84jqjuy9iCBb53Q2ueZHCvIu0MMKsFQDl5eYWNz
Br6NCyNxZNdNu4uZw+g6Cks6BG7vL5eWq5REqlpgkqyKNVUQvUM8Yq7ncsxB
V2+7GKD0bEb+iM5s+YAAe5HwkQDV3WYytHqXoy4zQwQ8rxyKcSZg7B/TsTga
r8nk9ckCs2iF6OeyfXy5x9y1MrcQRMRT8OjTu1R+nIokqnOPLR2zxyDmti/J
9bX26eadw9A5vI5yoVrLOZX7Zxuk6OaXfgfxwxOMA1JzjhKpaqpQV3VYOfhQ
nXE5TOI60jd8PINF0ctadIDHuV1uFWaecEE5aJ6TyAGMXEFtHiCR6Kc60ZTA
Ye1ZmfCtKPJu9gYYsQrEf80WrKmASwcP6ExJFcnJoaO2LKq1hVibaR1O/eBt
Y64lJCXB1QoDMcUabM43telWAgQrqQ0dp6+sK23oplm1vIeWU1SisjZLqqlF
ckuOeNeUn3a86iroYCBXQTfvgu64iU29HjXey3GcjzZ938s0MK9H3d423sG5
u6O+dK+fXo7j1+Dwq+l8+iP1EtG+9Oc6P27QVnsFUEC+kgvgqforaKI82acx
EypTYwwTeKPZcoVYFBCi4W/ELb9w43yA0+Z7OQ9l1RB+ECvq5PLUHbiT2Mfm
uK98ql4Ie1RKf6gY6VWHh3Jn6T6EuQn60vtows90/QF+6rdt7mVm64WWTeZk
koo5wkSYr9DtyPRx47abODpz7G9uFD82V33Zxggn0H/Waj4zmdE5NYNTy3Tk
z+V6vaPuu3Pc6t/sQpV2pSb2bLaqWVSgV3ztWhdNk/ZacldqTOCpdqrwBs/s
2yw0pbfUn27szngFXK7dgddjrAG8UNIrhKp98guwcHF6UT0VWDI+H291++r3
RepOtSvYJPxmu4XfOFRnYUTvW6qVhMpMy7E/Hv0tfmp8igZ5y1TKb/bCK5Gg
3RCi0kZhwJ4SVW8AmDPxXLjlatMc8pZbaBzT2EkDjNzeFtPYhYPyweq3cClS
ZJMbrDQmWzsd7Bxwv2tQsFuj4D3G9RODji9s+/6z6iXKu7uOHJ83Wo6pnHNO
N5H553tEOC77QBLf44kBg/zk66+MbL5pPAKC3nzECVxzITaJO9c3u/KOVC7Z
iVB0yLkbvYNC8YR2eRwQBox1OOdwBvqyFTr8pMN3hjt3mzJvojcSH8UQWnrz
jVrevcZrsI68wufXZGwFrn15gA+15d6AdBj0BsPm7U2nFbE8538ADfgQnik+
AAA=

-->

</rfc>
