<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-packed-19" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Packed CBOR">Packed CBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-19"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="M." surname="Gütschow" fullname="Mikolai Gütschow">
      <organization abbrev="TU Dresden">TUD Dresden University of Technology</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>mikolai.guetschow@tu-dresden.de</email>
      </address>
    </author>
    <date year="2026" month="February" day="02"/>
    <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 -19 is a work-in-progress release in
preparation for another cbor-packed side meeting.
This revision resolves the use of the tunables A/B/C by setting
A=16, B=8, and C=8, and choosing requested simple values and tag
numbers, in preparation for continuing the early allocation process.</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 114?>

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

<dl>
          <dt>Original data item:</dt>
          <dd>
            <t>A CBOR data item that is intended to be expressed by a packed data
item; the result of all reconstructions.</t>
          </dd>
          <dt>Packed data item:</dt>
          <dd>
            <t>A CBOR data item that involves packed references (<em>packed CBOR</em>).</t>
          </dd>
          <dt>Packed reference:</dt>
          <dd>
            <t>A shared item reference or an argument reference, expressed by a
reference data item.</t>
          </dd>
          <dt>Reference data item:</dt>
          <dd>
            <t>A data item (tag or simple value) that serves as a packed reference.</t>
          </dd>
          <dt>Reference site:</dt>
          <dd>
            <t>The context of a reference data item.</t>
          </dd>
          <dt>Shared item reference:</dt>
          <dd>
            <t>A reference to a shared item as defined in <xref target="sec-referencing-shared-items"/>.</t>
          </dd>
          <dt>Argument reference:</dt>
          <dd>
            <t>A reference that combines a shared argument with a rump item as
defined in <xref target="sec-referencing-argument-items"/>.</t>
          </dd>
          <dt>Rump:</dt>
          <dd>
            <t>The data item contained in an argument reference that is combined
with the argument to yield the reconstruction.</t>
          </dd>
          <dt>Straight reference:</dt>
          <dd>
            <t>An argument reference that uses the argument as the left-hand side
and the rump as the right-hand side.</t>
          </dd>
          <dt>Inverted reference:</dt>
          <dd>
            <t>An argument reference that uses the rump as the left-hand side
and the argument as the right-hand side.</t>
          </dd>
          <dt>Function tag:</dt>
          <dd>
            <t>A tag used in an argument reference for the argument (straight
references) or the rump (inverted references), causing the
application of a function indicated by the function tag in order to
reconstruct the data item.</t>
          </dd>
          <dt>Integration tag:</dt>
          <dd>
            <t>A tag defined by an application protocol to be used as a shared item
table element in order to signal a non-default procedure to
integrate the shared item into the reference site.</t>
          </dd>
          <dt>Stand-in item:</dt>
          <dd>
            <t>A data item (a tag or a simple value) defined by an
application protocol to stand in for a more complex data item.
Stand-in items are fundamentally independent of Packed CBOR but can
be employed by the application protocol as part of a Packed CBOR
argument reference.</t>
          </dd>
          <dt>Packing tables:</dt>
          <dd>
            <t>The pair of a shared item table and an argument table.</t>
          </dd>
          <dt>Active set (of packing tables):</dt>
          <dd>
            <t>The packing tables in effect at the data item under consideration.</t>
          </dd>
          <dt>Reconstruction:</dt>
          <dd>
            <t>The result of applying a packed reference in the context of given
packing tables; we speak of the <em>reconstruction of a packed reference</em>
as that result.</t>
          </dd>
        </dl>
        <t>The definitions of <xref target="STD94"/> apply.
Specifically: The term "byte" is used in its now customary sense as a synonym for
"octet"; "byte strings" are CBOR data items carrying a sequence of
zero or more (binary) bytes, while "text strings" are CBOR data items carrying a
sequence of zero or more Unicode code points (more precisely: Unicode
scalar values), encoded in UTF-8 <xref target="STD63"/>.
In this specification, the term "argument" is not used in the specific
sense assigned to it in Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, but in its
general sense as an argument of a function.</t>
        <t>Where arithmetic is explained, this document uses the notation
