<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-goncharov-rfcregsimples-00" category="std" consensus="true" submissionType="IETF" updates="8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="CBOR Simple Values Range">A CBOR Simple Values Range for Packing and Templating</title>
    <seriesInfo name="Internet-Draft" value="draft-goncharov-rfcregsimples-00"/>
    <author fullname="Vadim Goncharov">
      <organization>Consultant</organization>
      <address>
        <email>vadimnuclight@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="04"/>
    <area>Applications and Real-Time</area>
    <workgroup>Concise Binary Object Representation Maintenance and Extensions</workgroup>
    <keyword>CBOR</keyword>
    <keyword>simple values</keyword>
    <keyword>compression</keyword>
    <keyword>templating</keyword>
    <keyword>packed CBOR</keyword>
    <abstract>
      <?line 67?>

<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>This document registers a range of sixteen CBOR simple values (0 to
15) that can be shared by different specifications using them for CBOR
transformations, such as compression or templating, in a
non-conflicting way.
This allows current and future specifications to
reuse the smallest (single-byte) simple values range while defining
their own ways to use them for achieving their goals.</t>
      <t>This document updates RFC 8949.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://nuclight.github.io/cbor-spec-rfcregsimples/draft-goncharov-rfcregsimples.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-goncharov-rfcregsimples/"/>.
      </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/nuclight/cbor-spec-rfcregsimples"/>.</t>
    </note>
  </front>
  <middle>
    <?line 84?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>CBOR does not provide any forms of 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 to make use of the data.</t>
      <t>This document describes a set of CBOR simple values which can be used
by different specifications utilizing them for CBOR transformations,
such as compression or templating, in a non-conflicting way.
This allows for future standards to reuse the smallest values range
while inventing better ways to use them for achieving their goals.</t>
    </section>
    <section anchor="terminology-and-conventions">
      <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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<!-- TODO: any other terminology needed here? -->

</section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>In a world of constrained devices (IoT) such devices often have very
little memory, while these devices are also constrained in
e.g. packet size so that compression is very desirable.
Traditional generic compression algorithms like DEFLATE <xref target="RFC1951"/>
perform well but require memory both for decompressed data and
internal state of the decompressor itself.
Many constrained implementations would want to trade off between
compression ratio and required memory - tolerating worse compression
by lowering memory usage, ideally to zero bytes (that is, using
compressed data in-place as-is).
In the ongoing IETF efforts the "MyLED" example in JSON <xref target="MyLED"/>
takes 1210 bytes converted to CBOR which may be further reduced to
about 350 bytes using DEFLATE, but this requires more than 1.5 Kbytes
of memory during decompression - in contrast, work in progress
specifications like <xref target="I-D.ietf-cbor-packed"/> and <xref target="CBAR"/> are able to
reduce this example to about 500 bytes, however accessible in-place,
without need for a decompression buffer at all.</t>
      <t>Sixteen simple values were intended to be used for compression
purposes in the original CBOR proposal, but didn't get into the
standard at the time being due to the complexity of the task.
Since then, more than one proposal for compression techniques has
appeared.
While the usual way for Internet specifications is to acquire
different codepoints (or ranges of them) from IANA, this does not work
well in the compression world given the specifics of CBOR encoding -
that is, different numbers are encoded in CBOR occupying a different
number of bytes.
Compression efficiency, however, is very sensitive to the length of
codes used - the shorter, the better.
Thus, registration of a short codes range for one standard exclusively
would put other standards - especially future standards - into an
unequal and unfair position if there are no more short codes left for
them.
However, it is known that future inventions tend to be more effective
in usage of the same resources but are impossible to predict at the
time of a prior standard being issued (otherwise enhancements would be
already incorporated into it).
As (at the time of writing) there are only 20 single-byte CBOR simple
values available for registration, such a situation can happen with
just the first standard accepted.</t>
      <t>Therefore, this document registers the first sixteen CBOR simple
