<?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.6.39 (Ruby 3.2.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-cbor-dcbor-02" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.5 -->
  <front>
    <title abbrev="CBOR Profiles">Common CBOR Deterministic Encoding and Application Profiles</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-dcbor-02"/>
    <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="August" day="17"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <abstract>
      <?line 95?>

<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 discusses a
Common CBOR Deterministic Encoding Profile that can be shared by a
large set of applications with potentially diverging detailed
requirements.
The concept of Application Profiles is layered on top of the
Common CBOR Deterministic Encoding Profile and can address those
more application specific requirements.
The document defines the application profile "Gordian dCBOR" as an
example of an application profile built on the Common CBOR
Deterministic Encoding 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 115?>

<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 discusses a
Common CBOR Deterministic Encoding Profile that can be shared by a
large set of applications with potentially diverging detailed
requirements.
The concept of Application Profiles is layered on top of the
Common CBOR Deterministic Encoding Profile and can address those
more application specific requirements.
The document defines the application profile "Gordian dCBOR" as an
example of an application profile built on the Common CBOR
Deterministic Encoding Profile.</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>Common CBOR Deterministic Encoding Profile</name>
      <t><xref section="4.2.1" sectionFormat="of" target="STD94"/> defines <em>Core Deterministic Encoding
Requirements</em> for CBOR.
It mandates to keep with what are only recommendations for Preferred
Encoding for regular CBOR encoders.
It adds mandates for definite-length encoding and for 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 <xref section="4.2.3" sectionFormat="of" target="STD94"/>), or (as many applications of CBOR do today) deterministic
encoding is not used at all.</t>
      <t>The core requirements are designed, however, 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><xref section="4.2.2" sectionFormat="of" 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., tag 2/3 extend the range of basic major
types 0/1 in a seamless way.
<xref section="4.2.2" sectionFormat="of" 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 Encoding (<xref section="3.4.3" sectionFormat="of" target="STD94"/>).</t>
      <ol spacing="normal" type="1" group="1"><li>The Common CBOR Deterministic Encoding Profile 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 (<xref section="3.4.3" sectionFormat="of" target="STD94"/>) of tag 2 and 3 (i.e., no leading zeros).</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 Common CBOR Deterministic Encoding Profile 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.
<xref section="4.2.2" sectionFormat="of" target="STD94"/> presents a number of choices, which need to
be made to obtain a Common CBOR Deterministic Encoding Profile.
Specifically (in the order of the bullet list at the end of <xref section="4.2.2" sectionFormat="of" target="STD94"/>):</t>
      <ol spacing="normal" type="1" group="1"><li>Besides the mandated use of preferred encoding, 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.</li>
        <li>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).</li>
        <li>There is no special handling of NaN values, except that the
preferred encoding rules also apply to NaNs with payloads, using
the canonical encoding of NaNs as defined in <xref target="IEEE754"/>.
Typically, most applications that employ NaNs in their storage and
communication interfaces will only use the NaN with payload 0,
which encodes as 0xf97e00.</li>
        <li>There is no special handling of subnormal values.</li>
        <li>The Common CBOR Deterministic Encoding Profile does not presume
equivalence of floating point values with other representation
(e.g., tag 4/5) with basic floating point values.</li>
      </ol>
      <t>The main intent here is to preserve the basic generic data model, so
application profiles can make their own decisions.  For an example of
that, see <xref target="dcbor-num"/>.</t>
      <t>While <xref target="I-D.rundgren-deterministic-cbor"/> is a relatively terse document that is not always easy
to interpret, to this author its intent appears to be aligned with
that of the Common CBOR Deterministic Encoding Profile defined here.</t>
    </section>
    <section anchor="application-profiles">
      <name>Application Profiles</name>
      <t>The dCBOR Application Profile specifies the use of Deterministic
Encoding as defined in <xref section="4.2" sectionFormat="of" target="STD94"/> (see also <xref target="I-D.bormann-cbor-det"/> for more
information) together with some application-level rules.
As an example, the rules for Gordian dCBOR <xref target="I-D.mcnally-deterministic-cbor"/> are specified
in this section.</t>
      <t>The application-level rules specified by an Application Profile are
based on the same Common CBOR Deterministic Encoding Profile; they do
not "fork" CBOR.</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.
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: Both Application Profile processing and standard CBOR processing
can be combined into a special dCBOR/CBOR encoder/decoder.</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 places no direct requirement on what
subset of CBOR is implemented.
For instance, while the dCBOR application profile defines rules for
the processing of floating point values, there is no requirement that
dCBOR implementations 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 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 the Common CBOR Deterministic Encoding Profile.
Gordian dCBOR also requires dCBOR decoders to reject CBOR data items
that were not deterministically encoded.</t>
        <t>Beyond the Common CBOR Deterministic Encoding Profile, 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 valid ranges of
integers, 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>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>.</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 show here intact and possibly
adding equivalences as needed for newly allowed values.
This requires further discussion.</t>
      </section>
    </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, or with the dCBOR
