<?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.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-packed-17" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="Packed CBOR">Packed CBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-17"/>
    <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="October" day="15"/>
    <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 -17 contains a number of editorial
improvements, it is intended for a brief discussion at the
2025-10-15 CBOR WG interim.
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 116?>

<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</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-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><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="7" month="July" 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 -18
   // corrects a few omissions from -17; it is not intended to make
   // technical changes from -17.  It is intended for use as an input
   // document for the CBOR WG meeting at IETF 123.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-18"/>
        </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="7" month="July" 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-14"/>
        </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 1170?>

<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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
Ll+8GmTHIPI4f/9/AYgorQic2wAA

-->

</rfc>