values (0 to 15) in such a way that they could be used by different
compression methods (different specifications), both existing and not
yet invented.
The way for a decoder to distinguish them - that is, to interpret
according to one specification or another - is done via a CBOR Tag
(acting as a "namespace") or by external means such as messages' media
type.</t>
      <t>This range registration is similar in spirit to <xref target="RFC4251"/> allocating
a range of message numbers e.g. 30 to 49 to be key exchange method
specific, stating that numbers can be reused for different
authentication methods - and examples of specifications using such a
range are <xref target="RFC4419"/>, <xref target="RFC4432"/> or <xref target="RFC5656"/>.</t>
    </section>
    <section anchor="specification">
      <name>Specification</name>
      <t>This document registers CBOR values simple(0) to simple(15) for needs
like packing or templating CBOR documents.</t>
      <t>Following the spirit of <xref target="RFC4251"/>, this specification could just
declare this range to be packing/templating method specific (so the
text could end right here), but this would not be very useful to CBOR
parser implementers in terms of what could be expected from these
values or what kind of changes specific packing/templating methods may
require in their parsers.
So in the text below we take a slightly different approach.</t>
      <t>This specification tries, speaking in object-oriented terms, to be the
"Abstract Base Class" for other specifications to "inherit", in the
sense of describing meaning as broadly as possible, but concrete
specifications do not need to implement every imaginable feature and
<bcp14>MAY</bcp14> choose to define only a subset.</t>
      <t>Application protocols using CBOR simple values in the 0..15 range, or
generic packing/templating specifications, should include a reference
to this document about using the range and then describe the precise
usage of these simple values.</t>
      <t>The semantics of these simple values 0 to 15 is that they are
substitutions for one or several other CBOR items.
That is, when a decoder sees values simple(0) to simple(15), it treats
them as some mapping function (0 to 15 may be viewed as the argument
here) which takes an argument and, depending on the current decoder
state, returns CBOR item(s) to substitute instead of the simple value,
as if the simple value never occurred in the stream, but the returned
CBOR item(s) occurred instead.</t>
      <t>Such a mapping function may be very complex, taking into account even
surrounding CBOR items context to decide.
Or (especially expected for short-term solutions) an "inheriting"
specification may choose it to be rather simple, for example,
simple(0)..simple(15) could be references (indexes) to some table
(kept by the decoding process), or part of such a table, so that
instead of a simple value an integral number of CBOR items is
substituted from a table entry.
Note that these replacement items do not necessarily form a complete
well-formed CBOR item if viewed separately as an entry in the table.
For example, a sequence</t>
      <artwork><![CDATA[
[..., 1, 2, simple(2), "a", "b", "c", ...]
]]></artwork>
      <t>could expand to</t>
      <artwork><![CDATA[
[..., 1, 2, ["foo", "bar", "a"], "b", "c", ...]
]]></artwork>
      <t>if the entry for simple(2) at this moment contained a definite-length
array start item (0x83) and two string items "foo" and "bar".</t>
      <t>(Informally speaking, this could be described as "cut", in a text
editor, a whole number of tokens (counting each string, brace, etc. as
one token) in CBOR diagnostic notation and then "paste" it instead of
each simple(N) occurrence).</t>
      <t>Please note that "surrounding CBOR items context" (if the
specification goes the complex way) may include e.g. the absolute or
relative position of the simple value.
In the (imaginary non-normative) example:</t>
      <artwork><![CDATA[
10([simple(0), 16, "atom1",
   {
     "foo": simple(0),
     "bar": 10([simple(0), 16, "otheratom",
               {
                  "baz": simple(0),
                  "quux": 10(122(0))
               }
            ])
   }
])
]]></artwork>
      <t>the simple(0) at the very start of the array expands to
"function-name", but the same simple(0) as the map value expands to
(presumably) "atom1" under the "foo" key and to "otheratom" under the
"baz" key.
That is, if a packing method specification chooses the "index in
table" approach, there could be several such tables.</t>
      <t>Even more, "surrounding context" usage is not prohibited from explicit