application profile applied as well.
This specification adds four 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>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>
      <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>seq</tt> control operators do 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>
    </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>Implementation Location: <xref target="bc-dcbor-ts"/></li>
            <li>Primary Maintainer:</li>
            <li>Languages: TypeScript (transpiles to JavaScript)</li>
            <li>Coverage:</li>
            <li>Testing:</li>
            <li>Licensing:</li>
          </ul>
        </section>
        <section anchor="swift">
          <name>Swift</name>
          <ul spacing="normal">
            <li>Implementation Location: <xref target="BCSwiftDCBOR"/></li>
            <li>Primary Maintainer:</li>
            <li>Languages: Swift</li>
            <li>Coverage:</li>
            <li>Testing:</li>
            <li>Licensing: BSD-2-Clause-Patent</li>
          </ul>
        </section>
        <section anchor="rust">
          <name>Rust</name>
          <ul spacing="normal">
            <li>Implementation Location: <xref target="bc-dcbor-rust"/></li>
            <li>Primary Maintainer:</li>
            <li>Languages: Rust</li>
            <li>Coverage:</li>
            <li>Testing:</li>
            <li>Licensing: Custom</li>
          </ul>
        </section>
        <section anchor="ruby">
          <name>Ruby</name>
          <ul spacing="normal">
            <li>Implementation Location: <xref target="cbor-dcbor"/></li>
            <li>Primary Maintainer: Carsten Bormann</li>
            <li>Languages: Ruby</li>
            <li>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.</li>
            <li>Testing:
Also available at <eref target="https://cbor.me">https://cbor.me</eref></li>
            <li>Licensing: Apache-2.0</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">.cde</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.cdeseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <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>
        <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="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>
        <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>
        <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.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.rundgren-deterministic-cbor">
          <front>
            <title>Deterministically Encoded CBOR (D-CBOR)</title>
            <author fullname="Anders Rundgren" initials="A." surname="Rundgren">
              <organization>Independent</organization>
            </author>
            <date day="16" month="August" year="2023"/>
            <abstract>
              <t>   This document describes a deterministic encoding scheme for CBOR
   intended for usage in high-end computing platforms like mobile
   phones, Web browsers, and Web servers.  In addition to enhancing
   interoperability, deterministic encoding also enables performing
   cryptographic operations like signing "raw" CBOR data items,
   something which otherwise would require wrapping such data in byte
   strings, or introduce dependencies on non-standard canonicalization
   procedures.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-rundgren-deterministic-cbor-17"/>
        </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="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 532?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t><xref target="dcbor"/> of 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>
      <contact initials="A." surname="Rundgren" fullname="Anders Rundgren">
        <organization>Independent</organization>
        <address>
          <postal>
            <city>Montpellier</city>
            <country>France</country>
          </postal>
          <email>anders.rundgren.net@gmail.com</email>
          <uri>https://www.linkedin.com/in/andersrundgren/</uri>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61c63YbyXH+30/RgX4EcIDhVVqJe/FSpNZWjkQpojaOs16H
jZkG2OZgBp4LQaxMnzxEHiA/8iTJm+RJ8lVV91xAQFptvOesCMz0dFdXV311
HUwmE3V7oo+UqlyV2hN9li8WeabPnr95p89tZYuFy1xZuVi/yOI8cdlcmyzR
p8tl6mJTOYx9W+Qzl9pSmem0sJiNH26uJnmcmQWmTgozqybTvFiYLJvE+DBJ
+N/UVLasFKaz87xYn2h7t1RlVVizONEvX7z/TqkE905UnGelzcq6PNFVUVtl
MOREDzrElEzdO2vSyXu3sAO1youbeZHXSyFL3dg1LiUnSt3arMacWvvbg7M8
i11p9XOXmWKt30z/ZOMKcy0Li1Ur2exr47LKZiaLLS/14g7fSl55SAuMBphx
YVyKCWlz3zpbzaK8mNP1uauu6yndMdN8L7HVQClTV9d5QXRM8L/WLsPuziL9
XPjE14R/Z6YosVjvDiY+0d9n7tYWpav+578q/bywCwx6/68veQCx0VYn+m1e
VjMTX+ujo/3j432+F7sKzJYH5EKeYJ3zyeHTo8fP/JU6q+hIfmNp0TVfXF7n
Gcb9w/GzyfHhweTw4OnkydGzwwO+aWXztMNvq58cbV3RwVWFm9YV73QSdvS7
PJ3p1/GFSdN12I7J3E/MalCW5vFNfA2Oe7Esuyus8PC39M8C8oUJojhfdOY+
uy4gt/ny2hb6NE1t9tkLxO0M5tvUzewKx2dSExfg28Zqp1mCE9Dv6iyZF1vX
eokRS4t/sqrD/NdgzNKmqbNFn9/fFSRiXXIMLxEVfokos9W3c7olpOC/unAn
+rqqluXJ3t5qtYpSl91Y6CyN2HPZnkwRZthTKiNRqiA9JH+X78+fHZ/wTBPs
HsLLn78+0e++O3v67Jgk4uWLFy++eOxHVaaYk2yFJZ210Nw0L2xEH+no96D9
NcSr2nv6xZMnh4ciVR5raDJ9WYEqUyR6lhf6uzQHOdl88jaHmulTcPp6YYE+
/FirKqBQRJ+m4O8MEHpm0lKYVtrC2dJls1zG67BacqKxgcnh/sEzf+P8zcsT
fbAfHRzsP9ujUWBERPejlmbiwJODfbAlSVLiw+nFaUSfASSKVunw8eXkPOqj
HJgU2IrPfogXW7rboiw/gFH8XF64OQZPY4+TVXnSZd/gofhuQDYD8fAPg4Q+
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
ev5HAnjA4f7hUbcYp3oGL1L/BxaVRhMxSwAA

-->

</rfc>
