<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-housley-asn1-layman-guide-01" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Layman's Guide to ASN.1">A Layman's Guide to a Subset of ASN.1, BER, and DER</title>
    <seriesInfo name="Internet-Draft" value="draft-housley-asn1-layman-guide-01"/>
    <author initials="B." surname="Kaliski" fullname="Burton S. Kaliski Jr.">
      <organization abbrev="Verisign Labs">Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>US</country>
        </postal>
        <email>bkaliski@verisign.com</email>
        <uri>https://www.verisignlabs.com/</uri>
      </address>
    </author>
    <author initials="C." surname="Bonnell" fullname="Corey Bonnell">
      <organization>TurboLight Solutions</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>corey.bonnell@turbolightsolutions.com</email>
      </address>
    </author>
    <author initials="D." surname="Hook" fullname="David Hook">
      <organization>Keyfactor</organization>
      <address>
        <postal>
          <country>AU</country>
        </postal>
        <email>david.hook@keyfactor.com</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="10"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 117?>

<t>This note gives a layman's introduction to a
subset of the Abstract Syntax Notation One (ASN.1), Basic
Encoding Rules (BER), and Distinguished Encoding Rules
(DER). The purpose of this note is to provide
background material sufficient for understanding and
implementing standards that make use of ASN.1.</t>
    </abstract>
  </front>
  <middle>
    <?line 126?>

<section anchor="intro">
      <name>Introduction</name>
      <t>It is a generally accepted design principle that abstraction
is a key to managing software development. With abstraction,
a designer can specify a part of a system without concern
for how the part is actually implemented or represented.
Such a practice leaves the implementation open; it
simplifies the specification; and it makes it possible to
state "axioms" about the part that can be proved when the
part is implemented, and assumed when the part is employed
in another, higher-level part. Abstraction is the hallmark
of most modern software specifications.</t>
      <t>The Open Systems Interconnection (OSI) <xref target="X200"/> series of
standards involve a great deal of abstraction. OSI is an
internationally standardized architecture for the
interconnection of computers from the physical layer up to
the user application layer. Objects at higher layers are
defined abstractly and intended to be implemented with
objects at lower layers. For instance, a service at one
layer may require transfer of certain abstract objects
between computers; a lower layer may provide transfer
services for strings of ones and zeroes, using encoding
rules to transform the abstract objects into such strings.
OSI is called an open system because it supports many
different implementations of the services at each layer.</t>
      <t>OSI's method of specifying abstract objects is called ASN.1
