<?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.6.14 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-packed-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title abbrev="Packed CBOR">Packed CBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-06"/>
    <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>
    <date year="2022" month="July" day="11"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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 receiver needs to decompress the compressed form to make
use of the data.</t>
      <t>This specification describes Packed CBOR, a simple transformation of a
CBOR data item into another 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 receiver.</t>
      <t><cref anchor="status">The present version (-06) includes changes that are intended
for discussion at the CBOR Interim meeting 12 in 2022.
These are intended to be the result of the WGLC handling
discussions, but need more eyeballs.</cref></t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>This is a working-group draft of the CBOR working group of the
IETF, <eref target="https://datatracker.ietf.org/wg/cbor/about/">https://datatracker.ietf.org/wg/cbor/about/</eref>.
Discussion takes places on the GitHub repository
<eref target="https://github.com/cbor-wg/cbor-packed">https://github.com/cbor-wg/cbor-packed</eref> and on the CBOR WG mailing
list, <eref target="https://www.ietf.org/mailman/listinfo/cbor">https://www.ietf.org/mailman/listinfo/cbor</eref>.</t>
    </note>
  </front>
  <middle>
    <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 receiver needs to decompress the compressed form to make
use of the data.</t>
      <t>This specification describes Packed CBOR, a simple transformation of a
CBOR data item into another 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 receiver.</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 minimal 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>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.</li>
        <li>argument sharing: application of a function with two arguments, one of which is shared.
Data items (strings, containers) that share a prefix
or suffix (affix), 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.</li>
      </ul>
      <t>A specific application protocol that employs Packed CBOR might allow
both kinds of optimization or limit the representation to item
sharing only.</t>
      <t>Packed CBOR is defined in two parts: Referencing packing tables
(<xref target="sec-packed-cbor"/>) and setting up packing tables
(<xref target="sec-table-setup"/>).</t>
      <section anchor="terms">
        <name>Terminology</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <dl>
          <dt>Packed reference:</dt>
          <dd>
            <t>A shared item reference or an argument reference.</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>Affix:</dt>
          <dd>
            <t>Prefix or suffix, used as an argument in an argument reference
employing the default function "concatenation".</t>
          </dd>
          <dt>Function reference:</dt>
          <dd>
            <t>An argument reference that uses a tag for argument, rump, or both,
causing the application of a function to reconstruct the data item.</t>
          </dd>
          <dt>Packing tables:</dt>
          <dd>
            <t>The pair of a shared item table and an argument table.</t>
          </dd>
          <dt>Current set:</dt>
          <dd>
            <t>The packing tables in effect at the data item under consideration.</t>
          </dd>
          <dt>Expansion:</dt>
          <dd>
            <t>The result of applying a packed reference in the context of given
Packing tables.</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, encoded in UTF-8
<xref target="STD63"/>.</t>
        <t>Where bit arithmetic is explained, this document uses the notation
familiar from the programming language C (including C++14's 0bnnn
binary literals), except that, in the plain text form of this document,
the operator "^" stands for exponentiation, and,
in the HTML and PDF versions, subtraction and negation are rendered as
a hyphen ("-", as are various dashes).</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 a
Current Set of packing tables that applies.</t>
        <t>There are two packing tables in a Current Set:</t>
        <ul spacing="normal">
          <li>Shared item table</li>
          <li>Argument table</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>
      </section>
      <section anchor="sec-referencing-shared-items">
        <name>Referencing Shared Items</name>
        <t>Shared items are stored in the shared item table of the Current Set.</t>
        <t>The shared data items are referenced by using the reference data items
