<?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-04" 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-04"/>
    <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="28"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <keyword>cbor</keyword>
    <abstract>
      <?line 106?>

<t>This document defines two CBOR serializations: "preferred-plus serialization" and "deterministic serialization."
It also introduces the term "general serialization" to name the full, variable set of serialization options defined in RFC 8949.
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 115?>

<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>CBOR intentionally allows multiple valid serializations of the same data item.
For example, the array [1, 2] can be serialized in more than one way:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Type</th>
            <th align="left">Description</th>
            <th align="left">Bytes</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Definite-length</td>
            <td align="left">The array length (2) is encoded at the beginning</td>
            <td align="left">0x82 0x01 0x02</td>
          </tr>
          <tr>
            <td align="left">Indefinite-length</td>
            <td align="left">The array is terminated by the break byte (0xff)</td>
            <td align="left">0x9f  0x01 0x02 0xff</td>
          </tr>
        </tbody>
      </table>
      <t>Similar variation exists for integers, maps, strings, and floating-point numbers.</t>
      <t>This variability is deliberate.
CBOR is designed to allow encodings to be selected according to the constraints and requirements of a particular environment.
The flexibility is a core design feature.
(CBOR is not unique in this regard; BER and DER encoding for ASN.1 are a similar design choice.)</t>
      <t>For example, indefinite-length serialization is suited for streaming large arrays in constrained environments, where the total length is not known in advance.
Conversely, definite-length serialization works well to decode small arrays in constrained environments.</t>
      <t>As a result, CBOR libraries and protocol implementations commonly support only the serialization forms required for their intended use cases.
This behavior is expected and aligns with CBOR’s design goals.</t>
      <t>However, this flexibility introduces two challenges: interoperability and determinism.</t>
      <section anchor="interoperability">
        <name>Interoperability</name>
        <t>The interoperability challenge arises because partial implementations are both permitted and expected.
For example, an encoder might transmit an indefinite-length array to a decoder that does not support indefinite-length encodings.
Both implementations are compliant with <xref target="STD94"/>.</t>
        <t>Decoders, in particular, frequently choose not to support all serialization forms.
This may be due to operation in constrained environments or because implementing a full general decoder is significantly more work
(particularly in languages like C and Rust, which lack built-in support for dynamic arrays, maps, and strings).</t>
        <t>In practice, most CBOR usage occurs outside highly constrained environments.
This makes it both feasible and beneficial to define a common serialization suitable for general use.</t>
        <t>Protocol specifications can reference such a serialization rather than restating detailed encoding rules, and library implementations can prioritize support for it.</t>
        <t>This document defines that serialization: preferred-plus serialization.</t>
      </section>
      <section anchor="determinism">
        <name>Determinism</name>
        <t>The determinism challenge arises because there are multiple ways to serialize the same data item.
The example serialization of the array [1,2] above shows this.
This is a problem in some protocols that hash or sign encoded CBOR.</t>
        <t>Many approaches to deterministic serialization are possible, each optimized for different environmental constraints or application requirements.
However, as noted earlier, the majority of CBOR usage occurs outside constrained environments.
It is therefore practical to define a single deterministic serialization suitable for general use.</t>
        <t>Protocol specifications and library implementations can reference this serialization instead of defining their own deterministic encoding rules.</t>
        <t>This document defines that serialization: deterministic serialization.</t>
      </section>
      <section anchor="relation-to-rfc-8949">
        <name>Relation to RFC 8949</name>
        <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.</t>
        <t>Preferred-plus serialization as defined here is largely the same as preferred serialization without indefinite-lengths, so it is largely interchangeable with what is commonly implemented.</t>
      </section>
    </section>
    <section anchor="Recommendations">
      <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 preferred-plus 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 preferred-plus serialization.
This can be achieved by conforming to the decoding requirements in <xref target="PreferredPlusDecoding"/> and by making the encoding behavior defined in <xref target="PreferredPlusEncoding"/> the default or primary encoding API.</t>
          <t>Preferred-plus serialization is recommended because it is suitable for the majority of CBOR-based protocols.