(Abstract Syntax Notation One) <xref target="X680"/>, and one
set of rules for representing such objects as strings of
ones and zeros is called the BER (Basic Encoding Rules) <xref target="X690"/>.
ASN.1 is a flexible notation that allows
one to define a variety data types, from simple types such
as integers and bit strings to structured types such as sets
and sequences, as well as complex types defined in terms of
others. BER describes how to represent or encode values of
each ASN.1 type as a string of eight-bit octets. There is
generally more than one way to BER-encode a given value.
Another set of rules, DER (Distinguished Encoding
Rules <xref target="X690"/>, which is a subset of BER, gives a unique
encoding to each ASN.1 value.</t>
      <t>The purpose of this note is to describe a subset of ASN.1,
BER and DER sufficient to understand and implement OSI-based
applications, Public-Key Cryptography Standards (PKCS), and
Internet protocols that make use of ASN.1. The features described include an
overview of ASN.1, BER, and DER and an abridged list of
ASN.1 types and their BER and DER encodings.</t>
      <t>Sections 2-4 give an overview of ASN.1, BER, and DER, in that order.
Section 5 lists some ASN.1 types, giving their notation,
specific encoding rules, examples, and comments about their
application. Section 6 concludes with an example,
X.500 <xref target="X500"/> distinguished names.</t>
      <t>Advanced features of ASN.1, such as CLASS, are not
described in this note. For information on the other
features, and for more detail generally, the reader is referred to
<xref target="X680"/> and <xref target="X690"/>, which define ASN.1, BER, and DER.</t>
      <section anchor="background">
        <name>Background</name>
        <t>The first version of this document was published on June 3, 1991 as
part of the initial public release of PKCS.  It was published as
NIST/OSI Implementors' Workshop document SEC-SIG-91-17.</t>
        <t>The second version of this document was published on November 1, 1993
as a RSA Laboratories Technical Note.</t>
        <t>The third version of this document is the Internet-Draft
<xref target="I-D.kaliski-asn1-layman-guide"/>, which is a republication of the
second version.  It includes the following notice:</t>
        <ul empty="true">
          <li>
            <t>This document represents a republication of A Layman's Guide to a
Subset of ASN.1, BER, and DER, originally authored and published by
RSA Security USA LLC.  This document is submitted with permission
from, and on behalf of RSA Security USA LLC.  By publishing this
document, change control is transferred to the IETF and the Internet
technical community in full conformance with the provisions of BCP 78
and BCP 79.</t>
          </li>
        </ul>
        <t>This document is the fourth version, and the first under the transfer
of change control.  The changes from the third version include:</t>
        <ul spacing="normal">
          <li>
            <t>Discussion of CLASS was added as the replacement for ANY following the modern ASN.1 specification;</t>
          </li>
          <li>
            <t>Discussion of UTF8String and GeneralizedTime were added;</t>
          </li>
          <li>
            <t>The use of T61String is discouraged;</t>
          </li>
          <li>
            <t>Clarified the allowable numbers in the first and second values of an OBJECT IDENTIFIER; and</t>
          </li>
          <li>
            <t>References were updated, and PKCS documents are now referenced by their RFC number.</t>
          </li>
        </ul>
      </section>
      <section anchor="terminology-and-notation">
        <name>Terminology and notation</name>
        <t>In this note, an octet is an eight-bit unsigned integer. Bit 8 of the
octet is the most significant and bit 1 is the least significant.</t>
        <t>The following meta-syntax is used for describing ASN.1 notation:</t>
        <artwork><![CDATA[
     n1   denotes a variable

     []   square brackets indicate that a term is
          optional

     {}   braces group related terms

     |    vertical bar delimits alternatives with a
          group

     ...  ellipsis indicates repeated occurrences

     =    equals sign expresses terms as subterms
]]></artwork>
        <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>
    <section anchor="_section-2">
      <name>Abstract Syntax Notation One</name>
      <t>Abstract Syntax Notation One, abbreviated ASN.1, is a
notation for describing abstract types and values.</t>
      <t>In ASN.1, a type is a set of values. For some types, there
are a finite number of values, and for other types there are
an infinite number. A value of a given ASN.1 type is an
element of the type's set. ASN.1 has four kinds of type:
simple types, which are "atomic" and have no components;
structured types, which have components; tagged types, which
are derived from other types; and other types, which include
the CHOICE type and the ANY type. Types and values can be
given names with the ASN.1 assignment operator (::=) , and
those names can be used in defining other types and values.</t>
      <t>Every ASN.1 type other than CHOICE and ANY has a tag, which
consists of a class and a nonnegative tag number. ASN.1
types are abstractly the same if and only if their tag
numbers are the same. In other words, the name of an ASN.1
type does not affect its abstract meaning, only the tag
does. There are four classes of tag:</t>
      <dl newline="true">
        <dt>Universal:</dt>
        <dd>
          <t>for types whose meaning is the same in all applications;
these types are specified in <xref target="X680"/>.</t>
        </dd>
        <dt>Application:</dt>
        <dd>
          <t>for types whose meaning is specific to an application, such as X.500
directory services; types in two different applications may have the same
application-specific tag and different meanings.</t>
        </dd>
        <dt>Private:</dt>
        <dd>
          <t>for types whose meaning is specific to a given enterprise.</t>
        </dd>
        <dt>Context-specific:</dt>
        <dd>
          <t>for types whose meaning is specific to a given structured type;
context-specific tags are used to distinguish between component types
with the same underlying tag within the context of a given structured
type, and component types in two different structured types may have the
same tag and different meanings.</t>
        </dd>
      </dl>
      <t>The types with universal tags are defined in X.208, which
also gives the types' universal tag numbers. Types with
other tags are defined in many places, and are always
obtained by implicit or explicit tagging (see Section 2.3).
Table 1 lists some ASN.1 types and their universal-class
tags.</t>
      <table>
        <name>Some types and their universal-class tags.</name>
        <thead>
          <tr>
            <th align="left">Type</th>
            <th align="left">Decimal Tag Number</th>
            <th align="left">Hexadecimal Tag Number</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">INTEGER</td>
            <td align="left">2</td>
            <td align="left">02</td>
          </tr>
          <tr>
            <td align="left">BIT STRING</td>
            <td align="left">3</td>
            <td align="left">03</td>
          </tr>
          <tr>
            <td align="left">OCTET STRING</td>
            <td align="left">4</td>
            <td align="left">04</td>
          </tr>
          <tr>
            <td align="left">NULL</td>
            <td align="left">5</td>
            <td align="left">05</td>
          </tr>
          <tr>
            <td align="left">OBJECT IDENTIFIER</td>
            <td align="left">6</td>
            <td align="left">06</td>
          </tr>
          <tr>
            <td align="left">UTF8String</td>
            <td align="left">12</td>
            <td align="left">0c</td>
          </tr>
          <tr>
            <td align="left">SEQUENCE and SEQUENCE OF</td>
            <td align="left">16</td>
            <td align="left">10</td>
          </tr>
          <tr>
            <td align="left">SET and SET OF</td>
            <td align="left">17</td>
            <td align="left">11</td>
          </tr>
          <tr>
            <td align="left">PrintableString</td>
            <td align="left">19</td>
            <td align="left">13</td>
          </tr>
          <tr>
            <td align="left">T61String</td>
            <td align="left">20</td>
            <td align="left">14</td>
          </tr>
          <tr>
            <td align="left">IA5String</td>
            <td align="left">22</td>
            <td align="left">16</td>
          </tr>
          <tr>
            <td align="left">UTCTime</td>
            <td align="left">23</td>
            <td align="left">17</td>
          </tr>
          <tr>
            <td align="left">GeneralizedTime</td>
            <td align="left">24</td>
            <td align="left">18</td>
          </tr>
        </tbody>
      </table>
      <t>ASN.1 types and values are expressed in a flexible,
programming-language-like notation, with the following
special rules:</t>
      <ul spacing="normal">
        <li>
          <t>Layout is not significant; multiple spaces and line breaks can be considered as a single space.</t>
        </li>
        <li>
          <t>Comments begin with a pairs of hyphens ('--'), and comments end with another pair of hyphens or a line break.</t>
        </li>
        <li>
          <t>Identifiers (names of values and fields) and type references (names of types) consist of upper- and
lower-case letters, digits, hyphens, and spaces;
identifiers begin with lower-case letters; type
references begin with upper-case letters.</t>
        </li>
      </ul>
      <t>The following four subsections give an overview of simple
types, structured types, implicitly and explicitly tagged
types, and other types. Section 5 describes specific types
in more detail.</t>
      <section anchor="_section-2-1">
        <name>Simple types</name>
        <t>Simple types are those not consisting of components; they
are the "atomic" types. ASN.1 defines several; the types
that are relevant to the PKCS standards are the following:</t>
        <ul empty="true">
          <li>
            <dl>
              <dt>BIT STRING,</dt>
              <dd>
                <t>an arbitrary string of bits (ones and zeroes).</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>IA5String,</dt>
              <dd>
                <t>an arbitrary string of IA5 (ASCII) characters <xref target="RFC0020"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>INTEGER,</dt>
              <dd>
                <t>an arbitrary integer.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>NULL,</dt>
              <dd>
                <t>a null value.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>OBJECT IDENTIFIER,</dt>
              <dd>
                <t>an object identifier, which is a
sequence of integer components that identify an
object such as an algorithm or attribute type.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>OCTET STRING,</dt>
              <dd>
                <t>an arbitrary string of octets (eight-bit values).</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>UTF8String,</dt>
              <dd>
                <t>an arbitrary string of international characters using UTF-8 encoding.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>PrintableString,</dt>
              <dd>
                <t>an arbitrary string of printable characters.  The allowable characters are listed in <xref target="_section-5-12"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>T61String,</dt>
              <dd>
                <t>an arbitrary string of T.61 (eight-bit) characters.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>UTCTime,</dt>
              <dd>
                <t>a "coordinated universal time" or Greenwich Mean Time (GMT) value.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>GeneralizedTimeTime,</dt>
              <dd>
                <t>a time value in the local time zone, GMT, or the difference between local and GMT.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Simple types fall into two categories: string types and non-
string types. BIT STRING, IA5String, OCTET STRING,
PrintableString, T61String, and UTCTime are string types.</t>
        <t>String types can be viewed, for the purposes of encoding, as
consisting of components, where the components are
substrings. This view allows one to encode a value whose
length is not known in advance (e.g., an octet string value
input from a file stream) with a constructed, indefinite-
length encoding (see Section 3).</t>
        <t>The string types can be given size constraints limiting the
length of values.</t>
      </section>
      <section anchor="_section-2-2">
        <name>Structured types</name>
        <t>Structured types are those consisting of components. ASN.1
defines four, all of which are relevant to the PKCS
standards:</t>
        <t>SEQUENCE: an ordered collection of one or more types.</t>
        <t>SEQUENCE OF: an ordered collection of zero or more occurrences of a given type.</t>
        <t>SET: an unordered collection of one or more types.</t>
        <t>SET OF: an unordered collection of zero or more occurrences of a given type.</t>
        <t>The structured types can have optional components, possibly
with default values.</t>
      </section>
      <section anchor="_section-2-3">
        <name>Implicitly and explicitly tagged types</name>
        <t>Tagging is useful to distinguish types within an
application; it is also commonly used to distinguish
component types within a structured type. For instance,
optional components of a SET or SEQUENCE type are typically
given distinct context-specific tags to avoid ambiguity.</t>
        <t>There are two ways to tag a type: implicitly and explicitly.</t>
        <t>Implicitly tagged types are derived from other types by
changing the tag of the underlying type. Implicit tagging is
denoted by the ASN.1 keywords [class number] IMPLICIT (see <xref target="_section-5-1"/>).</t>
        <t>Explicitly tagged types are derived from other types by
adding an outer tag to the underlying type. In effect,
explicitly tagged types are structured types consisting of
one component, the underlying type. Explicit tagging is
denoted by the ASN.1 keywords [class number] EXPLICIT (see
<xref target="_section-5-2"/>).</t>
        <t>The keyword [class number] alone is the same as explicit
tagging, except when the "module" in which the ASN.1 type is
defined has implicit tagging by default. ("Modules" are
among the advanced features not described in this note.)</t>
        <t>For purposes of encoding, an implicitly tagged type is
considered the same as the underlying type, except that the
tag is different. An explicitly tagged type is considered
like a structured type with one component, the underlying
type. Implicit tags result in shorter encodings, but
explicit tags may be necessary to avoid ambiguity if the tag
of the underlying type is indeterminate (e.g., the
underlying type is CHOICE or ANY).</t>
      </section>
      <section anchor="_section-2-4">
        <name>Other types</name>
        <t>Other types in ASN.1 include the CHOICE and ANY types. The
CHOICE type denotes a union of one or more alternatives; the
ANY type denotes an arbitrary value of an arbitrary type,
where the arbitrary type is possibly defined in the
registration of an object identifier or integer value.</t>
      </section>
    </section>
    <section anchor="_section-3">
      <name>Basic Encoding Rules</name>
      <t>The Basic Encoding Rules for ASN.1, abbreviated BER, give
one or more ways to represent any ASN.1 value as an octet
string. (There are certainly other ways to represent ASN.1
values, but BER is the standard for interchanging such
values in OSI.)</t>
      <t>There are three methods to encode an ASN.1 value under BER,
the choice of which depends on the type of value and whether
the length of the value is known. The three methods are
primitive, definite-length encoding; constructed, definite-length
encoding; and constructed, indefinite-length encoding. Simple
non-string types (such as BOOLEAN, INTEGER, NULL, and
OBJECT IDENTIFIER) employ the primitive,
definite-length method; structured types employ either of
the constructed methods; and simple string types employ any
of the methods, depending on whether the length of the value
is known. Types derived by implicit tagging employ the
method of the underlying type and types derived by explicit
tagging employ the constructed methods.</t>
      <t>In each method, the BER encoding has three or four parts:</t>
      <t>Identifier octets. These identify the class and tag
number of the ASN.1 value, and indicate whether
the method is primitive or constructed.</t>
      <t>Length octets. For the definite-length methods, these
give the number of contents octets. For the
constructed, indefinite-length method, these
indicate that the length is indefinite.</t>
      <t>Contents octets. For the primitive, definite-length
method, these give a concrete representation of
the  value. For the constructed methods, these
give the concatenation of the BER encodings of the
components of the value.</t>
      <t>End-of-contents octets. For the constructed, indefinite-length
method, these denote the end of the contents. For the other
methods, these are absent.</t>
      <t>The three methods of encoding are described in the following
sections.</t>
      <section anchor="_section-3-1">
        <name>Primitive, definite-length method</name>
        <t>This method applies to simple types and types derived from
simple types by implicit tagging. It requires that the
length of the value be known in advance. The parts of the
BER encoding are as follows:</t>
        <dl>
          <dt>Identifier octets.</dt>
          <dd>
            <t>There are two forms: low tag number (for
tag numbers between 0 and 30) and high tag number (for tag
numbers 31 and greater).
<br/>
              <br/>
Low-tag-number form. One octet. Bits 8 and 7 specify
the class (see Table 2), bit 6 has value "0",
indicating that the encoding is primitive, and
bits 5-1 give the tag number.
<br/>
              <br/>
High-tag-number form. Two or more octets. First octet
is as in low-tag-number form, except that bits 5-1
all have value "1". Second and following octets
give the tag number, base 128, most significant
digit first, with as few digits as possible, and
with the bit 8 of each octet except the last set
to "1".</t>
          </dd>
        </dl>
        <table>
          <name>Class encoding in identifier octets.</name>
          <thead>
            <tr>
              <th align="left">Class</th>
              <th align="left">Bit 8</th>
              <th align="left">Bit 7</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">universal</td>
              <td align="left">0</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">application</td>
              <td align="left">0</td>
              <td align="left">1</td>
            </tr>
            <tr>
              <td align="left">context-specific</td>
              <td align="left">1</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">private</td>
              <td align="left">1</td>
              <td align="left">1</td>
            </tr>
          </tbody>
        </table>
        <ul empty="true">
          <li>
            <dl>
              <dt>Length octets.</dt>
              <dd>
                <t>There are two forms: short (for lengths
between 0 and 127), and long definite (for lengths between 0
and 2^1008 -1).
<br/>
                  <br/>
Short form. One octet. Bit 8 has value "0" and bits 7-1
give the length. For example the length for an encoding that has 32 contents octets would
encode simply as:
<tt>
20
</tt>
                  <br/>
                  <br/>
Long form. Two to 127 octets. Bit 8 of first octet has
value "1" and bits 7-1 give the number of
additional length octets. Second and following
octets give the length, base 256, most significant
digit first. For example the length for an encoding that has 3200 contents octets would
encode simply as:</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t><tt>
82 0c 80
</tt>
the first octet indicating that the length is in the
following 2 octets and the next two octets give the value of the
length.</t>
        <dl>
          <dt>Contents octets.</dt>
          <dd>
            <t>These give a concrete representation of the
value (or the value of the underlying type, if the type is
derived by implicit tagging). Details for particular types
are given in <xref target="_section-5"/>.</t>
          </dd>
        </dl>
        <section anchor="_section-3-1-1">
          <name>Prefixes and Magic Numbers</name>
          <t>It is worth noting that definite-length encodings, by their nature, are
simple enough to parse without the need for a complete ASN.1 decoder
and prefixes to the contents octets can often be treated like magic
numbers in order to recognise the contents octets that are following.</t>
          <t>For example, the private key field of an encoded ML-DSA-44 private key, which is defined as a CHOICE item with the following structure:</t>
          <t><tt>
ML-DSA-44-PrivateKey ::= CHOICE {
     seed [0] OCTET STRING (SIZE (32)),
     expandedKey OCTET STRING (SIZE (2560)),
     both SEQUENCE {
         seed OCTET STRING (SIZE (32)),
         expandedKey OCTET STRING (SIZE (2560))
         }
     }
</tt>
can be recomposed as a series of contents octets preceeded by one of
the following prefixes and
breakdowns:</t>
          <table>
            <name>Prefixes for an ML-DSA private key CHOICE item.</name>
            <thead>
              <tr>
                <th align="left">Prefix</th>
                <th align="left">CHOICE Item</th>
                <th align="left">Breakdown</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">80 20</td>
                <td align="left">seed</td>
                <td align="left">tag 0x80, short form, length 1 octet, value 32</td>
              </tr>
              <tr>
                <td align="left">04 82 0a 00</td>
                <td align="left">expandedKey</td>
                <td align="left">tag 0x04, long form, length 3 octets, value 2560</td>
              </tr>
              <tr>
                <td align="left">30 82 0a 26</td>
                <td align="left">both</td>
                <td align="left">tag 0x30, long form, length 3 octets, value 2598</td>
              </tr>
            </tbody>
          </table>
          <t>As can be seen from the table, the first octet of each prefix can be
used to distinguish the CHOICE item that has been used to describe the
ML-DSA-44 private key value.</t>
          <t>The three-octet lengths for "expandedKey" and "both" start with 0x82
and indicate that the real length of the contents octets is two
octets long.  In the case "both" CHOICE item, the contents octets
will contain the the prefixes given in the first two rows, as they
appear at the start of the encodings of each of the elements in the
SEQUENCE.</t>
        </section>
      </section>
      <section anchor="_section-3-2">
        <name>Constructed, definite-length method</name>
        <t>This method applies to simple string types, structured
types, types derived from simple string types and structured
types by implicit tagging, and types derived from anything
by explicit tagging. It requires that the length of the
value be known in advance. The parts of the BER encoding are
as follows:</t>
        <ul empty="true">
          <li>
            <dl>
              <dt>Identifier octets.</dt>
              <dd>
                <t>As described in <xref target="_section-3-1"/>, except that bit 6 has value "1",
indicating that the encoding is constructed.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>Length octets.</dt>
              <dd>
                <t>As described in <xref target="_section-3-1"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>Contents octets.</dt>
              <dd>
                <t>The concatenation of the BER encodings of the components of the value:</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>For simple string types and types derived from
them by implicit tagging, the concatenation of the
BER encodings of consecutive substrings of the
value (underlying value for implicit tagging). For example an OCTET string of length 8 encoded as a definite-length constructed encoding would encode as:
<tt>
24 0c 04 04 00000000 04 04 00000000
</tt></t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>For structured types and types derived from them
by implicit tagging, the concatenation of the BER
encodings of components of the value (underlying
value for implicit tagging).</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>For types derived from anything by explicit
tagging, the BER encoding of the underlying value.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Details for particular types are given in <xref target="_section-5"/>.</t>
      </section>
      <section anchor="_section-3-3">
        <name>Constructed, indefinite-length method</name>
        <t>This method applies to simple string types, structured
types, types derived simple string types and structured
types by implicit tagging, and types derived from anything
by explicit tagging. It does not require that the length of
the value be known in advance. The parts of the BER encoding
are as follows:</t>
        <ul empty="true">
          <li>
            <dl>
              <dt>Identifier octets.</dt>
              <dd>
                <t>As described in <xref target="_section-3-2"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>Length octets.</dt>
              <dd>
                <t>One octet, 80.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>Contents octets.</dt>
              <dd>
                <t>As described in <xref target="_section-3-2"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>End-of-contents octets.</dt>
              <dd>
                <t>Two octets, 00 00.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Since the end-of-contents octets appear where an ordinary
BER encoding might be expected (e.g., in the contents octets
of a sequence value), the 00 and 00 appear as identifier and
length octets, respectively. Thus the end-of-contents octets
is really the primitive, definite-length encoding of a value
with universal class, tag number 0, and length 0.</t>
        <t>Considering our previous example of an 8 byte OCTET STRING in constructed form with 4 byte elements, the indefinite length
encoding would produce:
<tt>
24 80 04 04 00000000 04 04 00000000 0000
</tt></t>
      </section>
    </section>
    <section anchor="_section-4">
      <name>Distinguished Encoding Rules</name>
      <t>The Distinguished Encoding Rules for ASN.1, abbreviated DER,
are a subset of BER, and give exactly one way to represent
any ASN.1 value as an octet string. DER is intended for
applications in which a unique octet string encoding is
needed, as is the case when a digital signature is computed
on an ASN.1 value. BER and DER are defined in <xref target="X690"/>.</t>
      <t>DER adds the following restrictions to the rules given in
<xref target="_section-3"/>:</t>
      <ol spacing="normal" type="1"><li>
          <t>When the length is between 0 and 127, the short
form of length must be used</t>
        </li>
        <li>
          <t>When the length is 128 or greater, the long form
of length must be used, and the length must be
encoded in the minimum number of octets.</t>
        </li>
        <li>
          <t>For simple string types and implicitly tagged
types derived from simple string types, the
primitive, definite-length method must be
employed.</t>
        </li>
        <li>
          <t>For structured types, implicitly tagged types
derived from structured types, and explicitly
tagged types derived from anything, the
constructed, definite-length method must be
employed.</t>
        </li>
      </ol>
      <t>Other restrictions are defined for particular types (such as
BOOLEAN, BIT STRING, SEQUENCE, SET, and SET OF), and can be found in
<xref target="_section-5"/>.</t>
    </section>
    <section anchor="_section-5">
      <name>Notation and encodings for some types</name>
      <t>This section gives the notation for some ASN.1 types and
describes how to encode values of those types under both BER
and DER.</t>
      <t>The types described are those presented in <xref target="_section-2"/>. They
are listed alphabetically here.</t>
      <t>Each description includes ASN.1 notation, BER encoding, and
DER encoding. The focus of the encodings is primarily on the
contents octets; the tag and length octets follow Sections 3
and 4. The descriptions also explain where each type is used
in PKCS and related standards. ASN.1 notation is generally
only for types, although for the type OBJECT IDENTIFIER,
value notation is given as well.</t>
      <section anchor="_section-5-1">
        <name>Implicitly tagged types</name>
        <t>An implicitly tagged type is a type derived from another
type by changing the tag of the underlying type.</t>
        <t>Implicit tagging is used for optional SEQUENCE components
with underlying type other than ANY in many protocols, including
<xref target="RFC5280"/> and <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
[[class] number] IMPLICIT Type

class = UNIVERSAL  |  APPLICATION  |  PRIVATE
]]></artwork>
        <t>where Type is a type, class is an optional class name, and
