<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-cbor-tags-oid-08" indexInclude="true" ipr="trust200902" number="9090" prepTime="2021-07-15T16:34:37" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="2" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-cbor-tags-oid-08" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9090" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="CBOR Tags for OIDs">Concise Binary Object Representation (CBOR) Tags for Object Identifiers</title>
    <seriesInfo name="RFC" value="9090" stream="IETF"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization showOnFrontPage="true">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 month="07" year="2021"/>
    <keyword>binary format</keyword>
    <keyword>data interchange format</keyword>
    <keyword>ASN.1</keyword>
    <keyword>OID</keyword>
    <keyword>Object Identifier</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The Concise Binary Object Representation (CBOR), defined in 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.</t>
      <t indent="0" pn="section-abstract-2">This document defines CBOR tags for
object identifiers (OIDs) and is
the reference document for the IANA registration of the CBOR tags
so defined.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9090" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-object-identifiers">Object Identifiers</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-on-the-byte-st">Requirements on the Byte String Being Tagged</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-preferred-serialization-con">Preferred Serialization Considerations</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-discussion">Discussion</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-basic-examples">Basic Examples</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encoding-of-the-sha-256-oid">Encoding of the SHA-256 OID</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-encoding-of-a-mib-relative-">Encoding of a MIB Relative OID</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tag-factoring-with-arrays-a">Tag Factoring with Arrays and Maps</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-preferred-serialization-cons">Preferred Serialization Considerations</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tag-factoring-example-x500-">Tag Factoring Example: X.500 Distinguished Name</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cddl-control-operators">CDDL Control Operators</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cddl-type-names">CDDL Type Names</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cbor-tags">CBOR Tags</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cddl-control-operators-2">CDDL Control Operators</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="intro" toc="include" numbered="true" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The Concise Binary Object Representation (CBOR) <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/> provides
for the interchange of structured data without a requirement for a
pre-agreed schema.
<xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/> defines a basic set of data types, as well as a tagging
mechanism that enables extending the set of data types supported via
an IANA registry.</t>
      <t indent="0" pn="section-1-2">This document defines CBOR tags for object identifiers
(OIDs) <xref target="X.660" format="default" sectionFormat="of" derivedContent="X.660"/>, which many IETF protocols carry.
The ASN.1 Basic Encoding Rules
(BER) <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/> specify binary encodings of both (absolute) object identifiers
and relative object identifiers.
The contents of these encodings (the "value" part of BER's
type-length-value structure) can be carried in a CBOR byte string.
This document defines two CBOR tags that cover the two kinds of
ASN.1 object identifiers encoded in this way and a third one to enable a
common optimization.
The tags can also be applied to arrays and maps to efficiently tag all
elements of an array or all keys of a map.
This document is the reference document for the IANA registration of
the tags so defined.</t>
      <section anchor="terms" toc="include" numbered="true" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-terminology">Terminology</name>
        <t indent="0" pn="section-1.1-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
        <t indent="0" pn="section-1.1-2">The terminology of <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/> applies; in particular,
the term "byte" is used in its now-customary sense as a synonym for
"octet".
The verb "to tag (something)" is used to express the construction of a
CBOR tag, with the object (something) as the tag content and a tag
number indicated elsewhere in the sentence (for instance, in a "with"
clause or by the shorthand "an NNN tag" for "a tag with tag number NNN"). The term "SDNV" (Self-Delimiting Numeric Value) is used as defined in
<xref target="RFC6256" format="default" sectionFormat="of" derivedContent="RFC6256"/>, with the additional restriction detailed in <xref target="reqts" format="default" sectionFormat="of" derivedContent="Section 2.1"/> (no
leading zeros).</t>
      </section>
    </section>
    <section anchor="oids" toc="include" numbered="true" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-object-identifiers">Object Identifiers</name>
      <t indent="0" pn="section-2-1">The International Object Identifier tree <xref target="X.660" format="default" sectionFormat="of" derivedContent="X.660"/> is
