<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-packed-18" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Packed CBOR">Packed CBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-18"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="M." surname="Gütschow" fullname="Mikolai Gütschow">
      <organization abbrev="TU Dresden">TUD Dresden University of Technology</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>mikolai.guetschow@tu-dresden.de</email>
      </address>
    </author>
    <date year="2026" month="January" day="07"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 71?>

<t>The Concise Binary Object Representation (CBOR, RFC 8949 == STD 94) 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.</t>
      <t>CBOR does not provide any forms of data compression.
CBOR data items, in particular when generated from legacy data models,
often allow considerable gains in compactness when applying data
compression.
While traditional data compression techniques such as DEFLATE (RFC 1951) can work well for CBOR encoded data items, their disadvantage is
that the recipient needs to decompress the compressed form before
it can make use of the data.</t>
      <t>This specification describes Packed CBOR, a set of CBOR tags
and simple values that enable a simple transformation of an original
CBOR data item into a Packed CBOR data item that is almost as easy to
consume as the original CBOR data item.  A separate decompression
step is therefore often not required at the recipient.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
The present revision -18 is a work-in-progress release in
preparation for another cbor-packed side meeting.
The wording of the present revision continues to make use of
the tunables A/B/C to be set to specific numbers before completing
the Packed CBOR specification; not all the examples may fully
align yet.
Specifically, the new text about using the reference data item
allocations for other mechanisms than the cbor-packed one defined
here should enable us to revert to A=16.</cref></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-packed/"/>.
      </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/cbor-packed"/>.</t>
    </note>
  </front>
  <middle>
    <?line 118?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR, <xref target="STD94"/>) 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.</t>
      <t>CBOR does not provide any forms of data compression.
CBOR data items, in particular when generated from legacy data models,
often allow considerable gains in compactness when applying data
compression.
While traditional data compression techniques such as DEFLATE <xref target="RFC1951"/> can work well for CBOR encoded data items, their disadvantage is
that the recipient needs to decompress the compressed form before
it can make use of the data.</t>
      <t>This specification describes Packed CBOR, a set of CBOR tags
and simple values that enable a simple transformation of an original
CBOR data item into a Packed CBOR data item that is almost as easy to
consume as the original CBOR data item.  A separate decompression
step is therefore often not required at the recipient.</t>
      <t>This document defines the Packed CBOR format by specifying the
transformation from a Packed CBOR data item to the original CBOR data
item; it does not define an algorithm for a packer.
Different packers can differ in the amount of effort they invest in
arriving at a reduced-redundancy packed form; often, they simply employ the
sharing that is natural for a specific application.</t>
      <t>Packed CBOR can make use of two kinds of optimization:</t>
      <ul spacing="normal">
        <li>
          <t>item sharing: substructures (data items) that occur repeatedly
in the original CBOR data item can be collapsed to a simple
reference to a common representation of that data item.
The processing required during consumption is limited to following
that reference (plus carrying out integration tags
(<xref target="sec-integration-tags"/>), if these are in use).</t>
        </li>
        <li>
          <t>argument sharing: application of a function with two arguments, one of which is shared.
Data items (strings, containers) that share a prefix
or suffix, or more generally data items that can be
constructed from a function taking a shared argument and a rump data item,
can be replaced by a reference to the shared argument plus a rump data
item.
For strings and the default "concatenation" function, the processing
required during consumption is similar to
following the argument reference plus that for an indefinite-length
string.</t>
        </li>
      </ul>
      <t>A specific application protocol that employs Packed CBOR might employ
both kinds of optimization or limit its use to item
sharing only.</t>
      <section anchor="sec-extensibility-approach">
        <name>Extensibility Approach</name>
        <t>Packed CBOR is defined in two main parts:</t>
        <ul spacing="normal">
          <li>
            <t>Data items for referencing packing tables
(<xref target="sec-packed-cbor"/>), the set of which defined here which is intended
to be the stable, common component of all uses of Packed CBOR, and</t>
          </li>
          <li>
            <t>Mechanisms for setting up packing tables
(<xref target="sec-table-setup"/>), which carries the main extension point, populated
in this document by two table setup tags.
Such setup information is usually conveyed in a tag and then applies
to the content of the tag.
Setup information can also be contained in environmental information
that applies to an encoded CBOR data item, e.g., a media type can set
up a static dictionary that applies to CBOR data items in
representations that are of that media type.</t>
          </li>
        </ul>
        <t>Sections <xref format="counter" target="sec-function-tags"/>, <xref format="counter" target="sec-integration-tags"/>, and
<xref format="counter" target="sec-standin"/> provide additional extension points, each of which is
populated by one or more extensions in this document or elsewhere.
These extensions can be selected by an application protocol that makes
use of Packed CBOR.</t>
        <t>Beyond the extensibility approach shown in the present document, new
CBOR tags (or media types etc.) could also be defined such that they
(1) modify (or completely swap out) the way the referencing data items
(simple values and tags)
defined in this document operate and/or (2) define new referencing data items.
(From the point of view of the present specification, these tags or
media types then act as setup tags setting up tables that control
subtrees with semantics
different from the present specification; from the point of view of the
specification defining these tags or media types this simply initiates
the use of the referencing data items for their specific purposes.)
An example for this is not shown in the present document so that there
is a coherent
interpretation of the referencing data items defined here; such new
definitions of referencing data items probably should specify how
they interact with parts of Packed CBOR that they do not replace.</t>
        <t>An unpacker can only carry out the tags (and the environmental
information) that it knows how to interpret.
An unpacker that encounters tags that are unknown to it can simply make these
tags available to the application, which then can abort processing if
unknown (or unimplemented) tags are found, or if their interpretation
would require functionality of the unpacker that is not available.
As a shortcut, the application might also provide the unpacker with a
list of tags that the application can process, allowing the unpacker
to abort processing when a tag unknown to it and not on this list is
encountered.</t>
      </section>
      <section anchor="terms">
        <name>Terminology and Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<dl>
          <dt>Original data item:</dt>
          <dd>
            <t>A CBOR data item that is intended to be expressed by a packed data
item; the result of all reconstructions.</t>
          </dd>
          <dt>Packed data item:</dt>
          <dd>
            <t>A CBOR data item that involves packed references (<em>packed CBOR</em>).</t>
          </dd>
          <dt>Packed reference:</dt>
          <dd>
            <t>A shared item reference or an argument reference, expressed by a
reference data item.</t>
          </dd>
          <dt>Reference data item:</dt>
          <dd>
            <t>A data item (tag or simple value) that serves as a packed reference.</t>
          </dd>
          <dt>Reference site:</dt>
          <dd>
            <t>The context of a reference data item.</t>
          </dd>
          <dt>Shared item reference:</dt>
          <dd>
            <t>A reference to a shared item as defined in <xref target="sec-referencing-shared-items"/>.</t>
          </dd>
          <dt>Argument reference:</dt>
          <dd>
            <t>A reference that combines a shared argument with a rump item as
defined in <xref target="sec-referencing-argument-items"/>.</t>
          </dd>
          <dt>Rump:</dt>
          <dd>
            <t>The data item contained in an argument reference that is combined
with the argument to yield the reconstruction.</t>
          </dd>
          <dt>Straight reference:</dt>
          <dd>
            <t>An argument reference that uses the argument as the left-hand side
and the rump as the right-hand side.</t>
          </dd>
          <dt>Inverted reference:</dt>
          <dd>
            <t>An argument reference that uses the rump as the left-hand side
and the argument as the right-hand side.</t>
          </dd>
          <dt>Function tag:</dt>
          <dd>
            <t>A tag used in an argument reference for the argument (straight
references) or the rump (inverted references), causing the
application of a function indicated by the function tag in order to
reconstruct the data item.</t>
          </dd>
          <dt>Integration tag:</dt>
          <dd>
            <t>A tag defined by an application protocol to be used as a shared item
table element in order to signal a non-default procedure to
integrate the shared item into the reference site.</t>
          </dd>
          <dt>Stand-in item:</dt>
          <dd>
            <t>A data item (a tag or a simple value) defined by an