in <xref target="tab-shared"/>.  When reconstructing the original data item, such a
reference is replaced by the referenced data item, which is then
recursively unpacked.</t>
        <table anchor="tab-shared">
          <name>Referencing Shared Values</name>
          <thead>
            <tr>
              <th align="left">reference</th>
              <th align="left">table index</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Simple value 0-15</td>
              <td align="left">0-15</td>
            </tr>
            <tr>
              <td align="left">Tag 6(unsigned integer N)</td>
              <td align="left">16 + 2*N</td>
            </tr>
            <tr>
              <td align="left">Tag 6(negative integer N)</td>
              <td align="left">16 - 2*N - 1</td>
            </tr>
          </tbody>
        </table>
        <t>As examples in CBOR diagnostic notation (<xref section="8" sectionFormat="of" target="STD94"/>),
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, 512 three-byte
references, 131072 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 a string or
container (map or array) turns it into a straight (prefix) reference (see
<xref target="tab-straight"/>).
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 6(straight rump)</td>
              <td align="right">0</td>
            </tr>
            <tr>
              <td align="left">Tag 224-255(straight rump)</td>
              <td align="right">0-31</td>
            </tr>
            <tr>
              <td align="left">Tag 28704-32767(straight rump)</td>
              <td align="right">32-4095</td>
            </tr>
            <tr>
              <td align="left">Tag 1879052288-2147483647(straight rump)</td>
              <td align="right">4096-268435455</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 216-223(inverted rump)</td>
              <td align="right">0-7</td>
            </tr>
            <tr>
              <td align="left">Tag 27647-28671(inverted rump)</td>
              <td align="right">8-1023</td>
            </tr>
            <tr>
              <td align="left">Tag 1811940352-1879048191(inverted rump)</td>
              <td align="right">1024-67108863</td>
            </tr>
          </tbody>
        </table>
        <t>Argument data items are referenced by using the reference data items
in <xref target="tab-straight"/> and <xref target="tab-inverted"/>.</t>
        <t>The tag number of the reference indicates a table index (an unsigned integer) leading
to the "argument"; the tag content of the reference is the "rump item".</t>
        <t>When reconstructing the original data item, such a reference is
replaced by a data item constructed from the argument data item found
in the table (argument, which might need to be recursively unpacked
first) and the rump data item (rump, again possibly recursively
unpacked).</t>
        <t>Separate from the tag used as a reference, a tag ("function tag") may
be involved to supply a function to be used in resolving the
reference.  It is crucial not to confuse reference tag and, if
present, function tag.</t>
        <t>A straight reference uses the argument as the provisional left hand
side and the rump data item as the right hand side.
An inverted reference uses the rump data item as the provisional left
hand side and the argument as the right hand side.</t>
        <t>In both cases, the provisional left hand side is examined.  If it is a
tag ("function tag"), it is "unwrapped": The function tag's tag number
is established as the function to be applied, and the tag content is
kept as the unwrapped left hand side.
If the provisional left hand side is not a tag, it is kept as the
unwrapped left hand side, and the function to be applied is
concatenation, as defined below.
The right hand side is taken as is as the unwrapped right hand side.</t>
        <t>If a function tag was given, the reference is replaced by the result
of applying the unpacking function to be computed to the left and
right hand sides.
The unpacking function is defined by the definition of the tag number
supplied.
If that definition does not define an unpacking function, the result
of the unpacking is not valid.</t>
        <t>If no function tag was given, the reference is replaced by the left
hand side "concatenated" with the right hand side, where concatenation
is defined as in <xref target="sec-concatenation"/>.</t>
        <t>As a contrived (but short) example, 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>6("t")</tt>, <tt>225("art")</tt>,
<tt>226("obart")</tt> (the byte string h'666f6f62' == 'foob' is concatenated
into a text string, and the last example is not an optimization).</t>
        <t>Note that table index 0 of the argument table can be referenced both
with tag 6 and tag 224,
however tag 6 with an integer content is used for shared item
references (see <xref target="tab-shared"/>), so to combine index 0 with an integer
rump, tag 224 needs to be used.</t>
        <!-- 2<sup>28</sup>2<sup>12</sup>+2<sup>5</sup>+2<sup>0</sup> -->

<t>Taking into account the encoding and ignoring the less optimal tag
224, there is one single-byte straight (prefix)
reference, 31 (2<sup>5</sup>-2<sup>0</sup>) two-byte references, 4064
(2<sup>12</sup>-2<sup>5</sup>) three-byte references, and 26843160
(2<sup>28</sup>-2<sup>12</sup>) five-byte references for straight references.
268435455 (2<sup>28</sup>) is an artificial limit, but should be high
enough that there, again, is no practical limit to how many prefix
items might be used in a Packed CBOR item.
The numbers for inverted (suffix) references are one quarter of those, except
that there is no single-byte reference and 8 two-byte references.</t>
        <aside>
          <t>Rationale:
