<?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.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-serialization-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="CBOR Serialization">CBOR Serialization and Determinism</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-serialization-03"/>
    <author initials="L." surname="Lundblade" fullname="Laurence Lundblade">
      <organization>Security Theory LLC</organization>
      <address>
        <email>lgl@securitytheory.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="13"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <keyword>cbor</keyword>
    <abstract>
      <?line 102?>

<t>This document defines two CBOR serializations: "ordinary serialization" and "deterministic serialization."
It also introduces the term "general serialization" to name the full, variable set of serialization options defined in <xref target="STD94"/>.
Together, these three form a complete set of serializations that cover the majority of CBOR serialization use cases.</t>
      <t>These serializations are largely compatible with those widely implemented by the CBOR community.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-serialization/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CBOR Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/draft-ietf-cbor-serialization"/>.</t>
    </note>
  </front>
  <middle>
    <?line 111?>

<section anchor="Introduction">
      <name>Introduction</name>
      <t>Background material on serialization and determinism concepts is provided in <xref target="models"/>.
Readers may wish to review this background information first.</t>
      <t>This document defines new serializations rather than attempting to clarify those in <xref target="STD94"/> (that need clarification).
This approach enables the serialization requirements to be expressed directly in normative <xref target="RFC2119"/> language, and to be consolidated in this single comprehensive specification.
This approach provides clarity and simplicity for implementers and the CBOR community over the long term.</t>
      <t>The serializations defined herein are formally new, but largely interchangeable with the way the serializations desecribed in <xref target="STD94"/> are implemented.</t>
      <t>For example, preferred serialization described in <xref target="STD94"/> is commonly implemented without support for indefinite-lengths.
Ordinary serialization is defined here is largely the same preferred serialization without indefinite-lengths, so it is largely interchangeable with what is commonly implemented.</t>
    </section>
    <section anchor="recommendations-summary">
      <name>Recommendations Summary</name>
      <t><cref anchor="to-be-removed5">This section substantially revised in -03 and hopefully close to its final form</cref></t>
      <section anchor="protocol-specifications">
        <name>Protocol Specifications</name>
        <section anchor="FrameworkProtocols">
          <name>Framework Protocols</name>
          <t>Framework protocols are those that offer a set of options and alternatives, with interoperability depending on the sender and receiver making compatible choices.
These protocols sometimes make use of profiles to define interoperability requirements for specific uses.
Framework protocols are sometimes described as toolbox or building-block protocols, reflecting their role as collections of reusable mechanisms rather than end-to-end protocols.
CWT, COSE, EAT, and CBOR itself are examples of framework protocols.</t>
          <t>It is RECOMMENDED that CBOR-based framework protocols not state serialization requirements, enabling individual uses and profiles to choose serialization to suit their environments and constraints.</t>
          <t>CBOR-based framework protocols MAY impose serialization requirements.
For example, if a protocol is never expected to be deployed in constrained environments where map sorting is too expensive, it may mandate deterministic serialization for all implementations in order to eliminate all serialization variability.</t>
          <t>There is one situation in which a framework protocol MUST require deterministic serialization, though typically limited to a specific subset of the protocol.
This requirement arises when the protocol design requires the involved parties to independently construct and serialize data to be hashed or signed, rather than transmitting the exact serialized bytes that were hashed or signed.
See <xref target="WhenDeterministic"/>.</t>
          <t>See <xref target="COSESerialization"/> for a COSE-based detailed example.</t>
        </section>
        <section anchor="EndToEndProtocols">
          <name>End-to-End Protocols</name>
          <t>End-to-end protocols are specified such that interoperability is assured when they are implemented in accordance with their specification.
When such a protocol includes optional features, they are typically selected through real-time negotiation.
Such protocols often have formal interoperability compliance programs or organize interoperability testing events (for example, "bake-offs").
TLS, HTTP, and FIDO are examples of end-to-end protocols.</t>
          <t>End-to-end protocols MUST define a serialization strategy that ensures the sender and receiver use interoperable serialization.</t>
          <t>The strategy most highly RECOMMENDED is to normatively require ordinary serialization.
If a protocol does not need to be deployed where map sorting is too expensive, requiring deterministic serialization is also RECOMMENDED.</t>
          <t>An end-to-end protocol MAY instead define its own specialized serialization (see <xref target="SpecialSerializations"/>).
In such cases, it MUST explicitly specify the permitted serialization behaviors necessary to ensure interoperability.
For example, if a sender is permitted to use indefinite-length serialization, the protocol MUST require that receivers be capable of decoding indefinite-length items.</t>
          <t>As with framework protocols, deterministic serialization may be required for parts of the protocol using hashing or signing.
See <xref target="WhenDeterministic"/>.</t>
          <t>If no specific serialization is required, general serialization (see <xref target="GeneralSerialization"/>) applies by default.
In this case, the sender MAY use any valid serialization, and the receiver MUST be able to decode it.
Defaulting to general serialization is NOT RECOMMENDED, because some serializations like indefinite-lengths are not widely supported.</t>
        </section>
      </section>
      <section anchor="libraries">
        <name>Libraries</name>
        <section anchor="cbor-libraries">
          <name>CBOR Libraries</name>
          <t>It is RECOMMENDED that CBOR libraries support ordinary serialization.
This can be achieved by conforming to the decoding requirements in <xref target="OrdinaryDecoding"/> and by making the encoding behavior defined in <xref target="OrdinaryEncoding"/> the default or primary encoding API.</t>
          <t>Ordinary serialization is recommended because it is suitable for the majority of CBOR-based protocols.
In practice, ordinary serialization is equivalent to preferred serialization <xref section="4.1" sectionFormat="of" target="STD94"/> for most use cases.</t>
          <t>It is also RECOMMENDED that CBOR libraries support deterministic serialization, as some protocols (for example, COSE) require it.
Relative to ordinary serialization, the only additional requirement for deterministic serialization is that encoded maps be sorted.
This recommendation is particularly strong for environments in which map sorting is easy to implement (for example, Python, Go, and Ruby).</t>
          <t>A CBOR library may choose to implement only deterministic serialization and make it the default.
Deterministic serialization is a superset of ordinary serialization; therefore, if deterministic serialization is fully supported, explicit support for ordinary serialization may be omitted.</t>
          <t>A CBOR library MAY also choose to support some or all aspects of general serialization (see <xref target="GeneralSerialization"/>) thereby enabling support for protocols that use specialized serializations (see <xref target="SpecialSerializations"/>).</t>
        </section>
        <section anchor="libraries-for-framework-protocols">
          <name>Libraries for Framework Protocols</name>
          <t>When a framework protocol specification does not mandate a specific serialization, it is RECOMMENDED that it implement ordinary serialization.
For example, it is recommended that a library implementing CWT or COSE implement ordinary serialization.</t>
          <t>However, a library MAY choose to support only deterministic serialization if this aligns with its deployment environment and design goals.</t>
          <t>When a framework protocol mandates serialization requirements, libraries must of cource conform.
For instance, certain parts of COSE mandate deterministic serialization.
See <xref target="COSESerialization"/> for a detailed COSE-based example.</t>
        </section>
        <section anchor="libraries-for-end-to-end-protocols">
          <name>Libraries for End-to-End Protocols</name>
          <t>End-to-end protocols should have explicit serialization requirements to ensure interoperability.
Libraries for end-to-end protocols should fullfill them.</t>
          <t>If an end-to-end protocol specification does not state serialization requirements, the library is free to choose, but it is RECOMMENDED that they implement ordinary serialization.</t>
        </section>
      </section>
    </section>
    <section anchor="GeneralSerialization">
      <name>General Serialization</name>
      <t>This section assigns the name "general serialization" to the full set of serialization options standardized in <xref section="3" sectionFormat="of" target="STD94"/>.