a hierarchically managed space of
identifiers, each of which is uniquely represented as a sequence of
unsigned integer values
<xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/>.
(These integer values are called "primary integer values" in <xref target="X.660" format="default" sectionFormat="of" derivedContent="X.660"/> because they can be accompanied by (not necessarily unambiguous)
secondary identifiers.  We ignore the latter and simply use the term
"integer values" here, occasionally calling out their unsignedness.
We also use the term "arc" when the focus is on the edge of the tree
labeled by such an integer value, as well as in the sense of a "long
arc", i.e., a (sub)sequence of such integer values.)</t>
      <t indent="0" pn="section-2-2">While these sequences can easily be represented in CBOR arrays of
unsigned integers, a more compact representation can often be achieved
by adopting the widely used representation of object identifiers
defined in BER; this representation may also be more amenable to
processing by other software that makes use of object identifiers.</t>
      <t indent="0" pn="section-2-3">BER represents the sequence of unsigned integers by concatenating
self-delimiting representations <xref target="RFC6256" format="default" sectionFormat="of" derivedContent="RFC6256"/> of each of the integer values in sequence.</t>
      <t indent="0" pn="section-2-4">ASN.1 distinguishes absolute object identifiers (ASN.1 type <tt>OBJECT IDENTIFIER</tt>),
which begin at a root arc (<xref target="X.660" format="default" sectionFormat="of" derivedContent="X.660"/>, Clause 3.5.21), from relative object
identifiers (ASN.1 type <tt>RELATIVE-OID</tt>), which begin
relative to some object identifier known from context (<xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/>,
Clause 3.8.63).
As a special optimization,
BER combines the first two integers in an absolute object identifier
into one numeric identifier by making use of the property of the
hierarchy that the first arc has only three integer values (0, 1, and 2)
and the second arcs under 0 and 1 are limited to the integer values between
0 and 39.  (The root arc <tt>joint-iso-itu-t(2)</tt> has
no such limitations on its second arc.)
If X and Y are the first two integer values,
the single integer value actually encoded is computed as:</t>
      <t indent="3" pn="section-2-5">X * 40 + Y</t>
      <t indent="0" pn="section-2-6">The inverse transformation (again making use of the known ranges of X
and Y) is applied when decoding the object identifier.</t>
      <t indent="0" pn="section-2-7">Since the semantics of absolute and relative object identifiers
differ and since it is very common for companies to use self-assigned numbers
under the arc <tt>1.3.6.1.4.1</tt> (IANA Private Enterprise Number OID
<xref target="IANA.enterprise-numbers" format="default" sectionFormat="of" derivedContent="IANA.enterprise-numbers"/>) that adds 5 fixed bytes to an encoded OID value,
this specification defines three tags, collectively called the
"OID tags" here:</t>
      <dl indent="3" newline="false" spacing="normal" pn="section-2-8">
        <dt pn="section-2-8.1">Tag number 111:</dt>
        <dd pn="section-2-8.2">Used to tag a byte string as the BER encoding <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/> of an
absolute object identifier (simply "object identifier" or "OID").</dd>
        <dt pn="section-2-8.3">Tag number 110:</dt>
        <dd pn="section-2-8.4">Used to tag a byte string as the BER encoding <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/> of a relative
object identifier (also called "relative OID").  Since the encoding of each
number is the same as for Self-Delimiting Numeric Values
(SDNVs) <xref target="RFC6256" format="default" sectionFormat="of" derivedContent="RFC6256"/>, this tag can also be used for tagging a byte string that
contains a sequence of zero or more SDNVs (or a more
application-specific tag can be created for such an application).</dd>
        <dt pn="section-2-8.5">Tag number 112:</dt>
        <dd pn="section-2-8.6">Structurally like tag 110 but understood to be relative to
<tt>1.3.6.1.4.1</tt> (IANA Private Enterprise Number OID <xref target="IANA.enterprise-numbers" format="default" sectionFormat="of" derivedContent="IANA.enterprise-numbers"/>).  Hence, the
semantics of the result are that of an absolute object identifier.</dd>
      </dl>
      <section anchor="reqts" toc="include" numbered="true" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-requirements-on-the-byte-st">Requirements on the Byte String Being Tagged</name>
        <t indent="0" pn="section-2.1-1">To form a valid tag, a byte string tagged with 111, 110, or 112
<bcp14>MUST</bcp14> be syntactically valid contents (the value part) for a BER
representation of an object identifier (see <xref target="oid-x.690" format="default" sectionFormat="of" derivedContent="Table 1"/>): </t>
        <table anchor="oid-x.690" align="center" pn="table-1">
          <name slugifiedName="name-tag-number-and-section-of-x">Tag Number and Section of X.690 Governing Tag Content</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Tag number</th>
              <th align="left" colspan="1" rowspan="1">Section of <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/></th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">111</td>
              <td align="left" colspan="1" rowspan="1">8.19</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">110</td>
              <td align="left" colspan="1" rowspan="1">8.20</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">112</td>
              <td align="left" colspan="1" rowspan="1">8.20</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-2.1-3">This is a concatenation of zero or
more SDNV values, where each SDNV value is a sequence of one or more bytes that
all have their most significant bit set, except for the last byte,
where it is unset.
Also, the first byte of each SDNV cannot be a
leading zero in SDNV's base-128 arithmetic, so it cannot take the
value 0x80 (bullet (c) in Section 8.1.2.4.2 of <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/>).</t>
        <t indent="0" pn="section-2.1-4">In other words:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2.1-5">
          <li pn="section-2.1-5.1">The byte string's first byte, and any byte that follows a byte that has the most significant
bit unset, <bcp14>MUST NOT</bcp14> be 0x80 (this requirement requires expressing the
integer values in their shortest form, with no leading zeroes).</li>
          <li pn="section-2.1-5.2">The byte string's last byte <bcp14>MUST NOT</bcp14> have the most significant bit set (this
requirement excludes an incomplete final integer value).</li>
        </ul>
        <t indent="0" pn="section-2.1-6">If either of these invalid conditions are encountered, the tag is
