<?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.1 (Ruby 3.2.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-05" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="CBOR EDN: Literals and ABNF ">CBOR Extended Diagnostic Notation (EDN): Application-Oriented Literals, ABNF, and Media Type</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-05"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2023" month="October" day="17"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 67?>

<t>The Concise Binary Object Representation, CBOR (STD 94, RFC 8949), defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.</t>
      <t>​This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of Constrained Resource Identifiers (draft-ietf-core-href).</t>
      <t>To facilitate tool interoperation, this document also
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 88?>

<section anchor="intro">
      <name>Introduction</name>
      <t>For the Concise Binary Object Representation, CBOR,
<xref section="8" sectionFormat="of" target="STD94"/> in conjunction with <xref section="G" sectionFormat="of" target="RFC8610"/>
defines a "diagnostic notation" in order to
be able to converse about CBOR data items without having to resort to
binary data.
Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.
(Standardizing this together with the actual interchange format does
not serve to create another interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.)</t>
      <t>This document specifies how to add application-oriented extensions to
the diagnostic notation.  It then defines two such extensions for
text representations of epoch-based date/times and of Constrained Resource Identifiers <xref target="I-D.ietf-core-href"/>.</t>
      <t>To facilitate tool interoperation, this document also
 specifies a formal ABNF definition for extended diagnostic notation (EDN)
 that accommodates application-oriented literals. (See <xref target="grammar"/> for an overall ABNF grammar as well as the
ABNF definitions in <xref target="app-grammars"/> for grammars for both the
byte string presentations predefined in <xref target="STD94"/> and the application-extensions).</t>
      <t><cref anchor="cri-later">Note that <xref target="cri"/> and <xref target="cri-grammar"/> about CRIs may move to the <xref target="I-D.ietf-core-href"/>
specification, depending on the relative speed of approval; the
later document gets the section.</cref></t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t><xref section="8" sectionFormat="of" target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that result in the Extended Diagnostic Notation
(EDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As diagnostic notation is not used in the kind of interchange
situations where backward compatibility would pose a significant
obstacle, there is little point in not using these extensions.</t>
        <t>Therefore, when we refer to "<em>diagnostic notation</em>", we mean to
include the original notation from <xref section="8" sectionFormat="of" target="STD94"/> as well as the
extensions from <xref section="G" sectionFormat="of" target="RFC8610"/>, <xref section="4.2" sectionFormat="of" target="RFC8742"/>, and the
present document.
However, we stick to the abbreviation "<em>EDN</em>" as it has become quite
popular and is more sharply distinguishable from other meanings than
"DN" would be.</t>
        <t>In a similar vein, the term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of <xref section="2.3" sectionFormat="of" target="STD68"/> are Unicode scalar values.
The term "CDDL" refers to the data definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those in <xref target="RFC9165"/>), as
well as <xref target="I-D.ietf-cbor-update-8610-grammar"/>.</t>
        <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?>

</section>
      <section anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t><xref section="8" sectionFormat="of" target="STD94"/> states the objective of defining a
human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <t>One important application of EDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments in string literals, are mainly
useful for people-to-people communication via EDN.
Programs also often output EDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (<xref section="4.2" sectionFormat="of" target="STD94"/>).
However, there are even more representation variants in EDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to <tt>h''</tt>; an EDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
        <t>Because of this, a deterministic representation is not defined for
EDN, and there is little expectation of "roundtripping": the ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN, which possibly was created
by humans or by a different EDN generator.</t>
        <t>However, there is a certain expectation that EDN generators can be
configured to some basic output format, which:</t>
        <ul spacing="normal">
          <li>
            <t>looks like JSON where that is possible;</t>
          </li>
          <li>
            <t>inserts encoding indicators only where the binary form differs from
preferred encoding;</t>
          </li>
          <li>
            <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
          </li>
          <li>
            <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
          </li>
        </ul>
        <t>Additional features such as ensuring deterministic map ordering
(<xref section="4.2" sectionFormat="of" target="STD94"/>) on output, or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
      </section>
    </section>
    <section anchor="application-oriented-extension-literals">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation for byte
string literals to also be available for application-oriented extensions.</t>
      <t>As per <xref section="8" sectionFormat="of" target="STD94"/>, the diagnostic notation can notate byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by an identifier (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
      <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification defines additional names for this namespace,
which we call <em>application-extension identifiers</em>.
For the quoted string, the same rules apply as for byte strings.
In particular, the escaping rules of JSON strings are applied
equivalently for application-oriented extensions, e.g., within the
quoted string <tt>\\</tt> stands
for a single backslash and <tt>\'</tt> stands for a single quote.</t>
      <t>An application-extension identifier is a name consisting of a
lower-case ASCII letter (a-z) and zero or more additional ASCII
characters that are either lower-case letters or digits (a-z0-9).</t>
      <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
      <t>Prefixing a single-quoted string, an application-extension identifier
is used to build an application-oriented extension literal, which
stands for a CBOR data item the value of which is derived from the
text given in the single-quoted string using a procedure defined in
the specification for an application-extension identifier.</t>
      <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant of the application-extension identifier where each
lower-case character is replaced by its upper-case counterpart (such
as <tt>DT</tt>), for building an application-oriented extension literal using
that all-uppercase variant as the prefix of a single-quoted string.</t>
      <t>As a convention for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>).</t>
      <t>Examples for application-oriented extensions to CBOR diagnostic
notation can be found in the following sections.</t>
      <t>In addition, this document finally registers a media type identifier
and a content-format for CBOR diagnostic notation.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <section anchor="cri">
        <name>The "cri" Extension</name>
        <t>The application-extension identifier "cri" is used to notate a
Constrained Resource Identifier literal as per <xref target="I-D.ietf-core-href"/>.</t>
        <t>The text of the literal is a URI Reference as per <xref target="RFC3986"/> or an IRI
Reference as per <xref target="RFC3987"/>.</t>
        <t>The value of the literal is a CRI that can be converted to the text of
the literal using the procedure of <xref section="6.1" sectionFormat="of" target="I-D.ietf-core-href"/>.
Note that there may be more than one CRI that can be converted to the
URI/IRI given; implementations are expected to favor the simplest
variant available and make non-surprising choices otherwise.</t>
        <t>As an example, the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
cri'https://example.com/bottarga/shaved'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
[-4, ["example", "com"], ["bottarga", "shaved"]]
]]></sourcecode>
        <t>See <xref target="cri-grammar"/> for an ABNF definition for the content of <tt>cri</tt> literals.</t>
      </section>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