number is the tag number within the class, a nonnegative
integer.</t>
        <t>In ASN.1 modules whose default tagging method is implicit
tagging, the notation [[class] number] Type is also
acceptable, and the keyword IMPLICIT is implied. (See <xref target="_section-2-3"/>.) For
definitions stated outside a module, the explicit inclusion of the keyword
IMPLICIT is preferable to prevent ambiguity.</t>
        <t>If the class name is absent, then the tag is context-specific. Context-specific
tags can only appear in a component of a structured or CHOICE type.</t>
        <t>Example: PKCS #8 PrivateKeyInfo type <xref target="RFC5958"/> has an optional
attributes component with an implicit, context-specific tag:</t>
        <sourcecode type="asn.1"><![CDATA[
PrivateKeyInfo ::= SEQUENCE {
  version Version,
  privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
  privateKey PrivateKey,
  attributes [0] IMPLICIT Attributes OPTIONAL }
]]></sourcecode>
        <t>Here the underlying type is Attributes, the class is absent
(i.e., context-specific), and the tag number within the
class is 0.</t>
        <t>BER encoding. Primitive or constructed, depending on the
underlying type. Contents octets are as for the BER encoding
of the underlying value.</t>
        <t>Example: The BER encoding of the attributes component of a
PrivateKeyInfo value is as follows:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>the identifier octets are 80 if the underlying
Attributes value has a primitive BER encoding and
a0 if the underlying Attributes value has a
constructed BER encoding</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>the length and contents octets are the same as the
length and contents octets of the BER encoding of
the underlying Attributes value</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>DER encoding. Primitive or constructed, depending on the
underlying type. Contents octets are as for the DER encoding
of the underlying value.</t>
      </section>
      <section anchor="_section-5-2">
        <name>Explicitly tagged types</name>
        <t>Explicit tagging denotes a type derived from another type by
adding an outer tag to the underlying type.</t>
        <t>Explicit tagging is used for optional SEQUENCE components
with underlying type ANY throughout in many protocols, including
the version component of the Certificate type <xref target="RFC5280"/>.</t>
        <t>Implicit tagging is used for optional SEQUENCE components
with underlying type other than ANY
ASN.1 notation:</t>
        <artwork><![CDATA[
[[class] number] EXPLICIT Type

class = UNIVERSAL  |  APPLICATION  |  PRIVATE
]]></artwork>
        <t>where Type is a type, class is an optional class name, and
number is the tag number within the class, a nonnegative
integer.</t>
        <t>If the class name is absent, then the tag is context-
specific. Context-specific tags can only appear in a
component of a SEQUENCE, SET or CHOICE type.</t>
        <t>In ASN.1 "modules" whose default tagging method is explicit
tagging, the notation [[class] number] Type is also
acceptable, and the keyword EXPLICIT is implied. (See
<xref target="_section-2-3"/>.) For definitions stated outside a module, the
explicit inclusion of the keyword EXPLICIT is preferable to
prevent ambiguity.</t>
        <t>Example 1: The CMS ContentInfo type <xref target="RFC5652"/> has an optional
content component with an explicit, context-specific tag:</t>
        <sourcecode type="asn.1"><![CDATA[
ContentInfo ::= SEQUENCE {
  contentType ContentType,
  content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
]]></sourcecode>
        <t>Here the underlying type is ANY DEFINED BY contentType, the
class is absent (i.e., context-specific), and the tag number
within the class is 0.</t>
        <t>Example 2: the Certificate type <xref target="RFC5280"/> has a version component
with an explicit, context-specific tag, where the EXPLICIT
keyword is omitted:</t>
        <sourcecode type="asn.1"><![CDATA[
Certificate ::= ...
  version [0] Version DEFAULT v1988,
   ...
]]></sourcecode>
        <t>The tag is explicit because the default tagging method for
the ASN.1 module in <xref target="RFC5280"/> that defines the Certificate
type is explicit tagging.</t>
        <t>BER encoding. Constructed. Contents octets are the BER
encoding of the underlying value.</t>
        <t>Example: the BER encoding of the content component of a
ContentInfo value is as follows:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>identifier octets are a0</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>length octets represent the length of the BER
encoding of the underlying ANY DEFINED BY
contentType value</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>contents octets are the BER encoding of the
underlying ANY DEFINED BY contentType value</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>DER encoding. Constructed. Contents octets are the DER
encoding of the underlying value.</t>
      </section>
      <section anchor="_section-5-3">
        <name>ANY</name>
        <t>In the original ASN.1 specification, the
ANY type denotes an arbitrary value of an arbitrary
type, where the arbitrary type is possibly defined in the
registration of an object identifier or associated with an
integer index.</t>
        <t>In <xref target="RFC5652"/>, the ANY type is used for content of a particular content
type within the ContentInfo type.  In <xref target="RFC5280"/> and <xref target="RFC5652"/>, the ANY
type is used for parameters of a particular algorithm within the
AlgorithmIdentifier type.  In <xref target="RFC5280"/>, the ANY type is used for
attribute values within the Attribute type.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
ANY [DEFINED BY identifier]
]]></artwork>
        <t>where identifier is an optional identifier.</t>
        <t>In the ANY form, the actual type is indeterminate.</t>
        <t>The ANY DEFINED BY identifier form can only appear in a
component of a SEQUENCE or SET type for which identifier
identifies some other component, and that other component
has type INTEGER or OBJECT IDENTIFIER (or a type derived
from either of those by tagging). In that form, the actual
type is determined by the value of the other component,
either in the registration of the object identifier value,
or in a table of integer values.</t>
        <t>Example: The AlgorithmIdentifier type <xref target="RFC5280"/> has a component of
type ANY:</t>
        <sourcecode type="asn.1"><![CDATA[
AlgorithmIdentifier ::= SEQUENCE {
  algorithm OBJECT IDENTIFIER,
  parameters ANY DEFINED BY algorithm OPTIONAL }
]]></sourcecode>
        <t>Here the actual type of the parameter component depends on
the value of the algorithm component. The actual type would
be defined in the registration of object identifier values
for the algorithm component.</t>
        <t>BER encoding. Same as the BER encoding of the actual value.</t>
        <t>Example: The BER encoding of the value of the parameter
component is the BER encoding of the value of the actual
type as defined in the registration of object identifier
values for the algorithm component.</t>
        <t>DER encoding. Same as the DER encoding of the actual value.</t>
        <t>In the modern ASN.1 specification, the CLASS construction replaces the
ANY type.</t>
        <t>Example: The AlgorithmIdentifier type can be implemented as shown
below, which is a simplification of the definition in <xref target="RFC5912"/>:</t>
        <sourcecode type="asn.1"><![CDATA[
ALGORITHM ::= CLASS {
  &id OBJECT IDENTIFIER UNIQUE,
  &Params OPTIONAL,
} WITH SYNTAX {
  IDENTIFIER &id
  [PARAMS [TYPE &Params]]
}

AlgorithmIdentifier{ALGORITHM:AlgorithmSet} ::= SEQUENCE {
  algorithm ALGORITHM.&id({AlgorithmSet}),
  parameters ALGORITHM.&Params({AlgorithmSet}{@algorithm}) OPTIONAL }
]]></sourcecode>
        <t>Of course, the BER and DER encoding are unchanged.</t>
        <t>The AlgorithmSet makes it easier for implementers to determine all