application protocol to stand in for a more complex data item.
Stand-in items are fundamentally independent of Packed CBOR but can
be employed by the application protocol as part of a Packed CBOR
argument reference.</t>
          </dd>
          <dt>Packing tables:</dt>
          <dd>
            <t>The pair of a shared item table and an argument table.</t>
          </dd>
          <dt>Active set (of packing tables):</dt>
          <dd>
            <t>The packing tables in effect at the data item under consideration.</t>
          </dd>
          <dt>Reconstruction:</dt>
          <dd>
            <t>The result of applying a packed reference in the context of given
packing tables; we speak of the <em>reconstruction of a packed reference</em>
as that result.</t>
          </dd>
        </dl>
        <t>The definitions of <xref target="STD94"/> apply.
Specifically: The term "byte" is used in its now customary sense as a synonym for
"octet"; "byte strings" are CBOR data items carrying a sequence of
zero or more (binary) bytes, while "text strings" are CBOR data items carrying a
sequence of zero or more Unicode code points (more precisely: Unicode
scalar values), encoded in UTF-8 <xref target="STD63"/>.
In this specification, the term "argument" is not used in the specific
sense assigned to it in Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, but in its
general sense as an argument of a function.</t>
        <t>Where arithmetic is explained, this document uses the notation
familiar from the programming language C<!-- (including C++14's 0bnnn
binary literals) -->, except that</t>
        <ul spacing="normal">
          <li>
            <t>"<tt>..</tt>" denotes a range that includes both ends given,</t>
          </li>
          <li>
            <t>in the HTML and PDF forms, subtraction and negation are rendered as
a hyphen ("-", as are various dashes), and</t>
          </li>
          <li>
            <t>superscript notation denotes exponentiation.
For example, 2 to the power of 64 is notated: 2<sup>64</sup>.
In the plain-text version of this specification, superscript notation
is not available and therefore is rendered by a surrogate notation.
That notation is not optimized for this RFC; it is unfortunately
ambiguous with C's exclusive-or and requires circumspection
from the reader of the plain-text version.</t>
          </li>
        </ul>
        <t>Examples of CBOR data items are shown
in CBOR Extended Diagnostic Notation (Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> in
conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/> <cref anchor="update">➔ possibly update to</cref> <xref target="I-D.ietf-cbor-edn-literals"/>).
<!-- mention edn-literal here if that completes faster -->
        </t>
      </section>
    </section>
    <section anchor="sec-packed-cbor">
      <name>Packed CBOR</name>
      <t>This section describes the packing tables, their structure, and how
they are referenced.</t>
      <t><cref anchor="resolve">To be resolved before publication:</cref></t>
      <t>To enable discussion of CBOR resources allocated to Packed CBOR, the
packed references are described in terms of three specification
parameters: <tt>A</tt>, <tt>B</tt>, and <tt>C</tt>.
These specification parameters enable creating a precise specification
while the quantitative allocation discussion is ongoing.
They will be replaced by specific chosen numbers when the present
specification is finalized (<xref target="sec-allocation"/>).</t>
      <section anchor="sec-packing-tables">
        <name>Packing Tables</name>
        <t>At any point within a data item making use of Packed CBOR, there is an
<em>active set</em> of packing tables that applies.</t>
        <t>There are two packing tables in an active set:</t>
        <ul spacing="normal">
          <li>
            <t>Shared item table</t>
          </li>
          <li>
            <t>Argument table</t>
          </li>
        </ul>
        <t>Without any table setup, these two tables are empty arrays.
Table setup can cause these arrays to be non-empty, where the elements are
(potentially themselves packed) data items.
Each of the tables is indexed by an unsigned integer (starting
from 0).
Such an index may be derived from information in tags and their
content as well as from CBOR simple values.</t>
        <t>Table setup mechanisms (see <xref target="sec-table-setup"/>) may include all
information needed for table setup within the packed CBOR data item, or
they may refer to external information.  This external information may be
immutable, or it may be intended to potentially grow over time.
In the latter case, the table setup mechanism needs to define how both
backward and forward compatibility is addressed, e.g., how a reference
to a new item should be
handled when the unpacker uses an older version of the external
information.</t>
        <t>If, during unpacking, an index is used that references an item that is
unpopulated in (e.g., outside the size of) the table in use, this <bcp14>MAY</bcp14> be treated as an
error by the unpacker and abort the unpacking.</t>
        <t>Alternatively, the unpacker <bcp14>MAY</bcp14> provide an implementation specific value, enclosed in
the tag 1112, to the application and leave the error handling to the
application.
In the simplest case, this could be <tt>1112(undefined)</tt>, using the
simple value &gt;undefined&lt; as per Section <xref target="RFC8949" section="5.7" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>;
however, the same value cannot be used repeatedly as a map key
within the same map.</t>
        <t>An unpacker <bcp14>SHOULD</bcp14> document which of these two alternatives has been
chosen.
CBOR based protocols that include the use of packed CBOR
<bcp14>MAY</bcp14> require that unpacking errors are tolerated in some positions.</t>
      </section>
      <section anchor="sec-referencing-shared-items">
        <name>Referencing Shared Items</name>
        <t>Shared items are stored in the shared item table of the active set.</t>
        <t>The shared data items are referenced by using the reference data items
in <xref target="tab-shared"/>. The table index (an unsigned integer) is derived
either from the simple value number or the (unsigned or negative) integer N
provided as the content of tag 6. When reconstructing the original data item, such a
reference is replaced by the referenced data item, which is then
recursively unpacked.</t>
        <table anchor="tab-shared">
          <name>Referencing Shared Values</name>
          <thead>
            <tr>
              <th align="left">Reference</th>
              <th align="left">Table Index</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Simple value 0..(A-1)</td>
              <td align="left">0..(A-1)</td>
            </tr>
            <tr>
              <td align="left">Tag 6(N) (unsigned integer N ≥ 0)</td>
              <td align="left">A + 2×N</td>
            </tr>
            <tr>
              <td align="left">Tag 6(N) (negative integer N &lt; 0)</td>
              <td align="left">A − 2×N − 1</td>
            </tr>
          </tbody>
        </table>
        <t>As examples, <cref anchor="A16">assuming <tt>A=16</tt></cref>,
the first 22 elements of the shared item table are referenced by
<tt>simple(0)</tt>, <tt>simple(1)</tt>, ... <tt>simple(15)</tt>, <tt>6(0)</tt>, <tt>6(-1)</tt>, <tt>6(1)</tt>,
<tt>6(-2)</tt>, <tt>6(2)</tt>, <tt>6(-3)</tt>.
(The alternation between unsigned and negative integers for even/odd
table index values — "zigzag encoding" — makes systematic use of
shorter integer encodings first.)</t>
        <!-- (+ 512 -24 -24)464 -->
<!-- (+ 131072 -512 )130560 -->

<t>Taking into account the encoding of these referring data items, there
are A one-byte references, 48 two-byte references, 464 three-byte
references, 130560 four-byte references, etc.
As CBOR integers can grow to very large (or very negative) values,
there is no practical limit to how many shared items might be used in
a Packed CBOR item.</t>
        <t>Note that the semantics of Tag 6 depend on its tag content: An integer
turns the tag into a shared item reference, whereas an array of an
integer and a data item turns it
into an argument reference (<xref target="sec-referencing-argument-items"/>).
All other forms of arguments for Tag 6 are reserved for future updates
to the present specification.
Note also that the tag content of Tag 6 may itself be packed, so it
may need to be unpacked to make this determination.</t>
      </section>
      <section anchor="sec-referencing-argument-items">
        <name>Referencing Argument Items</name>
        <t>The argument table serves as a common table that can be used for argument
references, i.e., for concatenation as well as references involving a
function tag.</t>
        <t>When referencing an argument, a distinction is made between straight