<xref section="3.4.2" sectionFormat="of" target="STD94"/>.</t>
        <t>The text of the literal is a Standard Date/Time String as per
<xref section="3.4.1" sectionFormat="of" target="STD94"/>.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>As an example, the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
dt'1969-07-21T02:56:16Z',
dt'1969-07-21T02:56:16.5Z',
DT'1969-07-21T02:56:16Z'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
-14159024,
-14159023.5,
1(-14159024)
]]></sourcecode>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The text of the literal is an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lower-case app-string <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the upper-case app-string <tt>IP''</tt> can be used
with a prefix such as <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lower-case variant <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that there is no direct representation of an address combined
with a prefix length; this can be represented as
<tt>52([ip'192.0.2.42',24])</tt>, if needed.</t>
        <t>Examples: the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
ip'192.0.2.42',
IP'192.0.2.42',
IP'192.0.2.0/24',
ip'2001:db8::42',
IP'2001:db8::42',
IP'2001:db8::/64'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
h'c000022a',
52(h'c000022a'),
52([24,h'c00002']),
h'20010db8000000000000000000000042',
54(h'20010db8000000000000000000000042'),
54([64,h'20010db8'])
]]></sourcecode>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of two text strings: The
application-extension identifier, and the (escape-processed) content
of the single-quoted string.
For example, <tt>dt'1969-07-21T02:56:16Z'</tt> can be provisionally represented as
<tt>/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])</tt>.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>EDN supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
,
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key as the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
,
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" ... "gned: Alice & Bob",
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" uses string concatenation as per <xref section="G.4" sectionFormat="of" target="RFC8610"/>, extending that by allowing ellipses; while the example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" /.../ "gned: Alice & Bob",
  "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFCthis with the RFC