of the algorithm identifiers and the associated type for parameters, if
any are defined.</t>
      </section>
      <section anchor="_section-5-4">
        <name>BIT STRING</name>
        <t>The BIT STRING type denotes an arbitrary string of bits
(ones and zeroes). A BIT STRING value can have any length,
including zero. This type is a string type.</t>
        <t>The BIT STRING type is used for digital signatures on
for digital signatures on certificates and for public keys in certificates in
SubjectPublicKeyInfo type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
BIT STRING
]]></artwork>
        <t>Example: SubjectPublicKeyInfo type <xref target="RFC5280"/> has a component
of type BIT STRING:</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectPublicKeyInfo ::= SEQUENCE {
  algorithm AlgorithmIdentifier,
  publicKey BIT STRING }
]]></sourcecode>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the first contents octet gives the number of bits
by which the length of the bit string is less than the next
multiple of eight (this is called the "number of unused
bits"). The first contents octet is always encoded; if
the length of the bit string is 0 bits, then the first
contents octet will have the value 0 and there not be any
subsequent contents octets. The second and following contents
octets give the value of the bit string, converted to an octet string.
The conversion process is as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The bit string is padded after the last bit with
zero to seven bits of any value to make the length
of the bit string a multiple of eight. If the
length of the bit string is a multiple of eight
already, no padding is done.</t>
          </li>
          <li>
            <t>The padded bit string is divided into octets. The
first eight bits of the padded bit string become
the first octet, bit 8 to bit 1, and so on through
the last eight bits of the padded bit string.</t>
          </li>
        </ol>
        <t>In a constructed encoding, the contents octets give the
concatenation of the BER encodings of consecutive substrings
of the bit string, where each substring except the last has
a length that is a multiple of eight bits.</t>
        <t>Example: The BER encoding of the BIT STRING value
"011011100101110111" can be any of the following, among
others, depending on the choice of padding bits, the form of
length octets, and whether the encoding is primitive or
constructed:</t>
        <artwork><![CDATA[
03 04 06 6e 5d c0                               DER encoding

03 04 06 6e 5d e0                       padded with "100000"

03 81 04 06 6e 5d c0              long form of length octets

23 09        constructed encoding: "0110111001011101" + "11"
   03 03 00 6e 5d
   03 02 06 c0
]]></artwork>
        <t>DER encoding. Primitive. The contents octets are as for a
primitive BER encoding, except that the bit string is padded
with zero-valued bits. Additionally, BIT STRINGs that represent
named bit lists, such as the value of the Key Usage certificate
extension <xref target="RFC5280"/>, have all trailing 0 bits removed
before it is encoded.</t>
        <t>Example: The DER encoding of the BIT STRING value
"011011100101110111" is:</t>
        <artwork><![CDATA[
03 04 06 6e 5d c0
]]></artwork>
        <t>Example: The DER encoding of a Key Usage certificate extension value,
asserting only the <tt>digitalSignature</tt> bit:</t>
        <artwork><![CDATA[
03 02 07 80
]]></artwork>
      </section>
      <section anchor="_section-5-5">
        <name>BOOLEAN</name>
        <t>BER encoding. Primitive. A single octet in length, for FALSE the octet is set to zero, for TRUE, the octet is non-zero.</t>
        <t>DER encoding. Primitive. A single octet in length, for FALSE the octet is set to zero, for TRUE, the octet is set to 0xFF.</t>
        <t>Example: The DER encoding of the BOOLEAN value
TRUE is:</t>
        <artwork><![CDATA[
01 01 FF
]]></artwork>
      </section>
      <section anchor="_section-5-6">
        <name>CHOICE</name>
        <t>The CHOICE type denotes a union of one or more alternatives.</t>
        <t>The CHOICE type is used to represent the union of an
extended certificate and an X.509 certificate in the
ExtendedCertificateOrCertificate type specified in <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
CHOICE {
  [identifier1] Type1,
  ...,
  [identifierN] TypeN }
]]></artwork>
        <t>where identifier1 , ..., identifierN are optional, distinct
identifiers for the alternatives, and Type1, ..., TypeN are
the types of the alternatives. The identifiers are primarily
for documentation; they do not affect values of the type or
their encodings in any way.</t>
        <t>The types must have distinct tags. This requirement is
typically satisfied with explicit or implicit tagging on
some of the alternatives.</t>
        <t>Example: In <xref target="RFC5652"/>, the ExtendedCertificateOrCertificate type is
a CHOICE type:</t>
        <sourcecode type="asn.1"><![CDATA[
ExtendedCertificateOrCertificate ::= CHOICE {
  certificate Certificate, -- X.509
  extendedCertificate [0] IMPLICIT ExtendedCertificate }
]]></sourcecode>
        <t>Here the identifiers for the alternatives are certificate
and extendedCertificate, and the types of the alternatives
are Certificate and [0] IMPLICIT ExtendedCertificate.</t>
        <t>BER encoding. Same as the BER encoding of the chosen
alternative. The fact that the alternatives have distinct
tags makes it possible to distinguish between their BER
encodings.</t>
        <t>Example: The identifier octets for the BER encoding are 30
if the chosen alternative is certificate, and a0 if the
chosen alternative is extendedCertificate.</t>
        <t>DER encoding. Same as the DER encoding of the chosen
alternative.</t>
      </section>
      <section anchor="_section-5-7">
        <name>IA5String</name>
        <t>The IA5String type denotes an arbitrary string of IA5
characters. IA5 stands for International Alphabet 5, which
is the same as ASCII. The character set includes non-printing
control characters. An IA5String value can have any
length, including zero. This type is a string type.</t>
        <t>The IA5String type is used in the PKCS #9 <xref target="RFC2985"/> electronic-mail
address, unstructured-name, and unstructured-address
attributes.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
IA5String
]]></artwork>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the IA5
string, encoded in ASCII. In a constructed encoding, the
contents octets give the concatenation of the BER encodings
of consecutive substrings of the IA5 string.</t>
        <t>Example: The BER encoding of the IA5String value
"test1@example.com" can be any of the following, among others,
depending on the form of length octets and whether the
encoding is primitive or constructed:</t>
        <artwork><![CDATA[
16 11 74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d DER encoding

16 81 11                       long form of length octets
   74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d

36 17     constructed encoding: "test1" + "@" + "example.com"
   16 05 74 65 73 74 31
   16 01 40
   16 0B 65 78 61 6d 70 6c 65 2e 63 6f 6d
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
        <t>Example: The DER encoding of the IA5String value
"test1@example.com" is</t>
        <artwork><![CDATA[
16 11 74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d
]]></artwork>
      </section>
      <section anchor="_section-5-8">
        <name>INTEGER</name>
        <t>The INTEGER type denotes an arbitrary integer. INTEGER
values can be positive, negative, or zero, and can have any
magnitude.</t>
        <t>The INTEGER type is used for version numbers in many protocols,
including <xref target="RFC5280"/> and <xref target="RFC5652"/>.  The INTEGER type is used
for cryptographic values such as modulus, exponent, and
primes in the PKCS #1 RSAPublicKey and RSAPrivateKey types <xref target="RFC8017"/>.
The INTEGER type is used for a message-digest iteration count
in PKCS #5 PBEParameter type <xref target="RFC8018"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
INTEGER [{ identifier1(value1) ... identifierN(valueN) }]
]]></artwork>
        <t>where identifier1, ..., identifierN are optional distinct
identifiers and value1, ..., valueN are optional integer
values. The identifiers, when present, are associated with
values of the type. INTEGER is always signed.</t>
        <t>Example: Version type <xref target="RFC5280"/> is an INTEGER type with
identified values:</t>
        <artwork><![CDATA[
Version ::= INTEGER  { v1(0), v2(1), v3(2) }
]]></artwork>
        <t>The identifier v1 is associated with the value 0. The
Certificate type <xref target="RFC5280"/> uses the identifier v1 to give a default
value of 0 for the version component:</t>
        <sourcecode type="asn.1"><![CDATA[
Certificate ::= ...
  version Version DEFAULT v1,
  ...
]]></sourcecode>
        <t>BER encoding. Primitive. Contents octets give the value of
the integer, base 256, in two's complement form, most
significant digit first, with the minimum number of octets.
The value 0 is encoded as a single 00 octet.</t>
        <t>Some example BER encodings (which also happen to be DER
encodings) are given in Table 3.</t>
        <table>
          <name>Example BER encodings of INTEGER values.</name>
          <thead>
            <tr>
              <th align="left">Integer value</th>
              <th align="left">BER encoding</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">02 01 00</td>
            </tr>
            <tr>
              <td align="left">127</td>
              <td align="left">02 01 7F</td>
            </tr>
            <tr>
              <td align="left">128</td>
              <td align="left">02 02 00 80</td>
            </tr>
            <tr>
              <td align="left">256</td>
              <td align="left">02 02 01 00</td>
            </tr>
            <tr>
              <td align="left">-128</td>
              <td align="left">02 01 80</td>
            </tr>
            <tr>
              <td align="left">-129</td>
              <td align="left">02 02 FF 7F</td>
            </tr>
          </tbody>
        </table>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
      </section>
      <section anchor="_section-5-9">
        <name>NULL</name>
        <t>The NULL type denotes a null value.</t>
        <t>The NULL type is used for algorithm parameters in several
places in as required algorithm parameters, including <xref target="RFC4055"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
NULL
]]></artwork>
        <t>BER encoding. Primitive. Contents octets are empty.</t>
        <t>Example: The BER encoding of a NULL value can be either of
the following, as well as others, depending on the form of
the length octets:</t>
        <artwork><![CDATA[
05 00

05 81 00
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are empty; the DER
encoding of a NULL value is always 05 00.</t>
      </section>
      <section anchor="_section-5-10">
        <name>OBJECT IDENTIFIER</name>
        <t>The OBJECT IDENTIFIER type denotes an object identifier, a
sequence of integer components that identifies an object
such as an algorithm, an attribute type, or perhaps a
registration authority that defines other object
identifiers. An OBJECT IDENTIFIER value can have any number
of components, and components can generally have any
nonnegative value. This type is a non-string type.</t>
        <t>OBJECT IDENTIFIER values are given meanings by registration
authorities. Each registration authority is responsible for
all sequences of components beginning with a given sequence.
A registration authority typically delegates responsibility
for subsets of the sequences in its domain to other
registration authorities, or for particular types of object.
There are always at least two components.</t>
        <t>The OBJECT IDENTIFIER type is used to identify content in
ContentInfo type <xref target="RFC5652"/>, to identify algorithms in
AlgorithmIdentifier type <xref target="RFC5280"/> and <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
OBJECT IDENTIFIER
]]></artwork>
        <t>The ASN.1 notation for values of the OBJECT IDENTIFIER type is</t>
        <artwork><![CDATA[
{ [identifier] component1 ... componentN }

componentI = identifierI | identifierI (valueI) | valueI
]]></artwork>
        <t>where identifier, identifier1, ..., identifierN are