Experience suggests that straight (prefix) packing might be more
likely than inverted (suffix) packing.  Also for this reason, there is no intent
to spend a 1+0 tag value for inverted packing.</t>
        </aside>
      </section>
      <section anchor="sec-concatenation">
        <name>Concatenation</name>
        <t>The concatenation function is defined as follows:</t>
        <ul spacing="normal">
          <li>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.</li>
          <li>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.</li>
        </ul>
        <aside>
          <t>NOTE:
  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.
  Note that this pattern provides no way to remove a map entry from
  the prefix table entry.</t>
        </aside>
        <ul spacing="normal">
          <li>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.</li>
          <li>Other type combinations of left hand side and right hand side are
not valid.</li>
        </ul>
      </section>
      <section anchor="sec-discussion">
        <name>Discussion</name>
        <t>This specification uses up a large number of Simple Values and Tags,
in particular one of the rare one-byte tags and two thirds of the one-byte
simple values.  Since the objective is compression, 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.</t>
        <t>A maliciously crafted Packed CBOR data item might contain a reference
loop.  A consumer/decompressor <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>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.</li>
            <li>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.</li>
            <li>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.</li>
          </ul>
          <t>In general, loop detection can be handled in a similar way in which
loops of symbolic links are handled in a file system: A system-wide
limit (often 31 or 40 indirections for symbolic links) is applied to
any reference chase.</t>
        </aside>
        <aside>
          <t>NOTE:
The present specification does nothing to help with the packing of CBOR
sequences <xref target="RFC8742"/>; maybe such a specification should be added.</t>
        </aside>
      </section>
    </section>
    <section anchor="sec-table-setup">
      <name>Table Setup</name>
      <t>The packing references 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>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.</li>
        <li>
          <t>By one or more 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 down 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>
Packed item references 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
references in any existing, inherited (higher-numbered) part continue
to use the (more limited) number space of the inherited table.</t>
        </li>
      </ul>
      <t>For table setup, the present specification only defines a single tag,
which operates by prepending to the (by default empty) tables.</t>
      <aside>
        <t>We could also define a tag for dictionary referencing (or include that
in the basic packed CBOR), but the desirable details are likely to vary
considerably between applications.  A URI-based reference would be
easy to add, but might be too inefficient when used in the likely
combination with an <tt>ni:</tt> URI <xref target="RFC6920"/>.</t>
      </aside>
      <section anchor="sec-basic-packed-cbor">
        <name>Basic Packed CBOR</name>
        <t>A predefined tag for packing table setup is defined in CDDL <xref target="RFC8610"/> as in <xref target="fig-cddl"/>:</t>
        <figure anchor="fig-cddl">
          <name>Packed CBOR in CDDL</name>
          <sourcecode type="cddl"><![CDATA[
Basic-Packed-CBOR = #6.113([[*shared-item], [*argument-item], rump])
rump = any
argument-item = any
shared-item = any
]]></sourcecode>
        </figure>
        <t>(This assumes the allocation of tag number 113 ('q') for this tag.)</t>
        <t>The arrays given as the first and second element of the