arguments and their "swallowing" after substitution, for example, in</t>
      <artwork><![CDATA[
[..., 1, 2, "arg1", "arg2", simple(2), 3, ...]
]]></artwork>
      <t>or</t>
      <artwork><![CDATA[
[..., 1, 2, simple(2), "arg1", "arg2", 3, ...]
]]></artwork>
      <t>simple(2) could be viewed as a function call telling to use 2
arguments from surrounding CBOR items, and then do something based on
"arg1" and "arg2", so probably the whole triple will be replaced by
the function return value, not just simple(N) itself:</t>
      <artwork><![CDATA[
[..., 1, 2, {"substituted": "sequence"}, ['frobnicate'], 3, ...]
]]></artwork>
      <t>However, such advanced usage is <bcp14>NOT RECOMMENDED</bcp14> for generic
specifications because it is hard to do it right with generic CBOR
parsers if such parsers are streaming / event-based.
(This may be not true for application-specific parsers in
application-specific packing/templating methods.)</t>
      <t>Therefore, as usage of simple(0)..simple(15) can modify the structure
of a CBOR document, they <bcp14>SHOULD</bcp14> be treated as an error if used outside
of an area where a table (or part of such a table) is set up, e.g.
outside of a "namespace" tag or an area implied by a media type.
The exact mechanism to set up such tables (or modify them so that the
same simple value may expand to different content in different parts
of a CBOR stream) is left for definition by the application protocol,
or an application protocol may "inherit" it (implemented in a library)
from a generic specification in an appropriate IETF RFC document (such
as <xref target="I-D.ietf-cbor-packed"/>).</t>
      <section anchor="interoperability">
        <name>Interoperability</name>
        <t>Note that it is straightforward to have usage of simple values of
different compression/templating specifications in the non-overlapping
areas of a single CBOR document, because the primary method for
specifications to manifest themselves is via using some CBOR Tag(s) as
a "namespace" ("area"), like in this example:</t>
        <artwork><![CDATA[
{
  "foo": 55510([..., simple(1), /meaning by spec 1/ ...]),
  "bar": 55513([..., simple(1), /meaning by spec 2/ ...])
}
]]></artwork>
        <t>(the tag numbers here are fictitious, to be used just as an example).</t>
        <t>Tag nesting, however, which could be used for things like providing
the output of one decompression phase (by one specification) as input
for another (by the same or a different specification) is a more
complicated case, details of which are left out from this document to
be defined by actual specifications.
It is noted here for specifications' authors that the possibility of
such multi-phase (nested) processing is the reason for a "<bcp14>SHOULD</bcp14>"
requirement above instead of a "<bcp14>MUST</bcp14>", because simple values (of the
0..15 range) produced as a result of one phase may be fed to a
different decoder.</t>
        <t>Here, only some basic principle for tag nesting is defined: a packing
method tag <bcp14>MUST NOT</bcp14> be used as the outer one if it does not support
preserving non-own simple values after applying its transformations
(unpacking).
This is best illustrated by an example: suppose that for the imaginary
tags above, the specification of tag 55510 supports such preserving
(in the example, it will list integers corresponding to simple numbers
and values corresponding to them) by leaving them as-is, and the
specification of tag 55513 uses a simplistic implementation where
simple(N) is just an index N into a table.
Then, the following example is valid:</t>
        <artwork><![CDATA[
55510([10, "foo", 11, "bar", 12, "baz", /* outer tag's setup */
   /* outer tag's transformed data area */
   55513([                                    /* inner tag's */
      ["rgbValue", "rgbValueRed", "rgbValueGreen"], /* setup */
      [/* inner tag's transformed data area */
         simple(0), simple(1), simple(2), simple(10),
         simple(0), simple(1), simple(2), simple(11),
         simple(0), simple(1), simple(2), simple(12)
      ]
   ])
])
]]></artwork>
        <t>As tags are processed from outside to inside, the decoder of tag 55510