identifiers, and value1, ..., valueI are optional integer
values.</t>
        <t>The form without identifier is the "complete" value with all
its components; the form with identifier abbreviates the
beginning components with another object identifier value.
The identifiers identifier1, ..., identifierN are intended
primarily for documentation, but they must correspond to the
integer value when both are present. These identifiers can
appear without integer values only if they are among a small
set of identifiers defined in <xref target="X680"/>.</t>
        <t>Example: The following values both refer to the object
identifier assigned to RSA Data Security, Inc.:</t>
        <artwork><![CDATA[
{ iso(1) member-body(2) 840 113549 }
{ 1 2 840 113549 }
]]></artwork>
        <t>(In this example, which gives ASN.1 value notation, the
object identifier values are decimal, not hexadecimal.)
Table 4 gives some other object identifier values and their
meanings.</t>
        <table>
          <name>Some object identifier values and their meanings.</name>
          <thead>
            <tr>
              <th align="left">Object identifier value</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">{ 1 2 }</td>
              <td align="left">ISO member bodies</td>
            </tr>
            <tr>
              <td align="left">{ 1 2 840 }</td>
              <td align="left">US (ANSI)</td>
            </tr>
            <tr>
              <td align="left">{ 1 2 840 113549 }</td>
              <td align="left">RSA Data Security, Inc.</td>
            </tr>
            <tr>
              <td align="left">{ 1 2 840 113549 1}</td>
              <td align="left">RSA Data Security, Inc. PKCS</td>
            </tr>
            <tr>
              <td align="left">{ 2 5 }</td>
              <td align="left">directory services (X.500)</td>
            </tr>
            <tr>
              <td align="left">{ 2 5 8 }</td>
              <td align="left">directory services-algorithms</td>
            </tr>
          </tbody>
        </table>
        <t>BER encoding. Primitive. Contents octets are as follows,
where value1, ..., valuen denote the integer values of the
components in the complete object identifier:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first two components (value1 and value2) are encoded
as a single value 40 * value1 + value2, then encoded using
the same base-128, most-significant-digit-first scheme
described in step 2. When value1 is 0 or 1, value2 is
limited to the range 0 to 39, so this combined value fits
in a single octet (This is unambiguous, since value1 is
limited to values 0, 1, and 2; value2 is limited to the range
0 to 39 when value1 is 0 or 1; and, according to
<xref target="X680"/>, n is always at least 2.). When value1 is 2, value2
is unbounded, so value1 and value2 may require multiple octets.</t>
          </li>
          <li>
            <t>The following octets, if any, encode value3, ...,
valuen. Each value is encoded base 128, most
significant digit first, with as few digits as
possible, and the most significant bit of each
octet except the last in the value's encoding set
to "1."</t>
          </li>
        </ol>
        <t>Example: The first octet of the BER encoding of RSA Data
Security, Inc.'s object identifier is 40 * 1 + 2 = 42 =
2a (hexadecimal). The encoding of 840 = 6 * 128 + 48 (hexadecimal) is 86 48 and the
encoding of 113549 = 6 * 1282 + 77 (hexadecimal) * 128 + d (hexadecimal) is 86 f7
0d. This leads to the following BER encoding:</t>
        <artwork><![CDATA[
06 06 2a 86 48 86 f7 0d
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
      </section>
      <section anchor="_section-5-11">
        <name>OCTET STRING</name>
        <t>The OCTET STRING type denotes an arbitrary string of octets
(eight-bit values). An OCTET STRING value can have any
length, including zero. This type is a string type.</t>
        <t>The OCTET STRING type is used for salt values in the
PBEParameter type <xref target="RFC8018"/>.  The OCTET STRING type is used for
message digests, encrypted message digests, and encrypted content
in <xref target="RFC5652"/>. The OCTET STRING type is used for private keys and
encrypted private keys in PKCS #8 <xref target="RFC5958"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
OCTET STRING [SIZE ({size | size1..size2})]
]]></artwork>
        <t>where size, size1, and size2 are optional size constraints.
In the OCTET STRING SIZE (size) form, the octet string must
have size octets. In the OCTET STRING SIZE (size1..size2)
form, the octet string must have between size1 and size2
octets. In the OCTET STRING form, the octet string can have
any size.</t>
        <t>Example: The PBEParameter type in <xref target="RFC8018"/> has a component of type
OCTET STRING:</t>
        <sourcecode type="asn.1"><![CDATA[
PBEParameter ::= SEQUENCE {
  salt OCTET STRING SIZE(8),
  iterationCount INTEGER }
]]></sourcecode>
        <t>Here the size of the salt component is always eight octets.</t>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the value of the octet
string, first octet to last octet. In a constructed
encoding, the contents octets give the concatenation of the
BER encodings of substrings of the OCTET STRING value.</t>
        <t>Example: The BER encoding of the OCTET STRING value 01 23 45
67 89 ab cd ef can be any of the following, among others,
depending on the form of length octets and whether the
encoding is primitive or constructed:</t>
        <artwork><![CDATA[
04 08 01 23 45 67 89 ab cd ef                   DER encoding

04 81 08 01 23 45 67 89 ab cd ef  long form of length octets

24 0c            constructed encoding: 01 ... 67 + 89 ... ef
   04 04 01 23 45 67
   04 04 89 ab cd ef
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
        <t>Example: The BER encoding of the OCTET STRING value 01 23 45
67 89 ab cd ef is</t>
        <artwork><![CDATA[
04 08 01 23 45 67 89 ab cd ef
]]></artwork>
      </section>
      <section anchor="_section-5-12">
        <name>PrintableString</name>
        <t>The PrintableString type denotes an arbitrary string of
printable characters from the following character set:</t>
        <artwork><![CDATA[
        A, B, ..., Z
        a, b, ..., z
        0, 1, ..., 9
    (space) ' ( ) + , - . / : = ?
]]></artwork>
        <t>This type is a string type.</t>
        <t>The PrintableString type is used in PKCS #9 <xref target="RFC2985"/>
challenge-password and unstructured-address attributes, and in several
distinguished names attributes <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
PrintableString
]]></artwork>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
printable string, encoded in ASCII. In a constructed
encoding, the contents octets give the concatenation of the
BER encodings of consecutive substrings of the string.</t>
        <t>Example: The BER encoding of the PrintableString value "Test
User 1" can be any of the following, among others, depending
on the form of length octets and whether the encoding is
primitive or constructed:</t>
        <artwork><![CDATA[
13 0b 54 65 73 74 20 55 73 65 72 20 31          DER encoding

13 81 0b                          long form of length octets
   54 65 73 74 20 55 73 65 72 20 31

33 0f               constructed encoding: "Test " + "User 1"
   13 05 54 65 73 74 20
   13 06 55 73 65 72 20 31
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
        <t>Example: The DER encoding of the PrintableString value "Test User 1" is</t>
        <artwork><![CDATA[
13 0b 54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
      </section>
      <section anchor="_section-5-13">
        <name>SEQUENCE</name>
        <t>The SEQUENCE type denotes an ordered collection of one or
more types.</t>
        <t>The SEQUENCE type is used throughout by just about every standard
that makes use of ASN.1.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
SEQUENCE {
  [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
  ...,
  [identifierN] TypeN [{OPTIONAL | DEFAULT valueN}] }
]]></artwork>
        <t>where identifier1 , ..., identifierN are optional, distinct
identifiers for the components, Type1, ..., TypeN are the
types of the components, and value1, ..., valuen are optional
default values for the components. The identifiers are
primarily for documentation; they do not affect values of
the type or their encodings in any way.</t>
        <t>The <bcp14>OPTIONAL</bcp14> qualifier indicates that the value of a
component is optional and need not be present in the
sequence. The DEFAULT qualifier also indicates that the
value of a component is optional, and assigns a default
value to the component when the component is absent.</t>
        <t>The types of any consecutive series of components with the
<bcp14>OPTIONAL</bcp14> or DEFAULT qualifier, as well as of any component
immediately following that series, must have distinct tags.
This requirement is typically satisfied with explicit or
implicit tagging on some of the components.</t>
        <t>Example: Validity type <xref target="RFC5280"/> is a SEQUENCE type with two
components:</t>
        <artwork><![CDATA[
Validity ::= SEQUENCE {
  start Time,
  end Time }
]]></artwork>
        <t>Here the identifiers for the components are start and end,
and the types of the components are both Time.</t>
        <t>BER encoding. Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
components of the sequence, in order of definition, with the
following rules for components with the <bcp14>OPTIONAL</bcp14> and DEFAULT
qualifiers:</t>
        <ul spacing="normal">
          <li>
            <t>if the value of a component with the <bcp14>OPTIONAL</bcp14> or
DEFAULT qualifier is absent from the sequence,
then the encoding of that component is not
included in the contents octets</t>
          </li>
          <li>
            <t>if the value of a component with the DEFAULT
qualifier is the default value, then the encoding
of that component may or may not be included in
the contents octets</t>
          </li>
        </ul>
        <t>DER encoding. Constructed. Contents octets are the same as
the BER encoding, except that if the value of a component
with the DEFAULT qualifier is the default value, the
encoding of that component is not included in the contents
octets.</t>
      </section>
      <section anchor="_section-5-14">
        <name>SEQUENCE OF</name>
        <t>The SEQUENCE OF type denotes an ordered collection of zero
or more occurrences of a given type.</t>
        <t>The SEQUENCE OF type is used in distinguished names <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
SEQUENCE [SIZE ({size | size1..size2})] OF Type
]]></artwork>
        <t>where Type is a type, and where size, size1, and size2 are
optional size constraints.  In the SEQUENCE SIZE (size1..size2) OF
form, the SEQUENCE must have between size1 and size2 items present. In
the SEQUENCE OF form, the SEQUENCE can have any number of items, including zero.</t>
        <t>Example: The RDNSequence type <xref target="RFC5280"/> consists of zero or more
occurrences of the RelativeDistinguishedName type, most
significant occurrence first:</t>
        <artwork><![CDATA[
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
]]></artwork>
        <t>BER encoding. Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
occurrences in the collection, in order of occurrence.</t>
        <t>DER encoding. Constructed. Contents octets are the
concatenation of the DER encodings of the values of the
occurrences in the collection, in order of occurrence.</t>
        <t>Example:  The Extensions type in <xref target="RFC5280"/> requires that at least one item
be present in the SEQUENCE OF:</t>
        <artwork><![CDATA[
Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
]]></artwork>
        <t>There are some widely used ASN.1 specifications that define an <bcp14>OPTIONAL</bcp14> SEQUENCE OF
component without a size constraint. In this case, the sender can encode either
an empty SEQUENCE, or it can elect to not encode the SEQUENCE. Absent some
requirement established in the prose of the specification, it is preferable to
not encode the empty SEQUENCE OF, as it minimizes the size of the message.</t>
      </section>
      <section anchor="_section-5-15">
        <name>SET</name>
        <t>The SET type denotes an unordered collection of one or more
types.  The SET type is not used in the ESSSecurityLabel <xref target="RFC5035"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
SET {
  [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
  ...,
  [identifierN] TypeN [{OPTIONAL | DEFAULT valueN}] }
]]></artwork>
        <t>where identifier1, ..., identifierN are optional, distinct