This full set was not explicitly named in <xref target="STD94"/>.</t>
      <t>General serialization consists of all of these:</t>
      <ul spacing="normal">
        <li>
          <t>Any length CBOR argument (e.g., the integer 0 may be encoded as 0x00, 0x1800 or or 0x190000 and so on).</t>
        </li>
        <li>
          <t>Any length floating point regardless of value (e.g. 0.00 can be 0xf900, 0xfa000000000 and so on).</t>
        </li>
        <li>
          <t>Both definite or indefinite-length strings, arrays and maps are allowed.</t>
        </li>
        <li>
          <t>Big numbers can represent values that are also representable by major types 0 and 1 (e.g., 0 can be encoded as a big number, as 0xc34100).</t>
        </li>
      </ul>
      <t>A decoder that supports general serialization is able to decode all of these.</t>
      <section anchor="WhenGeneral">
        <name>When To Use General Serialization</name>
        <t>Ordinary serialization (<xref target="OrdinarySerialization"/>) satisfies the vast majority of CBOR use cases; therefore, the need for general serialization is rare and arises only in unusual circumstances.
The following are representative examples:</t>
        <ul spacing="normal">
          <li>
            <t>Enable on-the-fly, streaming encoding of strings, arrays, and maps with indefinite lengths.
This is useful when an array, map, or string is many times larger than the available memory on the encoding device.</t>
          </li>
          <li>
            <t>Directly encode or decode integer values from hardware registers with fixed-size integer encoding.
CBOR is sufficiently simple that encoders and decoders for some protocols can be implemented solely in hardware without any software.
Fixed-size integer encoding allows values to be copied directly in and out of hardware registers.</t>
          </li>
          <li>
            <t>Enable in place update of the lengths of strings, arrays and maps by using fixed-size encoding of their lengths.
For example, if the length of a string is always encoded in 32 bits, increasing the length from 2^16 to 2^16+1, requires only overwriting the length field rather than shifting all 2^16 bytes of content.</t>
          </li>
          <li>
            <t>Transmission of non-trivial NaNs in floating-point values (see <xref target="NaN"/>).</t>
          </li>
        </ul>
        <t>Except for non-trivial NaNs, the other serializations can encode the same data types and value ranges as general serialization.
Its purpose is solely to simplify or optimize encoding in atypical constrained environments.
The choice of serialization is orthogonal to the data model.
See also the section on special serializations in <xref target="SpecialSerializations"/>.</t>
      </section>
      <section anchor="general-serialization-is-the-default">
        <name>General Serialization is the Default</name>
        <t>If a CBOR-based protocol specification does not explicitly specify serialization, general serialization is implied.
This means that a compliant decoder for such a protocol is required to accept all forms allowed by general serialization including both definite and indefinite lengths.
For example, CBOR Web Token, <xref target="RFC8392"/> does not specify serialization; therefore, a full and proper CWT decoder must be able to handle variable-length CBOR argments plus indefinite-length strings, arrays and maps.</t>
        <t>In practice, however, it is widely recognized that some CWT decoders cannot process the full range of general serialization, particularly indefinite lengths.
As a result, CWT encoders typically limit themselves to the subset of serializations that decoders can reliably handle, most notably by never encoding indefinite lengths.
It is similar for other CBOR-based protocols like <xref target="RFC9052"/>.
See also <xref target="OrdinarySerialization"/>.</t>
      </section>
    </section>
    <section anchor="OrdinarySerialization">
      <name>Ordinary Serialization</name>
      <t>This section defines a serialization named "ordinary serialization."</t>
      <section anchor="OrdinaryEncoding">
        <name>Encoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>The shortest-form of the CBOR argument must be used for all major types.
The shortest-form encoding for any argument that is not a floating  point value is:  </t>
            <ul spacing="normal">
              <li>
                <t>0 to 23 and -1 to -24 MUST be encoded in the same byte as the major type.</t>
              </li>
              <li>
                <t>24 to 255 and -25 to -256 MUST be encoded only with an additional byte (ai = 0x18).</t>
              </li>
              <li>
                <t>256 to 65535 and -257 to -65536 MUST be encoded only with an additional two bytes (ai = 0x19).</t>
              </li>
              <li>
                <t>65536 to 4294967295 and -65537 to -4294967296 MUST be encoded only with an additional four bytes (ai = 0x1a).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If maps or arrays are encoded, they MUST use definite-length encoding (never indefinite-length).</t>
          </li>
          <li>
            <t>If text or byte strings are encoded, they MUST use definite-length encoding (never indefinite-length).</t>
          </li>
          <li>
            <t>If floating-point numbers are encoded, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>Half-precision MUST be supported</t>
              </li>
              <li>
                <t>Values MUST be encoded in the shortest of double, single or half-precision that preserves precision.
For example, 0.0 can always be reduced to half-precision so it MUST be encoded as 0xf90000
For another example, 0.1 would loose precision if not encoded as double-precision so it MUST be encoded as 0xfb3fb999999999999a.
Subnormal numbers MUST be supported in this shortest-length encoding.</t>
              </li>
              <li>
                <t>The only NaN that may be encoded is a half-precision quiet NaN (the sign bit and all but the highest payload bit is clear), specifically 0xf97e00.</t>
              </li>
              <li>
                <t>Aside from the the requirement allowing only the half-precision quiet NaN, these are the same floating-point requirements as <xref section="4.1" sectionFormat="of" target="STD94"/> and also as <xref section="4.2.1" sectionFormat="of" target="STD94"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If big numbers (tags 2 and 3) are encoded, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>Leadings zeros MUST NOT be encoded.</t>
              </li>
              <li>
                <t>If a value can be encoded using major type 0 or 1, then it MUST be encoded with major type 0 or 1, never as a big number.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="OrdinaryDecoding">
        <name>Decoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Decoders MUST accept shortest-form encoded arguments.</t>
          </li>
          <li>
            <t>If arrays or maps are supported, definite-length arrays or maps MUST be accepted.</t>
          </li>
          <li>
            <t>If text or byte strings are supported, definite-length text or byte strings MUST be accepted.</t>
          </li>
          <li>
            <t>If floating-point numbers are supported, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>Half-precision values MUST be accepted.</t>
              </li>
              <li>
                <t>Double- and single-precision values SHOULD be accepted; leaving these out is only foreseen for decoders that need to work in exceptionally constrained environments.</t>
              </li>
              <li>
                <t>If double-precision values are accepted, single-precision values MUST be accepted.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If big numbers (tags 2 and 3) are accepted, the following apply:  </t>
            <ul spacing="normal">
              <li>
                <t>Big numbers described in <xref section="3.4.3" sectionFormat="of" target="STD94"/> MUST be accepted.</t>
              </li>
              <li>
                <t>Leading zeros MUST be ignored.</t>
              </li>
              <li>
                <t>An empty string MUST be accepted and treated as the value zero.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>See also <xref target="BigNumbersDataModel"/> and <xref target="BigNumberStrategies"/> for further background on big numbers.</t>
      </section>
      <section anchor="when-to-use-ordinary-serialization">
        <name>When to use ordinary serialization</name>
        <t>The purpose of ordinary serialization is to provide interoperability without requiring support for indefinite-length decoding.
If an encoder never produces indefinite-length items, the decoder can safely treat them as errors.
Supporting indefinite-length decoding, especially for strings, introduces additional complexity and often necessitates dynamic memory allocation, so omitting it significantly reduces the implementation burden.</t>
        <t>Ordinary serialization also provides a size efficiency gain by encoding the CBOR argument in the shortest form.
Implementations typically find encoding and decoding in this form to be straightforward.</t>
        <t>The easy implementation and broad usefulness makes ordinary serialization the best choice for most CBOR protocols.
To some degree it is a de facto standard for common CBOR protocols.</t>
        <t>See <xref target="WhenGeneral"/> for uses cases where ordinary serialization may not be suitable.
But, for the vast majority of use cases, ordinary serialization provides interoperaibility, small encoded size and low implementation costs.</t>
      </section>
      <section anchor="RelationToPreferred">
        <name>Relation To Preferred Serialization</name>
        <t>Ordinary serialization is defined to be the long-term replacement for preferred serialization.</t>
        <t>The differences are:</t>
        <ul spacing="normal">
          <li>
            <t>Definite lengths are a requirement, not a preference.</t>
          </li>
          <li>
            <t>The only NaN allowed is the half-precision quiet NaN.</t>
          </li>
          <li>
            <t>For big numbers, leading zeros must be ignored and the empty string must be accepted as zero.</t>
          </li>
        </ul>
        <t>These differences are not of significance in real-world implementations, so ordinary serialization is already largely supported.</t>
        <t>In <xref section="3" sectionFormat="of" target="STD94"/> it states that in preferred serialization the use of definite-length encoding is a "preference", not a requirement.