and inverted references; if no function tag is involved, a straight
reference combines a prefix out of the argument table with the rump
data item, and an inverted reference combines a rump data item with a
suffix out of the argument table.</t>
        <table anchor="tab-straight">
          <name>Straight Referencing (e.g., Prefix) Arguments</name>
          <thead>
            <tr>
              <th align="left">Straight Reference</th>
              <th align="right">Table Index</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Tag (256-<tt>B</tt>)..255(rump)</td>
              <td align="right">0..(B-1)</td>
            </tr>
            <tr>
              <td align="left">Tag 6([unsigned integer N, rump]) (N ≥ 0)</td>
              <td align="right">B + N</td>
            </tr>
          </tbody>
        </table>
        <table anchor="tab-inverted">
          <name>Inverted Referencing (e.g., Suffix) Arguments</name>
          <thead>
            <tr>
              <th align="left">Inverted Reference</th>
              <th align="right">Table Index</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Tag (256-<tt>B</tt>-<tt>C</tt>)..(256-<tt>B</tt>-1)(rump)</td>
              <td align="right">0..(C-1)</td>
            </tr>
            <tr>
              <td align="left">Tag 6([negative integer N, rump]) (N &lt; 0)</td>
              <td align="right">C - N - 1</td>
            </tr>
          </tbody>
        </table>
        <t>Argument data items are referenced by using the reference data items
in <xref target="tab-straight"/> and <xref target="tab-inverted"/>.</t>
        <t>For tags 256-<tt>B</tt>-<tt>C</tt> to 255 included, the table index (an unsigned integer) is derived from the tag number.
For tag 6, the table index is derived from the integer N
in the first element of the tag content (unsigned integer for
straight, negative integer for inverted references).
The "rump item" is the second element of the two-element array that is the tag content.</t>
        <t>When reconstructing the original data item, such a reference is
replaced by a data item constructed from the argument data item found
in the table (argument, which might need to be recursively unpacked
first) and the rump data item (rump, again possibly needing to be
recursively unpacked).</t>
        <t>Separate from the tag used as a reference, a tag ("function tag") may
be involved to supply a function to be used in resolving the
reference.  It is crucial not to confuse reference tag and, if
present, function tag.</t>
        <t>A straight reference uses the argument as the provisional left-hand
side and the rump data item as the provisional right-hand side.
An inverted reference uses the rump data item as the provisional
left-hand side and the argument as the provisional right-hand side.</t>
        <t>In both cases, the provisional left-hand side is examined.  If it is a
tag ("function tag"), it is "unwrapped": The function tag's tag number
is used to indicate the function to be applied, and the tag content
(which, again, might need to be recursively unpacked)
is kept as the unwrapped left-hand side.
If the provisional left-hand side is not a tag, it is kept as the
final left-hand side, and the function to be applied is
concatenation, as defined below.</t>
        <t anchor="use-standin">The following procedure applies to the data items of both the provisional right-hand side
and the unwrapped left-hand side (if applicable), independent of each other:
If the data item is one of the explicitly allowed stand-in items (<xref target="sec-standin"/>),
the item that the stand-in item stands for is recursively unpacked.
If the resulting unpacked data item is again an allowed stand-in item, the previous step is repeated.
If the data item is neither a stand-in item, nor further unpackable,
it is taken as the final right-hand or left-hand side, respectively.</t>
        <t>If a function tag was given, the reference is replaced by the result
of applying the indicated unpacking function with the final left-hand side
as its first argument and the final right-hand side as its second.
The unpacking function is defined by the definition of the tag number
supplied.
If that definition does not define an unpacking function, the result
of the unpacking is not valid.</t>
        <t>If no function tag was given, the reference is replaced by the
final left-hand side "concatenated" with the final right-hand side, where
concatenation is defined as in <xref target="sec-concatenation"/>.</t>
        <t>As a contrived (but short) example <cref anchor="B32">assuming <tt>B=32</tt></cref>, if the argument table is
<tt>["foobar", h'666f6f62', "fo"]</tt>, each of the following straight (prefix)
references will unpack to <tt>"foobart"</tt>: <tt>224("t")</tt>, <tt>225("art")</tt>,
<tt>226("obart")</tt> (the byte string h'666f6f62' == 'foob' is concatenated
into a text string, and the last example is not an optimization).</t>
        <!-- 2<sup>28</sup>2<sup>12</sup>+2<sup>5</sup>+2<sup>0</sup> -->

<!-- (- 65536 256)65280 -->

<t>Taking into account the encoding, there are <tt>B</tt> two-byte references,
24 three-byte references, 224 four-byte references, 65280 five-byte
references, etc.
The numbers for inverted (suffix) references are the same, except that
there are <tt>C</tt> two-byte references.
(As CBOR integers can grow to very large (or very negative) values,
there is no practical limit to how many argument items might be used in
a Packed CBOR item.)</t>
      </section>
      <section anchor="sec-concatenation">
        <name>Concatenation</name>
        <t>The concatenation function is defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>If both left-hand side and right-hand side are arrays, the result of
the concatenation is an array with all elements of the
left-hand-side array followed by the elements of the right-hand side
array.</t>
          </li>
          <li>
            <t>If both left-hand side and right-hand side are maps, the result of
the concatenation is a map that is initialized with a copy of the
left-hand-side map, and then filled in with the members of the
right-hand side map, replacing any existing members that have the
same key.
In order to be able to remove a map entry from the left-hand-side
map, as a special case, any members to be replaced with a value of
<tt>undefined</tt> (0xf7) from the right-hand-side map are instead removed,
and right-hand-side members with the value <tt>undefined</tt> are never
filled in into the concatenated map.</t>
          </li>
        </ul>
        <aside>
          <t>NOTES:</t>
          <ul spacing="normal">
            <li>
              <t>One application of the rule for straight references is to supply
default values out of a dictionary, which can then be overridden by
the entries in the map supplied as the rump data item.</t>
            </li>
            <li>
              <t>Special casing the member value <tt>undefined</tt> makes it impossible to
use this construct for updating maps by insertion of or
replacement with actual <tt>undefined</tt> member values; <tt>undefined</tt> as a
member value on the left-hand-side map stays untouched though.
This exception is similar to the one JSON Merge Patch <xref target="RFC7396"/> makes
for <tt>null</tt> values, which are however much more commonly used and
therefore more problematic.</t>
            </li>
          </ul>
        </aside>
        <ul spacing="normal">
          <li>
            <t>If both left-hand side and right-hand side are one of the string
types (not necessarily the same), the bytes of the left-hand side
are concatenated with the bytes of the right-hand side.
Byte strings concatenated with text strings need to contain valid
UTF-8 data.
The result of the concatenation gets the type of the unwrapped rump
data item; this way a single argument table entry can be used to
build both byte and text strings, depending on what type of rump is
being used.</t>
          </li>
        </ul>
        <ul spacing="normal" anchor="implicit-join">
          <li>
            <t>If one side is one of the string types, and the other side is an
array, the result of the concatenation is equivalent to the
application of the "join" function (<xref target="join"/>) to the string as the
left-hand side and the array as the right-hand side.
The original right-hand side of the concatenation determines the
string type of the result.</t>
          </li>
          <li>
            <t>Other type combinations of left-hand side and right-hand side are
not valid.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-discussion">
        <name>Discussion</name>
        <t>This specification uses up a number of Simple Values and Tags,
in particular one of the rare one-byte tags and a good chunk of the one-byte
simple values.  Since the objective is reduced bulk, this is warranted
only based on a consensus that this specific format could be
useful for a wide area of applications, while maintaining reasonable
simplicity in particular at the side of the consumer.
Instead of evolving the set of reference data items, this
specification derives its evolvability from treating the table setup
mechanism as an extension point, which can in effect provide evolved
semantics to the reference data items as they reference the table.</t>
        <t>A maliciously crafted Packed CBOR data item might contain a reference
loop.  A consumer/unpacker <bcp14>MUST</bcp14> protect against that.</t>
        <aside>
          <t>Different strategies for decoding/consuming Packed CBOR are available.<br/>
For example:</t>
          <ul spacing="normal">
            <li>
              <t>the decoder can decode and unpack the packed item, presenting an
unpacked data item to the application.  In this case, the onus of
dealing with loops is on the decoder.  (This strategy generally has
the highest memory consumption, but also the simplest interface to
the application.)  Besides avoiding getting stuck in a reference
loop, the decoder will need to control its resource allocation, as
data items can "blow up" during unpacking.</t>
            </li>
            <li>
              <t>the decoder can be oblivious of Packed CBOR.  In this case, the onus