familiar from the programming language C<!-- (including C++14's 0bnnn
binary literals) -->, except that</t>
        <ul spacing="normal">
          <li>
            <t>"<tt>..</tt>" denotes a range that includes both ends given,</t>
          </li>
          <li>
            <t>in the HTML and PDF forms, subtraction and negation are rendered as
a hyphen ("-", as are various dashes), and</t>
          </li>
          <li>
            <t>superscript notation denotes exponentiation.
For example, 2 to the power of 64 is notated: 2<sup>64</sup>.
In the plain-text version of this specification, superscript notation
is not available and therefore is rendered by a surrogate notation.
That notation is not optimized for this RFC; it is unfortunately
ambiguous with C's exclusive-or and requires circumspection
from the reader of the plain-text version.</t>
          </li>
        </ul>
        <t>Examples of CBOR data items are shown
in CBOR Extended Diagnostic Notation (Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> in
conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/> <cref anchor="update">➔ possibly update to</cref> <xref target="I-D.ietf-cbor-edn-literals"/>).
<!-- mention edn-literal here if that completes faster -->
        </t>
      </section>
    </section>
    <section anchor="sec-packed-cbor">
      <name>Packed CBOR</name>
      <t>This section describes the packing tables, their structure, and how
they are referenced.</t>
      <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..15</td>
              <td align="left">0..15</td>
            </tr>
            <tr>
              <td align="left">Tag 6(N) (unsigned integer N ≥ 0)</td>
              <td align="left">16 + 2×N</td>
            </tr>
            <tr>
              <td align="left">Tag 6(N) (negative integer N &lt; 0)</td>
              <td align="left">16 − 2×N − 1</td>
            </tr>
          </tbody>
        </table>
        <t>As examples,
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>
        <t>Taking into account the encoding of these referring data items, there