Technically that means preferred seriaization decoders must support indefinite legnths, but in reality many do not.
Indefinite lengths, particularly for strings, are often not supported because they are more complex to implement than other parts of CBOR.
Because of this, the implementation of most CBOR protocols use only definite lengths.</t>
        <t>Further, much of the CBOR community didn't notice the use of the word "preference" and realize its implications for decoder implementations.
It was somewhat assumed that preferred serialization didn't allow indefinite lengths.
That preferred serialization decoders are technically required to support indefinite lengths wasn't noticed until many years after the publication of <xref target="STD94"/>.</t>
        <t>Briefly stated, the reason that the divergence on NaNs is not of consequence in the real world, is that their non-trivial forms are used extremely rarely and support for them in programming environments and CBOR libraries is unreliable.
See <xref target="NaNCompatibility"/> for a detailed discussion.</t>
        <t>Thus ordinary serialization is largely interchangable with preferred serialization in the real world.</t>
      </section>
    </section>
    <section anchor="DeterministicSerialization">
      <name>Deterministic Serialization</name>
      <t>This section defines a serialization named "deterministic serialization"</t>
      <t>Deterministic serialization is the same as described in <xref section="4.2.1" sectionFormat="of" target="STD94"/> except for the encoding of floating-point NaNs.
See <xref target="OrdinarySerialization"/> and <xref target="NaN"/> for details on and rationale for NaN encoding.</t>
      <t>Note that in deterministic serialization, any big number that can be represented as an integer must be encoded as an integer.
This rule is inherited from ordinary serialization (<xref target="OrdinarySerialization"/>), just as <xref section="4.2.1" sectionFormat="of" target="STD94"/> inherits this requirement from preferred serialization.</t>
      <section anchor="DeterministicEncoding">
        <name>Encoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>All of ordinary serialization defined in <xref target="OrdinaryEncoding"/> MUST be used.</t>
          </li>
          <li>
            <t>If a map is encoded, the items in it MUST be sorted in the bytewise lexicographic order of their deterministic encodings of the map keys.
