<?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-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.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-00"/>
    <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>DigiCert, Inc.</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>Corey.Bonnell@digicert.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 123?>

<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 132?>

<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="draft-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>
        <t>Discussion of CLASS was added as the replacement for ANY following
the modern ASN.1 specification.</t>
        <t>Discussion of UTF8String and GeneralizedTime were added.</t>
        <t>References were updated.  PKCS documents are now referenced by
their RFC number.</t>
      </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 are delimited by pairs of hyphens ('--'), or a pair of hyphens and 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.</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.</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 octet has value 40 * value1 + value2.
(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.)</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 the
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>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="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="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>
        <reference anchor="draft-kaliski-asn1-layman-guide" target="https://datatracker.ietf.org/doc/html/draft-kaliski-asn1-layman-guide">
          <front>
            <title>A Layman's Guide to a Subset of ASN.1, BER, and DER</title>
            <author initials="B." surname="Kaliski" fullname="Burton S. Kaliski Jr.">
              <organization>Verisign, Inc.</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2419?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9192XYbybHge35FmjrninQDEArcKauvKZLqpi2RGhGy3ZZ7
rgtAkSwLQMFVAClaks/8w/zAvM5vzPzJfMnEllstICi3pvsOj90iq7JyiYyM
PSLb7baap/NxcqAP9cv4bhJPHxf6u0U6SvQ807G+WAyKZK6zS314cdaJWvr5
yZuWjqcjfXzyRsWDQZ7cHNR8Sa3VKBtO4wl0Psrjy3n7OlsU4+SuHRfTqD2m
b9pX+EW721WjeA4Ne93eTru71Y66qlgMJmlRpNl0fjeDV+l0lMwS+M90robQ
+CrL7/DpZaZUOssP9DxfFPNet7vf7an3yd1tlo8O9Ol0nuTTZN4+xikoVcxh
8v8Rj7MpdDnN1Cw90O/m2bCliyyf58llAb/dTfCXH5WKF/PrLD9Quq01r+T5
Ip9nU33R0b+Px2nxPtW/yztKw086LeC1fU7PsvzqQP8hydMivZrSEwMy8xBg
NyjoTQGjJ/MDHfW6O5F+Pl4kE1i6/mN8R6+H6RyW+yYpYHh6kCdXABvo6ZDf
ZyOY3lqvG+131+TJYjpHGL29oL+TSZyOD/TgPU/wtzcyhc4wm1CDRQ7AuJ7P
Z8XBkye3t7cd02IMc8RWTzxAHGV5cqefZ9NpMh47ABx1gmcEgOP0Kj1K8nkL
dmPYWTY36rQjHfx2BN8N4TueoB35OL5JR/r7LHvvhj3uuAc05u+Tu8t4OM/y
cLjDt/5wI+ypcw0f/va9aV8a7M2iKKBrQlw33JtO8Iy3GWY71hfJEMA4v2vp
ly+Pwh0P3i+DgpyT397gF0UypCkpxPR8Es/TmwQQUr95cdTb39uWXzd3evvy
61Z32zzd7m7aX3t7XfPrznbP/Lq/vWd/jczTvW60636lBmenF/19eq+1EIxv
6Q+tL+bxYJzo08lsnEzgcMIM4YAcXgE245+Fhmnrczi5+uKumCeTQr6jkznE
rR7SF6/zDM5hNi46+nWcz3UU6fXjNE9wU+4AbvkNIEPhmm0wdM0JhZ82bwTO
lf5mkhLt7/faUY/PGCB0UiAkD2QW2FhfvD7Q291uG6gPPP4T0BBZaZxf4ZH0
z0Q6X3TS6fwJTOxJv/3m5Kj9pw58UAeZU7NjsLp5MryeZuPs6k4DzeX3PlAq
4Gg/k1bP4yIdwsG/TPJkOkz0KzjoYzP9/nWiB9Rggo+bQHLaf9suwWSr3d1t
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
hCFyxbtsKJ3hdg3R2uasOyChEF0mBRuvMhOeBvuYXV4icyVZFQZDqneNNzfS
e/kOKCCaWN6TOFKlDXQqTND1Dz+8enV8fH09mfzZ+/2b6+vHk8lj70m78qQo
/hz8Vf2mKMxXTvMmP+sPPxhHEsdm+TF4rEtceVd13aFxfb1LtT/29zewg1ev
TAdA5eBgr3epGmrUo7fHx9a/F9+Zd5sRvbu+Nu8QbKbb3ia9nEyshmW2QBps
87iFp4LxxpQa/LkccuHtM4wLO9ZS3yxvA1ovUV/AKWxOxQLayz8BAI1T7yNe
6GOz0nhQZGN7sbbNvG7AJAbEwz8WiK2QnxkcuMCahHiAbU2dZiP+yIs2vvAu
Cvcr9ptrLf17PG5MRsEsydNsVKBJqTFZoUnWkdn+PJLOL7M6v8g3er1/nfhz
CDLOjR2eawuOuSA5yK1zmiPXBTKw9apwFRkbA5yNv26RlEiJN8nOEdwbJT5D
54I0WNQzSW2/xRwbUOpTumRM3+b45RQfq62Dre2Dra6edSawpTFpmPo4vhtT
UQTCVIDUKyAlOy0d7e9HptoYFmYbJO4qJRuk5F2O7qdMB+ygaClfRBNkW9uP
utvdnWhna3ur2+7u0m1y8rC3iQ//vGYlgcLanawDob5GTRGKg0ZiwwI1WE1p
M9KbXb25Tf/d0Zs9vbmpQebBJ1v4cDtW2DqK6lpH9F+vde+YXu3Sf7+kbusq
FXC+Yxs9KO+jGtZuiviWW/F11F4IeYwXoiaY9gi8Qi7ImVOuz2Hl45CL62Yu
fomHGDVRPEnCJzpaN/WIYrz0CkR0NCW0E5sQxT4omugI3ZF4JshQIJMot8fc
KNMah1T1Q1JBcTLhlnF0fp0niZUQog505S0SfWbx3VMKfKl54excnsHM2Le9
1ghlOAxPUYxSm9gV/OV3hLQYbajx0KZk85kmoWa1iRMzaxm2JLZ8I03RRO0+
Mcjk1li669U3o0t9KM1lm3nxFZmrvkt+eW+XBg4y5ZqemDff11FnKfPVKBbS
zsdSRRZ7+ENKtcYujMqKxyZ4xjhoamui8TNvcxEzS/gCXoLiGpY4BkFuaTuS
3ESu1UsaKxHkWtZiKUnJRYKFstG+Uztt5IAA/sSLAfRRla/0jT0sQ7RCKJNv
g3euRQ8ZMbhgbh3KtGBGOKLQ/WE2mcTUeIHFN+fZzNz0ZHYLxZnaOScoUdJ0
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

-->

</rfc>