of dealing with loops is on the application, as is the entire onus
of dealing with Packed CBOR.</t>
            </li>
            <li>
              <t>hybrid models are possible, for instance: The decoder builds a data
item tree directly from the Packed CBOR as if it were oblivious, but
also provides accessors that hide (resolve) the packing.  In this
specific case, the onus of dealing with loops is on the accessors.</t>
            </li>
          </ul>
          <t>In general, loop detection can be handled similarly to how
loops of symbolic links are handled in a file system: A system-wide
limit (often set to a value permitting some 20 to 40 indirections for
symbolic links) is applied to any reference chase.</t>
        </aside>
        <aside>
          <t>NOTE:
The present specification does nothing to help with the packing of CBOR
sequences <xref target="RFC8742"/>; maybe such a specification should be added.</t>
        </aside>
      </section>
      <section removeInRFC="true" anchor="sec-allocation">
        <name>Allocation</name>
        <t><cref anchor="resolve_1">To be resolved before publication:</cref></t>
        <t>To enable discussion of CBOR resources (tags and simple values)
allocated to Packed CBOR, the representation of packed references is
described in terms of three specification parameters: <tt>A</tt>, <tt>B</tt>, and
<tt>C</tt>.</t>
        <t>These specification parameters allow the current specification to be precise
while the quantitative allocation discussion is ongoing.
They will be replaced by specific chosen numbers when the present
specification is finalized.</t>
        <t>The sense of the WG has been to be more conservative in allocating
CBOR resources to Packed CBOR than previous drafts of this document
were.</t>
        <t><tt>A</tt> is the number of 1+0 simple values allocated to shared item
references.
During early development of CBOR, when the bit allocation and thus the
ranges of simple values were originally defined, a range of 16
allocations was kept aside for item sharing.
The allocations for 1+0 simple values were therefore performed from
the top of the range down, i.e., with the block of
false/true/null/undefined being originally assigned to 24..27 (after
the introduction of indefinite length encoding, 20..23).
No further allocation has been performed in this space in the 12 years
since.</t>
        <t>Given that indefinite length encoding effectively took away 4 possible
1+0 simple values, it appears conservative to reduce <tt>A</tt> to <tt>A=12</tt>.</t>
        <t><tt>B</tt> is the number of 1+1 tags allocated to straight argument
references, and <tt>C</tt> is the number of 1+1 tags allocated to inverted
argument references.
A rationale for choosing <tt>C</tt> &lt; <tt>B</tt> might be that straight (prefix)
packing might be more likely than inverted (suffix) packing, hence the
choices of previous drafts were comparable to setting <tt>B=32</tt> and <tt>C=8</tt>.</t>
        <t>This draft proposes to conservatively set <tt>B=8</tt>, but to stay at <tt>C=8</tt>,
as inverted references seem to occur more often than previously
thought.</t>
        <t>Note the nature of Packed CBOR means that all these allocations can be
used for pretty much unlimited purposes by simply defining another
table setup mechanism (media type or table-building tag).</t>
      </section>
    </section>
    <section anchor="sec-table-setup">
      <name>Table Setup</name>
      <t>The reference data items described in <xref target="sec-packed-cbor"/> assume that
packing tables have been set up.</t>
      <t>By default, both tables are empty (zero-length arrays).</t>
      <t>Table setup can happen in one of two ways:</t>
      <ul spacing="normal">
        <li>
          <t>By the application environment, e.g., a media type.  These can
define tables that amount to a static dictionary that can be used in
a CBOR data item for this application environment.
Note that, without this information, a data item that uses such a
static dictionary can be decoded at the CBOR level, but not fully
unpacked.
The table setup mechanisms provided by this document are defined in
such a way that an unpacker can at least recognize if this is the
case.</t>
        </li>
        <li>
          <t>By one or more <em>table-building</em> tags enclosing the packed content.
Each tag is usually defined to build an augmented table by adding to
the packing tables that already apply to the tag, and to apply the
resulting augmented table when unpacking the tag content.
Usually, the semantics of the tag will be to prepend items to one or
more of the tables.
(The specific behavior of any such tag, in the presence of a table
applying to it, needs to be carefully specified.)  </t>
          <t>
Note that it may be useful to leave a particular efficiency tier
alone and only prepend to a higher tier; e.g., a tag could insert
shared items at table index 16 and shift anything that was already
there further along in the array while leaving index 0 to 15 alone.
Explicit additions by tag can combine with application-environment
supplied tables that apply to the entire CBOR data item.  </t>
          <t>
Reference data items in the newly constructed (low-numbered) parts
of the table are usually interpreted in the number space of that table
(which includes the, now higher-numbered, inherited parts), while
reference data items in any existing, inherited (higher-numbered) part continue
to use the (more limited) number space of the inherited table.</t>
        </li>
      </ul>
      <t>Where external information is used in a table setup mechanism that is
not immutable, care needs to be taken so that, over time, references
to existing table entries stay valid (i.e., the information is only
extended), and that a maximum size of this
information is given.  This allows an unpacker to recognize references
to items that are not yet defined in the version of the external
reference that it uses, providing backward and possibly limited
(degraded) forward compatibility.</t>
      <t>For table setup, the present specification only defines two simple
table-building tags,
which operate by prepending to the (by default empty) tables.</t>
      <aside>
        <t>Additional tags can be defined for dictionary referencing (possible combining that
with Basic Packed CBOR mechanisms).
The desirable details are likely to vary
considerably between applications.
A URI-based reference would be
easy to define, but might be too inefficient when used in the likely
combination with an <tt>ni:</tt> URI <xref target="RFC6920"/>.</t>
      </aside>
      <aside>
        <t>As a hint for implementations, an algorithm for resolving references
in a scenario with nested table setup tags could be described as follows:</t>
        <ul spacing="normal">
          <li>
            <t>When chasing a reference, go upward in the data item tree.</t>
          </li>
          <li>
            <t>If the next up table setup tag is not of the kind that simply prepends,
switch to the alternative algorithm described by the setup tag.</t>
          </li>
          <li>
            <t>If the next up table setup tag fulfills the reference (i.e., the
size of the provided table is larger than the reference index), use
the corresponding reference, and finish this algorithm.</t>
          </li>
          <li>
            <t>Otherwise, subtract the width of the table entries added in the
relevant table from the reference number and continue upwards (up
into the media type, which can bequeath default tables to the CBOR
items in them).</t>
          </li>
        </ul>
      </aside>
      <section anchor="sec-basic-packed-cbor">
        <name>Basic Packed CBOR</name>
        <t>Two tags are predefined by this specification for packing table setup.
They are defined in CDDL <xref target="RFC8610"/> as in <xref target="fig-cddl"/>, <cref anchor="assume113">assuming the allocation of tag numbers 113 ('q')
and 1113 for these tags</cref>:</t>
        <figure anchor="fig-cddl">
          <name>CDDL for Packed CBOR Table Setup Tags Defined in this Document</name>
          <sourcecode type="cddl"><![CDATA[
Basic-Packed-CBOR = #6.113([[*shared-and-argument-item], rump])
Split-Basic-Packed-CBOR =
                    #6.1113([[*shared-item], [*argument-item], rump])
rump = any
shared-and-argument-item = any
argument-item = any
shared-item = any
]]></sourcecode>
        </figure>
        <t>These tags extend the two tables for shared items and for arguments
that apply to the entire tag, which, unless an enclosing table setup
tag or a table-setting application environment (e.g., a media type) applies,
are empty tables:</t>
        <dl>
          <dt>Tag 113 ("Basic-Packed-CBOR"):</dt>
          <dd>
            <t>The array given as the first element of the tag content is prepended
to both the tables for shared items and for arguments.</t>
          </dd>
          <dt>Tag 1113 ("Split-Basic-Packed-CBOR"):</dt>
          <dd>
            <t>The arrays given as the first and second element of the tag content
are prepended individually to the tables for shared items and for
arguments, respectively.</t>
          </dd>
        </dl>
        <t>As discussed in the introduction to this section, references
in the supplied new arrays use the new number space (where inherited
items are shifted by the new items given), while the inherited items
themselves use the inherited number space (so their semantics do not
change by the mere action of inheritance).</t>
        <t>The original CBOR data item can be reconstructed by recursively