(Note that this is the same as the sorting in <xref section="4.2.1" sectionFormat="of" target="STD94"/> and not the same as <xref section="3.9" sectionFormat="of" target="RFC7049"/>.</t>
          </li>
        </ol>
      </section>
      <section anchor="DeterministicDecoding">
        <name>Decoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Decoders MUST meet the decoder requirements for <xref target="OrdinaryDecoding"/>.
That is, deterministic encoding imposes no requirements over and above the requirements for decoding ordinary serialization.</t>
          </li>
        </ol>
      </section>
      <section anchor="WhenDeterministic">
        <name>When to use Deterministic Serialization</name>
        <section anchor="not-commonly-needed-for-hashing-and-signing">
          <name>Not Commonly Needed for Hashing and Signing</name>
          <t>Most applications do not require deterministic encoding — even those that employ signing or hashing to authenticate or protect the integrity of data.
For example, the payload of a COSE_Sign message (See <xref target="RFC9052"/>) does not need to be encoded deterministically because it is transmitted along with the message.
The recipient receives the exact same bytes that were signed.</t>
          <t>Deterministic encoding becomes necessary only when the protected data is not transmitted as the exact bytes that are used for authenticity or integrity verification.
In such cases, both the sender and the receiver must independently construct the exact same sequence of bytes.
To guarantee this, the encoding must eliminate all variability and ambiguity.
The Sig_structure, defined in <xref section="4.4" sectionFormat="of" target="RFC9052"/>, is an example of this requirement.
Such designs are often chosen to reduce data size, preserve privacy, or meet other design constraints.</t>
          <t>See the more detailed, COSE-based example in <xref target="COSESerialization"/>.</t>
        </section>
        <section anchor="decoding-deterministic-serialization-and-relation-to-ordinary-serialization">
          <name>Decoding Deterministic Serialization and Relation to Ordinary Serialization</name>
          <t>The only difference between ordinary and deterministic serialization is that in deterministic serialization, maps are required to be sorted by their keys.
Ordinary serialization exists as a separate mode solely because map sorting can be too expensive in some constrained environments.</t>
          <t>Map decoding must never depend on the sort order of a map, even when maps are required to be sorted.
As a result, deterministic serialization (<xref target="DeterministicSerialization"/>) can always be decoded by a decoder that supports ordinary serialization (<xref target="OrdinarySerialization"/>).
Because of this property, deterministic serialization can always be used in place of ordinary serialization.
In environments where map sorting is not costly, it is both acceptable and beneficial to always use deterministic serialization.
In such environments, a CBOR encoder may produce deterministic encoding by default and may even omit support for ordinary encoding entirely.</t>
          <t>But note that deterministic is never a substitute for general serialization where uses cases may require indefinite lengths, separate big numbers from integers in the data model, need non-trivial NaNs, or other.</t>
        </section>
        <section anchor="no-map-ordering-semantics">
          <name>No Map Ordering Semantics</name>
          <t>In the basic generic data model, maps are unordered (See <xref section="5.6" sectionFormat="of" target="STD94"/>).
Applications MUST NOT rely on any particular map ordering, even if deterministic serialization was used.
A CBOR library is not required to preserve the order of keys when decoding a map, and the underlying programming language may not preserve map order either — for example, the Go programming language provides no ordering guarantees for maps.
The sole purpose of map sorting in deterministic serialization is to ensure reproducibility of the encoded byte stream, not to provide any semantic ordering of map entries.
If an application requires a map to be ordered, it is responsible for applying its own sorting.</t>
        </section>
      </section>
    </section>
    <section anchor="SpecialSerializations">
      <name>Special Serializations</name>
      <t>Although discouraged, defining special serializations that differ from those specified here is permitted.
For example, a use case might require deterministim from a protocol that uses indefinite lengths.
For another example, a protocol may require only a subset of general serialization features — for instance, fixed-length integer encodings but not indefinite lengths.</t>
      <t>A recommended way to define a special serialization is to describe it as ordinary or deterministic serialization with additional constraints or extensions.
For example, a protocol requiring deterministic streaming of maps and arrays can be defined as follows:</t>
      <ul empty="true">
        <li>
          <ul empty="true">
            <li>
              <t>Deterministic serialization MUST be used, but all maps and arrays MUST be encoded with indefinite lengths, never definite lengths.
Strings are still encoded with definite lengths.
Maps are still to be ordered as required by deterministic serialization.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="TagDataModelRule">
      <name>New Tag Data Model Rule</name>
      <t><cref anchor="to-be-removed4">This section is new in draft-03. The author thinks it may be out of place in this document, but there's no other good place for it yet.</cref></t>
      <t><xref section="2" sectionFormat="of" target="STD94"/> states that each new CBOR tag definition introduces a new and distinct data type.
In contrast, the definitions of Tags 2 and 3 (bignums) in <xref section="3.4.3" sectionFormat="of" target="STD94"/> do not introduce a separate data type; instead, they attach directly to the integer type and extend its numeric range.
As a result, the generic data model’s integer type is modified rather than augmented with a new, independent type (see <xref target="BigNumbersDataModel"/>).</t>
      <t>This document establishes a new rule that prohibits future tag definitions from having such effects:</t>
      <t>All future CBOR tag definitions MUST NOT incorporate, modify, or otherwise affect any data types other than the type defined by the tag itself.
A set of tags MAY affect each other, provided that all defining authorities for those tags explicitly agree.</t>
      <t>Tags 2 and 3 are exempt from this rule, as they were defined prior to the establishment of this requirement.</t>
    </section>
    <section anchor="CDDL-Operators">
      <name>CDDL Control Operators</name>
      <t>Four new control operators are defined for use in CDDL <xref target="RFC8610"/>.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Purpose</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">.ord</td>
            <td align="left">Use ordinary serialization for a data item</td>
          </tr>
          <tr>
            <td align="left">.ordseq</td>
            <td align="left">Use ordinary serialization for a CBOR sequence</td>
          </tr>
          <tr>
            <td align="left">.det</td>
            <td align="left">Use deterministic serialization for a data item</td>
          </tr>
          <tr>
            <td align="left">.detseq</td>
            <td align="left">Use deterministic serialization for a CBOR sequence</td>
          </tr>
        </tbody>
      </table>
      <t>These operators have the same semantics as the .cbor and .cborseq operators (See <xref section="3.8.4" sectionFormat="of" target="RFC8610"/>) with the additional requirement for ordinary or deterministic serialization.
These specify that what is in the “controller” (the right side of the operator) be serialized as indicated.</t>
      <t>For example, a byte string containing embedded CBOR that must be deterministically encoded can be described in CDDL as:</t>
      <artwork><![CDATA[
leaf = #6.24(bytes .det any)
]]></artwork>
      <t>The scope of these operators applies recursively through nested arrays and maps, but does not extend into byte strings or other data items that happen to contain encoded CBOR.
Every instance of embedded CBOR that requires constrained serialization must specify that constraint explicitly.
See also <xref target="ByteStringWrapping"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations in <xref section="10" sectionFormat="of" target="STD94"/> apply.</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 the
<xref target="IANA.cddl"/> registry group:</t>
      <?v3xml2rfc table_borders="light" ?>

<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">.ord</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.ordseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.det</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.detseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to add a reference to <xref target="TagDataModelRule"/> to the CBOR tag registry <xref target="IANA.cbor-tags"/>.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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="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="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9413">
          <front>
            <title>Maintaining Robust Protocols</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>The main goal of the networking standards process is to enable the long-term interoperability of protocols. This document describes active protocol maintenance, a means to accomplish that goal. By evolving specifications and implementations, it is possible to reduce ambiguity over time and create a healthy ecosystem.</t>
              <t>The robustness principle, often phrased as "be conservative in what you send, and liberal in what you accept", has long guided the design and implementation of Internet protocols. However, it has been interpreted in a variety of ways. While some interpretations help ensure the health of the Internet, others can negatively affect interoperability over time. When a protocol is actively maintained, protocol designers and implementers can avoid these pitfalls.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9413"/>
          <seriesInfo name="DOI" value="10.17487/RFC9413"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC7049">
          <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="October" year="2013"/>
            <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>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="CTAP2" target="https://fidoalliance.org/specs/fido-v2.0-ps-20190130/fido-client-to-authenticator-protocol-v2.0-ps-20190130.html">
          <front>
            <title>Client To Authenticator Protocol v2</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="NaNBoxing" target="https://craftinginterpreters.com/optimization.html#nan-boxing">
          <front>
            <title>Crafting Interpreters</title>
            <author fullname="Robert Nystrom">
              <organization/>
            </author>
            <date year="2021" month="July"/>
          </front>
        </reference>
        <reference anchor="I-D.mcnally-deterministic-cbor">
          <front>
            <title>dCBOR: Deterministic CBOR</title>
            <author fullname="Wolf McNally" initials="W." surname="McNally">
              <organization>Blockchain Commons</organization>
            </author>
            <author fullname="Christopher Allen" initials="C." surname="Allen">
              <organization>Blockchain Commons</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="20" month="December" year="2025"/>
            <abstract>
              <t>   The purpose of determinism is to ensure that semantically equivalent
   data items are encoded into identical byte streams.  CBOR (RFC 8949)
   defines "Deterministically Encoded CBOR" in its Section 4.2, but
   leaves some important choices up to the application developer.  The
   present document specifies dCBOR, a set of narrowing rules for CBOR
   that can be used to help achieve interoperable deterministic encoding
   for a variety of applications desiring a narrow and clearly defined
   set of choices.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mcnally-deterministic-cbor-16"/>
        </reference>
      </references>
    </references>
    <?line 514?>

<section anchor="models">
      <name>Information Model, Data Model and Serialization</name>
      <t>To understand CBOR serialization and determinism, it's helpful to distinguish between the general concepts of an information model, a data model, and serialization.
These are broad concepts that can be applied to other serialization schemes like JSON and ASN.1</t>
      <table>
        <thead>
          <tr>
            <th align="left"> </th>
            <th align="left">Information Model</th>
            <th align="left">Data Model</th>
            <th align="left">Serialization</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Abstraction Level</td>
            <td align="left">Top level; conceptual</td>
            <td align="left">Realization of information in data structures and data types</td>
            <td align="left">Actual bytes encoded for transmission</td>
          </tr>
          <tr>
            <td align="left">Example</td>
            <td align="left">The temperature of something</td>
            <td align="left">A floating-point number representing the temperature</td>
            <td align="left">Encoded CBOR of a floating-point number</td>
          </tr>
          <tr>
            <td align="left">Standards</td>
            <td align="left"> </td>
            <td align="left">CDDL</td>
            <td align="left">CBOR</td>
          </tr>
          <tr>
            <td align="left">Implementation Representation</td>
            <td align="left"> </td>
            <td align="left">API Input to CBOR encoder library, output from CBOR decoder library</td>
            <td align="left">Encoded CBOR in memory or for transmission</td>
          </tr>
        </tbody>
      </table>
      <t>CBOR doesn't provide facilities for information models.
They are mentioned here for completeness and to provide some context.</t>
      <t>CBOR defines a palette of basic types that are the usual integers, floating-point numbers, strings, arrays, maps and other.
Extended types may be constructed from these basic types.
These basic and extended types are used to construct the data model of a CBOR protocol.
While not required, <xref target="RFC8610"/> may be used to describe the data model of a protocol.
The types in the data model are serialized per <xref target="STD94"/> to create encoded CBOR.</t>
      <t>CBOR allows certain data types to be serialized in multiple ways to facilitate easier implementation in constrained environments.
For example, indefinite-length encoding enables strings, arrays, and maps to be streamed without knowing their length upfront.</t>
      <t>Crucially, CBOR allows — and even expects — that some implementations will not support all serialization variants.
In contrast, JSON permits variations (e.g., representing 1 as 1, 1.0, or 0.1e1), but expects all parsers to handle them.
That is, the variation in JSON is for human readability, not to facilitate easier implementation in constrained environments.</t>
    </section>
    <section anchor="general-protocol-considerations-for-determinism">
      <name>General Protocol Considerations for Determinism</name>
      <t>This is the section that covers what is know as ALDR in some discussions.</t>
      <t><cref anchor="rfced">RFC Editor:</cref> Please remove above sentence before publication</t>
      <t>In addition to <xref target="DeterministicSerialization"/> and <xref target="Tags"/>, there are considerations in the design of any deterministic protocol.</t>
      <t>For a protocol to be deterministic, both the encoding (serialization) and data model (application) layer must be deterministic.
While deterministic serialization, <xref target="DeterministicSerialization"/>, ensures determinism at the encoding layer, requirements at the application layer may also be necessary.</t>
      <t>Here’s an example application layer specification:</t>
      <ul empty="true">
        <li>
          <ul empty="true">
            <li>
              <t>At the sender’s convenience, the birth date MAY be sent either as an integer epoch date or string date. The receiver MUST decode both formats.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>While this specification is interoperable, it lacks determinism.
There is variability in the data model layer akin to variability in the CBOR encoding layer when deterministic serialization is not required.</t>
      <t>To make this example application layer specification deterministic, specify one date format and prohibit the other.</t>
      <t>A more interesting source of application layer variability comes from CBOR’s variety of number types. For instance, the number 2 can be represented as an integer, float, big number, decimal fraction and other.
Most protocols designs will just specify one number type to use, and that will give determinism, but here’s an example specification that doesn’t:</t>
      <ul empty="true">
        <li>
          <ul empty="true">
            <li>
              <t>At the sender’s convenience, the fluid level measurement MAY be encoded as an integer or a floating-point number. This allows for minimal encoding size while supporting a large range. The receiver MUST be able to accept both integers and floating-point numbers for the measurement.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Again, this ensures interoperability but not determinism — identical fluid level measurements can be represented in more than one way.
Determinism can be achieved by allowing only floating-point, though that doesn’t minimize encoding size.</t>
      <t>A better solution requires the fluid level always be encoded using the smallest representation for every particular value.
For example, a fluid level of 2 is always encoding as an integer, never as a floating-point number.
2.000001 is always be encoded as a floating-point number so as to not lose precision.
See the numeric reduction defined by <xref target="I-D.mcnally-deterministic-cbor"/>.</t>
      <t>Although this is not strictly a CBOR issue, deterministic CBOR protocol designers should be mindful of variability in Unicode text, as some characters can be encoded in multiple ways.</t>
      <t>While this is not an exhaustive list of application-layer considerations for deterministic CBOR protocols, it highlights the nature of variability in the data model layer and some sources of variability in the CBOR data model (i.e., in the application layer).</t>
    </section>
    <section anchor="Tags">
      <name>Deterministic Encoding for Popular Tags</name>
      <t>The definitions of the following tags in <xref target="RFC8610"/> allow variation in the data mode, thus it is useful to define a deterministic encoding for them should a particular deterministic protocol need one.
The tags defined in <xref target="RFC8610"/> but not mentioned here have no variability in their data model.</t>
      <section anchor="date-strings-tag-0">
        <name>Date Strings, Tag 0</name>
        <t>TODO -- complete this work and remove this comment before publication</t>
      </section>
      <section anchor="epoch-date-tag-1">
        <name>Epoch Date, Tag 1</name>
        <section anchor="encoder-requirements">
          <name>Encoder Requirements</name>
          <t>If the encoder supports floating-point dates, it MUST use the integer representation unless one of the following applies: (1) the date is outside the range representable by a 64-bit integer of major type 0 or 1, or (2) the date has a non-zero fraction of a second. In either case, the floating-point representation MUST be used.</t>
        </section>
        <section anchor="decoder-requirements">
          <name>Decoder Requirements</name>
          <t>If the decoder supports floating-point dates, it MUST be able to decode both the integer and the floating-point representations.</t>
        </section>
      </section>
      <section anchor="big-numbers-tags-2-and-3">
        <name>Big Numbers, Tags 2 and 3</name>
        <t>See <xref target="OrdinarySerialization"/>.</t>
      </section>
      <section anchor="big-floats-and-decimal-fractions-tags-4-and-5">
        <name>Big Floats and Decimal Fractions, Tags 4 and 5</name>
        <section anchor="encoder-requirements-1">
          <name>Encoder Requirements</name>
          <t>The mantissa MUST be encoded in the preferred serialization form specified in Section 3.4.3 of RFC 8949.</t>
          <t>The mantissa MUST NOT contain trailing zeros.
For example, the decimal fraction with value 10 must be encoded with a mantissa of 1 and an exponent of 1.
For big floats, the mantissa must not include any trailing zero bits if encoded as a type 0 or 1 integer, and no trailing zero bytes if encoded as a big number</t>
        </section>
        <section anchor="decoder-requirements-1">
          <name>Decoder Requirements</name>
          <t>Both the integer and big number forms of the mantissa MUST be decoded.</t>
        </section>
      </section>
    </section>
    <section anchor="NaN">
      <name>IEEE 754 NaN</name>
      <t>This section provides background information on <xref target="IEEE754"/> NaN (Not a Number) and its use in CBOR.</t>
      <section anchor="basics">
        <name>Basics</name>
        <t><xref target="IEEE754"/> defines the most widely used representation for floating-point numbers.
It includes special values for infinity and NaN.
NaN was originally designed to represent the result of invalid computations, such as division by zero.
Although IEEE 754 intended NaN primarily for local computation, NaN values are sometimes transmitted in network protocols, and CBOR supports their representation.</t>
        <t>An IEEE 754 NaN includes a payload of up to 52 bits (depending on precision) whose use is not formally defined.
NaN values also include an unused sign bit.</t>
        <t>IEEE 754 distinguishes between quiet NaNs (qNaNs) and signaling NaNs (sNaNs):</t>
        <ul spacing="normal">
          <li>
            <t>A signaling NaN typically raises a floating-point exception when encountered.</t>
          </li>
          <li>
            <t>A quiet NaN does not raise an exception.</t>
          </li>
          <li>
            <t>The distinction is implementation-specific, but typically:
            </t>
            <ul spacing="normal">
              <li>
                <t>The highest bit of the payload is set --&gt; quiet NaN.</t>
              </li>
              <li>
                <t>Any other payload bit is set --&gt; signaling NaN.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>At least one payload bit must be set for a signaling NaN to distinguish it from infinity.</t>
          </li>
        </ul>
        <t>In this document:</t>
        <ul spacing="normal">
          <li>
            <t>A "non-trivial NaN" refers to any NaN that is not a quiet NaN.</t>
          </li>
          <li>
            <t>A non-trivial NaN is used to carry additional, protocol-specific information within floating-point values.</t>
          </li>
        </ul>
      </section>
      <section anchor="implementation-support-for-non-trivial-nans">
        <name>Implementation Support for Non-Trivial NaNs</name>
        <t>This section discusses the extent of programming language and CPU support for NaN payloads.</t>
        <t>Although <xref target="IEEE754"/> has existed for decades, support for manipulating non-trivial NaNs has historically been limited and inconsistent.
Some key points:</t>
        <ul spacing="normal">
          <li>
            <t>Programming languages:  </t>
            <ul spacing="normal">
              <li>
                <t>The programming languages C, C++, Java, Pyhton and Rust do no provide APIs to set or extract NaN payloads.</t>
              </li>
              <li>
                <t>IEEE 754 is over thirty years old, enough time for support to be added if there was need.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>CPU hardware:  </t>
            <ul spacing="normal">
              <li>
                <t>CPUs use the distinction between signaling and quiet NaNs to determine whether to raise exceptions.</t>
              </li>
              <li>
                <t>A non-trivial NaN matching the CPU’s signaling NaN pattern may either trigger an exception or be converted into a quiet NaN.</t>
              </li>
              <li>
                <t>Instructions converting between single and double precision sometimes discard or alter NaN payloads.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>As a result, applications that rely on non-trivial NaNs generally cannot depend on CPU instructions, floating-point libraries, or programming environments.
Instead, they usually need their own software implementation of IEEE 754 to encode and decode the full bit patterns to reliably process non-trivial NaNs.</t>
      </section>
      <section anchor="use-and-non-use-for-non-trivial-nans">
        <name>Use and Non-use for Non-Trivial NaNs</name>
        <t>Non-trivial NaNs, excluding signaling NaNs, are not produced by standard floating-point operations.
They are typically created at the application level, where software may take advantage of unused bits in the NaN payload.
Such uses are rare and unusual, but they do exist.</t>
        <t>One example is the R programming language, which is designed for statistical computing and therefore operates heavily on numeric data.
R uses NaN payloads to distinguish various error or missing-data conditions beyond standard computational exceptions such as division by zero.</t>
        <t>Another example is NaNboxing (see <xref target="NaNBoxing"/>), a technique used by some language runtimes — such as certain JavaScript engines — to efficiently represent multiple data types within a single 64-bit word by storing type tags or pointers in the NaN payload.
(CBOR can represent such payloads, but NaNboxed pointers are generally not meaningful or portable across machines, and therefore are usually unsuitable for network transmission or file storage.)</t>
        <t>CBOR’s NaN-payload support can be leveraged if data from these systems must be transmitted over a network or written to persistent storage.</t>
        <t>A designer of a new protocol that makes extensive use of floating-point values might be tempted to use NaN payloads to encode out-of-band information such as error conditions.
For example, NaN payloads could be used to distinguish situations such as sensor offline, sensor absent, sensor error, or sensor out of calibration.
While this is technically possible in CBOR, it comes with significant drawbacks:</t>
        <ul spacing="normal">
          <li>
            <t>Ordinary and deterministic serialization cannot be used for this protocol.</t>
          </li>
          <li>
            <t>Support for NaN payloads is unreliable across programming environments and CBOR libraries.</t>
          </li>
          <li>
            <t>Values cannot be translated directly to JSON, which does not support NaNs of any kind.</t>
          </li>
        </ul>
      </section>
      <section anchor="clarification-of-std94">
        <name>Clarification of <xref target="STD94"/></name>
        <t>This is a clarifying restatement of how NaNs are to be treated according to <xref target="STD94"/>.</t>
        <t>NaNs represented in floating-point values of different lengths are considered equivalent in the basic generic data model if:</t>
        <ul spacing="normal">
          <li>
            <t>Their sign bits are identical, and</t>
          </li>
          <li>
            <t>Their significands are identical after both significands are zero-extended on the right to 64 bits</t>
          </li>
        </ul>
        <t>This equivalence is established for the entire CBOR basic generic data model.
A NaN encoded as half-, single-, or double-precision is equivalent whenever it satisfies the rules above.
This remains true regardless of how a CBOR library accepts, stores, or presents a NaN in its API.
At the application layer, the equivalence still holds.
The only way to avoid this equivalence is by using a tag specifically designed to carry NaNs without these equivalence rules, since tags extend the data model unless otherwise specified.</t>
        <t>The equivalence is similar to how the floating-point value 1.0 is treated as the same value regardless of the precision used to encode it.
Some floating-point values cannot be represented in shorter formats (e.g., 2.0e+50 cannot be encoded in half-precision).
The same is true for some NaNs.</t>
        <t>In preferred serialization, this equivalence MUST be used to shorten encoding length.
If a NaN can be represented equivalently in a shorter form (e.g., half-precision rather than single-precision), then the shorter representation MUS be used.</t>
        <t>This equivalence also applies when floating-point values are used as map keys.
A map key encoded as half-precision MUST be considered a duplicate of one encoded as double-precision if they meet the equivalence rules above.</t>
        <t>However, this equivalence does not apply to map sorting.
Sorting operates on the fully encoded and serialized representation, not on the abstract data model.</t>
        <t>It is <xref section="2" sectionFormat="of" target="STD94"/> that establishes this equivalence by stating that the number of bytes used to encode a floating-point value is not visible in the data model.
<xref section="4.1" sectionFormat="of" target="STD94"/> defines preferred serialization.
It requires shortest-length encoding of NaNs including instructions on how to do it.
<xref section="5.6.1" sectionFormat="of" target="STD94"/> describes how NaNs are treated as equivalent when used as map keys.
These three parts of <xref target="STD94"/> are consistent and are the basis of this restatement.</t>
        <t>Since <xref section="4.2.1" sectionFormat="of" target="STD94"/>, (Core Deterministic Encoding Requirements), explicitly requires preferred serialization, compliant deterministic encodings must use the shortest equivalent representation of NaNs.</t>
        <t>Finally, <xref section="4.2.2" sectionFormat="of" target="STD94"/> discusses alternative approaches to deterministic encoding.
It suggests, for example, that all NaNs may be encoded as a half-precision quiet NaN.
This section is distinct from the Core Deterministic Encoding Requirements and represents an optional alternative for handling NaNs.</t>
      </section>
      <section anchor="NaNCompatibility">
        <name>Divergence from <xref target="STD94"/></name>
        <t>Orindary and deterministic serialization defined in this document diverge from the preferred serialization requirement in <xref target="STD94"/> for shortest-length encoding of NaNs:</t>
        <ul spacing="normal">
          <li>
            <t>Ordinary serialization: Non-trivial NaNs are not allowed.
While ordinary serialization largely aligns with preferred serialization, it does not in the case of non-trivial NaNs.</t>
          </li>
          <li>
            <t>Deterministic serialization: Because deterministic serialization inherits from ordinary serialization, it also does not allow non-trivial NaNs.
This is the single aspect of deterministic serialization that is different from <xref section="4.2.1" sectionFormat="of" target="STD94"/>.</t>
          </li>
        </ul>
        <t>The divergence is justified by the following:</t>
        <ul spacing="normal">
          <li>
            <t>Encoding and equivalence of non-trivial NaNs was a little unclear <xref target="STD94"/>.</t>
          </li>
          <li>
            <t>IEEE 754 doesn't set requirements for their handling.</t>
          </li>
          <li>
            <t>Non-trivial NaNs are not well-supported across CPUs and programming environments.</t>
          </li>
          <li>
            <t>Implementing preferred serialization for non-trivial NaNs is complex and error-prone; many CBOR implementations don't support it or don't support it correctly.</t>
          </li>
          <li>
            <t>Practical use cases for non-trivial NaNs are extremely rare.</t>
          </li>
          <li>
            <t>Reducing non-trivial NaNs to a half-precision quiet NaN is simple and supported by programming environments (e.g., <tt>isnan()</tt> can be used to detect all NaNs).</t>
          </li>
          <li>
            <t>Non-trivial NaNs remain supported by general serialization; the divergence is only for ordinary and deterministic serialization.</t>
          </li>
          <li>
            <t>A new CBOR tag can be defined in the future to explicitly support them.</t>
          </li>
        </ul>
      </section>
      <section anchor="recommendations-for-use-of-non-trival-nans">
        <name>Recommendations for Use of Non-Trival NaNs</name>
        <t>While non-trivial NaNs are excluded from ordinary and deterministic serialization, they are theoretically supported by <xref target="STD94"/>.
General serialization does support them.</t>
        <t>New protocol designs can — and generally should—avoid non — non-trivial NaNs.
Support for them is unreliable, and it is straightforward to design CBOR-based protocols that do not depend on them.
In many cases, the use of NaN can be replaced entirely with null.
JSON requires use of null as it does not support NaNs at all.</t>
        <t>The primary use case for non-trivial NaNs is existing systems that already use them.
For example, a program that relies on non-trivial NaNs internally may need to serialize its data to run across machines connected by a network.</t>
      </section>
    </section>
    <section anchor="BigNumbersDataModel">
      <name>Big Numbers and the CBOR Data Model</name>
      <t>The primary purpose of this document is to define ordinary and deterministic serialization.
Accordingly, <xref target="OrdinarySerialization"/> describes CBOR’s unified integer space in terms of serialization behavior.
This is an effective and clear way to describe what implementors must do.
An implementation that follows the requirements in <xref target="OrdinarySerialization"/> will be complete and correct with respect to serialization.</t>
      <t>From a conceptual perspective, however, additional discussion is warranted regarding the CBOR data model itself.
That discussion is provided in this appendix.
(Please review <xref target="models"/> for background on the difference between serialization and the data model).</t>
      <t>In the basic, generic CBOR data model, each tag represents a distinct data type (<xref section="2" sectionFormat="of" target="STD94"/>).
Tags are also distinct from the major types, such as numbers and strings.
By this, an integer value such as 0 or 1 encoded as major type 0 is clearly distinct in the data model from the same integer value encoded as tag 2.</t>
      <t>However, the text in <xref section="3.4.3" sectionFormat="of" target="STD94"/> overrides this by defining these encodings to be equivalent rather than distinct.
This text therefore modifies the CBOR data model.
No other serialization requirement in <xref target="STD94"/> or in this document alters the data model; this equivalence is the sole exception.
This is unusual because the data model is otherwise orthogonal to serialization.</t>
      <t>Further, <xref section="3.4.3" sectionFormat="of" target="STD94"/>  along with text in <xref section="2" sectionFormat="of" target="STD94"/> are interpreted such that there is never a CBOR data model where there is a distinction between these integer representations.
That is, the equivalence applies regardless of the serialization even though much of the relevant text appears in proximity to discussions of serialization.</t>
      <t>This document does not attempt to update or revise the text of <xref section="3.4.3" sectionFormat="of" target="STD94"/>.
Rather, it records the commonly accepted interpretation of that text and its implications for the CBOR data model.</t>
      <t>This document does create a new rule for future tag definitions.
See <xref target="TagDataModelRule"/>.</t>
    </section>
    <section anchor="BigNumberStrategies">
      <name>Big Number Implementation Strategies</name>
      <t><xref target="BigNumbersDataModel"/> describes how CBOR defines a single integer number space, in which big numbers are not distinct from values encoded using major types 0 and 1.
This appendix discusses approaches for implementers to support that model.</t>
      <t>Some programming environments provide strong native support for big numbers (e.g., Python, Ruby, and Go), while others do not (e.g., C, C++, and Rust).
Even in environments that support big numbers, operations on native-sized integers (e.g., 64-bit integers) are typically much more efficient.
It is therefore reasonable for a CBOR library to expose separate APIs for native-sized integers and for big numbers.</t>
      <t>When a CBOR library provides a big number API, values that fall within the range of major types 0 and 1 must be encoded using those major types rather than tags 2 or 3.
Similarly, decoding facilities that return big numbers must accept values encoded using major types 0 and 1, even though the returned representation is a big number.</t>
      <t>Alternatively, some CBOR libraries may choose to return tags 2 and 3 as raw byte strings, as this approach is simpler than implementing full big number support.
When a library adopts this approach, it should clearly document that the application layer is responsible for performing the integer unification.
The application is also responsible for handling CBOR’s offset-by-one encoding of negative values and the extended negative integer range permitted by major type 1.</t>
      <t>In most cases, these additional processing steps are straightforward when the application already uses a big number library.</t>
      <t>Another acceptable approach is for a CBOR library to provide a generic mechanism that allows applications to register handlers for specific tags.
In this case, handlers for tags 2 and 3 MUST perform the required unification with major types 0 and 1.</t>
      <t>Finally, note that big numbers are not a widely used feature of CBOR.
Some CBOR libraries may entirely omit support for tags 2 and 3.</t>
    </section>
    <section anchor="serialization-checking">
      <name>Serialization Checking</name>
      <t>Serialization checking rejects input which, while well-formed CBOR, does not conform to a particular serialization rule set it is enforcing.
For example, a decoder checking for deterministic serialization will error out if map keys are not in the required sorted order.
Likewise, a decoder checking for ordinary serialization will reject any CBOR data item that is not encoded in its shortest form.</t>
      <t>This type of checking goes beyond the basic requirement of verifying that input is well-formed CBOR.
The data rejected by serialization checking is well-formed; it is rejected because it violates additional serialization constraints.</t>
      <section anchor="serialization-checking-use-cases">
        <name>Serialization Checking Use Cases</name>
        <t>Some applications that rely on deterministic serialization may choose serialization checking in order to ensure that the data they consume is truly deterministic and that the assumptions their logic makes about determinism hold.</t>
        <t>Some protocol environments may use serialization checking to minimize representational variants as a strategy to improve interoperability.
Discouraging variants early prevents them from compounding.
See <xref target="RFC9413"/> on maintaining robust protocols.</t>
        <t>Serialization checking may enhance security in certain contexts, but such checking is never a substitute for correct and complete CBOR input validation.
All CBOR decoders — regardless of their capabilities, modes, or optional features — must always perform full input validation. This includes rejecting CBOR features the decoder does not support.
For example, a decoder that does not support indefinite-length items must reject them because they are unsupported, not because it is acting as a checking decoder.</t>
        <t>Decoders that fail to perform this essential input validation are fundamentally inadequate and represent a security risk.
The appropriate remedy is to fix their input validation, not to add the serialization checking described here.</t>
      </section>
    </section>
    <section anchor="ByteStringWrapping">
      <name>CBOR Byte String Wrapping</name>
      <t>This appendix provides non-normative guidance on byte-string wrapping of CBOR.
It applies primarily to tag 24 and the CDDL .cbor and .cborseq control operators, but also to the serialization-specifying control operators described in <xref target="CDDL-Operators"/>.</t>
      <section anchor="purpose">
        <name>Purpose</name>
        <dl>
          <dt>Error isolation:</dt>
          <dd>
            <t>Wrapping CBOR in a byte string prevents encoding errors in the wrapped data from causing the enclosing CBOR to fail during decoding.
(CBOR decoding generally halts at the first error and lacks internal length redundancy found in formats like ASN.1/DER.)</t>
          </dd>
          <dt>CBOR library support for signing and hashing:</dt>
          <dd>
            <t>When wrapped CBOR needs to be signed or hashed, its original encoded bytes must be available.
Most CBOR libraries cannot directly extract the raw bytes of substructures, but byte-string wrapping provides direct access to the exact bytes for signing or hashing.</t>
          </dd>
          <dt>Protocol embedding:</dt>
          <dd>
            <t>Byte-string wrapping is generally useful when messages from one CBOR-based protocol need to be embedded within another CBOR protocol.</t>
          </dd>
          <dt>Special map keys:</dt>
          <dd>
            <t>Some CBOR libraries only support simple, non-aggregate map keys (e.g., integers or strings).
To use complex data types like arrays and maps as map keys, they can be wrapped in a byte string.</t>
          </dd>
        </dl>
      </section>
      <section anchor="wrapping-recommendations">
        <name>Wrapping Recommendations</name>
        <t>The serialization requirements for the wrapping CBOR may differ from those for the wrapped CBOR.
CBOR itself imposes no universal rule that they must match; this is determined by the design of the wrapping protocol.</t>
        <t>The wrapping protocol should not impose serialization requirements on the wrapped message.
The two should be treated as independent entities.
This approach avoids potential conflicts between serialization rules.</t>
        <t>For example, assume protocol XYZ wraps protocol ABC.
If protocol ABC requires Canonical CBOR as specified in <xref section="3.9" sectionFormat="of" target="RFC7049"/> (e.g., <xref target="CTAP2"/> from WebAuthn) while protocol XYZ requires deterministic serialization, <xref target="DeterministicSerialization"/>, a conflict would arise.</t>
        <t>Most CBOR data to be signed or hashed does not require a specific serialization.
CBOR, being a modern, fully specified, binary protocol, does not need canonicalization, wrapping, or armoring like other data representation formats such as JSON.
See the discussion in <xref target="WhenDeterministic"/>.</t>
      </section>
      <section anchor="cbor-library-implementation-suggestion">
        <name>CBOR Library Implementation Suggestion</name>
        <t>A straightforward implementation strategy is to instantiate a second CBOR encoder or decoder for the wrapped message.
However, this may be suboptimal in memory-constrained environments, as it may require both a duplicate copy of the wrapped data and an additional encoder/decoder instance.</t>
        <t>A more efficient approach can be for the CBOR library to treat the wrapped CBOR like a container (similar to arrays or maps).
Many CBOR implementations already handle arrays and maps as containers without requiring a separate instance.
Similarly, a byte-string wrapping encoded CBOR can be treated as a container that always contains exactly one item.</t>
      </section>
    </section>
    <section anchor="COSESerialization">
      <name>Serialization for COSE</name>
      <t><cref anchor="to-be-removed2">This is new in the -02 draft. It aims to be a comprehensive example of some key concepts. There may not be consensus for this appendix.</cref></t>
      <t>COSE <xref target="RFC9052"/> is a framework protocol, not and end-end protocol.
It has many messages types, allows many algorithms and leaves serialization open for most protocol elements.
It does hashing and signing.
It is thus a good framework protocol to make an example out of.</t>
      <t>This focuses on COSE_Sign1 (<xref section="4.2" sectionFormat="of" target="RFC9052"/>) as the simplest COSE structure that can illustrate several concepts described in this document.
COSE_Sign1 serialization can be discussed in three parts:</t>
      <ul spacing="normal">
        <li>
          <t>The payload</t>
        </li>
        <li>
          <t>The Sig_structure (<xref section="4.4" sectionFormat="of" target="RFC9052"/>).</t>
        </li>
        <li>
          <t>The encoded message (the header parameters and the array of four that is the COSE_Sign1)</t>
        </li>
      </ul>
      <section anchor="cose-payload-serialization">
        <name>COSE Payload Serialization</name>
        <t>The payload may or may not be CBOR, but let’s assume it is, perhaps a CWT or EAT.
The payload is transmitted from the signer/sender fully in tact all the way to the verifier/receiver.
Because it is transmitted fully in tact, CBOR is a binary protocol and intermediaries do not do things like wrap long lines or add base 64 encoding or such, it is not special in anyway and COSE imposes no serialization restrictions on it at all.
That is, it can use any serialization it wants.
The serialization is selected by the protocol that defines the payload, not by COSE.</t>
        <t>This highlights the principle that determinism is often NOT needed for signing and hashing described in <xref target="WhenDeterministic"/>.</t>
        <t>It is also worth noting that the payload is byte string wrapped.
This is not for determinism or armoring or canonicalization.
It is so that the payload can be any data format, including not CBOR.
It is also so CBOR libraries can return the CBOR-encoded payload for processing by the verification algorithms
Most CBOR libraries do not provide access to chunks of encoded CBOR in the middle of a message.</t>
        <t>This is an example of byte string wrapping described in <xref target="ByteStringWrapping"/>.</t>
      </section>
      <section anchor="cose-sigstructure">
        <name>COSE Sig_structure</name>
        <t>The Sig_struct is not conveyed from the sender to the receiver, but rather constructed independently by the sender and reciever.
This is the input to the signing process so it must be deterministic.
That is, COSE explicitly requires this to be deterministicall encoded so that both the sender and receiver construct exactly the same encoded CBOR.
<xref section="9" sectionFormat="of" target="RFC9052"/> gives this requirement.
The COSE requirement is the same as deterministic serialization <xref target="DeterministicSerialization"/> (unless floating-point numbers with NaN payloads appear in a header parameter).</t>
        <t>This is an example of the need for deterministic serialization for signed data that is not transmitted in its signed form. See <xref target="WhenDeterministic"/>.</t>
      </section>
      <section anchor="the-encoded-message">
        <name>The Encoded Message</name>
        <t>A COSE_Sign1 structure is an array of four elements containing, in order, two header parameter chunks, the payload, and the signature.
The two header parameter chunks are maps that hold the various header parameters.
COSE places no serialization requirements on these elements.
The COSE protocol functions correctly regardless of the specific CBOR serialization used,as long as the decoder can decode what the encoder sends.</t>
        <t>In this respect, the serialization of this portion of a COSE message is no different from that of any other CBOR-based protocol.
Indefinite-length items MAY be used, and fixed-length (i.e., non–shortest-length) CBOR encodings are permitted.
The only requirement is that the encoded data be decodable by the receiver.</t>
        <t>That said, for most use cases and for practical interoperability reasons, ordinary serialization is a good choice for this part of the COSE_Sign1 structure.</t>
        <t>This serves as an example of the general recommendations for CBOR-based protocols described in this document and summarized in TODO:Recommendations Reference.</t>
      </section>
    </section>
    <section anchor="examples-and-test-vectors">
      <name>Examples and Test Vectors</name>
      <t>TODO -- complete work and remove this comment before publication</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="R." surname="Mahy" fullname="Rohan Mahy">
        <organization>Rohan Mahy Consulting Services</organization>
        <address>
          <email>rohan.ietf@gmail.com</email>
        </address>
      </contact>
      <contact initials="J." surname="Hildebrand" fullname="Joe Hildebrand">
        <organization/>
        <address>
          <email>hildjj@cursive.net</email>
        </address>
      </contact>
      <contact initials="W." surname="McNally" fullname="Wolf McNally">
        <organization>Blockchain Commons</organization>
        <address>
          <email>wolf@wolfmcnally.com</email>
        </address>
      </contact>
      <contact initials="C." surname="Borman" fullname="Carsten Borman">
        <organization>Universität Bremen TZI</organization>
        <address>
          <email>cabo@tzi.org</email>
        </address>
      </contact>
      <contact initials="A." surname="Rundgren" fullname="Anders Rundgren">
        <organization/>
        <address>
          <email>anders.rundgren.net@gmail.com</email>
        </address>
      </contact>
      <contact initials="V." surname="Goncharov" fullname="Vadim Goncharov">
        <organization/>
        <address>
          <email>vadimnuclight@gmail.com</email>
        </address>
      </contact>
      <contact initials="K." surname="Takayama" fullname="Ken Takayama">
        <organization/>
        <address>
          <email>ken.takayama.ietf@gmail.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAO92j2kAA7V96ZIb2XXmfzxFBhkxZlkAuqpItkS2Jau4dIsabkFWu72M
LSeABJDNRCaUmagizG6H3mH8ZyJm/s2bzJvoSeZ8Z7lLLiA1jmEo1CSAvHmX
c89+vjObzSY3j5P7k0mbt0X2OHn65M275H1W52mR/1va5lWZpOUqeZa1Wb3L
y7zZTdLFos5uhn46WVXLMt3RMKs6XbezPGvXs+WiqmdN+LNZkbZZ006Wafs4
adrVZLKiDx5PllXZZGVzaB4nbX3IJk1bZ+nucfLi+fW3k3xf88dNe3l+/uj8
cpLSl4+T5M7Vfl/kSx644bm+y9Jidp3vsjuT26r+sKmrw15mO/mQHemj1eME
k5rcZOWBXpvQn/BH+Hd73NMqfqDH83KTfIdv+fNdmhfy9G+xuHlVb/jztF5u
Hyd3tm27bx5/9RV+ho/ym2xuv/sKH3y1qKvbJvsKI3x1R16dt9vDgh7mjbrd
fHVy7+5M6E96aLdV/XgyS/KSNuvlPHl5KFeLIl1lNKScwMv0UGflMou+omk8
piNbHuq8PSbX26yqj8nLl0/pq0yWVmyK3zb6g5a/ny+rHb2TDqet88WhlRfL
S95V27RMXqXbowyeljrN8KvkKZ3MoWixk0QuN/kya/wLa/yON+m3G3zCr7Px
f19lye/yYpUtajpZ/9CWPvvxx9/SNBtscZm17pEfqmKdvFq+TouiP6knRbX8
sNymeUmT2u1oXn7MW3rwt/i/HdEwPRxN5GlaN21WJk+qepeWvXG/L2kaNJf2
//zvNnlSZzv66fU/vvCDL9NF9dv233ImGBv0qlzRQ8k7OqANnZX/dcpfzGv9
Ausb2Jy/S1f5LvmuKmlBdXXjH7/BF+VhWeSb7dCD/xWzSz+kx3SX+qc+0Ita
/bR7HpMS625pkbgu7759enlx8ejxhP7+/vrZowd8h2Z6q+ivv36M3/zq0YNH
E/n5r76+OKevV6sCH7x4/vz5Lx/KU0mb1puM+IBdnTzLso/7oqpxc7KMbw6x
lQNtafvVr3759deXl4/kQWFYGCx539KWpfUqWVd18m1RpSC22dsqL9vkikh5
u8vafCk3Ve8O/j6TC4Eh+N/MhpJ1WjQZ/xs3L2vycl3J7xN7G3EQWsDs8vzi
kX7x7M2Lx8nF+fzi4vzRV/gVbcwc389tzlj41eurOXbhsf8Xbnibbhr6aII3
BfvMO3f/0SWR3w/XE/3g0YOL+4/dP84f4ts375/bJ788fyAHkzy9vnp7qfM2
5l7ktIvJdZVc0S7QX8E3acfe1lVbLasiubnU33cOZZ2vKroTeUoMhU+k2WfL
hj+e3VzOz2f7hjfj/OL+uXy65FfN2mqWhq+a7fVVvcfm23ZXyNvDI7Iz+uH+
U/l3eEb45HX6+kn1kY67s1QwUXCcFyVJrn0N+dUMDJ/M9L9Jsj4UhbG1RVa3
yesjSSCi/uC9vz8Ux2lyeX55MbxRS31tHrwVN+irat/mO+UXvNS7ZVrOFjxz
XseL2bO5cp7Zyklb2jYWAqCO2WyWpAuaUrpsJ5Prbd4kdjGSVbbOy6xJ2ttK
5HIkNEhG3CGxl5cpsftYnLDEvBO9MP7F/M7kRZvQdlckbGg7Vocl3rPNEjyS
3NlkZVanRXfYtmJmwz/Exk6JK9EPFkVGv2yTah0/kGB/IMBlISt6V/LpEy/9
55/nk+uKdnmb1VOM12DUOstw2XdJmtD27gtawODAmGra0m+IP/NkdumPFUs/
+mV/p5IDjb5Mm6yZY4vxrs5wpHYkBU69OPKb6WMs6paYDI1fNfjrCl/mmBUO
h1azOPK7+X300O5Q0gzmeqa7nDgCEfNd0CpvMM/k093wnz9PJk/SJSszdGDE
I3hWCf2u6Slr/jR39Da6svu2SYha6O7d0Nx0c3cVTbPB7pLCxIJolx5p8s0W
h0caXp7d0qzpuYV/seNQ9Kp1TjJxPkaJJT3d2bo6xRniQGiebZvt9nxD6W1L
2tF8fdQNDM8+ucfnV2Y0bfmV6npnc3lxuqdlpcttkpWgLiHNeE/q7I+HnIUy
7QO9bZElJGLqrGlo0BV9s2xxXmXipBy9X4UczaBIy80h3WRT3lx5HqpqVeRg
CrydvE8kKTZFxlRRZ8TzoJsk4JRu0t0564k0sjQiSryhAeXkS/wT4szTUS36
bZ+SEkfdRYUNpdMX8u2egN0uOoaMZg1a5vMkpoMDmyak3znqZh5GukW5ydKA
xOkv6bG/yxicFEdSETu3l98SXAaa2be0rOxjis+mtAfZOqtreio+NRpuaDTa
viWrbp0rhtlVNPvmsN9XxLx560pecN5msyIrN+2WbvWbQT6IYcPNwb9tH3ip
4GVjM7VX9183TcA223C0wV29BY2PrAxs4i4ZNfguIy1HNvv9YbejVUwm//Qv
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

-->

</rfc>