identifiers for the components, Type1, ..., TypeN are the
types of the components, and value1, ..., valueN are
optional default values for the components. The identifiers
are primarily for documentation; they do not affect values
of the type or their encodings in any way.</t>
        <t>The <bcp14>OPTIONAL</bcp14> qualifier indicates that the value of a
component is optional and need not be present in the set.
The DEFAULT qualifier also indicates that the value of a
component is optional, and assigns a default value to the
component when the component is absent.</t>
        <t>The types must have distinct tags. This requirement is
typically satisfied with explicit or implicit tagging on
some of the components.</t>
        <t>Example. The SET type is used in the ESSSecurityLabel type <xref target="RFC5035"/>.</t>
        <sourcecode type="asn.1"><![CDATA[
ESSSecurityLabel ::= SET {
  security-policy-identifier SecurityPolicyIdentifier,
  security-classification SecurityClassification OPTIONAL,
  privacy-mark ESSPrivacyMark OPTIONAL,
  security-categories SecurityCategories OPTIONAL }
]]></sourcecode>
        <t>BER encoding. Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
components of the set, in any order, with the following
rules for components with the <bcp14>OPTIONAL</bcp14> and DEFAULT
qualifiers:</t>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>if the value of a component with the <bcp14>OPTIONAL</bcp14> or
DEFAULT qualifier is absent from the set, then the
encoding of that component is not included in the
contents octets</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>if the value of a component with the DEFAULT
qualifier is the default value, then the encoding
of that component may or may not be included in
the contents octets</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>DER encoding. Constructed. Contents octets are the same as
for the BER encoding, except that:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the value of a component with the DEFAULT
qualifier is the default value, the encoding of
that component is not included.</t>
          </li>
          <li>
            <t>There is an order to the components, namely
ascending order by tag (care: the CONSTRUCTED bit is not part of the tag value, see below). By ascending order, imagine every set element's encoding is padded with zeroes so that every encoding is the same length and then each padded encoding is treated as an INTEGER with the smallest encodings sorted to the start of the SET.</t>
          </li>
        </ol>
        <t>A simple pseudo-code version of the sort (in-place) would look like:
```
    Sort(ASN1Object[] elements)
    {
        boolean swapped = true;
        while (swapped)
        {
            swapped = false;
            for (var i = 0; i != Length(elements) - 1; i++)
            {
                if (!LessThanOrEqual(DER(elements[i]), DER(elements[i+1])))
                {
                    swapped = true;
                    var ei = elements[i];
                    elements[i] = elements[i + 1];
                    elements[i+1] = ei;
                }
            }
        }
    }</t>
        <artwork><![CDATA[
LessThanOrEqual(byte[] encA, byte[] encB)
{
    // clear CONSTRUCTED bit in tag byte if set
    var a0 = encA[0] & ~CONSTRUCTED
    var b0 = encB[0] & ~CONSTRUCTED
    if (a0 != b0)
    {
        return a0 < b0;
    }

    var last = Min(Length(encA), Length(encB)) - 1;

    for (var i = 1; i < last; ++i) {
        if (encA[i] != encB[i])
            return encA[i] < encB[i]
    }

    return encA[last] <= encB[last]
} ``` Where Length() returns the length of an array, Min returns the mathematical minimum of two values and DER() returns the DER encoding of the ASN1Object passed to it, and the ~ operator provides the ones compliment of a value, as it does in languages like C, Java, and C#. Likewise for & - the bitwise AND.
]]></artwork>
        <t>NOTE: As you can see from the LessThanOrEqual function, SET elements in DER encodings are ordered first according to their tags (class and number), but the CONSTRUCTED bit is not part of the tag.</t>
        <t>Links to examples of different implementations of the DER SET sort can be found in <xref target="_section-7"/>.</t>
        <t>For SET-OF (see below), this is unimportant. All elements have the same tag and DER requires them to either all be in constructed form or all in primitive form, according to that tag. The elements are effectively ordered according to their contents octets.</t>
        <t>For SET, the elements will have distinct tags, and each will be in constructed or primitive form accordingly. Failing to ignore the CONSTRUCTED bit could therefore lead to ordering inversions, so in general it is best to make sure it is not present in the encoding of the tag.</t>
      </section>
      <section anchor="_section-5-16">
        <name>SET OF</name>
        <t>The SET OF type denotes an unordered collection of zero or
more occurrences of a given type.</t>
        <t>The SET OF type is used for sets of attributes in PKCS #9 <xref target="RFC2985"/>.
The SET OF type is used for sets of message-digest algorithm
identifiers, signer information, and recipient information
in <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
SET [SIZE ({size | size1..size2})] OF Type
]]></artwork>
        <t>where Type is a type, and where size, size1, and size2 are
optional size constraints.  In the SET SIZE (size1..size2) OF
form, the SET must have between size1 and size2 items present. In
the SET OF form, the SET can have any number of items, including zero.</t>
        <t>Example: The RelativeDistinguishedName type <xref target="RFC5280"/> consists of
one or more occurrences of the AttributeValueAssertion type, where
the order is unimportant:</t>
        <artwork><![CDATA[
RelativeDistinguishedName ::=
  SET SIZE (1..MAX) OF AttributeTypeAndValue
]]></artwork>
        <t>BER encoding. Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
occurrences in the collection, in any order.</t>
        <t>DER encoding. Constructed. Contents octets are the same as
for the BER encoding, except that there is an order, namely
ascending lexicographic order of BER encoding. Lexicographic
comparison of two different BER encodings is done as
follows: Logically pad the shorter BER encoding after the
last octet with dummy octets that are smaller in value than
any normal octet. Scan the BER encodings from left to right
until a difference is found. The smaller-valued BER encoding
is the one with the smaller-valued octet at the point of
difference.</t>
        <t>There are some widely used ASN.1 specifications that define an <bcp14>OPTIONAL</bcp14> SET OF
component without a size constraint. In this case, the sender can encode either
an empty SET, or it can elect to not encode the SET. Absent some
requirement established in the prose of the specification, it is preferable to
not encode the empty SET OF, as it minimizes the size of the message.</t>
      </section>
      <section anchor="_section-5-17">
        <name>T61String</name>
        <t>The T61String type denotes an arbitrary string of T.61
characters. T.61 is an eight-bit extension to the ASCII
character set. Special "escape" sequences specify shift the
character interpretation dynamically, where interpretation of
subsequent character values as, for example, Japanese; the
initial interpretation is Latin. The character set includes
non-printing control characters. The T61String type allows only
the Latin and Japanese character interpretations, and implementors'
agreements for directory names exclude control characters
<xref target="NIST92"/>. A T61String value can have any length, including
zero. This type is a string type.</t>
        <t>The T61String type is used in PKCS #9 unstructured-address
and challenge-password attributes <xref target="RFC2985"/>, and in several
attributes documented in <xref target="RFC5280"/>.</t>
        <t>Note: The use of T61String is generally discouraged, and the use
of UTF8String is preferred.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
T61String
]]></artwork>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
T.61 string, encoded in ASCII. In a constructed encoding,
the contents octets give the concatenation of the BER
encodings of consecutive substrings of the T.61 string.</t>
        <t>Example: The BER encoding of the T61String value "clés
publiques" (French for "public keys") can be any of the
following, among others, depending on the form of length
octets and whether the encoding is primitive or constructed:</t>
        <artwork><![CDATA[
14 0f                                           DER encoding
   63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73

14 81 0f                          long form of length octets
   63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73

34 15      constructed encoding: "clés" + " " + "publiques"
   14 05 63 6c c2 65 73
   14 01 20
   14 09 70 75 62 6c 69 71 75 65 73
]]></artwork>
        <t>The eight-bit character c2 is a T.61 prefix that adds an
acute accent (') to the next character.</t>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
        <t>Example: The DER encoding of the T61String value "cl'es
publiques" is</t>
        <artwork><![CDATA[
14 0f 63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73
]]></artwork>
      </section>
      <section anchor="_section-5-18">
        <name>UTCTime</name>
        <t>The UTCTime type denotes a "coordinated universal time" or
Greenwich Mean Time (GMT) value. A UTCTime value includes
the local time precise to either minutes or seconds, and an
offset from GMT in hours and minutes. It takes any of the
following forms:</t>
        <artwork><![CDATA[
YYMMDDhhmmZ
YYMMDDhhmm+hh'mm'
YYMMDDhhmm-hh'mm'
YYMMDDhhmmssZ
YYMMDDhhmmss+hh'mm'
YYMMDDhhmmss-hh'mm'
]]></artwork>
        <t>where:</t>
        <ul empty="true">
          <li>
            <t>YY is the least significant two digits of the year (00 to 99)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>MM is the month (01 to 12)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>DD is the day (01 to 31)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>hh is the hour (00 to 23)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>mm are the minutes (00 to 59)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>ss are the seconds (00 to 59)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>Z indicates that local time is GMT,
+ indicates that local time is later than GMT, and
- indicates that local time is earlier than GMT</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>hh' is the absolute value of the offset from GMT in hours</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>mm' is the absolute value of the offset from GMT in minutes</t>
          </li>
        </ul>
        <t>This type is a string type.</t>
        <t>The UTCTime type is used for signing times in PKCS #9 signing-time
attribute <xref target="RFC2985"/> and for certificate validity periods
in Validity type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
UTCTime
]]></artwork>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
string, encoded in ASCII. In a constructed encoding, the
contents octets give the concatenation of the BER encodings
of consecutive substrings of the string. (The constructed
encoding is not particularly interesting, since UTCTime
values are so short, but the constructed encoding is
permitted.)</t>
        <t>Example: The time this sentence was originally written was