replacing shared item and argument references encountered in the rump by
their reconstructions.</t>
      </section>
    </section>
    <section anchor="sec-function-tags">
      <name>Function Tags</name>
      <t>Function tags that occur in an argument or a rump supply the semantics
for reconstructing a data item from their tag content and the
non-dominating rump or argument, respectively.
The present specification defines three function tags.</t>
      <section anchor="join">
        <name>Join Function Tags</name>
        <t>Tag 106 ('j') defines the "join" unpacking function, based on the
concatenation function (<xref target="sec-concatenation"/>).</t>
        <t>The join function expects an item that can be concatenated as its
left-hand side, and an array of such items as its right-hand side.
Joining works by sequentially applying the concatenation function to
the elements of the right-hand-side array, interspersing the left-hand
side as the "joiner".</t>
        <t>An example in functional notation: <tt>join(", ", ["a", "b", "c"])</tt>
returns <tt>"a, b, c"</tt>.</t>
        <t>For a right-hand side of one or more elements, the first element
determines the type of the result when text strings and byte
strings are mixed in the argument.
For a right-hand side of one element, the joiner is not used, and that
element returned.
For a right-hand side of zero elements, a neutral element is generated
based on the type of the joiner
(empty text/byte string for a text/byte string, empty array for an array, empty map for a map).</t>
        <t>For an example, we assume this unpacked data item:</t>
        <sourcecode type="cbor-diag"><![CDATA[
["https://packed.example/foo.html",
 "coap://packed.example/bar.cbor",
 "mailto:support@packed.example"]
]]></sourcecode>
        <t>A packed form of this using straight references could be:</t>
        <sourcecode type="cbor-diag"><![CDATA[
113([[106("packed.example")],
  [224(["https://", "/foo.html"]),
   224(["coap://", "/bar.cbor"]),
   224(["mailto:support@", ""])]
])
]]></sourcecode>
        <t>Tag 105 ('i') defines the "ijoin" unpacking function, which is exactly
like that of tag 106, except that the left-hand side and right-hand
side are interchanged ('i').</t>
        <t>A packed form of the first example using inverted references and the ijoin tag could be:</t>
        <sourcecode type="cbor-diag"><![CDATA[
113([["packed.example"],
  [216(105(["https://", "/foo.html"])),
   216(105(["coap://", "/bar.cbor"])),
   216("mailto:support@")]
])
]]></sourcecode>
        <t>A packed form of an array with many URIs that reference SenML items
from the same place could be:</t>
        <sourcecode type="cbor-diag"><![CDATA[
113([[105(["coaps://[2001:db8::1]/s/", ".senml"])],
  [224("temp-freezer"),
   224("temp-fridge"),
   224("temp-ambient")]
])
]]></sourcecode>
        <t>Note that for these examples, the implicit join semantics for mixed
string-array concatenation as defined in <xref target="implicit-join"/> actually
obviate the need for an explicit join/ijoin tag; the examples do serve
to demonstrate the explicit usage of the tag.</t>
      </section>
      <section anchor="record">
        <name>Record Function Tag</name>
        <t>Tag 114 ('r') defines the "record" function, which combines
an array of keys with an array of values into a map.</t>
        <t>The record function expects an array as its left-hand side,
whose items are treated as key items for the resulting map,
and an array of equal or shorter length as its right-hand side,
whose items are treated as value items for the resulting map.</t>
        <t>The map is constructed by grouping key and value items
with equal position in the provided arrays into pairs that constitute the resulting map.</t>
        <t>The value item array <bcp14>MUST NOT</bcp14> be longer than the key item array.</t>
        <t>The value item array <bcp14>MAY</bcp14> be shorter than the key item array, in which
case the one or more unmatched value items towards the end are treated as <em>absent</em>.
Additionally, value items that are the CBOR simple value <tt>undefined</tt>
(simple(23), encoding 0xf7) are also treated as absent.
Key items whose matching value items are absent are not included in the resulting map.</t>
        <t>For an example, we assume this unpacked data item:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[{"key0": false, "key1": "value 1", "key2": 2},
 {"key0": true, "key1": "value -1", "key2": -2},
 {"key1": "", "key2": 0}]
]]></sourcecode>
        <t>A straightforward packed form of this using the record function tag could be:</t>
        <sourcecode type="cbor-diag"><![CDATA[
113([[114(["key0", "key1", "key2"])],
  [224([false, "value 1", 2]),
   224([true, "value -1", -2]),
   224([undefined, "", 0])]
])
]]></sourcecode>
        <t>A slightly more concise packed form can be achieved by manipulating the key item order
(recall that the order of key/value pairs in maps carries no semantics):</t>
        <sourcecode type="cbor-diag"><![CDATA[
113([[114(["key1", "key2", "key0"])],
  [224(["value 1", 2, false]),
   224(["value -1", -2, true]),
   224(["", 0])]
])
]]></sourcecode>
      </section>
    </section>
    <section anchor="sec-integration-tags">
      <name>Integration Tags</name>
      <t><cref anchor="for-discussion">This new text addresses discussion during the
2025-06-11 CBOR WG interim.
It provides additional functionality, but can cause additional
complexity, and an explicit decision should be made whether this
functionality is included.</cref></t>
      <t>Integration tags fulfill a similar purpose for shared item references as
function tags do for argument references.
An integration tag can be used as an element of a shared item table, supplying
extended semantics on how to integrate its tag content into the context
from which the shared item is referenced.
A regular shared item reference can be used to reference an
integration tag.
(Note that the generation of an integration tag can in turn be
automatic in the table setup mechanism specified by an application environment (<xref target="sec-table-setup"/>)
or a table setup tag, so the integration tag may never actually physically
occur in the interchanged data.)</t>
      <t>Application protocol specifications need to be explicit about which
integration tags are in use; otherwise, the unpacker will not know
whether a tag in a shared item table position is an integration tag or
is intended to be shared literally.
(The set of integration tags in use can also be defined as part of the
table setup mechanism.)</t>
      <t>The present specification defines one integration tag.</t>
      <section anchor="splice">
        <name>Splicing Integration Tag</name>
        <t>Tag 1115, the splicing integration tag, can be used with a tag content
that is an array.
It specifies that the tag content is "spliced" into the surrounding
array of a reference item referencing that shared item, i.e. the
surrounding array is replaced by one that enumerates the elements of
the shared item at the site of the shared item reference.</t>
        <t>Example: a rump of <tt>[1, 2, 3, simple(0), 7, 8, 9]</tt>, where the shared
item table contains <tt>1115([4, 5, 6])</tt> as its first item is unpacked as
<tt>[1, 2, 3, 4, 5, 6, 7, 8, 9]</tt>.</t>
        <t>Example application:
Splicing integration tags could be generated implicitly in the
implicit table setup defined in <xref section="4.1" sectionFormat="of" target="I-D.lenders-dns-cbor"/>, removing the
need to allow nested arrays for names.</t>
      </section>
    </section>
    <section anchor="sec-standin">
      <name>Additional Stand-in Items</name>
      <t>Application specifications that employ Packed CBOR may also enable the