invalid.</t>
        <t indent="0" pn="section-2.1-7"><xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/> restricts RELATIVE-OID values to having at least
one arc, i.e., their encoding would have at least one SDNV.
This specification permits
empty relative object identifiers; they may
still be excluded by application semantics.</t>
        <t indent="0" pn="section-2.1-8">To facilitate the search for specific object ID values, it is <bcp14>RECOMMENDED</bcp14>
that definite length encoding (see <xref target="RFC8949" sectionFormat="of" section="3.2.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8949#section-3.2.3" derivedContent="RFC8949"/>) be used
for the byte strings that are used as tag content for these tags.</t>
        <t indent="0" pn="section-2.1-9">The valid set of byte strings can also be expressed using regular
expressions on bytes, using no specific notation but resembling Perl Compatible Regular Expressions
<xref target="PCRE" format="default" sectionFormat="of" derivedContent="PCRE"/>.  Unlike typical regular expressions that operate on
character sequences, the following regular expressions take bytes as
their domain, so they can be applied directly to CBOR byte strings.</t>
        <t indent="0" pn="section-2.1-10">For byte strings with tag 111:</t>
        <t indent="3" pn="section-2.1-11">
            <tt>/^(([\x81-\xFF][\x80-\xFF]*)?[\x00-\x7F])+$/</tt></t>
        <t indent="0" pn="section-2.1-12">For byte strings with tags 110 or 112:</t>
        <t indent="3" pn="section-2.1-13">
            <tt>/^(([\x81-\xFF][\x80-\xFF]*)?[\x00-\x7F])*$/</tt></t>
        <t indent="0" pn="section-2.1-14">A tag with tagged content that does not conform to the applicable
regular expression is invalid.</t>
      </section>
      <section anchor="prefser" toc="include" numbered="true" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-preferred-serialization-con">Preferred Serialization Considerations</name>
        <t indent="0" pn="section-2.2-1">For an absolute OID with a prefix of <tt>1.3.6.1.4.1</tt>, representations