4:45:40 p.m. Pacific Daylight Time on May 6, 1991, which can
be represented with either of the following UTCTime values,
among others:</t>
        <artwork><![CDATA[
"910506164540-0700"

"910506234540Z"
]]></artwork>
        <t>These values have the following BER encodings, among others:</t>
        <artwork><![CDATA[
17 0d 39 31 30 35 30 36 32 33 34 35 34 30 5a

17 11 39 31 30 35 30 36 31 36 34 35 34 30 2D 30 37 30 30
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
      </section>
      <section anchor="_section-5-19">
        <name>GeneralizedTime</name>
        <t>The GeneralizedTime type consists of a calendar date and time.
A GeneralizedTime value includes the local time precise to fractions
of seconds.  A GeneralizedTime value can include midnight at the start
of a day, but it excludes midnight at the end of a day.  A
GeneralizedTime value uses one of the following three forms:</t>
        <ol spacing="normal" type="1"><li>
            <t>a local time of day;</t>
          </li>
          <li>
            <t>a local time of day with the difference between local time and UTC; or</t>
          </li>
          <li>
            <t>a UTC time of day.</t>
          </li>
        </ol>
        <t>Accuracy of the time takes one of the following three forms:</t>
        <ol spacing="normal" type="1"><li>
            <t>hours, minutes, and seconds, with fractions of a second to any number of decimal places;</t>
          </li>
          <li>
            <t>hours and minutes, with fractions of a minute to any number of decimal places; or</t>
          </li>
          <li>
            <t>hours, with fractions of an hour to any number of decimal places.</t>
          </li>
        </ol>
        <t>This type is a string type.  It uses a subset of VisibleString.</t>
        <t>The VisibleString starts with a four-digit representation of the year, a
two-digit representation of the month, and a two-digit representation of
the day, without use of separators.</t>
        <t>The VisibleString continues with the time of day to an accuracy of one hour
one minute, one second, or fractions of a second, using either comma or full
stop as the decimal sign.</t>
        <t>The VisibleString ends with upper-case letter Z to indicate a UTC time.</t>
        <t>The VisibleString ends the signed difference between local time and UTC, with the
minutes component optionally omitted if the difference is an integral
number of hours.</t>
        <t>All possible forms of GeneralizedTime cannot be enumerated, but it is worth noting
that <xref target="RFC5280"/> requires dates after 2049 use the following form, which uses the
same as above, except that a four digit year is provided:</t>
        <artwork><![CDATA[
YYYYMMDDhhmmssZ
]]></artwork>
        <t>The GeneralizedTime type is used for certificate validity periods
in Validity type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
GeneralizedTime
]]></artwork>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
string, encoded in VisibleString. In a constructed encoding, the
contents octets give the concatenation of the BER encodings
of consecutive substrings of the string. (The constructed
encoding is not particularly interesting, since GeneralizedTime
values are usually very short, but the constructed encoding is
permitted.)</t>
        <t>Example: Local time 6 minutes, 27.3 seconds after 9 pm on 6 November 2050.</t>
        <artwork><![CDATA[
"20501106210627.3"
]]></artwork>
        <t>This value has the following BER encodings, among others:</t>
        <artwork><![CDATA[
18 10 31 39 38 35 31 31 30 36 32 31 30 36 32 37 2e 33
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
        <t>Example: <xref target="RFC5280"/> uses the GeneralizedTime value of "99991231235959Z"
to indicate that a certificate has no well-defined expiration date.</t>
        <t>This value has the following DER encodings:</t>
        <artwork><![CDATA[
18 10 31 39 38 35 31 31 30 36 32 31 30 36 32 37 2e 33
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
        <artwork><![CDATA[
18 0f 39 39 39 39 31 32 33 31 32 33 35 39 35 39 5a
]]></artwork>
      </section>
      <section anchor="_section-5-20">
        <name>UTF8String</name>
        <t>The UTF8String type supports the encoding of character sets which
covers most of the world's writing systems; see <xref target="RFC3629"/>.  This
type is a string type.</t>
        <t>The UTF8String type is used with many naming attributes in <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
UTF8String
]]></artwork>
        <t>BER encoding. Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
UTF-8 string. In a constructed encoding,
the contents octets give the concatenation of the BER
encodings of consecutive substrings of the UTF-8 string.</t>
        <t>Example: The character sequence U+D55C U+AD6D U+C5B4 (Korean "hangugeo",
meaning "the Korean language") is encoded in UTF-8, and then this value
has the following DER encodings, among others:</t>
        <artwork><![CDATA[
0c 09 ed 95 9c ea b5 ad ec 96 b4
]]></artwork>
      </section>
    </section>
    <section anchor="_section-6">
      <name>An example</name>
      <t>This section gives an example of ASN.1 notation and DER
encoding: the Name type <xref target="RFC5280"/>.</t>
      <section anchor="abstract-notation">
        <name>Abstract notation</name>
        <t>This section gives the ASN.1 notation for the Name type <xref target="RFC5280"/>.</t>
        <artwork><![CDATA[
Name ::= CHOICE {
  RDNSequence }

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::=
  SET OF AttributeValueAssertion

AttributeValueAssertion ::= SEQUENCE {
   AttributeType,
   AttributeValue }

AttributeType ::= OBJECT IDENTIFIER

AttributeValue ::= ANY
]]></artwork>
        <t>The Name type identifies an object in an X.500 directory.
Name is a CHOICE type consisting of one alternative:
RDNSequence. (Future revisions of X.500 may have other
alternatives.)</t>
        <t>The RDNSequence type gives a path through an X.500 directory
tree starting at the root. RDNSequence is a SEQUENCE OF type
consisting of zero or more occurrences of RelativeDistinguishedName.</t>
        <t>The RelativeDistinguishedName type gives a unique name to an
object relative to the object superior to it in the
directory tree. RelativeDistinguishedName is a SET OF type
consisting of zero or more occurrences of
AttributeValueAssertion.</t>
        <t>The AttributeValueAssertion type assigns a value to some
attribute of a relative distinguished name, such as country
name or common name. AttributeValueAssertion is a SEQUENCE
type consisting of two components, an AttributeType type and
an AttributeValue type.</t>
        <t>The AttributeType type identifies an attribute by object
identifier. The AttributeValue type gives an arbitrary
attribute value. The actual type of the attribute value is
determined by the attribute type.</t>
      </section>
      <section anchor="der-encoding">
        <name>DER encoding</name>
        <t>This section gives an example of a DER encoding of a value
of type Name, working from the bottom up.</t>
        <t>The name is that of the Test User 1. The name is represented by the following path:</t>
        <artwork><![CDATA[
                       (root)
                          |
                   countryName = "US"
                          |
     organizationName = "Example Organization"
                          |
             commonName = "Test User 1"
]]></artwork>
        <t>Each level corresponds to one RelativeDistinguishedName
value, each of which happens for this name to consist of one
AttributeValueAssertion value. The AttributeType value is
before the equals sign, and the AttributeValue value (a
printable string for the given attribute types) is after the
equals sign.</t>
        <t>The countryName, organizationName, and commonUnitName are
attribute types defined in <xref target="RFC5280"/> as:</t>
        <sourcecode type="asn.1"><![CDATA[
attributeType OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 }

countryName OBJECT IDENTIFIER ::= { attributeType 6 }

organizationName OBJECT IDENTIFIER ::= { attributeType 10 }

commonUnitName OBJECT IDENTIFIER ::= { attributeType 3 }
]]></sourcecode>
        <t>Note: joint-iso-ccitt and joint-iso-itu-t are interchangeable for (2).</t>
        <section anchor="attributetype">
          <name>AttributeType</name>
          <t>The three AttributeType values are OCTET STRING values, so
their DER encoding follows the primitive, definite-length
method:</t>
          <artwork><![CDATA[
06 03 55 04 06                                   countryName

06 03 55 04 0a                              organizationName

06 03 55 04 03                                    commonName
]]></artwork>
          <t>The identifier octets follow the low-tag form, since the tag
is 6 for OBJECT IDENTIFIER. Bits 8 and 7 have value "0,"
indicating universal class, and bit 6 has value "0,"
indicating that the encoding is primitive. The length octets
follow the short form. The contents octets are the
concatenation of three octet strings derived from
subidentifiers: 40 * 2 + 5 = 85 = 55 (hexadecimal); 4; and
6, 10, or 3.</t>
        </section>
        <section anchor="attributevalue">
          <name>AttributeValue</name>
          <t>The three AttributeValue values are PrintableString values,
so their encodings follow the primitive, definite-length
method:</t>
          <artwork><![CDATA[
13 02 55 53                                             "US"

13 14                                 "Example Organization"
   45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
   74 69 6f 6e

13 0b                                          "Test User 1"
   54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for PrintableString, 19 (decimal), is between 0 and
30. Bits 8 and 7 have value "0" since PrintableString is in
the universal class. Bit 6 has value "0" since the encoding
is primitive. The length octets follow the short form, and
the contents octets are the ASCII representation of the
attribute value.</t>
        </section>
        <section anchor="attributevalueassertion">
          <name>AttributeValueAssertion</name>
          <t>The three AttributeValueAssertion values are SEQUENCE
values, so their DER encodings follow the constructed,
definite-length method:</t>
          <artwork><![CDATA[
30 09                                     countryName = "US"
   06 03 55 04 06
   13 02 55 53

30 1b              organizationName = "Example Organizaiton"
   06 03 55 04 0a
   13 14 ... 6f 6e

30 12                             commonName = "Test User 1"
   06 03 55 04 0b
   13 0b ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for SEQUENCE, 16 (decimal), is between 0 and 30.
Bits 8 and 7 have value "0" since SEQUENCE is in the
universal class. Bit 6 has value "1" since the encoding is
constructed. The length octets follow the short form, and
the contents octets are the concatenation of the DER
encodings of the attributeType and attributeValue
components.</t>
        </section>
        <section anchor="relativedistinguishedname">
          <name>RelativeDistinguishedName</name>
          <t>The three RelativeDistinguishedName values are SET OF
values, so their DER encodings follow the constructed,
definite-length method:</t>
          <artwork><![CDATA[
31 0b
   30 09 ... 55 53

31 1d
   30 1b ... 6f 6e

31 14
   30 12 ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for SET OF, 17 (decimal), is between 0 and 30. Bits
8 and 7 have value "0" since SET OF is in the universal
class Bit 6 has value "1" since the encoding is constructed.
The lengths octets follow the short form, and the contents
octets are the DER encodings of the respective
AttributeValueAssertion values, since there is only one
value in each set.</t>
        </section>
        <section anchor="rdnsequence">
          <name>RDNSequence</name>
          <t>The RDNSequence value is a SEQUENCE OF value, so its DER
encoding follows the constructed, definite-length method:</t>
          <artwork><![CDATA[
30 42
   31 0b ... 55 53
   31 1d ... 6f 6e
   31 14 ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for SEQUENCE OF, 16 (decimal), is between 0 and 30.
Bits 8 and 7 have value "0" since SEQUENCE OF is in the
universal class. Bit 6 has value "1" since the encoding is
constructed. The lengths octets follow the short form, and
the contents octets are the concatenation of the DER
encodings of the three RelativeDistinguishedName values, in
order of occurrence.</t>
        </section>
        <section anchor="name">
          <name>Name</name>
          <t>The Name value is a CHOICE value, so its DER encoding is the
same as that of the RDNSequence value:</t>
          <artwork><![CDATA[
30 42
   31 0b
      30 09
         06 03 55 04 06          attributeType = countryName
         13 02 55 53                   attributeValue = "US"
   31 1d
      30 1b
         06 03 55 04 0a     attributeType = organizationName
         13 14       attributeValue = "Example Organization"
            45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
            74 69 6f 6e

   31 14
      30 12
         06 03 55 04 03           attributeType = commonName
         13 0b                attributeValue = "Test User 1"
            54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
          <t>Which if pretty-printed in strict order would provide an X.500 Name that looked like:
<tt>
countryName=US,organizationName=Example Organization,commonName=Test User 1
</tt>
Occasionally, just occasionally you will also come across a '+' syntax in X.500 Names so instead the name might look like:
<tt>
countryName=US,organizationName=Example Organization+commonName=Test User 1
</tt>
This case is interesting, the reason for this being that the '+' means the last two attribute value pairs
end up in the same RDN, or more specifically the same SET as can be seen in
the encoding below.
<tt>
30 40
   31 0b
      30 09
      06 03 55 04 06
      13 02 55 53
   31 31
      30 1b
         06 03 55 04 0a
         0c 14
            45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
            74 69 6f 6e
      30 12
         06 03 55 04 03
         0c 0b
            54 65 73 74 20 55 73 65 72 20 31
</tt>
That said, while the above is a correct definite-length encoding for the X.500 name we are looking at, it is not the correct DER encoding for
the X.500 name we are looking at as the correct DER encoding looks like:
<tt>
30 40
   31 0b
      30 09
      06 03 55 04 06
      13 02 55 53
   31 31
      30 12
         06 03 55 04 03
         0c 0b
            54 65 73 74 20 55 73 65 72 20 31
      30 1b
         06 03 55 04 0a
         0c 14
            45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
            74 69 6f 6e
</tt>
which, if pretty-printed directly, would give:
<tt>
countryName=US,commonName=Test User 1+organizationName=Example Organization
</tt>
The difference between the two encodings being that the SET has been correctly sorted for DER encoding
in the final encoding.</t>
          <t>There are a few morals to this particular tale. As you can imagine '+' in an X.500 name is best
avoided as sometimes people forget about the sorting or insist on definite-length encoding to preserver order
requiring DER encoding to be done every time for signature generation and verification. Ideally if you have to include a '+' (it really does happen) it
is also better to write out the X.500 name in DER format at the start, so anyone else trying to verify
a signature that might be associated with the use of the name will always get a correct result. Where it
is not possible to write out the X.500 name in DER format, so anyone checking the subsequent encoding will
be presented with a definite-length encoding instead, special care must be taken to calculate and evaluate
any signatures or MACs based on the name using the DER encoding, rather than the definite-length encoding,
otherwise recipients will not be able to verify the data.</t>
          <t>One final note, as Name is of type CHOICE, whenever it is tagged it will always encode as explicitly tagged, even if it's in a module with which starts with a definitions block reading "DEFINITIONS IMPLICIT TAGS ::=". This convention is followed as CHOICE encodings need to maintain the original encoding of the ASN.1 primitive, or structure, making up the CHOICE. Overwriting the tag by following the implicit tagging rule could change the meaning of the CHOICE item completely!</t>
        </section>
      </section>
    </section>
    <section anchor="_section-7">
      <name>Useful Links</name>
      <t>The following table provides alternate implementations of the DER SET sort
for a variety of languages.</t>
      <table>
        <name>Example Implementations of DER SET Sorting.</name>
        <thead>
          <tr>
            <th align="left">Language</th>
            <th align="left">Project</th>
            <th align="left">Link</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">C</td>
            <td align="left">OpenSSL</td>
            <td align="left">https://github.com/openssl/openssl/blob/3206bb708246a97b281133009a419fb7421971d9/crypto/asn1/tasn_enc.c#L399</td>
          </tr>
          <tr>
            <td align="left">C#</td>
            <td align="left">Bouncy Castle</td>
            <td align="left">https://github.com/bcgit/bc-csharp/blob/0c87b54b4b78e95eb80db716e1ac57f2e7875d21/crypto/src/asn1/Asn1Set.cs#L277C38-L277C44</td>
          </tr>
          <tr>
            <td align="left">Java</td>
            <td align="left">Bouncy Castle</td>
            <td align="left">https://github.com/bcgit/bc-java/blob/126ac9e14a0f56fae088973a777f1f90a521fd82/core/src/main/java/org/bouncycastle/asn1/ASN1Set.java#L500</td>
          </tr>
          <tr>
            <td align="left">Rust</td>
            <td align="left">Rust Crypto</td>
            <td align="left">https://github.com/RustCrypto/formats/blob/master/der/src/asn1/set_of.rs#L456</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations are discussed throughout this memo.  Implementations that employ ASN.1 need to take care when parsing
and decoding data to avoid buffer overflows, denial of service through resource exhaustion, and arbitrary code execution. These
considerations are not unique to ASN.1; they need to be considered by all data parsers and decoders.</t>
      <t>In relation to resource exhaustion, while ASN.1 allows for arbitrary nesting of constructed objects and very large lengths of individual data objects, we recommend that limits for both these are enforced appropriate for the use-case the parser, or decoder, is used for. Such limits can provide a useful early warning of corrupted data while also (usually) providing a recoverable situation for the parser, or decoder, encountering the issue.</t>
      <t>Implementers of ASN.1 parsers and decoders are encouraged to use fuzz testing to identify security vulnerabilities and other flaws.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="X680" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information technology -- Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="X690" target="https://www.itu.int/rec/T-REC-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>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1-2021"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0020.xml">
          <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/RFC20"/>
        </reference>
        <reference anchor="RFC2985" target="https://www.rfc-editor.org/info/rfc2985" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2985.xml">
          <front>
            <title>PKCS #9: Selected Object Classes and Attribute Types Version 2.0</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #9 v2.0 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from that specification. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2985"/>
          <seriesInfo name="DOI" value="10.17487/RFC2985"/>
        </reference>
        <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC4055" target="https://www.rfc-editor.org/info/rfc4055" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4055.xml">
          <front>
            <title>Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>This document supplements RFC 3279. It describes the conventions for using the RSA Probabilistic Signature Scheme (RSASSA-PSS) signature algorithm, the RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) key transport algorithm and additional one-way hash functions with the Public-Key Cryptography Standards (PKCS) #1 version 1.5 signature algorithm in the Internet X.509 Public Key Infrastructure (PKI). Encoding formats, algorithm identifiers, and parameter formats are specified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4055"/>
          <seriesInfo name="DOI" value="10.17487/RFC4055"/>
        </reference>
        <reference anchor="RFC5035" target="https://www.rfc-editor.org/info/rfc5035" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5035.xml">
          <front>
            <title>Enhanced Security Services (ESS) Update: Adding CertID Algorithm Agility</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>In the original Enhanced Security Services for S/MIME document (RFC 2634), a structure for cryptographically linking the certificate to be used in validation with the signature was introduced; this structure was hardwired to use SHA-1. This document allows for the structure to have algorithm agility and defines a new attribute for this purpose. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5035"/>
          <seriesInfo name="DOI" value="10.17487/RFC5035"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5958" target="https://www.rfc-editor.org/info/rfc5958" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC5912" target="https://www.rfc-editor.org/info/rfc5912" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5912.xml">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8018" target="https://www.rfc-editor.org/info/rfc8018" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8018.xml">
          <front>
            <title>PKCS #5: Password-Based Cryptography Specification Version 2.1</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document provides recommendations for the implementation of password-based cryptography, covering key derivation functions, encryption schemes, message authentication schemes, and ASN.1 syntax identifying the techniques.</t>
              <t>This document represents a republication of PKCS #5 v2.1 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 2898.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8018"/>
          <seriesInfo name="DOI" value="10.17487/RFC8018"/>
        </reference>
        <reference anchor="I-D.kaliski-asn1-layman-guide" target="https://datatracker.ietf.org/doc/html/draft-kaliski-asn1-layman-guide-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kaliski-asn1-layman-guide.xml">
          <front>
            <title>A Layman's Guide to a Subset of ASN.1, BER, and DER</title>
            <author fullname="Burt Kaliski" initials="B." surname="Kaliski">
              <organization>Verisign, Inc.</organization>
            </author>
            <date day="2" month="April" year="2026"/>
            <abstract>
              <t>This note gives a layman's introduction to a subset of the Abstract Syntax Notation One (ASN.1), Basic Encoding Rules (BER), and Distinguished Encoding Rules (DER). The particular purpose of this note is to provide background material sufficient for understanding and implementing the RSA Data Security, Inc. Public Key Cryptography Standards (PKCS) family of standards. This document represents a republication of A Layman's Guide to a Subset of ASN.1, BER, and DER, originally authored and published by RSA Security USA LLC. This document is submitted with permission from, and on behalf of RSA Security USA LLC. By publishing this document, change control is transferred to the IETF and the Internet technical community in full conformance with the provisions of BCP 78 and BCP 79.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kaliski-asn1-layman-guide-00"/>
        </reference>
        <reference anchor="NIST92">
          <front>
            <title>Stable Implementation Agreements for Open Systems Interconnection Protocols. Part 11 (Directory Services Protocols)</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="1992" month="December"/>
          </front>
          <seriesInfo name="NIST SP" value="500-202"/>
        </reference>
        <reference anchor="X200" target="https://www.itu.int/rec/T-REC-X.200">
          <front>
            <title>Information technology -- Open Systems Interconnection -= Basic Reference Model: The basic model</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="1994" month="July"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.200"/>
        </reference>
        <reference anchor="X500" target="https://www.itu.int/rec/T-REC-X.500">
          <front>
            <title>Information technology –- Open Systems Interconnection –- The Directory: Overview of concepts, models and services</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2008" month="November"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.500"/>
        </reference>
      </references>
    </references>
    <?line 2421?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
i7W5dKq80cib8xBxi4tU9Hk43BeJjbVdurJqUumT5WIvLZ35H17QE75RlH6I
/ZrymngRcaWS5CYFH/sqjCIVxiZ/iiF9sPTCX87lTqAy2CyeGaC5AgpBJHh5
EUpGE2QoH0b6pHIaOflRZWJo4kJTXkkuVzbaNwU0IXIN8/f3TBldymfZdX1V
BCx3nGqs3to/iCW88j5sEqx8ZBU42f686bvEaVXZCjeKbc9uA79vTl4YJCWq
Wdmohk0qlNHL60YriwhXXuWHWsMNT2xtQ0+wXAse70SmzWOFoPJwPC4eDAuT
IL8aFqeNsDi9HxZC0ZqvYuHDyne8WIsLTljudykC1rv22RHPon+7pLmVAbAG
hKrwrji51jS48shT0ZzkeYh134IT9/K7yzfn/T+84lB/Wgcesn9LRzW0DfR+
OIh4yv7tNe67M5u21Gf9F+hHX31/0T/+K/XhfQjdwYMfXh+/OQaF7Yf+96/P
TBc//qjQwVSFxEc7tyP79iqZf15FEewnHRhx82Pw3VaZOri2PJNS+4+/t/1+
3qqQjEuM01vkReKC5spXxHFx8CnfHDQyvM4bwl01m8SFsDtvz3O5rE8oP5YA
UxUi41cJNZqbJ1NZPugWjmlCFIjiecf5WjOv2rMvZZqAGe99sxwZlqtU1XKV
+tjviOmBrcWF05JsMmWtaPSplKBzPkcv5qFTP7/gLp1yqAsR78Y3VNpDdDGp
AEtFeOhONlA7KQgnaJNO1dWCKBRfe1jjYzGGvVpJzE2e8cvSibV6LTNYJdVo
PZj4p762z1XHqsHfYr73QS/nYz33BUk+nsVeOXc/IjJH8Ie6mh8SYYNqCNcG
S69oU6gzuhtLESvGSVGwJZR6ST7MlS1dnMndoHqTajCFN7JuuBEXU/Ls48Ab
clN47WzJ+EaFYSQy6Ckev/tm2KUVeSZK6rsUwaApF8JeucBHqWuoAN+viFwE
i4ZQtBqGMpYnyJUyzM1dYZq1aVlJ+Ay4uJs5mW7wBihOTilHttEh5RZkdpnl
GdZpqhgL5IbPECIzuT3tem6qm2DONbahSwOoGiDGAqPFkHNdSek0ii3daf7O
TzdVVcDHuoIGgKB+Omf9btV8p+Ix3ju5bOH1NDNxV9D1TlMkVz0Tx0uLCnsb
pXhZ84jrkHp7pBi/GDvNCue1vQwwlS0pJ762JI0db5XCG8qk3HTGPiFyaCgL
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
Mnq2QcXmkVb0L08v4fiblrCQ/wU46qRdfjwBAA==

-->

</rfc>