use of additional "stand-in" items (tags or simple values) beyond the
reference items defined by Packed CBOR.
These are data items used in place of original representation items
such as strings or arrays, where the tag or simple value is defined to
stand for a data item that can actually be used in the position of the stand-in
item.
Examples would be tags such as 21 to 23 (base64url, base64, uppercase
hex: Section <xref target="RFC8949" section="3.4.5.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) or 108 (lowercase hex: <xref section="2.1" sectionFormat="of" target="I-D.bormann-cbor-notable-tags"/>), which stand for
text string items but internally employ more compact byte string
representations that may also be more natural as application data items.</t>
      <t>These additional stand-in items are fundamentally independent of
Packed CBOR, but they also can be used as the right-hand-side of
reference items (see <xref target="use-standin"/>).</t>
      <t>Note that application protocol specifications need to be explicit about which
stand-in items are provided for; otherwise, inconsistent
interpretations at different places in a system can lead to check/use
vulnerabilities.</t>
    </section>
    <section anchor="sec-tag-validity-equivalence-principle">
      <name>Tag Validity: Equivalence Principle</name>
      <t>In Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, the validity of tags is defined in terms
of type and value of their tag content.
The CBOR Tag registry (<xref target="IANA.cbor-tags"/> as defined in Section <xref target="RFC8949" section="9.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) allows
recording the "data item" for a registered tag, which is usually an
abbreviated description of the top-level data type allowed for the tag
content.</t>
      <t>In other words, in the registry, the validity of a tag of a given tag
number is described in terms of the top-level structure of the data
carried in the tag content.
The description of a tag might add further constraints for the data
item.
But in any case, a tag definition can only specify validity based on
the structure of its tag content.</t>
      <t>In Packed CBOR, a reference data item (represented as a tag or a
simple value) might be "standing in" for the actual
tag content of an outer tag, or for a structural component of that.
In this case, the formal structure of the outer tag's content before
unpacking usually no longer fulfills the validity conditions of the
outer tag.</t>
      <t>The underlying problem is not unique to Packed CBOR.
For instance, <xref target="RFC8746"/> describes tags 64..87 that "stand in" for CBOR
arrays (the native form of which has major type 4).
For the other tags defined <xref target="RFC8746"/>, which require some
array structure of the tag content, a footnote was added:</t>
      <blockquote>
        <t>[...] The second element of the outer array in the data item is a
   native CBOR array (major type 4) or Typed Array (one of tag 64..87)</t>
      </blockquote>
      <t>The top-down approach to handle the "rendezvous" between the outer tag and
the tag content representation (e.g., using an inner tag) does not
support extensibility: any further Typed Array
tags being defined do not inherit the exception granted to tag number
64..87; they would need to formally update all existing tag
definitions that can accept typed arrays or be of limited use with
these existing tags.</t>
      <t>Instead, the tag validity mechanism needs to be extended by a
bottom-up component: A tag (or simple value) definition needs to be able to declare that
the tag can "stand in" for, (is, in terms of tag validity, equivalent
to) some structure.</t>
      <t>E.g., tag 64..87 could have declared their equivalence to the CBOR major
type 4 arrays they stand in for.</t>
      <aside>
        <t>Note that not all domain extensions to tags can be addressed using
the equivalence principle: E.g., on a data model level, numbers with
arbitrary exponents (<xref target="ARB-EXP"/>, tags 264 and 265) are strictly a
superset of CBOR's predefined fractional types, tags 4 and 5.
They could not simply declare that they are equivalent to tags 4 and 5
as a tag requiring a fractional value may have no way to handle the
extended range of tag 264 and 265.</t>
      </aside>
      <section anchor="sec-tag-content-equivalence">
        <name>Tag Content Equivalence</name>
        <t>A tag or simple value definition <bcp14>MAY</bcp14> declare Tag Content Equivalence to some existing
structure, under some conditions defined by that definition.
This, in effect, extends all existing tag definitions that accept the
named structure to accept the newly defined item under the conditions
given for the Tag Content Equivalence.</t>
        <t>A number of limitations apply to Tag Content Equivalence, which therefore
should be applied deliberately and sparingly:</t>
        <ul spacing="normal">
          <li>
            <t>Tag Content Equivalence is a new concept, which may not be implemented by an
existing generic decoder.  A generic decoder not implementing tag
equivalence might raise tag validity errors where Tag Content Equivalence
says there should be none.</t>
          </li>
          <li>
            <t>A CBOR protocol <bcp14>MAY</bcp14> specify the use of Tag Content Equivalence, effectively
limiting the protocol's full use to those generic encoders that implement it.
Existing CBOR protocols that do not address Tag Content Equivalence
implicitly have a new variant that allows Tag Content Equivalence
(e.g., to support Packed CBOR with an existing protocol).
A CBOR protocol that does address Tag Content Equivalence <bcp14>MAY</bcp14> be explicit
about what kinds of Tag Content Equivalence it supports (e.g., only the
reference tags employed by Packed CBOR and certain table setup tags).</t>
          </li>
          <li>
            <t>There is currently no way to express Tag Content Equivalence in CDDL.
For Packed CBOR, CDDL would typically be used to describe the
unpacked CBOR represented by it; further restricting the Packed CBOR
is likely to lead to interoperability problems.
(Note that, by definition, there is no need to describe Tag
Equivalence on the receptacle [outer tag] side; only for the item that declares
Tag Content Equivalence.)</t>
          </li>
          <li>
            <t>The registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>
currently does not have a way to record any equivalence claimed
for a tag.  A convention would be to alert to Tag Content Equivalence in the
"Semantics (short form)" field of the registry.<cref anchor="todo">Needs to be done for the tag registrations here.</cref></t>
          </li>
        </ul>
      </section>
      <section anchor="sec-tag-content-equivalence-of-tags-and-simple-values-defined-in-packed-cbor">
        <name>Tag Content Equivalence of Tags and Simple Values Defined in Packed CBOR</name>
        <t>The reference data items (tags and simple values) in this
specification declare their equivalence to
the unpacked shared items or function results they represent.</t>
        <t>The table setup tags 113 and 1113 declare their equivalence to the unpacked CBOR
data item represented by them.</t>
      </section>
    </section>
    <section anchor="sec-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>For all assignments described in this section, the "reference" column
is the present document, i.e., RFCXXXX.</t>
      <section anchor="sec-cbor-tags-registry">
        <name>CBOR Tags Registry</name>
        <t>In the registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>,
IANA is requested to allocate the tags defined in <xref target="tab-tag-values"/>.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tag Numbers</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">6</td>
              <td align="left">int (for shared); [int, any] (for argument)</td>
              <td align="left">Packed CBOR: shared/argument</td>
            </tr>
            <tr>
              <td align="right">105</td>
              <td align="left">concatenation item (text string, byte string, array, or map)</td>
              <td align="left">Packed CBOR: ijoin function</td>
            </tr>
            <tr>
              <td align="right">106</td>
              <td align="left">array of concatenation item (text string, byte string, array, or map)</td>
              <td align="left">Packed CBOR: join function</td>
            </tr>
            <tr>
              <td align="right">113</td>
              <td align="left">array (shared-and-argument-items, rump)</td>
              <td align="left">Packed CBOR: table setup</td>
            </tr>
            <tr>
              <td align="right">114</td>
              <td align="left">array</td>
              <td align="left">Packed CBOR: record function</td>
            </tr>
            <tr>
              <td align="right">(256-<tt>B</tt>-<tt>C</tt>)..(256-<tt>B</tt>-1)</td>
              <td align="left">function tag or concatenation item (text string, byte string, array, or map)</td>
              <td align="left">Packed CBOR: inverted</td>
            </tr>
            <tr>
              <td align="right">(256-<tt>B</tt>)..255</td>
              <td align="left">any</td>
              <td align="left">Packed CBOR: straight</td>
            </tr>
            <tr>
              <td align="right">1112</td>
              <td align="left">any</td>
              <td align="left">Packed CBOR: reference error</td>
            </tr>
            <tr>
              <td align="right">1113</td>
              <td align="left">array (shared-items, argument-items, rump)</td>
              <td align="left">Packed CBOR: table setup</td>
            </tr>
            <tr>
              <td align="right">1115</td>
              <td align="left">any</td>
              <td align="left">Packed CBOR: splicing integration tag</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="sec-cbor-simple-values-registry">
        <name>CBOR Simple Values Registry</name>
        <t>In the registry "<xref section="CBOR Simple Values" relative="#simple" sectionFormat="bare" target="IANA.cbor-simple-values"/>" <xref target="IANA.cbor-simple-values"/>,
IANA is requested to allocate the simple values defined in <xref target="tab-simple-values"/>.</t>
        <table anchor="tab-simple-values">
          <name>Simple Values</name>
          <thead>
            <tr>
              <th align="right">Value</th>
              <th align="left">Semantics</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0..(A-1)</td>
              <td align="left">Packed CBOR: shared</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="STD94"/> apply.</t>
      <t>Loops in the Packed CBOR can be used as a denial of service attack
unless mitigated, see <xref target="sec-discussion"/>.</t>
      <t>As the unpacking is deterministic, packed forms can be used as signing
inputs when deterministically encoded <xref target="I-D.ietf-cbor-cde"/>.
(Note that where external dictionaries are added to
cbor-packed as in <xref target="I-D.amsuess-cbor-packed-by-reference"/>,
this requires additional consideration.)</t>
      <t>When tables are obtained from the application environment, e.g., a
media type, any evolution of the application environment (such as an
update to the media type specification) needs to reliably ensure that
existing references continue to unpack in the same way.
Therefore, application environments that provide packing tables need
to explicitly specify if these packing tables may evolve, and, if yes,
provide a design for this kind of evolvability.
For instance, <xref target="I-D.amsuess-cbor-packed-by-reference"/> provides a way to reserve entries in a packing
table that can be filled in by revisions of the application
environment; to avoid false unpacking, this needs to be the only
update that can be applied to such a table-setting application
environment.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <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>
        <reference anchor="IANA.cbor-simple-values" target="https://www.iana.org/assignments/cbor-simple-values">
          <front>
            <title>Concise Binary Object Representation (CBOR) Simple Values</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </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>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="16" month="October" year="2025"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing EDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies and uses registry-based extension points, using one
   to support text representations of epoch-based dates/times and of IP
   addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present -19
   // includes the definition of the cri'' application- extension. cri''
   // was previously defined in draft-ietf-core-href; however the latter
   // document overtook the present document in the approval process.
   // As the definition of cri'' is dependent on the present document
   // (and conversely has essentially no dependency on the technical
   // content of draft-ietf-core-href beyond its mere existence), the
   // text (including IANA considerations) has been moved here. -19 is
   // intended for use at the CBOR WG meeting at IETF 124.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-19"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <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="RFC7396">
          <front>
            <title>JSON Merge Patch</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This specification defines the JSON merge patch format and processing rules. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7396"/>
          <seriesInfo name="DOI" value="10.17487/RFC7396"/>
        </reference>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <reference anchor="RFC6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher"/>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz"/>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function. It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it. The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>
        <reference anchor="RFC1951">
          <front>
            <title>DEFLATE Compressed Data Format Specification version 1.3</title>
            <author fullname="P. Deutsch" initials="P." surname="Deutsch"/>
            <date month="May" year="1996"/>
            <abstract>
              <t>This specification defines a lossless compressed data format that compresses data using a combination of the LZ77 algorithm and Huffman coding, with efficiency comparable to the best currently available general-purpose compression methods. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1951"/>
          <seriesInfo name="DOI" value="10.17487/RFC1951"/>
        </reference>
        <reference anchor="RFC8746">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Typed Arrays</title>
            <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR), as defined in RFC 7049, 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.</t>
              <t>This document makes use of this extensibility to define a number of CBOR tags for typed arrays of numeric data, as well as additional tags for multi-dimensional and homogeneous arrays. It is intended as the reference document for the IANA registration of the CBOR tags defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8746"/>
          <seriesInfo name="DOI" value="10.17487/RFC8746"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-cde">
          <front>
            <title>CBOR Common Deterministic Encoding (CDE)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="13" month="October" year="2025"/>
            <abstract>
              <t>   CBOR (STD 94, RFC 8949) defines the concept of "Deterministically
   Encoded CBOR" in its Section 4.2, determining one specific way to
   encode each particular CBOR value.  This definition is instantiated
   by "core requirements", providing some flexibility for application
   specific decisions; this makes it harder than necessary to offer
   Deterministic Encoding as a selectable feature of generic CBOR
   encoders.

   The present specification documents the Best Current Practice for
   CBOR _Common Deterministic Encoding_ (CDE), which can be shared by a
   large set of applications with potentially diverging detailed
   application requirements.

   The document also discusses the desire for partial implementations,
   which can be another reason for constraining CBOR encoders, and
   singles out the encoding constraint "definite-length-only" as a
   likely constraint to be used in application protocol and media type
   definitions.

   This specification updates RFC 8949 in that it provides
   clarifications and definitions of additional terms as well as more
   examples and explanatory text; it does not make technical changes to
   RFC 8949.


   // This revision -13 merges all active pull requests in preparation
   // for the 2025-cbor-17 interim on 2025-10-15.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cde-13"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-notable-tags">
          <front>
            <title>Notable CBOR Tags</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="20" month="July" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) 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.

   In CBOR, one point of extensibility is the definition of CBOR tags.
   RFC 8949's original edition, RFC 7049, defined a basic set of 16 tags
   as well as a registry that can be used to contribute additional tag
   definitions [IANA.cbor-tags].  Since RFC 7049 was published, at the
   time of writing some 190 definitions of tags and ranges of tags have
   been added to that registry.

   The present document provides a roadmap to a large subset of these
   tag definitions.  Where applicable, it points to an IETF standards or
   standard development document that specifies the tag.  Where no such
   document exists, the intention is to collect specification
   information from the sources of the registrations.  After some more
   development, the present document is intended to be useful as a
   reference document for the IANA registrations of the CBOR tags the
   definitions of which have been collected.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-notable-tags-13"/>
        </reference>
        <reference anchor="I-D.lenders-dns-cbor">
          <front>
            <title>A Concise Binary Object Representation (CBOR) of DNS Messages</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document specifies a compact data format of DNS messages using
   the Concise Binary Object Representation [RFC8949].  The primary
   purpose is to keep DNS messages small in constrained networks.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lenders-dns-cbor-15"/>
        </reference>
        <reference anchor="I-D.amsuess-cbor-packed-by-reference">
          <front>
            <title>Packed CBOR: Table set up by reference</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   Packed CBOR is a mechanism for transforming Concise Binary Object
   Representation (CBOR) data into a more compact form.  This document
   introduces a means for setting up its tables by means of
   dereferenceable identifiers, and introduces a pattern of using it
   without sending long identifiers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-cbor-packed-by-reference-04"/>
        </reference>
        <reference anchor="ARB-EXP" target="http://peteroupc.github.io/CBOR/bigfrac.html">
          <front>
            <title>Arbitrary-Exponent Numbers</title>
            <author initials="P." surname="Occil" fullname="Peter Occil">
              <organization/>
            </author>
            <date/>
          </front>
          <refcontent>Specification for Registration of CBOR Tags 264 and 265</refcontent>
        </reference>
      </references>
    </references>
    <?line 1210?>

