<?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.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mcnally-deterministic-cbor-02" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="dCBOR">Gordian dCBOR: A Deterministic CBOR Application Profile</title>
    <seriesInfo name="Internet-Draft" value="draft-mcnally-deterministic-cbor-02"/>
    <author initials="W." surname="McNally" fullname="Wolf McNally">
      <organization>Blockchain Commons</organization>
      <address>
        <email>wolf@wolfmcnally.com</email>
      </address>
    </author>
    <author initials="C." surname="Allen" fullname="Christopher Allen">
      <organization>Blockchain Commons</organization>
      <address>
        <email>christophera@lifewithalacrity.com</email>
      </address>
    </author>
    <date year="2023" month="August" day="04"/>
    <area>Applications and Real-Time</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <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.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/BlockchainCommons/WIPs-IETF-draft-deterministic-cbor"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>CBOR has many advantages over other data serialization formats. One of its strengths is specifications and guidelines for serializing data deterministically, such that multiple agents serializing the same data automatically achieve consensus on the exact byte-level form of that serialized data. This is particularly useful when data must be compared for semantic equivalence by comparing the hash of its contents.</t>
      <t>Nonetheless, determinism is an opt-in feature of <xref target="RFC8949"/>, and most existing CBOR codecs put the primary burden of correct deterministic serialization and validation of deterministic encoding during deserialization on the engineer. This document specifies a set of requirements for the application profile "dCBOR" that <bcp14>MUST</bcp14> be implemented at the codec level. These requirements include but go beyond <xref target="RFC8949"/> §4.2.</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>
      </section>
    </section>
    <section anchor="application-profile">
      <name>Application Profile</name>
      <t>The dCBOR Application Profile specifies the use of Deterministic Encoding as defined in Section 4.2 of <xref target="RFC8949"/> together with some application-level rules specified in this section.</t>
      <t>The application-level rules specified here do not "fork" CBOR. A dCBOR implementation produces well-formed, deterministically encoded CBOR according to <xref target="RFC8949"/>, 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 dCBOR if handed dCBOR conforming data model level information from an application.</t>
      <t>Note that the separation between standard CBOR processing and the processing required by the dCBOR application profile is a conceptual one: Both dCBOR processing and standard CBOR processing may be combined into a unified dCBOR/CBOR codec. The requirements in this document apply to encoding or decoding of dCBOR data, regardless of whether the codec is a unified dCBOR/CBOR codec operating in dCBOR-compliant modes, or a single-purpose dCBOR codec. Both of these are generically referred to as "dCBOR codecs" in this document.</t>
      <t>This application profile is intended to be used in conjunction with an application, which typically will use a subset of CBOR, which in turn influences which subset of the application profile is used. As a result, this application profile places no direct requirement on what subset of CBOR is implemented. For instance, 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. However, this document does place requirements on dCBOR implementations that support negative 64-bit integers and 64-bit or smaller floating point numbers.</t>
      <section anchor="base-requirements">
        <name>Base Requirements</name>
        <t>dCBOR encoders <bcp14>MUST</bcp14> only emit CBOR conforming to the requirements of <xref target="RFC8949"/> §4.2.1. To summarize:</t>
        <ul spacing="normal">
          <li>Variable-length integers <bcp14>MUST</bcp14> be as short as possible.</li>
          <li>Floating-point values <bcp14>MUST</bcp14> use the shortest form that preserves the value.</li>
          <li>Indefinite-length arrays and maps <bcp14>MUST NOT</bcp14> be used.</li>
          <li>Map keys <bcp14>MUST</bcp14> be sorted in byte-wise lexicographic order of their deterministic encodings.</li>
        </ul>
        <t>dCBOR codecs <bcp14>MUST</bcp14> validate and return errors for any CBOR that is not conformant.</t>
      </section>
      <section anchor="duplicate-map-keys">
        <name>Duplicate Map Keys</name>
        <t>Standard CBOR <xref target="RFC8949"/> defines maps with duplicate keys as invalid, but leaves how to handle such cases to the implementor (§2.2, §3.1, §5.4, §5.6). dCBOR encoders <bcp14>MUST NOT</bcp14> emit CBOR that contains duplicate map keys, and dCBOR decoders <bcp14>MUST</bcp14> reject maps with duplicate keys.</t>
      </section>
      <section anchor="numeric-reduction">
        <name>Numeric Reduction</name>
        <t>While there is no requirement that dCBOR codecs implement support for floating point numbers (CBOR major type 7), dCBOR codecs that do support them <bcp14>MUST</bcp14> reduce floating point values with a non-zero fractional part to the floating point encoding that can accurately represent it in the fewest bits. For dCBOR codecs that support floating point <xref target="IEEE754"/> binary16 <bcp14>MUST</bcp14> be supported, and is the most-preferred encoding for floating point values, followed by binary32 then binary64.</t>
        <t>This practice still produces well-formed CBOR according to the standard, and all existing generic codecs will be able to read it. It does exclude a map such as the following that would be allowed in standard CBOR from being validated as dCBOR, as <tt>10.0</tt> is an invalid numeric value in dCBOR, and using the unsigned integer value <tt>10</tt> more than once as a map key is not allowed:</t>
        <artwork><![CDATA[
{
   10: "ten",
   10.0: "floating ten"
}
]]></artwork>
        <section anchor="reduction-of-negative-zero">
          <name>Reduction of Negative Zero</name>
          <t><xref target="IEEE754"/> defines a negative zero value <tt>-0.0</tt>. dCBOR encoders that support floating point <bcp14>MUST</bcp14> reduce all negative zero values to the integer value <tt>0</tt>. dCBOR decoders <bcp14>MUST</bcp14> reject any negative zero values. Therefore with dCBOR, <tt>0.0</tt>, <tt>-0.0</tt>, and <tt>0</tt> all encode to the same canonical single-byte value <tt>0x00</tt>.</t>
        </section>
        <section anchor="reduction-of-nans-and-infinities">
          <name>Reduction of NaNs and Infinities</name>
          <t><xref target="IEEE754"/> defines the <tt>NaN</tt> (Not a Number) value <xref target="NAN"/>. This is usually divided into two types: <em>quiet NaNs</em> and <em>signalling NaNs</em>, and the sign bit is used to distinguish between these two types. The specification also includes a range of "payload" bits. These bit fields have no definite purpose and could be used to break determinism or exfiltrate data.</t>
          <t>dCBOR encoders that support floating point <bcp14>MUST</bcp14> reduce all <tt>NaN</tt> values to the binary16 quiet <tt>NaN</tt> value having the canonical bit pattern <tt>0x7e00</tt>.</t>
          <t>Similarly, encoders that support floating point <bcp14>MUST</bcp14> reduce all <tt>+INF</tt> values to the binary16 <tt>+INF</tt> having the canonical bit pattern <tt>0x7c00</tt> and likewise with <tt>-INF</tt> to <tt>0xfc00</tt>.</t>
        </section>
      </section>
      <section anchor="bit-negative-integers">
        <name>65-bit Negative Integers</name>
        <t>The largest negative integer that can be represented in 64-bit two's complement (STANDARD_NEGATIVE_INT_MAX) is -2^63 (0x8000000000000000).</t>
        <t>However, standard CBOR major type 1 can encode negative integers as low as CBOR_NEGATIVE_INT_MAX, which is -2^64 (two's complement: 0x10000000000000000, CBOR: 0x3BFFFFFFFFFFFFFFFF). Negative integers in the range [CBOR_NEGATIVE_INT_MAX ... STANDARD_NEGATIVE_INT_MAX - 1] require 65 bits of precision, and are thus not representable in typical machine-sized integers.</t>
        <t>Because of this incompatibility between standard CBOR and typical machine-size representations, dCBOR disallows encoding negative integer values in the range [CBOR_NEGATIVE_INT_MAX ... STANDARD_NEGATIVE_INT_MAX - 1]: conformant encoders <bcp14>MUST NOT</bcp14> encode these values as CBOR major type 1, and conformant decoders <bcp14>MUST</bcp14> reject these major type 1 CBOR values.</t>
      </section>
    </section>
    <section anchor="reference-implementations">
      <name>Reference Implementations</name>
      <t>This section is informative.</t>
      <t>These are single-purpose dCBOR codecs that conform to these specifications:</t>
      <ul spacing="normal">
        <li>Swift implementation <xref target="SwiftDCBOR"/></li>
        <li>Rust implementation <xref target="RustDCBOR"/></li>
        <li>TypeScript implementation <xref target="TypescriptDCBOR"/></li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document inherits the security considerations of CBOR <xref target="RFC8949"/>.</t>
      <t>Vulnerabilities regarding dCBOR will revolve around whether an attacker can find value in producing semantically equivalent documents that are nonetheless serialized into non-identical byte streams. Such documents could be used to contain malicious payloads or exfiltrate sensitive data. The ability to create such documents could indicate the failure of a dCBOR decoder to correctly validate according to this document, or the failure of the developer to properly specify or implement application protocol requirements using dCBOR. Whether these possibilities present an identifiable attack surface is a question that developers should consider.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no requests of IANA.</t>
    </section>
    <section anchor="other-approaches">
      <name>Other Approaches</name>
      <t>As of this writing the specification of deterministic CBOR beyond <xref target="RFC8949"/> is an active item before the CBOR working group. <xref target="BormannDCBOR"/> and <xref target="RundgrenDCBOR"/> are other approaches to deterministic CBOR.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE, "IEEE Standard for Floating-Point Arithmetic", IEEE Std 754-2019, DOI 10.1109/IEEESTD.2019.8766229</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </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="NAN" target="https://en.wikipedia.org/wiki/NaN">
          <front>
            <title>NaN</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SwiftDCBOR" target="https://github.com/BlockchainCommons/BCSwiftDCBOR">
          <front>
            <title>Deterministic CBOR ("dCBOR") for Swift.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RustDCBOR" target="https://github.com/BlockchainCommons/bc-dcbor-rust">
          <front>
            <title>Deterministic CBOR ("dCBOR") for Rust.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TypescriptDCBOR" target="https://github.com/BlockchainCommons/bc-dcbor-ts">
          <front>
            <title>Deterministic CBOR ("dCBOR") for Typescript.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BormannDCBOR" target="https://www.ietf.org/archive/id/draft-bormann-cbor-dcbor-00.html">
          <front>
            <title>dCBOR – an Application Profile for Use with CBOR Deterministic Encoding</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RundgrenDCBOR" target="https://www.ietf.org/archive/id/draft-rundgren-deterministc-cbor-02.html">
          <front>
            <title>Deterministically Encoded CBOR (D-CBOR)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors are grateful for the contributions of Carsten Bormann and Anders Rundgren in the CBOR working group.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/wUREgRJoCgAAA==

-->

</rfc>