content of the tag 113 are prepended to the tables for shared items
and arguments that apply to the entire tag (by default empty
tables).  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 and argument references encountered in the rump by
their expansions.</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 a pair of function tags.</t>
      <section anchor="sec-join-function-tags">
        <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>
        <artwork><![CDATA[
113([ [],
  [106("packed.example")],
  [6(["https://", "/foo.html"]),
   6(["coap://", "/bar.cbor"]),
   6(["mailto:support@", ""])]
])
]]></artwork>
        <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>
        <artwork><![CDATA[
113([ [],
  ["packed.example"],
  [216(105(["https://", "/foo.html"]),
   216(105(["coap://", "/bar.cbor"]),
   216("mailto:support@")]
])
]]></artwork>
        <t>A packed form of an array with many URIs that reference SenML items
from the same place could be:</t>
        <artwork><![CDATA[
113([ [],
  [105(["coaps://[2001::db8::1]/s/", ".senml"])],
  [6("temp-freezer"),
   6("temp-fridge"),
   6("temp-ambient")]
])
]]></artwork>
      </section>
    </section>
    <section anchor="sec-iana-considerations">
      <name>IANA Considerations</name>
      <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>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">6</td>
              <td align="left">integer (for shared); text string, byte string, array, map, tag (for straight)</td>
              <td align="left">Packed CBOR: shared/straight</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">105</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: ijoin function</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">106</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: join function</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">113</td>
              <td align="left">array (shared-items, argument-items, rump)</td>
              <td align="left">Packed CBOR: table setup</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">224-255</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: straight</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">28704-32767</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: straight</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">1879052288-2147483647</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: straight</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">216-223</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: inverted</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">27647-28671</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: inverted</td>
              <td align="left">draft-ietf-cbor-packed</td>
            </tr>
            <tr>
              <td align="right">1811940352-1879048191</td>
              <td align="left">text string, byte string, array, map, tag</td>
              <td align="left">Packed CBOR: inverted</td>
              <td align="left">draft-ietf-cbor-packed</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>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0-15</td>
              <td align="left">Packed CBOR: shared</td>
              <td align="left">draft-ietf-cbor-packed</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,
see <xref target="sec-discussion"/>.</t>
      <t>As the unpacking is deterministic, packed forms can be used as signing
inputs.  (Note that if external dictionaries are added to cbor-packed,
this requires additional consideration.)</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="STD94" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization abbrev="IANA">Internet Assigned Numbers Authority</organization>
            </author>
            <date day="19" month="September" year="2013"/>
          </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 abbrev="IANA">Internet Assigned Numbers Authority</organization>
            </author>
            <date day="19" month="September" year="2013"/>
          </front>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="STD63" 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">
              <organization/>
            </author>
            <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>
        <reference anchor="RFC7049" target="https://www.rfc-editor.org/info/rfc7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <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="RFC8742" target="https://www.rfc-editor.org/info/rfc8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher">
              <organization/>
            </author>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz">
              <organization/>
            </author>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc1951">
          <front>
            <title>DEFLATE Compressed Data Format Specification version 1.3</title>
            <author fullname="P. Deutsch" initials="P." surname="Deutsch">
              <organization/>
            </author>
            <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>
      </references>
    </references>
    <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 lead to a packed
CBOR data item depicted in <xref target="fig-example-out"/>, ~309 bytes.  Note that
this particular example does not lend itself to prefix compression.</t>
      <figure anchor="fig-example-in">
        <name>Example original CBOR data item</name>
        <sourcecode type="json"><![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.99
      },
      { "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</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>
      <t>The (JSON-compatible) CBOR data structure below has been packed with shared
item and (partial) prefix compression only.</t>
      <figure anchor="fig-example-in2">
        <name>Example original CBOR data item</name>
        <sourcecode type="json"><![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</name>
        <sourcecode type="cbordiag"><![CDATA[
113([/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", 6("3:8445/wot/thing"),
              / 6                        225 /
   225("/MyLED/"), 226("rgbValue"), "rgbValue",
     / 226             227           228     /
   {simple(6): simple(7), simple(9): true, simple(1): simple(8)}],
     / 229 /
   /rump/ {simple(0): "MyLED",
           "interactions": [
   229({simple(2): [{simple(3): 227("Red"), simple(4): simple(5)}],
    simple(0): 228("Red")}),
   229({simple(2): [{simple(3): 227("Green"), simple(4): simple(5)}],
    simple(0): 228("Green")}),
   229({simple(2): [{simple(3): 227("Blue"), simple(4): simple(5)}],
    simple(0): 228("Blue")}),
   229({simple(2): [{simple(3): 227("White"), simple(4): simple(5)}],
    simple(0): "rgbValueWhite"}),
   {simple(2): [{simple(3): 226("ledOnOff"), simple(4): simple(5)}],
    simple(6): {simple(10): {simple(11): "boolean"}}, simple(0):
    "ledOnOff", simple(9): true, simple(1): simple(8)},
   {simple(2): [{simple(3): 226("colorTemperatureChanged"),
    simple(4): simple(5)}], simple(6): simple(7), simple(0):
    "colorTemperatureChanged", simple(1): ["Event"]}],
     simple(1): "Lamp", "id": "0", "base": 225(""),
     "@context": 6("2:8444/wot/w3c-wot-td-context.jsonld")}])
]]></sourcecode>
      </figure>
    </section>
    <section numbered="false" anchor="sec-acknowledgements">
      <name>Acknowledgements</name>
      <t>CBOR packing was originally invented with the rest of CBOR, but did
not make it into <xref target="RFC7049"/>, the predecessor of <xref target="STD94"/>.
Various attempts to come up with a specification over the years didn't
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>
      <!--  LocalWords:  CBOR extensibility IANA uint sint IEEE endian
 -->
<!--  LocalWords:  signedness endianness prepended decompressor
 -->
<!--  LocalWords:  prepend
 -->

</section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