will make this fragment equivalent to:</t>
        <artwork><![CDATA[
55513([                                    /* inner tag's */
   ["rgbValue", "rgbValueRed", "rgbValueGreen"], /* setup */
   [/* inner tag's transformed data area */
      simple(0), simple(1), simple(2), "foo",
      simple(0), simple(1), simple(2), "bar",
      simple(0), simple(1), simple(2), "baz"
   ]
])
]]></artwork>
        <t>which the decoder of tag 55513 finally turns into unpacked form:</t>
        <artwork><![CDATA[
[
   "rgbValue", "rgbValueRed", "rgbValueGreen", "foo",
   "rgbValue", "rgbValueRed", "rgbValueGreen", "bar",
   "rgbValue", "rgbValueRed", "rgbValueGreen", "baz"
]
]]></artwork>
        <t>However, the opposite is not possible because the specification of tag
55513 does not make exceptions.
The following example is NOT valid:</t>
        <artwork><![CDATA[
55513([                                    /* outer tag's */
   ["rgbValue", "rgbValueRed", "rgbValueGreen"], /* setup */
   /* outer tag's transformed data area */
   55510([10, "foo", 11, "bar", 12, "baz", /* inner setup */
      [/* inner tag's transformed data area */
         simple(0), simple(1), simple(2), simple(10),
         simple(0), simple(1), simple(2), simple(11),
         simple(0), simple(1), simple(2), simple(12)
      ]
   ])
])
]]></artwork>
        <!-- TODO 05.12.25: outside of namespace tag - for CBOR Sequences -->

</section>
      <section anchor="validity-checking">
        <name>Validity Checking</name>
        <t>Please note that the whole concept of CBOR document transformation, be
it packing or templating, means that, in the general case, it is not
safe to do validity checks even on known tags as described by Section
5.3.2 of <xref target="RFC8949"/>.
For example, Tag 32 means URI and requires a text string as its
content.
However, the goal of packing is to reduce redundant information, which
may mean replacing such a text string with a simple value, raising the
possibility of the following example:</t>
        <artwork><![CDATA[
55513([..., 32(simple(1)), ...])
]]></artwork>
        <t>which would be considered as an error by a validity-checking decoder.</t>
        <t>Note that Section 5.4 of <xref target="RFC8949"/> does not cover this case, because
it is focused on evolution; however, with packing mechanisms this may
occur with not new but already known, stable tags.</t>
        <t>Therefore, this document updates Section 5.4 of <xref target="RFC8949"/> dictating
that generic decoders performing validity checking <bcp14>MUST</bcp14> provide a way
to disable this validity checking.
Note that a mode, where the decoder knows the packing method and
postpones validity checking until after unpacking, is possible - but
is not sufficient, because newer specifications, yet unknown to such a
decoder, may appear in the future after its deployment.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>In the "CBOR Simple Values" registry <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="left">Value</th>
            <th align="left">Semantics</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0..15</td>
            <td align="left">Packing and templating: shared by multiple specifications</td>
            <td align="left">RFC XXXX</td>
          </tr>
        </tbody>
      </table>
      <t>[RFC EDITOR: Please replace "RFC XXXX" above with the RFC number
assigned to this document.]</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC8949"/> apply.</t>
      <t>If a specification chooses to implement generic non-well-formed
entries in a table (modifying CBOR structure as in the example above),
care must be taken to avoid implementation bugs potentially leading to
out-of-bounds accesses.</t>
      <t>Specifications must decide what to do with the possibility of decoding