<section anchor="sec-examples">
      <name>Examples</name>
      <t><cref anchor="resolve_2">To be resolved before publication:</cref> align reference items with the final settings of the
parameters <tt>A</tt>, <tt>B</tt>, <tt>C</tt>.  In particular, check the byte numbers...</t>
      <t>The (JSON-compatible) CBOR data structure depicted in <xref target="fig-example-in"/>,
400 bytes of binary CBOR, could be packed into the CBOR data item depicted
in <xref target="fig-example-out"/>, 308 bytes, only employing item sharing.
With support for argument sharing and the record function tag 114,
the data item can be packed into 298 bytes as depicted in <xref target="fig-example-out-record"/>.
Note that this particular example does not lend itself to prefix compression,
so it uses the simple common-table setup form (tag 113).</t>
      <figure anchor="fig-example-in">
        <name>Example original CBOR data item, 400 bytes</name>
        <sourcecode type="cbor-diag"><![CDATA[
{ "store": {
    "book": [
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
]]></sourcecode>
      </figure>
      <figure anchor="fig-example-out">
        <name>Example packed CBOR data item with item sharing only, 308 bytes</name>
        <sourcecode type="cbor-diag"><![CDATA[
113([["price", "category", "author", "title", "fiction", 8.95,
                                                             "isbn"],
    /  0          1         2         3         4         5    6   /
     {"store": {
       "book": [
         {simple(1): "reference", simple(2): "Nigel Rees",
          simple(3): "Sayings of the Century", simple(0): simple(5)},
         {simple(1): simple(4), simple(2): "Evelyn Waugh",
          simple(3): "Sword of Honour", simple(0): 12.99},
         {simple(1): simple(4), simple(2): "Herman Melville",
          simple(3): "Moby Dick", simple(6): "0-553-21311-3",
          simple(0): simple(5)},
         {simple(1): simple(4), simple(2): "J. R. R. Tolkien",
          simple(3): "The Lord of the Rings",
          simple(6): "0-395-19395-8", simple(0): 22.99}],
       "bicycle": {"color": "red", simple(0): 19.95}}}])
]]></sourcecode>
      </figure>
      <figure anchor="fig-example-out-record">
        <name>Example packed CBOR data item using item sharing and the record function tag, 302 bytes</name>
        <sourcecode type="cbor-diag"><![CDATA[
113([[114(["category", "author",
           "title", simple(1), "isbn"]),
    /  0                       /
      "price", "fiction", 8.95],
    /  1        2         3    /
     {"store": {
       "book": [
           224(["reference", "Nigel Rees",
              "Sayings of the Century", simple(3)]),
           224([simple(2), "Evelyn Waugh",
              "Sword of Honour", 12.99]),
           224([simple(2), "Herman Melville",
              "Moby Dick", simple(3), "0-553-21311-3"]),
           224([simple(2), "J. R. R. Tolkien",
               "The Lord of the Rings", 22.99, "0-395-19395-8"])],
       "bicycle": {"color": "red", simple(1): 19.95}}}])
]]></sourcecode>
      </figure>
      <t>The (JSON-compatible) CBOR data structure below has been packed with shared
item and (partial) prefix compression only and employs the split-table
setup form (tag 1113).</t>
      <figure anchor="fig-example-in2">
        <name>Example original CBOR data item, 1210 bytes</name>
        <sourcecode type="cbor-diag"><![CDATA[
{
  "name": "MyLED",
  "interactions": [
    {
      "links": [
        {
          "href":
           "http://192.168.1.103:8445/wot/thing/MyLED/rgbValueRed",
          "mediaType": "application/json"
        }
      ],
      "outputData": {
        "valueType": {
          "type": "number"
        }
      },
      "name": "rgbValueRed",
      "writable": true,
      "@type": [
        "Property"
      ]
    },
    {
      "links": [
        {
          "href":
           "http://192.168.1.103:8445/wot/thing/MyLED/rgbValueGreen",
          "mediaType": "application/json"
        }
      ],
      "outputData": {
        "valueType": {
          "type": "number"
        }
      },
      "name": "rgbValueGreen",
      "writable": true,
      "@type": [
        "Property"
      ]
    },
    {
      "links": [
        {
          "href":
           "http://192.168.1.103:8445/wot/thing/MyLED/rgbValueBlue",
          "mediaType": "application/json"
        }
      ],
      "outputData": {
        "valueType": {
          "type": "number"
        }
      },
      "name": "rgbValueBlue",
      "writable": true,
      "@type": [
        "Property"
      ]
    },
    {
      "links": [
        {
          "href":
           "http://192.168.1.103:8445/wot/thing/MyLED/rgbValueWhite",
          "mediaType": "application/json"
        }
      ],
      "outputData": {
        "valueType": {
          "type": "number"
        }
      },
      "name": "rgbValueWhite",
      "writable": true,
      "@type": [
        "Property"
      ]
    },
    {
      "links": [
        {
          "href":
           "http://192.168.1.103:8445/wot/thing/MyLED/ledOnOff",
          "mediaType": "application/json"
        }
      ],
      "outputData": {
        "valueType": {
          "type": "boolean"
        }
      },
      "name": "ledOnOff",
      "writable": true,
      "@type": [
        "Property"
      ]
    },
    {
      "links": [
        {
          "href":
"http://192.168.1.103:8445/wot/thing/MyLED/colorTemperatureChanged",
          "mediaType": "application/json"
        }
      ],
      "outputData": {
        "valueType": {
          "type": "number"
        }
      },
      "name": "colorTemperatureChanged",
      "@type": [
        "Event"
      ]
    }
  ],
  "@type": "Lamp",
  "id": "0",
  "base": "http://192.168.1.103:8445/wot/thing",
  "@context":
   "http://192.168.1.102:8444/wot/w3c-wot-td-context.jsonld"
}
]]></sourcecode>
      </figure>
      <figure anchor="fig-example-out2">
        <name>Example packed CBOR data item, 507 bytes</name>
        <sourcecode type="cbor-diag"><![CDATA[
1113([/shared/["name", "@type", "links", "href", "mediaType",
            /  0       1       2        3         4 /
    "application/json", "outputData", {"valueType": {"type":
         /  5               6               7 /
    "number"}}, ["Property"], "writable", "valueType", "type"],
               /   8            9           10           11 /
   /argument/ ["http://192.168.1.10", 224("3:8445/wot/thing"),
              / 224                   225 /
   225("/MyLED/"), 226("rgbValue"), "rgbValue",
     / 226             227           228     /
   {simple(6): simple(7), simple(9): true, simple(1): simple(8)}],
     / 229 /
   /rump/ {simple(0): "MyLED",
           "interactions": [
   229({simple(2): [{simple(3): 227("Red"), simple(4): simple(5)}],
    simple(0): 228("Red")}),
   229({simple(2): [{simple(3): 227("Green"), simple(4): simple(5)}],
    simple(0): 228("Green")}),
   229({simple(2): [{simple(3): 227("Blue"), simple(4): simple(5)}],
    simple(0): 228("Blue")}),
   229({simple(2): [{simple(3): 227("White"), simple(4): simple(5)}],
    simple(0): "rgbValueWhite"}),
   {simple(2): [{simple(3): 226("ledOnOff"), simple(4): simple(5)}],
    simple(6): {simple(10): {simple(11): "boolean"}}, simple(0):
    "ledOnOff", simple(9): true, simple(1): simple(8)},
   {simple(2): [{simple(3): 226("colorTemperatureChanged"),
    simple(4): simple(5)}], simple(6): simple(7), simple(0):
    "colorTemperatureChanged", simple(1): ["Event"]}],
     simple(1): "Lamp", "id": "0", "base": 225(""),
     "@context": 224("2:8444/wot/w3c-wot-td-context.jsonld")}])
]]></sourcecode>
      </figure>
    </section>
    <section numbered="false" anchor="sec-list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="fig-cddl"/>:</dt>
        <dd>
          <t><xref format="title" target="fig-cddl"/></t>
        </dd>
        <dt><xref target="fig-example-in"/>:</dt>
        <dd>
          <t><xref format="title" target="fig-example-in"/></t>
        </dd>
        <dt><xref target="fig-example-out"/>:</dt>
        <dd>
          <t><xref format="title" target="fig-example-out"/></t>
        </dd>
        <dt><xref target="fig-example-out-record"/>:</dt>
        <dd>
          <t><xref format="title" target="fig-example-out-record"/></t>
        </dd>
        <dt><xref target="fig-example-in2"/>:</dt>
        <dd>
          <t><xref format="title" target="fig-example-in2"/></t>
        </dd>
        <dt><xref target="fig-example-out2"/>:</dt>
        <dd>
          <t><xref format="title" target="fig-example-out2"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="sec-list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="tab-shared"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-shared"/></t>
        </dd>
        <dt><xref target="tab-straight"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-straight"/></t>
        </dd>
        <dt><xref target="tab-inverted"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-inverted"/></t>
        </dd>
        <dt><xref target="tab-tag-values"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-tag-values"/></t>
        </dd>
        <dt><xref target="tab-simple-values"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-simple-values"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="sec-acknowledgements">
      <name>Acknowledgements</name>
      <t>CBOR packing was part of the original proposal that turned into CBOR, but did
not make it into <xref target="RFC7049"/>, the predecessor of RFC 8949 <xref target="STD94"/>.
Various attempts to come up with a specification over the years did not
proceed.
In 2017, <contact fullname="Sebastian Käbisch"/> proposed
investigating compact representations of W3C Thing Descriptions, which
prompted the author to come up with what turned into the present design.</t>
      <t>This work was supported in part by the German Federal Ministry of
Education and Research (BMBF) within the project Concrete Contracts.</t>
      <!--  LocalWords:  CBOR extensibility IANA uint sint IEEE endian
 -->
<!--  LocalWords:  signedness endianness prepended decompressor
 -->
<!--  LocalWords:  prepend
 -->

</section>
  </back>
  <!-- ##markdown-source:
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
7moVrEJkly/embJnEHmcv/+/d4uFthzlAAA=

-->

</rfc>