with both the 111 and 112 tags are applicable, where the
representation with 112 will be five bytes shorter (by leaving out
the prefix h'2b06010401' from the enclosed byte string).
This specification makes that shorter representation the preferred
serialization (see Sections <xref target="RFC8949" section="3.4" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8949#section-3.4" derivedContent="RFC8949"/> and <xref target="RFC8949" section="4.1" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8949#section-4.1" derivedContent="RFC8949"/> of <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/>).
Note that this also implies that the Core Deterministic Encoding
Requirements (<xref section="4.2.1" sectionFormat="of" target="RFC8949" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8949#section-4.2.1" derivedContent="RFC8949"/>) require the use of 112
tags instead of 111 tags wherever that is possible.</t>
      </section>
      <section anchor="discussion" toc="include" numbered="true" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-discussion">Discussion</name>
        <t indent="0" pn="section-2.3-1">Staying close to the way object identifiers are encoded in ASN.1
BER makes back-and-forth translation easy; otherwise, we would choose a
more efficient encoding.  Object
identifiers in IETF protocols
are serialized in dotted decimal form or BER form, so
there is an advantage in not inventing a third form.  Also,
expectations of the cost of encoding object identifiers are
based on BER; using a different encoding might not be aligned with
these expectations. If additional information about an OID is desired,
lookup services such as
the <xref target="X.672" format="default" sectionFormat="of" derivedContent="X.672">OID Resolution Service (ORS)</xref>
and the <xref target="OID-INFO" format="default" sectionFormat="of" derivedContent="OID-INFO">OID Repository</xref> are available.</t>
      </section>
    </section>
    <section anchor="examples" toc="include" numbered="true" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-basic-examples">Basic Examples</name>
      <t indent="0" pn="section-3-1">This section gives simple examples of an absolute and a relative
object identifier, represented via tag numbers 111 and 110,
respectively.</t>
      <section anchor="encoding-of-the-sha-256-oid" toc="include" numbered="true" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-encoding-of-the-sha-256-oid">Encoding of the SHA-256 OID</name>
        <dl indent="3" newline="false" spacing="normal" pn="section-3.1-1">
          <dt pn="section-3.1-1.1">ASN.1 Value Notation:</dt>
          <dd pn="section-3.1-1.2">
            <sourcecode type="asn.1" markers="false" pn="section-3.1-1.2.1">
{ joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101)
  csor(3) nistalgorithm(4) hashalgs(2) sha256(1) }
</sourcecode>
          </dd>
          <dt pn="section-3.1-1.3">
Dotted Decimal Notation:  </dt>
          <dd pn="section-3.1-1.4">
            <t indent="0" pn="section-3.1-1.4.1">2.16.840.1.101.3.4.2.1</t>
          </dd>
        </dl>
        <figure anchor="fig-sha-ber" align="left" suppress-title="false" pn="figure-1">
          <name slugifiedName="name-sha-256-oid-in-ber">SHA-256 OID in BER</name>
          <sourcecode type="" markers="false" pn="section-3.1-2.1">
06                                # UNIVERSAL TAG 6
   09                             # 9 bytes, primitive
      60 86 48 01 65 03 04 02 01  # X.690 Clause 8.19
#      |   840  1  |  3  4  2  1    show component encoding
#   2.16         101
</sourcecode>
        </figure>
        <figure anchor="fig-sha-cbor" align="left" suppress-title="false" pn="figure-2">
          <name slugifiedName="name-sha-256-oid-in-cbor">SHA-256 OID in CBOR</name>
          <sourcecode type="cbor-pretty" markers="false" pn="section-3.1-3.1">
D8 6F                             # tag(111)
   49                             # 0b010_01001: mt 2, 9 bytes
      60 86 48 01 65 03 04 02 01  # X.690 Clause 8.19
</sourcecode>
        </figure>
      </section>
      <section anchor="encoding-of-a-mib-relative-oid" toc="include" numbered="true" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-encoding-of-a-mib-relative-">Encoding of a MIB Relative OID</name>
        <t indent="0" pn="section-3.2-1">Given some OID (e.g., <tt>lowpanMib</tt>, assumed to be <tt>1.3.6.1.2.1.226</tt> <xref target="RFC7388" format="default" sectionFormat="of" derivedContent="RFC7388"/>),
to which the following is added:</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-3.2-2">
          <dt pn="section-3.2-2.1">ASN.1 Value Notation:</dt>
          <dd pn="section-3.2-2.2">
            <sourcecode type="asn.1" markers="false" pn="section-3.2-2.2.1">
{ lowpanObjects(1) lowpanStats(1) lowpanOutTransmits(29) }
</sourcecode>
          </dd>
          <dt pn="section-3.2-2.3">
Dotted Decimal Notation:  </dt>
          <dd pn="section-3.2-2.4">
            <t indent="0" pn="section-3.2-2.4.1">.1.1.29</t>
          </dd>
        </dl>
        <figure anchor="fig-mib-ber" align="left" suppress-title="false" pn="figure-3">
          <name slugifiedName="name-mib-relative-object-identif">MIB Relative Object Identifier in BER</name>
          <sourcecode type="" markers="false" pn="section-3.2-3.1">
0D                                # UNIVERSAL TAG 13
   03                             # 3 bytes, primitive
      01 01 1D                    # X.690 Clause 8.20
#      1  1 29                      show component encoding
</sourcecode>
        </figure>
        <figure anchor="fig-mib-cbor" align="left" suppress-title="false" pn="figure-4">
          <name slugifiedName="name-mib-relative-object-identifi">MIB Relative Object Identifier in CBOR</name>
          <sourcecode type="cbor-pretty" markers="false" pn="section-3.2-4.1">
D8 6E                             # tag(110)
   43                             # 0b010_00011: mt 2 (bstr), 3 bytes
      01 01 1D                    # X.690 Clause 8.20
</sourcecode>
        </figure>
        <t indent="0" pn="section-3.2-5">This relative OID saves seven bytes compared to the full OID encoding.</t>
      </section>
    </section>
    <section anchor="tfs" toc="include" numbered="true" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-tag-factoring-with-arrays-a">Tag Factoring with Arrays and Maps</name>
      <t indent="0" pn="section-4-1">The tag content of OID tags can be byte strings (as discussed above) but also CBOR arrays and maps.
The idea in the latter case is that
the tag construct is factored out from each individual item in the container;
the tag is placed on the array or map instead.</t>
      <t indent="0" pn="section-4-2">When the tag content of an OID tag is an array, this means
that the respective tag is imputed to all elements of the array that are
byte strings, arrays, or maps.  (There is no effect on other elements,
including text strings or tags.)
For example, when the tag content of a 111 tag is an array,
every array element that is a byte string
is an OID, and every element that is an array or map is, in turn,
treated as discussed here.</t>
      <t indent="0" pn="section-4-3">When the tag content of an OID tag is a map, this means that a tag
with the same tag number is imputed to all keys in the map that are byte
strings, arrays, or maps; again, there is no effect on keys of other major types.
Note that there is also no effect on the values in the map.</t>
      <t indent="0" pn="section-4-4">As a result of these rules, tag factoring in nested arrays and maps is supported.
For example,
a 3-dimensional array of OIDs can be composed by using
a single 111 tag containing an array of arrays of arrays
of byte strings. All such byte strings are then considered OIDs.</t>
      <section anchor="preferred-serialization-considerations" toc="include" numbered="true" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-preferred-serialization-cons">Preferred Serialization Considerations</name>
        <t indent="0" pn="section-4.1-1">Where tag factoring with tag number 111 is used, some OIDs enclosed in the
tag may be encoded in a shorter way by using tag number 112 instead of
encoding an unadorned byte string.
This remains the preferred serialization (see also <xref target="prefser" format="default" sectionFormat="of" derivedContent="Section 2.2"/>).
However, this specification does not make the presence or absence of
tag factoring a preferred serialization; application protocols can
define where tag factoring is to be used or not (and will need to do
so if they have deterministic encoding requirements).</t>
      </section>
      <section anchor="tag-factoring-example-x500-distinguished-name" toc="include" numbered="true" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-tag-factoring-example-x500-">Tag Factoring Example: X.500 Distinguished Name</name>
        <t indent="0" pn="section-4.2-1">Consider the X.500 distinguished name:</t>
        <table anchor="tab-dn-data" align="center" pn="table-2">
          <name slugifiedName="name-example-x500-distinguished-">Example X.500 Distinguished Name</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Attribute Types</th>
              <th align="left" colspan="1" rowspan="1">Attribute Values</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">c (2.5.4.6)</td>
              <td align="left" colspan="1" rowspan="1">US</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">l (2.5.4.7)<br/>s (2.5.4.8)<br/>postalCode (2.5.4.17)</td>
              <td align="left" colspan="1" rowspan="1">Los Angeles<br/>CA<br/>90013</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">street (2.5.4.9)</td>
              <td align="left" colspan="1" rowspan="1">532 S Olive St</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">businessCategory (2.5.4.15)<br/>buildingName (0.9.2342.19200300.100.1.48)</td>
              <td align="left" colspan="1" rowspan="1">Public Park<br/>Pershing Square</td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-4.2-3"><xref target="tab-dn-data" format="default" sectionFormat="of" derivedContent="Table 2"/> has four "relative distinguished names" (RDNs). The
country (first) and street (third) RDNs are single valued.
The second and fourth RDNs are multivalued.</t>
        <t indent="0" pn="section-4.2-4">The equivalent representations in CBOR diagnostic notation (<xref section="8" sectionFormat="of" target="RFC8949" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8949#section-8" derivedContent="RFC8949"/>) and CBOR are:</t>
        <figure anchor="fig-dn-cbor-diag" align="left" suppress-title="false" pn="figure-5">
          <name slugifiedName="name-distinguished-name-in-cbor-">Distinguished Name in CBOR Diagnostic Notation</name>
          <sourcecode type="cbor-diag" markers="false" pn="section-4.2-5.1">
111([{ h'550406': "US" },
     { h'550407': "Los Angeles",
       h'550408': "CA",
       h'550411': "90013" },
     { h'550409': "532 S Olive St" },
     { h'55040f': "Public Park",
       h'0992268993f22c640130': "Pershing Square" }])
</sourcecode>
        </figure>
        <figure anchor="fig-dn-cbor" align="left" suppress-title="false" pn="figure-6">
          <name slugifiedName="name-distinguished-name-in-cbor-1">Distinguished Name in CBOR (109 Bytes)</name>
          <sourcecode type="cbor-pretty" markers="false" pn="section-4.2-6.1">
d8 6f                                      # tag(111)
   84                                      # array(4)
      a1                                   # map(1)
         43 550406                         # 2.5.4.6 (4)
         62                                # text(2)
            5553                           # "US"
      a3                                   # map(3)
         43 550407                         # 2.5.4.7 (4)
         6b                                # text(11)
            4c6f7320416e67656c6573         # "Los Angeles"
         43 550408                         # 2.5.4.8 (4)
         62                                # text(2)
            4341                           # "CA"
         43 550411                         # 2.5.4.17 (4)
         65                                # text(5)
            3930303133                     # "90013"
      a1                                   # map(1)
         43 550409                         # 2.5.4.9 (4)
         6e                                # text(14)
            3533322053204f6c697665205374   # "532 S Olive St"
      a2                                   # map(2)
         43 55040f                         # 2.5.4.15 (4)
         6b                                # text(11)
            5075626c6963205061726b         # "Public Park"
         4a 0992268993f22c640130    # 0.9.2342.19200300.100.1.48 (11)
         6f                                # text(15)
            5065727368696e6720537175617265 # "Pershing Square"
</sourcecode>
        </figure>
        <t indent="0" pn="section-4.2-7">(This example encoding assumes that all attribute values are UTF-8 strings or can be represented as UTF-8 strings with no loss of information.)</t>
      </section>
    </section>
    <section anchor="control" toc="include" numbered="true" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-cddl-control-operators">CDDL Control Operators</name>
      <t indent="0" pn="section-5-1">Concise Data Definition Language (CDDL) specifications <xref target="RFC8610" format="default" sectionFormat="of" derivedContent="RFC8610"/> may
want to specify the use of SDNVs or SDNV
sequences (as defined for the tag content for tag 110).  This document
introduces two new control operators that can be applied to a target
value that is a byte string:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5-2">
        <li pn="section-5-2.1">
          <tt>.sdnv</tt>, with a control type that contains unsigned integers.  The
byte string is specified to be encoded as an SDNV (BER
encoding) <xref target="RFC6256" format="default" sectionFormat="of" derivedContent="RFC6256"/> for the matching values of the control type.</li>
        <li pn="section-5-2.2">
          <tt>.sdnvseq</tt>, with a control type that contains arrays of unsigned
integers.  The byte string is specified to be encoded as a sequence
of SDNVs (BER encoding) <xref target="RFC6256" format="default" sectionFormat="of" derivedContent="RFC6256"/> that decodes to an array of
unsigned integers matching the control type.</li>
        <li pn="section-5-2.3">
          <tt>.oid</tt>, like <tt>.sdnvseq</tt>, except that the X*40+Y translation for
absolute OIDs is included (see <xref target="fig-dn-cddl-oid" format="default" sectionFormat="of" derivedContent="Figure 8"/>).</li>
      </ul>
      <t indent="0" pn="section-5-3"><xref target="fig-dn-cddl" format="default" sectionFormat="of" derivedContent="Figure 7"/> shows an example for the use of <tt>.sdnvseq</tt> for a part
of a structure using OIDs that could be used in <xref target="fig-dn-cbor" format="default" sectionFormat="of" derivedContent="Figure 6"/>;
<xref target="fig-dn-cddl-oid" format="default" sectionFormat="of" derivedContent="Figure 8"/> shows the same with the <tt>.oid</tt> operator.</t>
      <figure anchor="fig-dn-cddl" align="left" suppress-title="false" pn="figure-7">
        <name slugifiedName="name-using-sdnvseq">Using .sdnvseq</name>
        <sourcecode type="cddl" markers="false" pn="section-5-4.1">
country-rdn = {country-oid =&gt; country-value}
country-oid = bytes .sdnvseq [85, 4, 6]
country-value = text .size 2
</sourcecode>
      </figure>
      <figure anchor="fig-dn-cddl-oid" align="left" suppress-title="false" pn="figure-8">
        <name slugifiedName="name-using-oid">Using .oid</name>
        <sourcecode type="cddl" markers="false" pn="section-5-5.1">
country-rdn = {country-oid =&gt; country-value}
country-oid = bytes .oid [2, 5, 4, 6]
country-value = text .size 2
</sourcecode>
      </figure>
      <t indent="0" pn="section-5-6">Note that the control type need not be a literal; for example, <tt>bytes .oid
[2, 5, 4, *uint]</tt> matches all OIDs inside OID arc <tt>2.5.4</tt>,
<tt>attributeType</tt>.</t>
    </section>
    <section anchor="cddl-typenames" toc="include" numbered="true" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-cddl-type-names">CDDL Type Names</name>
      <t indent="0" pn="section-6-1">For the use with CDDL, the
type names defined in <xref target="tag-cddl" format="default" sectionFormat="of" derivedContent="Figure 9"/> are recommended:</t>
      <figure anchor="tag-cddl" align="left" suppress-title="false" pn="figure-9">
        <name slugifiedName="name-recommended-type-names-for-">Recommended Type Names for CDDL</name>
        <sourcecode name="rfc9090.cddl" type="cddl" markers="false" pn="section-6-2.1">
oid = #6.111(bstr)
roid = #6.110(bstr)
pen = #6.112(bstr)
</sourcecode>
      </figure>
    </section>
    <section anchor="iana" toc="include" numbered="true" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="cbor-tags" toc="include" numbered="true" removeInRFC="false" pn="section-7.1">
        <name slugifiedName="name-cbor-tags">CBOR Tags</name>
        <t indent="0" pn="section-7.1-1">IANA has assigned the CBOR tag numbers in <xref target="tab-tag-values-new" format="default" sectionFormat="of" derivedContent="Table 3"/> 
in the 1+1 byte space (24..255) of the "CBOR Tags" registry
<xref target="IANA.cbor-tags" format="default" sectionFormat="of" derivedContent="IANA.cbor-tags"/>, with this document as the specification reference.</t>
        <table anchor="tab-tag-values-new" align="center" pn="table-3">
          <name slugifiedName="name-new-tag-numbers">New Tag Numbers</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Tag</th>
              <th align="left" colspan="1" rowspan="1">Data Item</th>
              <th align="left" colspan="1" rowspan="1">Semantics</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">111</td>
              <td align="left" colspan="1" rowspan="1">byte string, array, or map</td>
              <td align="left" colspan="1" rowspan="1">object identifier (BER encoding)</td>
              <td align="left" colspan="1" rowspan="1">RFC 9090</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">110</td>
              <td align="left" colspan="1" rowspan="1">byte string, array, or map</td>
              <td align="left" colspan="1" rowspan="1">relative object identifier (BER encoding); SDNV <xref target="RFC6256" format="default" sectionFormat="of" derivedContent="RFC6256"/> sequence</td>
              <td align="left" colspan="1" rowspan="1">RFC 9090</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">112</td>
              <td align="left" colspan="1" rowspan="1">byte string, array, or map</td>
              <td align="left" colspan="1" rowspan="1">object identifier (BER encoding), relative to 1.3.6.1.4.1</td>
              <td align="left" colspan="1" rowspan="1">RFC 9090</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="cddl-control-operators" toc="include" numbered="true" removeInRFC="false" pn="section-7.2">
        <name slugifiedName="name-cddl-control-operators-2">CDDL Control Operators</name>
        <t indent="0" pn="section-7.2-1">IANA has assigned the CDDL control operators in
<xref target="tab-operators-new" format="default" sectionFormat="of" derivedContent="Table 4"/> in the "CDDL Control Operators" registry
<xref target="IANA.cddl" format="default" sectionFormat="of" derivedContent="IANA.cddl"/>, with this document as the specification
reference.</t>
        <table anchor="tab-operators-new" align="center" pn="table-4">
          <name slugifiedName="name-new-cddl-control-operators">New CDDL Control Operators</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Name</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">.sdnv</td>
              <td align="left" colspan="1" rowspan="1">RFC 9090</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">.sdnvseq</td>
              <td align="left" colspan="1" rowspan="1">RFC 9090</td>
            </tr>
            <tr>
              <td align="left" colspan="1" rowspan="1">.oid</td>
              <td align="left" colspan="1" rowspan="1">RFC 9090</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security-considerations" toc="include" numbered="true" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-8-1">The security considerations of <xref target="RFC8949" format="default" sectionFormat="of" derivedContent="RFC8949"/> apply.</t>
      <t indent="0" pn="section-8-2">The encodings in Clauses 8.19 and 8.20 of <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/> are quite compact and unambiguous
but <bcp14>MUST</bcp14> be followed precisely to avoid security pitfalls.
In particular, the requirements set out in <xref target="reqts" format="default" sectionFormat="of" derivedContent="Section 2.1"/> of this document need to be
followed; otherwise, an attacker may be able to subvert a checking
process by submitting alternative representations that are later taken
as the original (or even something else entirely) by another decoder
that is intended to be protected by the checking process.</t>
      <t indent="0" pn="section-8-3">OIDs and relative OIDs can always be treated as opaque byte strings.
Actually understanding the structure that was used for generating them
is not necessary, and, except for checking the structure requirements,
it is strongly <bcp14>NOT RECOMMENDED</bcp14> to perform any
processing of this kind (e.g., converting into dotted notation and
back) unless absolutely necessary.
If the OIDs are translated into other representations, the usual
security considerations for non-trivial representation conversions
apply; the integer values are unlimited in range.</t>
      <t indent="0" pn="section-8-4">An attacker might trick an application into using a byte string inside
a tag-factored data item, where the byte string is not actually
intended to fall under one of the tags defined here.  This may cause
the application to emit data with semantics different from what was
intended.  Applications therefore need to be restrictive with respect
to what data items they apply tag factoring to.</t>
    </section>
  </middle>
  <back>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags" quoteTitle="true" derivedAnchor="IANA.cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="IANA.cddl" target="https://www.iana.org/assignments/cddl" quoteTitle="true" derivedAnchor="IANA.cddl">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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="RFC6256" target="https://www.rfc-editor.org/info/rfc6256" quoteTitle="true" derivedAnchor="RFC6256">
          <front>
            <title>Using Self-Delimiting Numeric Values in Protocols</title>
            <author initials="W." surname="Eddy" fullname="W. Eddy">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="E." surname="Davies" fullname="E. Davies">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2011" month="May"/>
            <abstract>
              <t indent="0">Self-Delimiting Numeric Values (SDNVs) have recently been introduced as a field type in proposed Delay-Tolerant Networking protocols. SDNVs encode an arbitrary-length non-negative integer or arbitrary- length bitstring with minimum overhead.  They are intended to provide protocol flexibility without sacrificing economy and to assist in future-proofing protocols under development.  This document describes formats and algorithms for SDNV encoding and decoding, along with notes on implementation and usage.  This document is a product of the Delay-Tolerant Networking Research Group and has been reviewed by that group.  No objections to its publication as an RFC were raised.  This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6256"/>
          <seriesInfo name="DOI" value="10.17487/RFC6256"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">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>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" quoteTitle="true" derivedAnchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author initials="H." surname="Birkholz" fullname="H. Birkholz">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Vigano" fullname="C. Vigano">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="June"/>
            <abstract>
              <t indent="0">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="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" quoteTitle="true" derivedAnchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2020" month="December"/>
            <abstract>
              <t indent="0">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 indent="0">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="X.660" target="https://www.itu.int/rec/T-REC-X.660" quoteTitle="true" derivedAnchor="X.660">
          <front>
            <title>Information technology - Procedures for the operation of object identifier registration authorities: General procedures and top arcs of the international object identifier tree</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2011" month="July"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.660"/>
        </reference>
        <reference anchor="X.680" target="https://www.itu.int/rec/T-REC-X.680" quoteTitle="true" derivedAnchor="X.680">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
        </reference>
        <reference anchor="X.690" target="https://www.itu.int/rec/T-REC-X.690" quoteTitle="true" derivedAnchor="X.690">
          <front>
            <title>Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="IANA.enterprise-numbers" target="https://www.iana.org/assignments/enterprise-numbers" quoteTitle="true" derivedAnchor="IANA.enterprise-numbers">
          <front>
            <title>Private Enterprise Numbers</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="OID-INFO" target="http://www.oid-info.com/" quoteTitle="true" derivedAnchor="OID-INFO">
          <front>
            <title>Object Identifier (OID) Repository</title>
            <author>
              <organization showOnFrontPage="true">Orange SA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="PCRE" target="http://www.pcre.org/" quoteTitle="true" derivedAnchor="PCRE">
          <front>
            <title>PCRE - Perl Compatible Regular Expressions</title>
            <author/>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC7388" target="https://www.rfc-editor.org/info/rfc7388" quoteTitle="true" derivedAnchor="RFC7388">
          <front>
            <title>Definition of Managed Objects for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)</title>
            <author initials="J." surname="Schoenwaelder" fullname="J. Schoenwaelder">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="A." surname="Sehgal" fullname="A. Sehgal">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Tsou" fullname="T. Tsou">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Zhou" fullname="C. Zhou">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="October"/>
            <abstract>
              <t indent="0">This document defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community.  In particular, it defines objects for managing IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7388"/>
          <seriesInfo name="DOI" value="10.17487/RFC7388"/>
        </reference>
        <reference anchor="X.672" target="https://www.itu.int/rec/T-REC-X.672" quoteTitle="true" derivedAnchor="X.672">
          <front>
            <title>Information technology - Open systems interconnection - Object identifier resolution system (ORS)</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2010" month="August"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.672"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.a-1"><contact fullname="Sean Leonard"/> started the work on this document in 2014 with an
elaborate proposal.
<contact fullname="Jim Schaad"/> provided a significant review of this document.
<contact fullname="Rob Wilton"/>'s IESG review prompted us to provide preferred
serialization considerations.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-contributors">Contributors</name>
      <contact initials="S." surname="Leonard" fullname="Sean Leonard">
        <organization showOnFrontPage="true">Penango, Inc.</organization>
        <address>
          <postal>
            <street>5900 Wilshire Boulevard</street>
            <street>21st Floor</street>
            <city>Los Angeles</city>
            <region>CA</region>
            <code>90036</code>
            <country>United States of America</country>
          </postal>
          <email>dev+ietf@seantek.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="C." surname="Bormann" fullname="Carsten Bormann">
        <organization showOnFrontPage="true">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>
    </section>
  </back>
</rfc>