number of this RFC, [IANA.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(<xref section="4.5" sectionFormat="of" target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is also instructed to direct the registrant to provide a
specification (<xref section="4.6" sectionFormat="of" target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the expert becomes aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lower case ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters and digits after that (<tt>[a-z][a-z0-9]*</tt>). No other
entry in the registry can have the same application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see <xref section="2.3" sectionFormat="of" target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFCthis</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFCthis</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFCthis</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(<xref section="4.6" sectionFormat="of" target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see <xref section="2.3" sectionFormat="of" target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFCthis</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFCthis</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFCthis</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFCthis</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFCthis</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFCthis</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table align="left">
          <name>New Content-Format</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..999.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">[RFCthis]</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">[RFCthis]</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="STD94">
          <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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="17" month="June" year="2023"/>
            <abstract>
              <t>   At the time of writing, the Concise Data Definition Language (CDDL)
   is defined by RFC 8610 and RFC 9165.  The latter has used the
   extension point provided in RFC 8610, the _control operator_.

   As CDDL is being used in larger projects, the need for corrections
   and additional features has become known that cannot be easily mapped
   into this single extension point.  Hence, there is a need for
   evolution of the base CDDL specification itself.

   The present document updates errata and makes other small fixes for
   the ABNF grammar defined for CDDL in RFC 8610.


   // Previous versions of the changes in this document were part of
   // draft-bormann-cbor-cddl-2-draft and previously draft-bormann-cbor-
   // cddl-freezer.  This submission extracts out those grammar changes
   // that are ready for publication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-00"/>
        </reference>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <reference anchor="STD90">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="STD68">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) instead of a sequence
   of characters.  This simplifies parsing, comparison and reference
   resolution in environments with severe limitations on processing
   power, code size, and memory size.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision -13 of this draft picks up some additional
   // discussion points and is intended as input to the CoRE WG meeting
   // at IETF 117.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-13"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:,, and for the construction of constants; / for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="BCP26">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="STD80">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC0020"/>
        </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>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
    </references>
    <?line 761?>

<section anchor="grammars">
      <name>ABNF Definitions</name>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This appendix provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <t>To complete the parsing of an <tt>app-string</tt> with prefix, say, <tt>p</tt>, the
processed <tt>sqstr</tt> inside it is further parsed using the ABNF definition specified
for the production <tt>app-string-p</tt> in <xref target="app-grammars"/>.</t>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item S *("," S item S) OC] S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string1e        = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots
string          = string1e *(S string1e)

number          = (basenumber / decnumber / infin) spec
sign            = "+" / "-"
decnumber       = [sign] 1*DIGIT ["." 1*DIGIT] ["e" [sign] 1*DIGIT]
basenumber      = [sign] "0" ("x" 1*HEXDIG
                              [["." 1*HEXDIG] "p" [sign] *DIGIT]
                            / "o" 1*ODIGIT
                            / "b" 1*BDIGIT)
infin           = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcalnum ; including h and b64
                / ucalpha *ucalnum ; tagged variant, if defined
app-string      = app-prefix sqstr
sqstr           = "'" *single-quoted "'"
bstr            = app-string / sqstr / embedded
                  ; app-string could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" spec S [item S *("," S item S) OC] "]"
map             = "{" spec S [kp S *("," S kp S) OC] "}"
kp              = item S ":" S item

; We allow %x09 HT in prose, but not in strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-D7FF / %xE000-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank)
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A