are 16 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 128..135(rump)</td>
              <td align="right">0..7</td>
            </tr>
            <tr>
              <td align="left">Tag 6([unsigned integer N, rump]) (N ≥ 0)</td>
              <td align="right">8 + 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 136..143(rump)</td>
              <td align="right">0..7</td>
            </tr>
            <tr>
              <td align="left">Tag 6([negative integer N, rump]) (N &lt; 0)</td>
              <td align="right">8 - 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 the 16 tags 128 to 143 included, the table index (an unsigned
integer) is derived from the tag number, together with the information
if the reference is straight or inverted.
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, 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>128("t")</tt>, <tt>129("art")</tt>,
<tt>130("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 8 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.
(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"/>; possibly the integration tag 1115 could be used in a
top-level position to express CBOR sequence semantics via a packed array.</t>
        </aside>
      </section>
      <section removeInRFC="true" anchor="sec-allocation">
        <name>Allocation</name>
        <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.
In addition, <xref target="sec-extensibility-approach"/> provides a liberal way to use the allocations
for reference data items in packed items that use different unpacking
mechanisms from the ones described in this document.</t>
        <t>16 1+0 simple values are 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 range in the 12 years
since.</t>
        <t>8 1+1 tags are allocated to straight argument
references, and 8 further 1+1 tags allocated to inverted
argument references.</t>
        <t>A single 1+0 tag is allocated to data item references beyond the
above, with the tag content deciding which of the above reference
mechanisms is to be used.</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")],
  [128(["https://", "/foo.html"]),
   128(["coap://", "/bar.cbor"]),
   128(["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"],
  [136(105(["https://", "/foo.html"])),
   136(105(["coap://", "/bar.cbor"])),
   136("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"])],
  [128("temp-freezer"),
   128("temp-fridge"),
   128("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"])],
  [128([false, "value 1", 2]),
   128([true, "value -1", -2]),
   128([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"])],
  [128(["value 1", 2, false]),
   128(["value -1", -2, true]),
   128(["", 0])]
])
]]></sourcecode>
      </section>
    </section>
    <section anchor="sec-integration-tags">
      <name>Integration Tags</name>
      <t>Integration tags fulfill a similar purpose for shared item references as
function tags do for argument references.
An integration tag can be used as an element of a shared item table, supplying
extended semantics on how to integrate its tag content into the context
from which the shared item is referenced.
A regular shared item reference can be used to reference an
integration tag.
(Note that the generation of an integration tag can in turn be
automatic in the table setup mechanism specified by an application environment (<xref target="sec-table-setup"/>)
or a table setup tag, so the integration tag may never actually physically
occur in the interchanged data.)</t>
      <t>Application protocol specifications need to be explicit about which
integration tags are in use; otherwise, the unpacker will not know
whether a tag in a shared item table position is an integration tag or
is intended to be shared literally.
(The set of integration tags in use can also be defined as part of the
table setup mechanism.)</t>
      <t>The present specification defines one integration tag.</t>
      <section anchor="splice">
        <name>Splicing Integration Tag</name>
        <t>Tag 1115, the splicing integration tag, can be used with a tag content
that is an array.
It specifies that the tag content is "spliced" into the surrounding
array of a reference item referencing that shared item, i.e. the
surrounding array is replaced by one that enumerates the elements of
the shared item at the site of the shared item reference.</t>
        <t>Example: a rump of <tt>[1, 2, 3, simple(0), 7, 8, 9]</tt>, where the shared
item table contains <tt>1115([4, 5, 6])</tt> as its first item is unpacked as
<tt>[1, 2, 3, 4, 5, 6, 7, 8, 9]</tt>.</t>
        <t>Example application:
Splicing integration tags could be generated implicitly in the
implicit table setup defined in <xref section="4.1" sectionFormat="of" target="I-D.lenders-dns-cbor"/>, removing the
need to allow nested arrays for names.</t>
      </section>
    </section>
    <section anchor="sec-standin">
      <name>Additional Stand-in Items</name>
      <t>Application specifications that employ Packed CBOR may also enable the
use of additional "stand-in" items (tags or simple values) beyond the
reference items defined by Packed CBOR.
These are data items used in place of original representation items
such as strings or arrays, where the tag or simple value is defined to
stand for a data item that can actually be used in the position of the stand-in
item.
Examples would be tags such as 21 to 23 (base64url, base64, uppercase
hex: Section <xref target="RFC8949" section="3.4.5.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) or 108 (lowercase hex: <xref section="2.1" sectionFormat="of" target="I-D.bormann-cbor-notable-tags"/>), which stand for
text string items but internally employ more compact byte string
representations that may also be more natural as application data items.</t>
      <t>These additional stand-in items are fundamentally independent of
Packed CBOR, but they also can be used as the right-hand-side of
reference items (see <xref target="use-standin"/>).</t>
      <t>Note that application protocol specifications need to be explicit about which
stand-in items are provided for; otherwise, inconsistent
interpretations at different places in a system can lead to check/use
vulnerabilities.</t>
    </section>
    <section anchor="sec-tag-validity-equivalence-principle">
      <name>Tag Validity: Equivalence Principle</name>
      <t>In Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, the validity of tags is defined in terms
of type and value of their tag content.
The CBOR Tag registry (<xref target="IANA.cbor-tags"/> as defined in Section <xref target="RFC8949" section="9.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) allows
recording the "data item" for a registered tag, which is usually an
abbreviated description of the top-level data type allowed for the tag
content.</t>
      <t>In other words, in the registry, the validity of a tag of a given tag
number is described in terms of the top-level structure of the data
carried in the tag content.
The description of a tag might add further constraints for the data
item.
But in any case, a tag definition can only specify validity based on
the structure of its tag content.</t>
      <t>In Packed CBOR, a reference data item (represented as a tag or a
simple value) might be "standing in" for the actual
tag content of an outer tag, or for a structural component of that.
In this case, the formal structure of the outer tag's content before
unpacking usually no longer fulfills the validity conditions of the
outer tag.</t>
      <t>The underlying problem is not unique to Packed CBOR.
For instance, <xref target="RFC8746"/> describes tags 64..87 that "stand in" for CBOR
arrays (the native form of which has major type 4).
For the other tags defined <xref target="RFC8746"/>, which require some
array structure of the tag content, a footnote was added:</t>
      <blockquote>
        <t>[...] The second element of the outer array in the data item is a
   native CBOR array (major type 4) or Typed Array (one of tag 64..87)</t>
      </blockquote>
      <t>The top-down approach to handle the "rendezvous" between the outer tag and
the tag content representation (e.g., using an inner tag) does not
support extensibility: any further Typed Array
tags being defined do not inherit the exception granted to tag number
64..87; they would need to formally update all existing tag
definitions that can accept typed arrays or be of limited use with
these existing tags.</t>
      <t>Instead, the tag validity mechanism needs to be extended by a
bottom-up component: A tag (or simple value) definition needs to be able to declare that
the tag can "stand in" for, (is, in terms of tag validity, equivalent
to) some structure.</t>
      <t>E.g., tag 64..87 could have declared their equivalence to the CBOR major
type 4 arrays they stand in for.</t>
      <aside>
        <t>Note that not all domain extensions to tags can be addressed using
the equivalence principle: E.g., on a data model level, numbers with
arbitrary exponents (<xref target="ARB-EXP"/>, tags 264 and 265) are strictly a
superset of CBOR's predefined fractional types, tags 4 and 5.
They could not simply declare that they are equivalent to tags 4 and 5
as a tag requiring a fractional value may have no way to handle the
extended range of tag 264 and 265.</t>
      </aside>
      <section anchor="sec-tag-content-equivalence">
        <name>Tag Content Equivalence</name>
        <t>A tag or simple value definition <bcp14>MAY</bcp14> declare Tag Content Equivalence to some existing
structure, under some conditions defined by that definition.
This, in effect, extends all existing tag definitions that accept the
named structure to accept the newly defined item under the conditions
given for the Tag Content Equivalence.</t>
        <t>A number of limitations apply to Tag Content Equivalence, which therefore
should be applied deliberately and sparingly:</t>
        <ul spacing="normal">
          <li>
            <t>Tag Content Equivalence is a new concept, which may not be implemented by an
existing generic decoder.  A generic decoder not implementing tag
equivalence might raise tag validity errors where Tag Content Equivalence
says there should be none.</t>
          </li>
          <li>
            <t>A CBOR protocol <bcp14>MAY</bcp14> specify the use of Tag Content Equivalence, effectively
limiting the protocol's full use to those generic encoders that implement it.
Existing CBOR protocols that do not address Tag Content Equivalence
implicitly have a new variant that allows Tag Content Equivalence
(e.g., to support Packed CBOR with an existing protocol).
A CBOR protocol that does address Tag Content Equivalence <bcp14>MAY</bcp14> be explicit
about what kinds of Tag Content Equivalence it supports (e.g., only the
reference tags employed by Packed CBOR and certain table setup tags).</t>
          </li>
          <li>
            <t>There is currently no way to express Tag Content Equivalence in CDDL.
For Packed CBOR, CDDL would typically be used to describe the
unpacked CBOR represented by it; further restricting the Packed CBOR
is likely to lead to interoperability problems.
(Note that, by definition, there is no need to describe Tag
Equivalence on the receptacle [outer tag] side; only for the item that declares
Tag Content Equivalence.)</t>
          </li>
          <li>
            <t>The registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>
currently does not have a way to record any equivalence claimed
for a tag.  A convention would be to alert to Tag Content Equivalence in the
"Semantics (short form)" field of the registry.<cref anchor="todo">Needs to be done for the tag registrations here.</cref></t>
          </li>
        </ul>
      </section>
      <section anchor="sec-tag-content-equivalence-of-tags-and-simple-values-defined-in-packed-cbor">
        <name>Tag Content Equivalence of Tags and Simple Values Defined in Packed CBOR</name>
        <t>The reference data items (tags and simple values) in this
specification declare their equivalence to
the unpacked shared items or function results they represent.</t>
        <t>The table setup tags 113 and 1113 declare their equivalence to the unpacked CBOR
data item represented by them.</t>
      </section>
    </section>
    <section anchor="sec-iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFCXXXX with the RFC
number of this RFC and remove this note.</cref></t>
      <t>For all assignments described in this section, the "reference" column
is the present document, i.e., RFCXXXX.</t>
      <section anchor="sec-cbor-tags-registry">
        <name>CBOR Tags Registry</name>
        <t>In the registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>,
IANA is requested to allocate the tags defined in <xref target="tab-tag-values"/>.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tag Numbers</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">6</td>
              <td align="left">int (for shared); [int, any] (for argument)</td>
              <td align="left">Reference Data Item (for 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">128..135</td>
              <td align="left">any</td>
              <td align="left">Reference Data Item (for Packed CBOR: straight argument)</td>
            </tr>
            <tr>
              <td align="right">136..143</td>
              <td align="left">function tag or concatenation item (text string, byte string, array, or map)</td>
              <td align="left">Reference Data Item (for Packed CBOR: inverted argument)</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..15</td>
              <td align="left">Reference Data Item (for Packed CBOR: shared)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="STD94"/> apply.</t>
      <t>Loops in the Packed CBOR can be used as a denial of service attack
unless mitigated, see <xref target="sec-discussion"/>.</t>
      <t>As the unpacking is deterministic, packed forms can be used as signing
inputs when deterministically encoded <xref target="I-D.ietf-cbor-cde"/>.
(Note that where external dictionaries are added to
cbor-packed as in <xref target="I-D.amsuess-cbor-packed-by-reference"/>,
this requires additional consideration.)</t>
      <t>When tables are obtained from the application environment, e.g., a
media type, any evolution of the application environment (such as an
update to the media type specification) needs to reliably ensure that
existing references continue to unpack in the same way.
Therefore, application environments that provide packing tables need
to explicitly specify if these packing tables may evolve, and, if yes,
provide a design for this kind of evolvability.
For instance, <xref target="I-D.amsuess-cbor-packed-by-reference"/> provides a way to reserve entries in a packing
table that can be filled in by revisions of the application
environment; to avoid false unpacking, this needs to be the only
update that can be applied to such a table-setting application
environment.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-simple-values" target="https://www.iana.org/assignments/cbor-simple-values">
          <front>
            <title>Concise Binary Object Representation (CBOR) Simple Values</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="16" month="October" year="2025"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

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

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


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

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

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

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

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


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

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

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

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

<section anchor="sec-examples">
      <name>Examples</name>
      <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": [
           128(["reference", "Nigel Rees",
              "Sayings of the Century", simple(3)]),
           128([simple(2), "Evelyn Waugh",
              "Sword of Honour", 12.99]),
           128([simple(2), "Herman Melville",
              "Moby Dick", simple(3), "0-553-21311-3"]),
           128([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", 128("3:8445/wot/thing"),
              / 128                   129 /
   129("/MyLED/"), 130("rgbValue"), "rgbValue",
     / 130             131           132     /
   {simple(6): simple(7), simple(9): true, simple(1): simple(8)}],
     / 133 /
   /rump/ {simple(0): "MyLED",
           "interactions": [
   133({simple(2): [{simple(3): 131("Red"), simple(4): simple(5)}],
    simple(0): 132("Red")}),
   133({simple(2): [{simple(3): 131("Green"), simple(4): simple(5)}],
    simple(0): 132("Green")}),
   133({simple(2): [{simple(3): 131("Blue"), simple(4): simple(5)}],
    simple(0): 132("Blue")}),
   133({simple(2): [{simple(3): 131("White"), simple(4): simple(5)}],
    simple(0): "rgbValueWhite"}),
   {simple(2): [{simple(3): 130("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): 130("colorTemperatureChanged"),
    simple(4): simple(5)}], simple(6): simple(7), simple(0):
    "colorTemperatureChanged", simple(1): ["Event"]}],
     simple(1): "Lamp", "id": "0", "base": 129(""),
     "@context": 128("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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
J+lXd8cIliqyyxcvD9kxiDzO3/8/4Hn0S1rgAAA=

-->

</rfc>
