<?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.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-packed-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Packed CBOR">Packed CBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-16"/>
    <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="2025" month="July" 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 <tt>-16</tt> is intended as input to IETF 123, to
address the discussion about the use of simple values as reference
items during the 2025-06-11 CBOR interim meeting.
It contains a number of editorial improvements as well as the new
concept of an integration tag; it is for discussion whether the
latter should or should not be added to Packed CBOR.
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.</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 119?>

<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>
      <t>Packed CBOR is defined in two main parts:</t>
      <ul spacing="normal">
        <li>
          <t>Referencing packing tables
(<xref target="sec-packed-cbor"/>), which is intended to be the stable, common
component of all uses of Packed CBOR, and</t>
        </li>
        <li>
          <t>setting up packing tables
(<xref target="sec-table-setup"/>), which carries the main extension point, populated
in this document by two table setup tags.</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>
      <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 ".." denotes a range that includes
both ends given, that in the HTML and PDF forms, subtraction and
negation are rendered as a hyphen ("-", as are various dashes), and
that 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>
        <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 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.
Alternatively, the unpacker <bcp14>MAY</bcp14> provide the special value
<tt>1112(undefined)</tt> (the simple value &gt;undefined&lt; as per Section <xref target="RFC8949" section="5.7" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, enclosed in the tag 1112) to the application and leave the
error handling to the application.
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"/>.  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(unsigned integer N)</td>
              <td align="left">A + 2×N</td>
            </tr>
            <tr>
              <td align="left">Tag 6(negative integer N)</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([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([-N-1, rump]) (N ≥ 0)</td>
              <td align="right">C + N</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>The tag number (or simple value number) of the reference data item is used to derive a table index (an
unsigned integer) leading
to the "argument"; the tag content of the reference is the "rump item".</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 right-hand side.
An inverted reference uses the rump data item as the provisional
left-hand side and the argument as the 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 is
kept as the unwrapped left-hand side.
If the provisional left-hand side is not a tag, it is kept as the
unwrapped left-hand side, and the function to be applied is
concatenation, as defined below.</t>
        <t anchor="use-standin">The right-hand side is examined whether it is a stand-in item
(<xref target="sec-standin"/>), in which case the item that the stand-in item stands for is
taken as the unwrapped right-hand-side; if the right-hand side is not
a stand-in item, it is taken as is as the unwrapped right-hand side.</t>
        <t>If a function tag was given, the reference is replaced by the result
of applying the indicated unpacking function with the left-hand side
as its first argument and the 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
left-hand side "concatenated" with the 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 in a similar way in which
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>
      <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 Here</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 table-setting 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 a media type 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 replace 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-tag-equivalence-principle">
      <name>Tag Validity: Tag 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 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 in this specification, 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 and
inner tags 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 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-equivalence">
        <name>Tag Equivalence</name>
        <t>A tag definition <bcp14>MAY</bcp14> declare Tag Equivalence to some existing
structure for the tag, under some conditions defined by the new tag
definition.
This, in effect, extends all existing tag definitions that accept the
named structure to accept the newly defined tag under the conditions
given for the Tag Equivalence.</t>
        <t>A number of limitations apply to Tag Equivalence, which therefore
should be applied deliberately and sparingly:</t>
        <ul spacing="normal">
          <li>
            <t>Tag 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 Equivalence
says there should be none.</t>
          </li>
          <li>
            <t>A CBOR protocol <bcp14>MAY</bcp14> specify the use of Tag Equivalence, effectively
limiting the protocol's full use to those generic encoders that implement it.
Existing CBOR protocols that do not address Tag Equivalence
implicitly have a new variant that allows Tag Equivalence
(e.g., to support Packed CBOR with an existing protocol).
A CBOR protocol that does address Tag Equivalence <bcp14>MAY</bcp14> be explicit
about what kinds of Tag 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 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 side; only for the tag that declares
Tag 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 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-equivalence-of-packed-cbor-tags">
        <name>Tag Equivalence of Packed CBOR Tags</name>
        <t>The reference data items 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>For all assignments described in this section, the "reference" column
is the present draft, i.e., draft-ietf-cbor-packed.</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">undefined (0xf7)</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>
    </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="12" month="May" 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 -17 is
   // intended to fully address the WGLC comments.  It is intended for
   // use as a reference document for the CBOR WG interim meeting on
   // 2025-05-14.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-17"/>
        </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="12" month="May" year="2025"/>
            <abstract>
              <t>   CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
   its Section 4.2, providing some flexibility for application specific
   decisions.  To facilitate Deterministic Encoding to be offered as a
   selectable feature of generic encoders, the present document defines
   a CBOR Common Deterministic Encoding (CDE) that can be shared by a
   large set of applications with potentially diverging detailed
   requirements.  It also defines the term "Basic Serialization", which
   stops short of the potentially more onerous requirements that make
   CDE fully deterministic, while employing most of its reductions of
   the variability needing to be handled by decoders.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cde-11"/>
        </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="12" month="February" 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-12"/>
        </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="16" month="April" 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-13"/>
        </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 1123?>

<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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

-->

</rfc>