; optional trailing comma (ignored)
OC              = ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" S string S *("," S string S) OC ")"
spec            = ["_" *wordchar]

double-quoted   = unescaped
                / "'"
                / "\" DQUOTE
                / "\" escapable

single-quoted   = unescaped
                / DQUOTE
                / "\" "'"
                / "\" escapable

escapable       = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / "\"   ; \ backslash (reverse solidus) U+005C
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

hexchar         = non-surrogate
                / (high-surrogate "\" %s"u" low-surrogate)
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-D7FF ; skip surrogate code points
                / %xE000-10FFFF

DQUOTE          = %x22    ; " double quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lcalpha         = %x61-7A ; a-z
lcalnum         = lcalpha / DIGIT
ucalpha         = %x41-5A ; A-Z
ucalnum         = ucalpha / DIGIT
wordchar        = "_" / lcalnum / ucalpha ; [_a-z0-9A-Z]
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid EDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t>The following additional items should help in the interpretation:</t>
        <ul spacing="normal">
          <li>
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
least one of the optional parts starting with "." and "e" are
present, in which case it stands for a floating point value in the
usual decimal notation.</t>
          </li>
          <li>
            <t><tt>basenumber</tt> stands for an integer in the usual base 16/hexadecimal
("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation, unless the
optional part containing a "p" is present, in which case it stands
for a floating point number in the usual hexadecimal notation (which
uses a mantissa in hexadecimal and an exponent in decimal notation).</t>
          </li>
          <li>
            <t><tt>spec</tt> stands for an encoding indicator.
As per <xref section="8.1" sectionFormat="of" target="STD94"/>:  </t>
            <ul spacing="normal">
              <li>
                <t>an underscore <tt>_</tt> on its own stands
for indefinite length encoding (<tt>ai=31</tt>, only available behind the
opening brace/bracket for <tt>map</tt> and <tt>array</tt>: strings have a special
syntax <tt>streamstring</tt> for indefinite length encoding except for the
special cases ''_ and ""_), and</t>
              </li>
              <li>
                <t><tt>_0</tt> to <tt>_3</tt> stand for <tt>ai=24</tt> to <tt>ai=27</tt>, respectively.</t>
              </li>
            </ul>
            <t>
Surprisingly, <xref section="8.1" sectionFormat="of" target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to be that preferred serialization
(Section 4.1 of <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a preferred serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows to make this explicit:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>.</t>
              </li>
            </ul>
            <t>
While no pressing use for further values for encoding indicators
comes to mind, this is an extension point for EDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
          </li>
          <li>
            <t><tt>string</tt> and the rules preceding it in the same block realize both
the representation of strings that are split up into multiple chunks
(<xref section="G.4" sectionFormat="of" target="STD94"/>) and the use of ellipses to represent elisions
(<xref target="elision"/>).  The semantic processing of these rules is relatively
complex:
            </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which can stand for any data
item.</t>
              </li>
              <li>
                <t>An ellipsis can be surrounded (on one or both sides) by string
chunks, the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>A simple sequence of string chunks is simply joined together.
In both cases of joining strings, the rules of <xref section="G.4" sectionFormat="of" target="STD94"/> need to be followed; in particular, if a text string
results from the joining operation, that result needs to be valid
UTF-8.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the type of the app-string is an actual string, joining of
chunked strings occurs as with directly notated strings; otherwise
the occurrence of more than one app-string or an app-string
together with a directly notated string cannot be processed.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for app-string Content</name>
        <t>This appendix provides ABNF definitions for application-oriented extension
literals defined in <xref target="STD94"/> and in this specification.
These grammars describe the <em>decoded</em> content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers to form
application-oriented extension literals.
Each of these may make use of rules defined in <xref target="abnf-grammar"/>.</t>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-h"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
in-line comments in b64, as "/" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>:</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cbor-edn-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
DIGIT           =  %x30-39 ; 0-9
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cbor-edn-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 0-9
DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cri-grammar">
          <name>cri: ABNF Definition of URI Representation of a CRI</name>
          <t>The syntax of the content of <tt>cri</tt> literals can be described by the
ABNF for <tt>URI-reference</tt> in <xref section="4.1" sectionFormat="of" target="RFC3986"/>, as reproduced
in <xref target="abnf-grammar-cri"/>.
If the content is not ASCII only (i.e., for IRIs), first apply
<xref section="3.1" sectionFormat="of" target="RFC3987"/> and apply this grammar to the result.</t>
          <figure anchor="abnf-grammar-cri">
            <name>ABNF Definition of URI Representation of a CRI</name>
            <sourcecode type="abnf" name="cbor-edn-cri.abnf"><![CDATA[
app-string-cri = URI-reference
; ABNF from RFC 3986:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part     = "//" authority path-abempty
                 / path-absolute
                 / path-rootless
                 / path-empty

URI-reference = URI / relative-ref

absolute-URI  = scheme ":" hier-part [ "?" query ]

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

relative-part = "//" authority path-abempty
                 / path-absolute
                 / path-noscheme
                 / path-empty

scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

authority     = [ userinfo "@" ] host [ ":" port ]
userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
host          = IP-literal / IPv4address / reg-name
port          = *DIGIT

IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

IPv6address   =                            6( h16 ":" ) ls32
                 /                       "::" 5( h16 ":" ) ls32
                 / [               h16 ] "::" 4( h16 ":" ) ls32
                 / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
                 / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
                 / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
                 / [ *4( h16 ":" ) h16 ] "::"              ls32
                 / [ *5( h16 ":" ) h16 ] "::"              h16
                 / [ *6( h16 ":" ) h16 ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = DIGIT                 ; 0-9
                 / %x31-39 DIGIT         ; 10-99
                 / "1" 2DIGIT            ; 100-199
                 / "2" %x30-34 DIGIT     ; 200-249
                 / "25" %x30-35          ; 250-255

reg-name      = *( unreserved / pct-encoded / sub-delims )

path          = path-abempty    ; begins with "/" or is empty
                 / path-absolute   ; begins with "/" but not "//"
                 / path-noscheme   ; begins with a non-colon segment
                 / path-rootless   ; begins with a segment
                 / path-empty      ; zero characters

path-abempty  = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty    = 0<pchar>

segment       = *pchar
segment-nz    = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                 ; non-zero-length segment without any colon ":"

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

query         = *( pchar / "/" / "?" )

fragment      = *( pchar / "/" / "?" )

pct-encoded   = "%" HEXDIG HEXDIG

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
reserved      = gen-delims / sub-delims
gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>EDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line ends are not of interest); it also adds end-of-line comments
starting with <tt>#</tt>.  </t>
          <dl spacing="compact">
            <dt>EDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
,
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="I-D.ietf-cbor-update-8610-grammar"/>) allows specifying the actual tag number
separately, while EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <t><tt>98(['', {}, /rest elided here: …/])</tt></t>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Separator character.  Like JSON, EDN requires commas as separators
between array elements and map members and doesn't allow a trailing
comma before the closing bracket/brace.
CDDL's comma separators in these contexts (CDDL groups) are optional
(and actually are terminators, which together with their optionality
allows them to be used like separators as well or even not at all).</t>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <t><tt>98([/h'a10126'/ &lt;&lt; {/alg/ 1: -7 /ECDSA 256/ } &gt;&gt;, /…/])</tt></t>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension were inspired by the
CoRAL work by Klaus Hartke.</t>
      <!--  LocalWords:  dedenting dedented
 -->

</section>
  </back>
  <!-- ##markdown-source:
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
0OLd/KFUTZJ5I5s5oy3SslnFSb3UD3w1zIP5jJ/K/wF8xrtjxBjevStKBjXm
Ur2ppaPYT8rn2+Xy2llyOWVj7HzMO3QOO1lVd5I56ztNjCmZ0wqevrUW8HPI
f0Qe4pCJeyrr7I28hrmb/jUrCEKQ6YKNMmfff7oHK30Io1Z6aQ6xvX35e7nM
uUjkZOEBuixva2HUWv/Za+lpb49Jqq1n+XZ/ZUzNn+CAauzeW/mcC1Q/H6Ty
zgMrP+61uBC+t23l7YdW7jdU7j+08nZDZfrYyvrOyjvNlcvPXZV376tMb9bV
3Vutq1R1GQ6Jr+/Y4Jjcz41DfN3NT1rYrGCsf7cPM9J4FGajgrg7pMWDfqny
ufQY9HcDw/3KU+jPdH+XpOPu7so0g74tvaMdG6XiEKY79WgsKt4LnLT0Wu9B
I9xfLW5jPSo1UDxsKFxv1hQG/67t4n/5Hv7u8JR6cEo1TLo5SLpRtCD0Zq1o
Seb3ipYHCoXAyhZi7I3CRe66XBVPuBeSb+58sESp3FT4AJFCPYfuyFxNhNjL
/ESAQJPF5hmnd+RCuZqkMBdenlYHZaI1JFsKu5pbSTfuyh27p+9OkYt7kizy
Qs53Ve4a61nxvf/0iTGuyu3dbF+1ESsmYkTs82tEFZJMHerKZBtFDckRrIWP
TPloGl+J/jVN4kXIoQnnOvhtoP+0jBc3xG3OeXfmDmGT/CtLGozcJNkY8dle
HHojwTUNaU9/NS9uVjW5Tfs+z2bLhsBEW2CRZcVsVaKWBaR9VZm2gIFKWL8Y
XillOwt5+g+ZtVJ+C6jjfj8IRNXSfycQpZlM5D4Qmem6RZf98uPWqkXA6v/4
lxh8m0Dnxix1z2GiWeDAuQ5+F9Dcp1nO4CBY4mYAmrwrYKpQR8t0YROn0dBG
RWi99JvI7R7iMoOrHJ1CgCtu0kPS07ehveukIrp4nS+Zsynu26tjGKPy6mp7
MKFVufyOm3wliZZIOOJIgvKeSK1P5cEgs4mqTaphGn9LpU3/lXqbFm2i+kGN
B6pupj40t7KcV/8+7c3W76+pf58CZ+tvr6mv79HhbP2d9fXLzx31dx9Sf1WT
s9X3mqv/v63MNapERnVpmGajurVG39Jr1bm1+pxeqzCu1RhNlQaV1NNJlWUl
FtAPZltt2DoKL2vmYYW/SzfD+BJBDBILucmHMBHQ8yAB0NiAPbsEyXKvhFhp
IeLjAaNsxlFbl+Y+t+ZGrCRuaOS+qg4AqMo54Mp4e4FaCSWGOGZmGiW4VqEg
bqFz+z5Mf1ypQdKnOu9Dr3SYjtZ04WZ4eFfjqjqlQ7311RzTeU4S1pRxuMMv
lNeYFqquP8eYDlelyV0i8neQLSsAf8YLChCHJs7QjglLhYg3hPXIggfgOPPa
cZGfI6J5FEqJ+lM2QbOQVuW4zCbrSEQdTjG6p5zfK0vdfwisI9Ye4/BGqe/w
aXQ9z8afkZXLz9p6iDiockLl7JT3XAZwEFTGKD7HTVYiNqEpGEh4AJJ6v+I3
/4H//TX/u8H/tvjfdiPBBo89R0yH/33G/x4Gzfs7qP3rN3j09t4d3h07MzYZ
ItId+xLcMqOq6Sb47gS5+layt/CFMO5+Gj//eS0VlWq8+9UmNu9o2UBFNnyt
dkEHHEkIAbVxWV3FV+DcPRQXjkIdteT62lm0uMTFLHwIQAIn7BByEyaNuON4
NpHrP3H3V+y32+7YSEObWitSF7X7ei4w3AuzXhd8sxBuiIC5GNvX2QxXmDCn
ii5sWlfcUmf7QFw/hyIi6ipPrhIaNTUMjyhYPzqXKPxhPIokO1h8I9dUXC0L
ucGQZjXn7GkcC5FJgNoLiYC9kVjmTyDj8j4PcEO5V5Rv/JLdeD2kk6CKA2/2
9e1t+EOO8EWEfrWOUmyEy/xoM4I0l+b4NJtH352m6LapL17GsjM3bNrUA3M3
cq8r4LVLnxEj41lcyTovGTvYZe2jcMfk9yCQcbbZawJmrAK8SvKrnIVyQBXk
hz2tkSw0X2TntX8Vmxz/Q3cUQQJn7MJ1VevMBMIiwIzDzYw94wp8+CqjzaFN
7ZaZ0x7a3A0iGBXNlEPhEjMlJAoJ35DY7PQK2x6Mxa4eypSJXgmqxtMqsOtq
AXOS0mARVW8hG18lLBqEiyUcNJWOJQxPPOJObHfMBT8ALOH5mC0gUwkLNoss
YZvm0Lnpy1w4BfQ49Zb2H6NP0XtOGtoRbONA6gkSkZavNpC5Z35T5kSlDekl
bs/Tx9ZV764SysQkZGeB+FPhIxxJIrQd8/kTnleMCdj8JNlEDs3EeYE7ugpB
U1Knc5QLs0k1OoDaqJ5xGTySqGov7aHGrCSvW/X+G/D8W+Lu0QxH+nsHOnxC
f18en7w/QuYr+v6Fy3RMSSqBe22ouJMdVONRWYMfSx2+8UaWWroe/Fb39OFz
zA6OurxYdDhHwOwSW/vplRdKNwDWvBdgTuQ6+NygzYbcVFfSqL3uStL45GDP
kvFPYuXNMWyw6w0k1UnHESdqmdEiCCX8gA4QHrpXvZgc+g2ItsVgNUmSlvOx
BIxwPIrEH97YzDwmjtS7vJ4WJ0biNFyQ6OHsyiQiG+nrDrhIDDLb43BMyVwA
R23R4BEtmPMiu3Ud7D9tnW9sdPTtl47eBPLYmwmBaAf63//1f2x+aA9qK3L8
5v3Li/ckry7OJKnEoX6016Wm3Iu2LIVMApfEWxKk5fgm+RgzsQnVmIiYXE7k
SxJGWw9oai/Qkthpd0sdpojsC/aCOk7BnMV5umHvg4vcYX8JL7+KqK2Juytp
luX29MzHuODzM0zhBlukQjkSwytzd0s8UuCBH3ECdY7aK0+RQY7wGoyMIMNL
XBJKhI/GbOx6NTjX5Ns2bSS8uSpvFrvyoow467g/OEQVx5LoDFd1y/kXBkSb
zx68tFkwgNBdRgC+3ilauc4sq8a/lhZsLIUfruUESvOhFUt4Ep8vCC/nF/LY
7sDsxYES0J0tLFhmWfYxr0n2BrzdnG5Eva1ef29jU3/1lb7dJJ7g2JHjLcSM
9PPnhN3NuGxPxMTjC6DTobmkjVPha8Scxgu8GCDt7tEItzKT4nMpSLiayYz0
XCHBeHwYpFnwxd3excelavfPrAb55pL7YfXWamVX2Fwa2JCMDFfqekrOdSy5
9Z24gvg5zt4dkcKZLT7iyX+ckeKlvyZO+BEpp776VRgSeWak3P0hW4xz4tq0
ruZeNPmGHA1h+Fz9b5j9JMPqswAA

-->

</rfc>