In practice, preferred-plus 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 preferred-plus 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 preferred-plus serialization; therefore, if deterministic serialization is fully supported, explicit support for preferred-plus 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 preferred-plus serialization.
For example, it is recommended that a library implementing CWT or COSE implement preferred-plus 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 preferred-plus 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>Floating-point values may be encoded using any length (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>Preferred-plus serialization (<xref target="PreferredPlusSerialization"/>) 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.
This is also true in practice of other protocols implementations like those for <xref target="RFC9052"/>.</t>
      </section>
    </section>
    <section anchor="PreferredPlusSerialization">
      <name>Preferred-Plus Serialization</name>
      <t>This section defines a serialization named "preferred-plus serialization."</t>
      <section anchor="PreferredPlusEncoding">
        <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="PreferredPlusDecoding">
        <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 byte 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-preferred-plus-serialization">
        <name>When to use preferred-plus serialization</name>
        <t>The purpose of preferred-plus 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>Preferred-plus 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 preferred-plus 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 preferred-plus serialization may not be suitable.
Otherwise, for the vast majority of use cases, preferred-plus serialization provides interoperaibility, small encoded size and low implementation costs.</t>
      </section>
      <section anchor="RelationToPreferred">
        <name>Relation To Preferred Serialization</name>
        <t>Preferred-plus 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 preferred-plus serialization is already largely supported.</t>
        <t><xref section="3" sectionFormat="of" target="STD94"/> 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 by many implementers until several 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 preferred-plus 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="PreferredPlusSerialization"/> and <xref target="NaN"/> for details on, and the 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 preferred-plus serialization (<xref target="PreferredPlusSerialization"/>), 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 preferred-plus serialization defined in <xref target="PreferredPlusEncoding"/> 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"/> / <xref section="4.2.3" sectionFormat="of" target="STD94"/>.</t>
          </li>
        </ol>
      </section>
      <section anchor="DeterministicDecoding">
        <name>Decoder Requirements</name>
        <ol spacing="normal" type="1"><li>
            <t>Decoders MUST meet the decoder requirements described in <xref target="PreferredPlusDecoding"/>.
That is, deterministic encoding imposes no requirements over and above the requirements for decoding preferred-plus 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-preferred-plus-serialization">
          <name>Decoding Deterministic Serialization and Relation to Preferred-Plus Serialization</name>
          <t>The only difference between preferred-plus and deterministic serialization is that in deterministic serialization, maps are required to be sorted by their keys.
Preferred-plus 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 preferred-plus serialization (<xref target="PreferredPlusSerialization"/>).
Because of this property, deterministic serialization can always be used in place of preferred-plus 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 preferred-plus encoding entirely.</t>
          <t>However, note that deterministic serialization is never a substitute for general serialization where uses cases may require indefinite lengths, separate big numbers from integers in the data model, or need non-trivial NaNs.</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 preferred-plus 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">.prefp</td>
            <td align="left">Use preferred-plus serialization for a data item</td>
          </tr>
          <tr>
            <td align="left">.prefpseq</td>
            <td align="left">Use preferred-plus serialization for a CBOR sequence</td>
          </tr>
          <tr>
            <td align="left">.dtrm</td>
            <td align="left">Use deterministic serialization for a data item</td>
          </tr>
          <tr>
            <td align="left">.dtrmseq</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 preferred-plus 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 .dtrm 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">.prefp</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.prefpseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.dtrm</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.dtrmseq</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="11" month="February" year="2026"/>
            <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-17"/>
        </reference>
        <reference anchor="UML" target="https://www.omg.org/spec/UML/2.5.1/PDF">
          <front>
            <title>OMG Unified Modeling Language (OMG UML) Version 2.5.1</title>
            <author>
              <organization/>
            </author>
            <date year="2017" month="December"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 578?>

<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">
              <xref target="UML"/></td>
            <td align="left">CDDL</td>
            <td align="left">CBOR</td>
          </tr>
          <tr>
            <td align="left">Implementation Representation</td>
            <td align="left">n/a</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"/>, 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="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, Python 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>Preferred-plus 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-rfc-8949">
        <name>Clarification of RFC 8949</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>Non-trivial NaNs are not permitted in either preferred-plus or deterministic serializations.
This is in contrast to preferred serialization and <xref section="4.2.1" sectionFormat="of" target="STD94"/>.</t>
        <t>Note that the prohibition of non-trivial NaNs is the sole difference between deterministic serialization (<xref target="DeterministicSerialization"/>) and <xref section="4.2.1" sectionFormat="of" target="STD94"/>.</t>
        <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>Because preferred serialization of non-trivial NaNs is difficult and error-prone to implement, many CBOR implementations don't encode and/or decode non-trivial NaNs, or don't encode or decode them 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 preferred-plus 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 preferred-plus and deterministic serialization, they are theoretically supported by <xref target="STD94"/>.
General serialization does support them.</t>
        <t>New protocol designs SHOULD avoid 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 preferred-plus and deterministic serialization.
Accordingly, <xref target="PreferredPlusSerialization"/> 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="PreferredPlusSerialization"/> 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 preferred-plus 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"/>.
It also applies when prose states the byte-string wrapping requirement such as for the COSE protected headers.
See <xref target="COSESigStructure"/>.</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="COSESigStructure">
        <name>COSE Sig_structure</name>
        <t>The Sig_structure is not transmitted from the sender to the receiver; instead, it is constructed independently by both parties.
Because it is the input to the signing process, it must use deterministic serialization.
COSE therefore explicitly requires deterministic encoding so that both the sender and receiver produce identical encoded CBOR representations.
This requirement is specified in <xref section="9" sectionFormat="of" target="RFC9052"/>.</t>
        <t>In this case, the COSE requirement is effectively equivalent to the deterministic serialization defined in <xref target="DeterministicSerialization"/>, since no NaN values are involved.
It is also equivalent to preferred-plus serialization as defined in <xref target="PreferredPlusSerialization"/>, because the Sig_structure contains no maps.</t>
        <t>The determinism requirement does not apply to the protected headers incorporated into the Sig_structure.
Deterministic encoding is unnecessary because these headers are transmitted in the exact encoded form in which they are included in the Sig_structure.</t>
        <t>Furthermore, determinism requirements do not extend into CBOR inside of byte strings.
Once CBOR data is wrapped in a byte string, its internal encoding is treated as opaque and is not subject to surrounding serialization constraints.</t>
        <t>This illustrates the general need for deterministic serialization when signed data is reconstructed rather than transmitted in the exact form that was signed. 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, preferred-plus 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/>
        <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:
H4sIAMs2o2kAA7V92ZLb6JXmPZ8CIUVMK22SykxJVZaq7XZqqbI82kKZ5epu
j7sbJEESJRCgATBTbKk6/A4zNxMxczdvMm/iJ5nzneVfAJCpasfookoigH89
+zqZTEbXT5IHo1Gbt0X2JHn29O375DKr87TI/z1t86pM0nKRPM/arN7kZd5s
RulsVmfXQ6+OFtW8TDc0zKJOl+0kz9rlZD6r6kkTvjYp0jZr2tE8bZ8kTbsY
jRb0w5PRvCqbrGx2zZOkrXfZqGnrLN08SV6+uPp2lG9r/rlpz09PH5+ej1J6
+CRJ7lxst0U+54EbXuv7LC0mV/kmuzO6qeoPq7rabWW1ow/Znn5aPEmwqNF1
Vu5o2oT+hC/h3+1+S7v4gT7Py1XyHZ7y75s0L+Tr32Jz06pe8e9pPV8/Se6s
23bbPLl/H6/hp/w6m9p79/HD/Vld3TTZfYxw/45Mnbfr3Yw+5oO6Wd0/enZ3
RvQn3bXrqn4ymiR5SYf1apq82pWLWZEuMhpSbuBVuquzcp5Fj2gZT+jK5rs6
b/fJ1Tqr6n3y6tUzepTJ1opV8dtGX2j5+XRebWhOupy2zme7ViaWSd5X67RM
XqfrvR+hxm+869+u8At/bx/8vsqS3+XFIpvVdFX+ozX99uOPv6V5G5xZmbXu
kx+qYpm8nr9Ji2IvW0hLPYwnydOimn+Yr9O8TJ5Vmw2BgB/zhj78Lf6zIaCk
j6OFPEvrps3K5GlVb9KyN+73JS2D1tL+3//TJk/rbEOvXv3zSz/4PJ1Vv23/
PWcIsEEvygV9lLynE1/R4fu3U34wrfUB9jdwOH9IF/km+a4qaUN1de0/v8aD
cjcv8tV66MP/itWlH9J9ukn9Vx9oolZ/7d7HqMS+W9ok4P/9t8/Oz84ePxnR
3y+vnj9+yEgxUTShv/76Cd751eOHj0fy+q++Ojulx4tFgR9evnjx4utH8lXS
pvUqI8Q2XMizLPu4LaoaqJBljApEJ3Z0pO39X3391Vfn54/lQ6FAGCy5bOnI
0nqRLKs6+baoaKnlavKuyss2uSDYXG+yNp8L6iky4O8TgXAMwf9mupIs06LJ
+N9ApazJy2Ul7yc2G5EE2sDk/PTssT54/vblk+TsdHp2dvr4Pt6ig5ni+dTW
jI1fvLmY4hSe+H8BZdt01dBPI8wUnDOf3IPH5wR+P1yN9IfHD88ePHH/OH2E
p28vX9gvX58+lItJnl1dvDvXdRu1LnI6xeSqSi7oFOivIIR0Yu/qqq3mVZFc
n+v7nUtZ5ouKcCJPiULwjTTbbN7wz5Pr8+npZNvwYZyePTiVX+c81aStJmk4
1WSrU/U+m67bTSGzh1dkd/TDg2fy7/CO8Mub9M3T6iNdd2eroIogxi9LYkXb
GgypGRg+mej/k2S5KwqjU7OsbpM3e2IpBP3BvL/fFftxcn56fjZ8UHOdNg9m
BQbdr7ZtvlF6wVu9W6blZMYr5328nDyfKuWZLBz7pGNjqi5X+v3rV/Eu377+
DrRnmWeL5HW1yArs+FVarnbpKkvu8ePXr06SP4A4EW8+nz6anoX7eZ7Nsw1t
Fns6+3p4Tzc3N9Nqs3L3fp+GvM8j3X/3/FsC28lkkqQzOqt03o5GV+u8SQxj
k0W2zMusSdqbSiSAiD0RN7pDp7TM6jpbTLbFromf32EOfSc6j/iN6Z3RyzYh
aKiIudFtLXZzzLbOEnyS3FllZVanRXfYtmJayC/i3sdENOmFWZHRm21SLeMP
ElwfBAbZzoLmArIlIHHT0VVF57XGIdJ/GwxaZxlI0SZJE7r8bUHrHxwXK01b
eoe4B69lk/5YMbOlN/vHlexo9HnaZM0U54y5OsORlJMUuL9izzPTz9jTDZFA
Gr9q8NcFHuZYFW6INjPb89w8H3202ZW0gqle7CYnekWodheYxOfLK/l0N/zn
T6PR03TOshPdF1EwXlVC7zU92dBf5oZmI4KybZuEQIYowzWtjc/206cNoLn5
6afpiOQzZpObdE+Lb9a4OxIo8+yGVk3fzfzEjn7SVMucODZtgncFdCzxM9CL
oKUgqSrZ7Io2p1Ogqy/yRfck6QJwKA2ghHAlTfI220xH3xK5zD6mOD2+bjrx
mhb2xzPCoD/R3ZTJzF+KbGZDvAz3TFBU0vmne0Lmz8kViYxJ9OczYWMzr3MG
teSL/nxOnu5JNu79PPo86f8Z+u2WPwc+ofFprYQJdCaTIitXBF1YzJU7D/3x
3vkJrpYEywo3S6COI5tlRB9LkKrPyenHX53Tf07P8J9zv36CtkVnhnB8GlSg
KA0AmPSM9AP9g5Dt3unH5fKEx3+8TIIJ8DuNPxpdEjkmTBG85xPPPhJ9aViE
ALysCOjGBHVb+i/RNlou/QUAvDT5YsvyRbkDARWMpGUJHckLIDEIIdFkekzL
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
AA==

-->

</rfc>