loops or infinite recursion, for example, if the table entry for
simple(M) includes another simple(N) value which then may be expanded
recursively.
Possible ways are either to not expand it at all, allowing for the
aforementioned multi-phase processing, or to provide counter-measures
similar to symlink processing in filesystems, or something else.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="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>
        <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>
            <date/>
          </front>
        </reference>
        <reference anchor="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">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="RFC4251">
          <front>
            <title>The Secure Shell (SSH) Protocol Architecture</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell (SSH) Protocol is a protocol for secure remote login and other secure network services over an insecure network. This document describes the architecture of the SSH protocol, as well as the notation and terminology used in SSH protocol documents. It also discusses the SSH algorithm naming system that allows local extensions. The SSH protocol consists of three major components: The Transport Layer Protocol provides server authentication, confidentiality, and integrity with perfect forward secrecy. The User Authentication Protocol authenticates the client to the server. The Connection Protocol multiplexes the encrypted tunnel into several logical channels. Details of these protocols are described in separate documents. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4251"/>
          <seriesInfo name="DOI" value="10.17487/RFC4251"/>
        </reference>
        <reference anchor="RFC4419">
          <front>
            <title>Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol</title>
            <author fullname="M. Friedl" initials="M." surname="Friedl"/>
            <author fullname="N. Provos" initials="N." surname="Provos"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This memo describes a new key exchange method for the Secure Shell (SSH) protocol. It allows the SSH server to propose new groups on which to perform the Diffie-Hellman key exchange to the client. The proposed groups need not be fixed and can change with time. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4419"/>
          <seriesInfo name="DOI" value="10.17487/RFC4419"/>
        </reference>
        <reference anchor="RFC4432">
          <front>
            <title>RSA Key Exchange for the Secure Shell (SSH) Transport Layer Protocol</title>
            <author fullname="B. Harris" initials="B." surname="Harris"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This memo describes a key-exchange method for the Secure Shell (SSH) protocol based on Rivest-Shamir-Adleman (RSA) public-key encryption. It uses much less client CPU time than the Diffie-Hellman algorithm specified as part of the core protocol, and hence is particularly suitable for slow client systems. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4432"/>
          <seriesInfo name="DOI" value="10.17487/RFC4432"/>
        </reference>
        <reference anchor="RFC5656">
          <front>
            <title>Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer</title>
            <author fullname="D. Stebila" initials="D." surname="Stebila"/>
            <author fullname="J. Green" initials="J." surname="Green"/>
            <date month="December" year="2009"/>
            <abstract>
              <t>This document describes algorithms based on Elliptic Curve Cryptography (ECC) for use within the Secure Shell (SSH) transport protocol. In particular, it specifies Elliptic Curve Diffie-Hellman (ECDH) key agreement, Elliptic Curve Menezes-Qu-Vanstone (ECMQV) key agreement, and Elliptic Curve Digital Signature Algorithm (ECDSA) for use in the SSH Transport Layer protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5656"/>
          <seriesInfo name="DOI" value="10.17487/RFC5656"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-packed">
          <front>
            <title>Packed CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Mikolai Gütschow" initials="M." surname="Gütschow">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="2" month="February" year="2026"/>
            <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.

   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.

   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.


   // (This cref will be removed by the RFC editor:) 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-19"/>
        </reference>
        <reference anchor="MyLED" target="https://github.com/w3c/wot-thing-description/raw/db8abb3655afc7f149db7976ba4e79149619f537/test-bed/data/plugfest/2017-05-osaka/MyLED_f.jsonld">
          <front>
            <title>MyLED Thing Description (WoT plugfest test data)</title>
            <author>
              <organization>W3C Web of Things Interest Group</organization>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="CBAR" target="https://github.com/nuclight/musctp/blob/main/cbar.txt">
          <front>
            <title>CBOR &amp; generic BLOB by-Atoms Reducing (CBAR), Work in Progress</title>
            <author initials="V." surname="Goncharov" fullname="Vadim Goncharov">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
      </references>
    </references>
    <?line 469?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO: acknowledge.</t>
      <!--
TBD for 04.12.25 meeting:
* 31(undefined)
* move tags from 240-255 to release space for abbreviations
* 'As the unpacking is deterministic ... CDE' is not fully true for all goals
* record tag - yet another form of tables?
* tags in simples?
* dns-cbor: subj "slides on DNS/packed for 2025-05-14 interim" still unresolved
-->

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

-->

</rfc>
