<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-housley-asn1-layman-guide-03" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <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-03"/>
    <author initials="B." surname="Kaliski" fullname="Burton S. Kaliski Jr.">
      <organization abbrev="Verisign Labs">Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>US</country>
        </postal>
        <email>bkaliski@verisign.com</email>
        <uri>https://www.verisignlabs.com/</uri>
      </address>
    </author>
    <author initials="C." surname="Bonnell" fullname="Corey Bonnell">
      <organization>TurboLight Solutions, LLC</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>corey.bonnell@turbolightsolutions.com</email>
      </address>
    </author>
    <author initials="D." surname="Hook" fullname="David Hook">
      <organization>Keyfactor</organization>
      <address>
        <postal>
          <country>AU</country>
        </postal>
        <email>david.hook@keyfactor.com</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="25"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 137?>

<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>
      <t>This memo is not an IETF standard, and has not been shown to
have IETF community consensus. This memo offers tutorial information.</t>
    </abstract>
  </front>
  <middle>
    <?line 149?>

<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. Features that are not
used in the specifications listed above 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>
      <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>
      <section anchor="background">
        <name>Background</name>
        <t>The first version of this document was published on June 3, 1991 as
part of the initial public release of PKCS.  It was published as
NIST/OSI Implementors' Workshop document SEC-SIG-91-17.</t>
        <t>The second version of this document was published on November 1, 1993
as a RSA Laboratories Technical Note.</t>
        <t>The third version of this document is the Internet-Draft
<xref target="I-D.kaliski-asn1-layman-guide"/>, which is a republication of the
second version.  It includes the following notice:</t>
        <ul empty="true">
          <li>
            <t>This document represents a republication of A Layman's Guide to a
Subset of ASN.1, BER, and DER, originally authored and published by
RSA Security USA LLC.  This document is submitted with permission
from, and on behalf of RSA Security USA LLC.  By publishing this
document, change control is transferred to the IETF and the Internet
technical community in full conformance with the provisions of BCP 78
and BCP 79.</t>
          </li>
        </ul>
        <t>This document is the fourth version, and the first under the transfer
of change control.  The changes from the third version include:</t>
        <ul spacing="normal">
          <li>
            <t>Discussion of <tt>CLASS</tt> was added as the replacement for <tt>ANY</tt> following the modern ASN.1 specification;</t>
          </li>
          <li>
            <t>Discussion of <tt>UTF8String</tt>, <tt>GeneralizedTime</tt>, and <tt>RELATIVE-OID</tt> were added;</t>
          </li>
          <li>
            <t>The use of <tt>T61String</tt> is discouraged;</t>
          </li>
          <li>
            <t>Clarified the allowable numbers in the first and second values of an <tt>OBJECT IDENTIFIER</tt>; and</t>
          </li>
          <li>
            <t>References were updated, and PKCS documents are now referenced by their RFC number.</t>
          </li>
        </ul>
        <t>This work is not a product of the IETF, does not represent a standard, and has not achieved community consensus.</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 in the
ASN.1 notation figures and accompanying text:</t>
        <table>
          <name>ASN.1 notation meta-syntax.</name>
          <thead>
            <tr>
              <th align="left">Notation</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>BIT</tt></td>
              <td align="left">all-caps (and monospace HTML and PDF) denotes literal characters in the type and value notation; in examples, it generally denotes an octet value in hexadecimal</td>
            </tr>
            <tr>
              <td align="left">
                <tt>n1</tt></td>
              <td align="left">lowercase denotes a variable, identifier, or value. In explanatory text the variable is surrounded by single quotes, e.g. <tt>'n1'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Type1</tt></td>
              <td align="left">Initial-caps denotes a type. In explanatory text the type is surrounded by single quotes, e.g. <tt>'Type1'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>[]</tt></td>
              <td align="left">brackets indicate that a term is optional</td>
            </tr>
            <tr>
              <td align="left">
                <tt>{}</tt></td>
              <td align="left">braces group related terms</td>
            </tr>
            <tr>
              <td align="left">
                <tt>|</tt></td>
              <td align="left">vertical bar delimits alternatives with a group</td>
            </tr>
            <tr>
              <td align="left">
                <tt>...</tt></td>
              <td align="left">ellipsis indicates repeated occurrences</td>
            </tr>
            <tr>
              <td align="left">
                <tt>=</tt></td>
              <td align="left">equals sign expresses terms as subterms</td>
            </tr>
          </tbody>
        </table>
        <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 <tt>CHOICE</tt> type and the <tt>ANY</tt> 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 <tt>CHOICE</tt> and <tt>ANY</tt> 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">RELATIVE-OID</td>
            <td align="left">13</td>
            <td align="left">0d</td>
          </tr>
          <tr>
            <td align="left">SEQUENCE and SEQUENCE OF</td>
            <td align="left">16</td>
            <td align="left">10</td>
          </tr>
          <tr>
            <td align="left">SET and SET OF</td>
            <td align="left">17</td>
            <td align="left">11</td>
          </tr>
          <tr>
            <td align="left">PrintableString</td>
            <td align="left">19</td>
            <td align="left">13</td>
          </tr>
          <tr>
            <td align="left">T61String</td>
            <td align="left">20</td>
            <td align="left">14</td>
          </tr>
          <tr>
            <td align="left">IA5String</td>
            <td align="left">22</td>
            <td align="left">16</td>
          </tr>
          <tr>
            <td align="left">UTCTime</td>
            <td align="left">23</td>
            <td align="left">17</td>
          </tr>
          <tr>
            <td align="left">GeneralizedTime</td>
            <td align="left">24</td>
            <td align="left">18</td>
          </tr>
        </tbody>
      </table>
      <t>ASN.1 types and values are expressed in a flexible,
programming-language-like notation, with the following
special rules:</t>
      <ul spacing="normal">
        <li>
          <t>Layout is not significant; multiple spaces and line breaks can be considered as a single space.</t>
        </li>
        <li>
          <t>Comments begin with a pair of hyphens (<tt>--</tt>), and comments end with another pair of hyphens or a line break.</t>
        </li>
        <li>
          <t>Identifiers (names of values and fields) and type references (names of types) consist of upper- and
lower-case letters, digits, hyphens, and spaces;
identifiers begin with lower-case letters; type
references begin with upper-case letters.</t>
        </li>
      </ul>
      <t>The following four subsections give an overview of simple
types, structured types, implicitly and explicitly tagged
types, and other types. Section 5 describes specific types
in more detail.</t>
      <section anchor="_section-2-1">
        <name>Simple types</name>
        <t>Simple types are those not consisting of components; they
are the "atomic" types. ASN.1 defines several; the types
that are relevant to the PKCS standards are the following:</t>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>BIT STRING</tt></dt>
              <dd>
                <t>an arbitrary string of bits (ones and zeroes).</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>IA5String</tt></dt>
              <dd>
                <t>an arbitrary string of IA5 (ASCII) characters <xref target="RFC0020"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>INTEGER</tt></dt>
              <dd>
                <t>an arbitrary integer.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>NULL</tt></dt>
              <dd>
                <t>a null value.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>OBJECT IDENTIFIER</tt></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><tt>RELATIVE-OID</tt></dt>
              <dd>
                <t>a relative object identifier, which is a
sequence of integer components interpreted relative to
some object identifier established by context.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>OCTET STRING</tt></dt>
              <dd>
                <t>an arbitrary string of octets (eight-bit values).</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>UTF8String</tt></dt>
              <dd>
                <t>an arbitrary string of international characters using UTF-8 encoding.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>PrintableString</tt></dt>
              <dd>
                <t>an arbitrary string of printable characters.  The allowable characters are listed in <xref target="_section-5-12"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>T61String</tt></dt>
              <dd>
                <t>an arbitrary string of T.61 (eight-bit) characters.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>UTCTime</tt></dt>
              <dd>
                <t>a "coordinated universal time" or Greenwich Mean Time (GMT) value.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>GeneralizedTime</tt></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. <tt>BIT STRING</tt>, <tt>IA5String</tt>, <tt>OCTET STRING</tt>, <tt>UTF8String</tt>,
<tt>PrintableString</tt>, <tt>T61String</tt>, <tt>GeneralizedTime</tt>, and <tt>UTCTime</tt> 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>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SEQUENCE</tt></dt>
              <dd>
                <t>an ordered collection of one or more types.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SEQUENCE OF</tt></dt>
              <dd>
                <t>an ordered collection of zero or more occurrences of a given type.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SET</tt></dt>
              <dd>
                <t>an unordered collection of one or more types.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SET OF</tt></dt>
              <dd>
                <t>an unordered collection of zero or more occurrences of a given type.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <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 <tt>SET</tt> or <tt>SEQUENCE</tt> 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 <tt>[class number] IMPLICIT</tt> (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 <tt>[class number] EXPLICIT</tt> (see
<xref target="_section-5-2"/>).</t>
        <t>The keyword <tt>[class number]</tt> 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 <tt>CHOICE</tt> or <tt>ANY</tt>).</t>
      </section>
      <section anchor="_section-2-4">
        <name>Other types</name>
        <t>Other types in ASN.1 include the <tt>CHOICE</tt> and <tt>ANY</tt> types. The
<tt>CHOICE</tt> type denotes a union of one or more alternatives; the
<tt>ANY</tt> 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, and ASN.1 syntax itself does not dictate the encoding
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 <tt>BOOLEAN</tt>, <tt>INTEGER</tt>, <tt>NULL</tt>, and
<tt>OBJECT IDENTIFIER</tt>) 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>
      <ul empty="true">
        <li>
          <dl>
            <dt>identifier octets.</dt>
            <dd>
              <t>These identify the class and tag
number of the ASN.1 value, and indicate whether
the method is primitive or constructed.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <dl>
            <dt>length octets.</dt>
            <dd>
              <t>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>
            </dd>
          </dl>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <dl>
            <dt>contents octets.</dt>
            <dd>
              <t>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>
            </dd>
          </dl>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <dl>
            <dt>end-of-contents octets.</dt>
            <dd>
              <t>For the constructed, indefinite-length
method, these denote the end of the contents. For the other
methods, these are absent.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <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).</t>
          </dd>
        </dl>
        <ul empty="true">
          <li>
            <dl>
              <dt>low-tag-number form.</dt>
              <dd>
                <t>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.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>high-tag-number form.</dt>
              <dd>
                <t>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>
          </li>
        </ul>
        <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>
        <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).</t>
          </dd>
        </dl>
        <ul empty="true">
          <li>
            <dl>
              <dt>short form.</dt>
              <dd>
                <t>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></t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>long form.</dt>
              <dd>
                <t>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 <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>
              </dd>
            </dl>
          </li>
        </ul>
        <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 <tt>CHOICE</tt> item with the following structure:</t>
          <sourcecode type="asn.1"><![CDATA[
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))
         }
     }
]]></sourcecode>
          <t>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">
                  <tt>80 20</tt></td>
                <td align="left">
                  <tt>seed</tt></td>
                <td align="left">tag <tt>0x80</tt>, short form, length 1 octet, value 32</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>04 82 0a 00</tt></td>
                <td align="left">
                  <tt>expandedKey</tt></td>
                <td align="left">tag <tt>0x04</tt>, long form, length 3 octets, value 2560</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>30 82 0a 26</tt></td>
                <td align="left">
                  <tt>both</tt></td>
                <td align="left">tag <tt>0x30</tt>, 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 <tt>CHOICE</tt> item that has been used to describe the
ML-DSA-44 private key value.</t>
          <t>The three-octet lengths for <tt>expandedKey</tt> and <tt>both</tt> start with 0x82
and indicate that the real length of the contents octets is two
octets long.  In the case <tt>both</tt> <tt>CHOICE</tt> 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
<tt>SEQUENCE</tt>.</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>
        <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>
          <dt>length octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-1"/>.</t>
          </dd>
          <dt>contents octets.</dt>
          <dd>
            <t>The concatenation of the BER encodings of the components of the value:</t>
          </dd>
        </dl>
        <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 <tt>OCTET STRING</tt> 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>
        <dl>
          <dt>identifier octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-2"/>.</t>
          </dd>
          <dt>length octets.</dt>
          <dd>
            <t>One octet, <tt>80</tt>.</t>
          </dd>
          <dt>contents octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-2"/>.</t>
          </dd>
          <dt>end-of-contents octets.</dt>
          <dd>
            <t>Two octets, <tt>00 00</tt>.</t>
          </dd>
        </dl>
        <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 <tt>00</tt> and <tt>00</tt> 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 <tt>OCTET STRING</tt> 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
<tt>BOOLEAN</tt>, <tt>BIT STRING</tt>, <tt>SEQUENCE</tt>, <tt>SET</tt>, and <tt>SET OF</tt>), 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 <tt>OBJECT IDENTIFIER</tt>,
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 <tt>SEQUENCE</tt> components
with underlying type other than <tt>ANY</tt> in many protocols, including
<xref target="RFC5280"/> and <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
[[class] number] IMPLICIT Type

class = UNIVERSAL | APPLICATION | PRIVATE
]]></sourcecode>
        <t>where <tt>'Type'</tt> is a type, <tt>'class'</tt> is an optional class name, and
<tt>'number'</tt> 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 <tt>[[class] number] Type</tt> is also
acceptable, and the keyword <tt>IMPLICIT</tt> is implied. (See <xref target="_section-2-3"/>.) For
definitions stated outside a module, the explicit inclusion of the keyword
<tt>IMPLICIT</tt> 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 <tt>CHOICE</tt> type.</t>
        <t>Example: PKCS #8 <tt>PrivateKeyInfo</tt> type <xref target="RFC5958"/> has an optional
<tt>attributes</tt> 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 <tt>Attributes</tt>, the class is absent
(i.e., context-specific), and the tag number within the
class is 0.</t>
        <section anchor="ber-encoding">
          <name>BER Encoding</name>
          <t>Primitive or constructed, depending on the
underlying type. The contents octets are as for the BER encoding
of the underlying value.</t>
          <t>Example: The BER encoding of the <tt>attributes</tt> component of a
<tt>PrivateKeyInfo</tt> value is as follows:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>the identifier octets are <tt>80</tt> if the underlying
<tt>Attributes</tt> value has a primitive BER encoding and
<tt>a0</tt> if the underlying <tt>Attributes</tt> 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 <tt>Attributes</tt> value</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding">
          <name>DER Encoding</name>
          <t>Primitive or constructed, depending on the
underlying type. The contents octets are as for the DER encoding
of the underlying value.</t>
        </section>
      </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 <tt>SEQUENCE</tt> components
with underlying type <tt>ANY</tt> throughout in many protocols, including
the version component of the <tt>Certificate</tt> type <xref target="RFC5280"/>.</t>
        <t>Implicit tagging is used for optional <tt>SEQUENCE</tt> components
with underlying type other than <tt>ANY</tt>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
[[class] number] EXPLICIT Type

class = UNIVERSAL | APPLICATION | PRIVATE
]]></sourcecode>
        <t>where <tt>'Type'</tt> is a type, <tt>'class'</tt> is an optional class name, and
<tt>'number'</tt> 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 <tt>SEQUENCE</tt>, <tt>SET</tt> or <tt>CHOICE</tt> type.</t>
        <t>In ASN.1 "modules" whose default tagging method is explicit
tagging, the notation <tt>[[class] number ] Type</tt> is also
acceptable, and the keyword <tt>EXPLICIT</tt> is implied. (See
<xref target="_section-2-3"/>.) For definitions stated outside a module, the
explicit inclusion of the keyword <tt>EXPLICIT</tt> is preferable to
prevent ambiguity.</t>
        <t>Example 1: The CMS <tt>ContentInfo</tt> 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 <tt>ANY DEFINED BY contentType</tt>, the
class is absent (i.e., context-specific), and the tag number
within the class is 0.</t>
        <t>Example 2: the <tt>Certificate</tt> type <xref target="RFC5280"/> has a version component
with an explicit, context-specific tag, where the <tt>EXPLICIT</tt>
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 <tt>Certificate</tt>
type is explicit tagging.</t>
        <section anchor="ber-encoding-1">
          <name>BER Encoding</name>
          <t>Constructed. The contents octets are the BER
encoding of the underlying value.</t>
          <t>Example: the BER encoding of the content component of a
<tt>ContentInfo</tt> value is as follows:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>identifier octets are <tt>a0</tt></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 <tt>ANY DEFINED BY</tt>
                    <tt>contentType</tt> value</t>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>contents octets are the BER encoding of the
underlying <tt>ANY DEFINED BY contentType</tt> value</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding-1">
          <name>DER Encoding</name>
          <t>Constructed. The contents octets are the DER
encoding of the underlying value.</t>
        </section>
      </section>
      <section anchor="_section-5-3">
        <name>ANY</name>
        <t>In the original ASN.1 specification, the
<tt>ANY</tt> 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 <tt>ANY</tt> type is used for content of a particular content
type within the <tt>ContentInfo</tt> type.  In <xref target="RFC5280"/> and <xref target="RFC5652"/>, the <tt>ANY</tt>
type is used for parameters of a particular algorithm within the
<tt>AlgorithmIdentifier</tt> type.  In <xref target="RFC5280"/>, the <tt>ANY</tt> type is used for
attribute values within the <tt>Attribute</tt> type.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
ANY [DEFINED BY identifier]
]]></sourcecode>
        <t>where <tt>'identifier'</tt> is an optional identifier.</t>
        <t>In the <tt>ANY</tt> form, the actual type is indeterminate.</t>
        <t>The <tt>ANY DEFINED BY</tt> identifier form can only appear in a
component of a <tt>SEQUENCE</tt> or <tt>SET</tt> type for which identifier
identifies some other component, and that other component
has type <tt>INTEGER</tt> or <tt>OBJECT IDENTIFIER</tt> (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 <tt>AlgorithmIdentifier</tt> type <xref target="RFC5280"/> has a component of
type <tt>ANY</tt>:</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 <tt>parameter</tt> component depends on
the value of the <tt>algorithm</tt> component. The actual type would
be defined in the registration of object identifier values
for the <tt>algorithm</tt> component.</t>
        <section anchor="ber-encoding-2">
          <name>BER Encoding</name>
          <t>Same as the BER encoding of the actual value.</t>
          <t>Example: The BER encoding of the value of the <tt>parameter</tt>
component is the BER encoding of the value of the actual
type as defined in the registration of object identifier
values for the <tt>algorithm</tt> component.</t>
        </section>
        <section anchor="der-encoding-2">
          <name>DER Encoding</name>
          <t>Same as the DER encoding of the actual value.</t>
          <t>In the modern ASN.1 specification, the <tt>CLASS</tt> construction replaces the
<tt>ANY</tt> type.</t>
          <t>Example: The <tt>AlgorithmIdentifier</tt> 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 <tt>AlgorithmSet</tt> 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>
      <section anchor="_section-5-4">
        <name>BIT STRING</name>
        <t>The <tt>BIT STRING</tt> type denotes an arbitrary string of bits
(ones and zeroes). A <tt>BIT STRING</tt> value can have any length,
including zero. This type is a string type.</t>
        <t>The <tt>BIT STRING</tt> type is used for digital signatures on
for digital signatures on certificates and for public keys in certificates in
<tt>SubjectPublicKeyInfo</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
BIT STRING
]]></sourcecode>
        <t>Example: <tt>SubjectPublicKeyInfo</tt> type <xref target="RFC5280"/> has a component
of type <tt>BIT STRING</tt>:</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectPublicKeyInfo ::= SEQUENCE {
  algorithm AlgorithmIdentifier,
  publicKey BIT STRING }
]]></sourcecode>
        <section anchor="ber-encoding-3">
          <name>BER Encoding</name>
          <t>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 <tt>BIT STRING</tt> 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>
        </section>
        <section anchor="der-encoding-3">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding, except that the bit string is padded
with zero-valued bits. Additionally, <tt>BIT STRING</tt>s 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 <tt>BIT STRING</tt> 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>
      <section anchor="_section-5-5">
        <name>BOOLEAN</name>
        <section anchor="ber-encoding-4">
          <name>BER Encoding</name>
          <t>Primitive. A single octet in length, for <tt>FALSE</tt> the octet is set to zero, for <tt>TRUE</tt>, the octet is non-zero.</t>
        </section>
        <section anchor="der-encoding-4">
          <name>DER Encoding</name>
          <t>Primitive. A single octet in length, for <tt>FALSE</tt> the octet is set to zero, for <tt>TRUE</tt>, the octet is set to 0xFF.</t>
          <t>Example: The DER encoding of the <tt>BOOLEAN</tt> value
<tt>TRUE</tt> is:</t>
          <artwork><![CDATA[
01 01 FF
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-6">
        <name>CHOICE</name>
        <t>The <tt>CHOICE</tt> type denotes a union of one or more alternatives.</t>
        <t>The <tt>CHOICE</tt> type is used to represent the union of an
extended certificate and an X.509 certificate in the
<tt>ExtendedCertificateOrCertificate</tt> type specified in <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
CHOICE {
  [identifier1] Type1,
  ...,
  [identifierN] TypeN }
]]></sourcecode>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional, distinct
identifiers for the alternatives, and <tt>'Type1'</tt>, ..., <tt>'TypeN'</tt> 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 <tt>ExtendedCertificateOrCertificate</tt> type is
a <tt>CHOICE</tt> 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 <tt>certificate</tt>
and <tt>extendedCertificate</tt>, and the types of the alternatives
are <tt>Certificate</tt> and [0] <tt>IMPLICIT ExtendedCertificate</tt>.</t>
        <section anchor="ber-encoding-5">
          <name>BER Encoding</name>
          <t>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 <tt>30</tt>
if the chosen alternative is <tt>certificate</tt>, and <tt>a0</tt> if the
chosen alternative is <tt>extendedCertificate</tt>.</t>
        </section>
        <section anchor="der-encoding-5">
          <name>DER Encoding</name>
          <t>Same as the DER encoding of the chosen
alternative.</t>
        </section>
      </section>
      <section anchor="_section-5-7">
        <name>IA5String</name>
        <t>The <tt>IA5String</tt> 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 <tt>IA5String</tt> value can have any
length, including zero. This type is a string type.</t>
        <t>The <tt>IA5String</tt> 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>
        <sourcecode type="asn.1"><![CDATA[
IA5String
]]></sourcecode>
        <section anchor="ber-encoding-6">
          <name>BER Encoding</name>
          <t>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 <tt>IA5String</tt> 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                                           DER encoding
   74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d

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>
        </section>
        <section anchor="der-encoding-6">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The DER encoding of the <tt>IA5String</tt> 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>
      <section anchor="_section-5-8">
        <name>INTEGER</name>
        <t>The <tt>INTEGER</tt> type denotes an arbitrary integer. <tt>INTEGER</tt>
values can be positive, negative, or zero, and can have any
magnitude.</t>
        <t>The <tt>INTEGER</tt> type is used for version numbers in many protocols,
including <xref target="RFC5280"/> and <xref target="RFC5652"/>.  The <tt>INTEGER</tt> type is used
for cryptographic values such as modulus, exponent, and
primes in the PKCS #1 <tt>RSAPublicKey</tt> and <tt>RSAPrivateKey</tt> types <xref target="RFC8017"/>.
The <tt>INTEGER</tt> type is used for a message-digest iteration count
in PKCS #5 <tt>PBEParameter</tt> type <xref target="RFC8018"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
INTEGER [{ identifier1(value1) ... identifierN(valueN) }]
]]></sourcecode>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional distinct
identifiers and <tt>'value1'</tt>, ..., <tt>'valueN'</tt> are optional integer
values. The identifiers, when present, are associated with
values of the type. <tt>INTEGER</tt> is always signed.</t>
        <t>Example: <tt>Version</tt> type <xref target="RFC5280"/> is an <tt>INTEGER</tt> type with
identified values:</t>
        <sourcecode type="asn.1"><![CDATA[
Version ::= INTEGER  { v1(0), v2(1), v3(2) }
]]></sourcecode>
        <t>The identifier v1 is associated with the value 0. The
<tt>Certificate</tt> 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>
        <section anchor="ber-encoding-7">
          <name>BER Encoding</name>
          <t>Primitive. The 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 <tt>00</tt> 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">
                  <tt>02 01 00</tt></td>
              </tr>
              <tr>
                <td align="left">127</td>
                <td align="left">
                  <tt>02 01 7F</tt></td>
              </tr>
              <tr>
                <td align="left">128</td>
                <td align="left">
                  <tt>02 02 00 80</tt></td>
              </tr>
              <tr>
                <td align="left">256</td>
                <td align="left">
                  <tt>02 02 01 00</tt></td>
              </tr>
              <tr>
                <td align="left">-128</td>
                <td align="left">
                  <tt>02 01 80</tt></td>
              </tr>
              <tr>
                <td align="left">-129</td>
                <td align="left">
                  <tt>02 02 FF 7F</tt></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="der-encoding-7">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-9">
        <name>NULL</name>
        <t>The <tt>NULL</tt> type denotes a null value.</t>
        <t>The <tt>NULL</tt> type is used for algorithm parameters in several
places in as required algorithm parameters, including <xref target="RFC4055"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
NULL
]]></sourcecode>
        <section anchor="ber-encoding-8">
          <name>BER Encoding</name>
          <t>Primitive. The contents octets are empty.</t>
          <t>Example: The BER encoding of a <tt>NULL</tt> 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>
        </section>
        <section anchor="der-encoding-8">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are empty; the DER
encoding of a <tt>NULL</tt> value is always <tt>05 00</tt>.</t>
        </section>
      </section>
      <section anchor="_section-5-10">
        <name>OBJECT IDENTIFIER</name>
        <t>The <tt>OBJECT IDENTIFIER</tt> 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 <tt>OBJECT IDENTIFIER</tt> value can have any number
of components, and components can generally have any
nonnegative value. This type is a non-string type.</t>
        <t><tt>OBJECT IDENTIFIER</tt> 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 <tt>OBJECT IDENTIFIER</tt> type is used to identify content in
<tt>ContentInfo</tt> type <xref target="RFC5652"/>, to identify algorithms in
<tt>AlgorithmIdentifier</tt> type <xref target="RFC5280"/> and <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
OBJECT IDENTIFIER
]]></sourcecode>
        <t>The ASN.1 notation for values of the <tt>OBJECT IDENTIFIER</tt> type is</t>
        <sourcecode type="asn.1"><![CDATA[
{ [identifier] component1 ... componentN }

componentI = identifierI | identifierI (valueI) | valueI
]]></sourcecode>
        <t>where <tt>'identifier'</tt>, <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are
identifiers, and <tt>'value1'</tt>, ..., <tt>'valueI'</tt> are optional integer
values.</t>
        <t>The form without <tt>'identifier'</tt> is the "complete" value with all
its components; the form with <tt>'identifier'</tt> abbreviates the
beginning components with another object identifier value.
The identifiers <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> 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>
        <sourcecode type="asn.1"><![CDATA[
{ iso(1) member-body(2) 840 113549 }
{ 1 2 840 113549 }
]]></sourcecode>
        <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>
        <section anchor="ber-encoding-9">
          <name>BER Encoding</name>
          <t>Primitive. The contents octets are as follows,
where <tt>'value1'</tt>, ..., <tt>'valuen'</tt> denote the integer values of the
components in the complete object identifier:</t>
          <ol spacing="normal" type="1"><li>
              <t>The first two components (<tt>'value1'</tt> and <tt>'value2'</tt>) are encoded
as a single value 40 * <tt>'value1'</tt> + <tt>'value2'</tt>, then encoded using
the same base-128, most-significant-digit-first scheme
described in step 2. When <tt>'value1'</tt> is 0 or 1, <tt>'value2'</tt> is
limited to the range 0 to 39, so this combined value fits
in a single octet (This is unambiguous, since <tt>'value1'</tt> is
limited to values 0, 1, and 2; <tt>'value2'</tt> is limited to the range
0 to 39 when <tt>'value1'</tt> is 0 or 1; and, according to
<xref target="X680"/>, n is always at least 2.). When <tt>'value1'</tt> is 2, <tt>'value2'</tt>
is unbounded, so <tt>'value1'</tt> and <tt>'value2'</tt> may require multiple octets.</t>
            </li>
            <li>
              <t>The following octets, if any, encode <tt>'value3'</tt>, ...,
<tt>'valuen'</tt>. 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". As a consequence of encoding each component with as few
digits as possible, the first octet of a component's encoding is never
0x80 (128 decimal).</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 =
<tt>2a</tt> (hexadecimal). The encoding of 840 = 6 * 128 + <tt>48</tt> (hexadecimal) is <tt>86 48</tt> and the
encoding of 113549 = 6 * 1282 + <tt>77</tt> (hexadecimal) * 128 + <tt>d</tt> (hexadecimal) is <tt>86 f7
0d</tt>. This leads to the following BER encoding:</t>
          <artwork><![CDATA[
06 06 2a 86 48 86 f7 0d
]]></artwork>
        </section>
        <section anchor="der-encoding-9">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-11">
        <name>OCTET STRING</name>
        <t>The <tt>OCTET STRING</tt> type denotes an arbitrary string of octets
(eight-bit values). An <tt>OCTET STRING</tt> value can have any
length, including zero. This type is a string type.</t>
        <t>The <tt>OCTET STRING</tt> type is used for salt values in the
<tt>PBEParameter</tt> type <xref target="RFC8018"/>.  The <tt>OCTET STRING</tt> type is used for
message digests, encrypted message digests, and encrypted content
in <xref target="RFC5652"/>. The <tt>OCTET STRING</tt> type is used for private keys and
encrypted private keys in PKCS #8 <xref target="RFC5958"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
OCTET STRING [SIZE ({size | size1..size2})]
]]></sourcecode>
        <t>where <tt>'size'</tt>, <tt>'size1'</tt>, and <tt>'size2'</tt> are optional size constraints.
In the <tt>OCTET STRING SIZE (size)</tt> form, the octet string must
have <tt>'size'</tt> octets. In the <tt>OCTET STRING SIZE (size1..size2)</tt>
form, the octet string must have between <tt>'size1'</tt> and <tt>'size2'</tt>
octets. In the <tt>OCTET STRING</tt> form, the octet string can have
any size.</t>
        <t>Example: The <tt>PBEParameter</tt> type in <xref target="RFC8018"/> has a component of type
<tt>OCTET STRING</tt>:</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>
        <section anchor="ber-encoding-10">
          <name>BER Encoding</name>
          <t>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 <tt>OCTET STRING</tt> value.</t>
          <t>Example: The BER encoding of the <tt>OCTET STRING</tt> value <tt>01 23 45
67 89 ab cd ef</tt> 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>
        </section>
        <section anchor="der-encoding-10">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The BER encoding of the <tt>OCTET STRING</tt> value <tt>01 23 45
67 89 ab cd ef</tt> is</t>
          <artwork><![CDATA[
04 08 01 23 45 67 89 ab cd ef
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-12">
        <name>PrintableString</name>
        <t>The <tt>PrintableString</tt> 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 <tt>PrintableString</tt> 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>
        <sourcecode type="asn.1"><![CDATA[
PrintableString
]]></sourcecode>
        <section anchor="ber-encoding-11">
          <name>BER Encoding</name>
          <t>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 <tt>PrintableString</tt> 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>
        </section>
        <section anchor="der-encoding-11">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The DER encoding of the <tt>PrintableString</tt> value "Test User 1" is</t>
          <artwork><![CDATA[
13 0b 54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-13">
        <name>RELATIVE-OID</name>
        <t>The <tt>RELATIVE-OID</tt> type denotes a relative object identifier, a
sequence of integer components that identifies an object
relative to some object identifier that is established by
context. A <tt>RELATIVE-OID</tt> value has at least one component.
Components can have any nonnegative value. This type is a
non-string type.</t>
        <t>Unlike the <tt>OBJECT IDENTIFIER</tt> type, a <tt>RELATIVE-OID</tt> value is
not complete on its own. It is meaningful only with respect
to a base object identifier known from the context in which
the value appears. The special encoding of the first two
components used for <tt>OBJECT IDENTIFIER</tt> (see <xref target="_section-5-10"/>)
does not apply.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
RELATIVE-OID
]]></sourcecode>
        <t>The ASN.1 notation for values of the <tt>RELATIVE-OID</tt> type is</t>
        <sourcecode type="asn.1"><![CDATA[
{ component1 ... componentN }

componentI = identifierI | identifierI (valueI) | valueI
]]></sourcecode>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are identifiers, and
<tt>'value1'</tt>, ..., <tt>'valueN'</tt> are optional integer values. As with
<tt>OBJECT IDENTIFIER</tt>, the identifiers are intended primarily for
documentation, but they must correspond to the integer value
when both are present.</t>
        <t>Example: If the base object identifier established by context
is that assigned to RSA Data Security, Inc.,
{ 1 2 840 113549 }, then the following <tt>RELATIVE-OID</tt> value
identifies { 1 2 840 113549 1 1 }:</t>
        <sourcecode type="asn.1"><![CDATA[
{ 1 1 }
]]></sourcecode>
        <t>(In this example, which gives ASN.1 value notation, the
relative object identifier values are decimal, not
hexadecimal.)</t>
        <section anchor="ber-encoding-12">
          <name>BER Encoding</name>
          <t>Primitive. The contents octets encode
<tt>'value1'</tt>, ..., <tt>'valuen'</tt>, where <tt>'value1'</tt>, ..., <tt>'valuen'</tt> denote the
integer values of the components in the relative object
identifier. 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". As a consequence of encoding each component
with as few digits as possible, the first octet of a component's
encoding is never 0x80 (128 decimal). Unlike <tt>OBJECT IDENTIFIER</tt>,
the first two components are not combined; every component is encoded
independently.</t>
          <t>Example: The BER encoding of the <tt>RELATIVE-OID</tt> value
{ 32473 3 2 } encodes 32473 = 1 * 128^2 + 125 * 128 + 89 (decimal) as
<tt>81 fd 59</tt>, 3 as <tt>03</tt>, and 2 as <tt>02</tt>. This leads to the following BER
encoding:</t>
          <artwork><![CDATA[
0d 05 81 fd 59 03 02
]]></artwork>
        </section>
        <section anchor="der-encoding-12">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-14">
        <name>SEQUENCE</name>
        <t>The <tt>SEQUENCE</tt> type denotes an ordered collection of one or
more types.</t>
        <t>The <tt>SEQUENCE</tt> type is used throughout by just about every standard
that makes use of ASN.1.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
SEQUENCE {
  [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
  ...,
  [identifierN] TypeN [{OPTIONAL | DEFAULT valueN}] }
]]></sourcecode>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional, distinct
identifiers for the components, <tt>'Type1'</tt>, ..., <tt>'TypeN'</tt> are the
types of the components, and <tt>'value1'</tt>, ..., <tt>'valuen'</tt> 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 <tt>OPTIONAL</tt> qualifier indicates that the value of a
component is optional and need not be present in the
sequence. The <tt>DEFAULT</tt> 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
<tt>OPTIONAL</tt> or <tt>DEFAULT</tt> 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: <tt>Validity</tt> type <xref target="RFC5280"/> is a <tt>SEQUENCE</tt> type with two
components:</t>
        <sourcecode type="asn.1"><![CDATA[
Validity ::= SEQUENCE {
  start Time,
  end Time }
]]></sourcecode>
        <t>Here the identifiers for the components are <tt>start</tt> and <tt>end</tt>,
and the types of the components are both <tt>Time</tt>.</t>
        <section anchor="ber-encoding-13">
          <name>BER Encoding</name>
          <t>Constructed. The 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 <tt>OPTIONAL</tt> and <tt>DEFAULT</tt>
qualifiers:</t>
          <ul spacing="normal">
            <li>
              <t>if the value of a component with the <tt>OPTIONAL</tt> or
<tt>DEFAULT</tt> 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 <tt>DEFAULT</tt>
qualifier is the default value, then the encoding
of that component may or may not be included in
the contents octets</t>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding-13">
          <name>DER Encoding</name>
          <t>Constructed. The contents octets are the same as
the BER encoding, except that if the value of a component
with the <tt>DEFAULT</tt> qualifier is the default value, the
encoding of that component is not included in the contents
octets.</t>
        </section>
      </section>
      <section anchor="_section-5-15">
        <name>SEQUENCE OF</name>
        <t>The <tt>SEQUENCE OF</tt> type denotes an ordered collection of zero
or more occurrences of a given type.</t>
        <t>The <tt>SEQUENCE OF</tt> type is used in distinguished names <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
SEQUENCE [SIZE ({size | size1..size2})] OF Type
]]></sourcecode>
        <t>where <tt>'Type'</tt> is a type, and where <tt>'size'</tt>, <tt>'size1'</tt>, and <tt>'size2'</tt> are
optional size constraints.  In the <tt>SEQUENCE SIZE (size1..size2) OF</tt>
form, the <tt>SEQUENCE</tt> must have between <tt>'size1'</tt> and <tt>'size2'</tt> items present. In
the <tt>SEQUENCE OF</tt> form, the <tt>SEQUENCE</tt> can have any number of items, including zero.</t>
        <t>Example: The <tt>RDNSequence</tt> type <xref target="RFC5280"/> consists of zero or more
occurrences of the <tt>RelativeDistinguishedName</tt> type, most
significant occurrence first:</t>
        <sourcecode type="asn.1"><![CDATA[
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
]]></sourcecode>
        <section anchor="ber-encoding-14">
          <name>BER Encoding</name>
          <t>Constructed. The contents octets are the
concatenation of the BER encodings of the values of the
occurrences in the collection, in order of occurrence.</t>
        </section>
        <section anchor="der-encoding-14">
          <name>DER Encoding</name>
          <t>Constructed. The 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 <tt>Extensions</tt> type in <xref target="RFC5280"/> requires that at least one item
be present in the <tt>SEQUENCE OF</tt>:</t>
          <sourcecode type="asn.1"><![CDATA[
Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
]]></sourcecode>
          <t>There are some widely used ASN.1 specifications that define an <tt>OPTIONAL SEQUENCE OF</tt>
component without a size constraint. In this case, the sender can encode either
an empty <tt>SEQUENCE</tt>, or it can elect to not encode the <tt>SEQUENCE</tt>. Absent some
requirement established in the prose of the specification, it is preferable to
not encode the empty <tt>SEQUENCE OF</tt>, as it minimizes the size of the message.</t>
        </section>
      </section>
      <section anchor="_section-5-16">
        <name>SET</name>
        <t>The <tt>SET</tt> type denotes an unordered collection of one or more
types.  The <tt>SET</tt> type is not used in the <tt>ESSSecurityLabel</tt> <xref target="RFC5035"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
SET {
  [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
  ...,
  [identifierN] TypeN [{OPTIONAL | DEFAULT valueN}] }
]]></sourcecode>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional, distinct
identifiers for the components, <tt>'Type1'</tt>, ..., <tt>'TypeN'</tt> are the
types of the components, and <tt>'value1'</tt>, ..., <tt>'valueN'</tt> 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 <tt>OPTIONAL</tt> qualifier indicates that the value of a
component is optional and need not be present in the set.
The <tt>DEFAULT</tt> 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 <tt>SET</tt> type is used in the <tt>ESSSecurityLabel</tt> 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>
        <section anchor="ber-encoding-15">
          <name>BER Encoding</name>
          <t>Constructed. The 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 <tt>OPTIONAL</tt> and <tt>DEFAULT</tt>
qualifiers:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>if the value of a component with the <tt>OPTIONAL</tt> or
<tt>DEFAULT</tt> 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 <tt>DEFAULT</tt>
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>
        </section>
        <section anchor="der-encoding-15">
          <name>DER Encoding</name>
          <t>Constructed. The 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 <tt>DEFAULT</tt>
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 <tt>CONSTRUCTED</tt> 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 <tt>INTEGER</tt> with the smallest encodings sorted to the start of the <tt>SET</tt>.</t>
            </li>
          </ol>
          <t>A simple pseudo-code version of the sort (in-place) would look like:</t>
          <figure anchor="fig-set-sort">
            <name>Pseudo-code for sorting SET components for DER</name>
            <sourcecode type="pseudocode"><![CDATA[
// NOTE: every octet of an encoding is treated as an unsigned value in the
// range 0..255, both when the tag octet is masked and when octets are
// compared. Languages with signed byte types, such as Java and C#, must
// mask each octet with 0xFF before comparing it, otherwise octets of 0x80
// and above compare as negative and the resulting order is wrong.

Sort(ASN1Object[] elements)
{
    if (Length(elements) < 2)
    {
        return;
    }

    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;
            }
        }
    }
}

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]
}
]]></sourcecode>
          </figure>
          <t>Where <tt>Length()</tt> returns the length of an array, <tt>Min()</tt> returns the mathematical minimum of two values and <tt>DER()</tt> returns the DER encoding of the <tt>ASN1Object</tt> passed to it, and the <tt>~</tt> operator provides the ones compliment of a value, as it does in languages like C, Java, and C#. Likewise for <tt>&amp;</tt> - the bitwise AND.</t>
          <t>The comparison stops at the last octet the two encodings have in common. This is consistent with the padding described above because, for two definite-length DER encodings with the same tag, the length octets differ before the contents octets do, so one encoding can never be a strict prefix of the other.</t>
          <t>NOTE: As you can see from the <tt>LessThanOrEqual()</tt> function, <tt>SET</tt> elements in DER encodings are ordered first according to their tags (class and number), but the <tt>CONSTRUCTED</tt> bit is not part of the tag.</t>
          <t>Links to examples of different implementations of the DER <tt>SET</tt> sort can be found in <xref target="_section-7"/>.</t>
          <t>For <tt>SET OF</tt> (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 <tt>SET</tt>, the elements will have distinct tags, and each will be in constructed or primitive form accordingly. Failing to ignore the <tt>CONSTRUCTED</tt> 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>
      <section anchor="_section-5-17">
        <name>SET OF</name>
        <t>The <tt>SET OF</tt> type denotes an unordered collection of zero or
more occurrences of a given type.</t>
        <t>The <tt>SET OF</tt> type is used for sets of attributes in PKCS #9 <xref target="RFC2985"/>.
The <tt>SET OF</tt> 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>
        <sourcecode type="asn.1"><![CDATA[
SET [SIZE ({size | size1..size2})] OF Type
]]></sourcecode>
        <t>where <tt>'Type'</tt> is a type, and where <tt>'size'</tt>, <tt>'size1'</tt>, and <tt>'size2'</tt> are
optional size constraints.  In the <tt>SET SIZE (size1..size2) OF</tt>
form, the <tt>SET</tt> must have between <tt>'size1'</tt> and <tt>'size2'</tt> items present. In
the <tt>SET OF</tt> form, the <tt>SET</tt> can have any number of items, including zero.</t>
        <t>Example: The <tt>RelativeDistinguishedName</tt> type <xref target="RFC5280"/> consists of
one or more occurrences of the <tt>AttributeTypeAndValue</tt> type, where
the order is unimportant:</t>
        <sourcecode type="asn.1"><![CDATA[
RelativeDistinguishedName ::=
  SET SIZE (1..MAX) OF AttributeTypeAndValue
]]></sourcecode>
        <section anchor="ber-encoding-16">
          <name>BER Encoding</name>
          <t>Constructed. The contents octets are the
concatenation of the BER encodings of the values of the
occurrences in the collection, in any order.</t>
        </section>
        <section anchor="der-encoding-16">
          <name>DER Encoding</name>
          <t>Constructed. The 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 <tt>OPTIONAL SET OF</tt>
component without a size constraint. In this case, the sender can encode either
an empty <tt>SET</tt>, or it can elect to not encode the <tt>SET</tt>. Absent some
requirement established in the prose of the specification, it is preferable to
not encode the empty <tt>SET OF</tt>, as it minimizes the size of the message.</t>
        </section>
      </section>
      <section anchor="_section-5-18">
        <name>T61String</name>
        <t>The <tt>T61String</tt> type denotes an arbitrary string of T.61
characters. T.61 is an eight-bit extension to the ASCII
character set. Special "escape" sequences specify shift the
character interpretation dynamically, where interpretation of
subsequent character values as, for example, Japanese; the
initial interpretation is Latin. The character set includes
non-printing control characters. The <tt>T61String</tt> type allows only
the Latin and Japanese character interpretations, and implementors'
agreements for directory names exclude control characters
<xref target="NIST92"/>. A <tt>T61String</tt> value can have any length, including
zero. This type is a string type.</t>
        <t>The <tt>T61String</tt> type is used in PKCS #9 unstructured-address
and challenge-password attributes <xref target="RFC2985"/>, and in several
attributes documented in <xref target="RFC5280"/>.</t>
        <t>Note: The use of <tt>T61String</tt> is generally discouraged, and the use
of <tt>UTF8String</tt> is preferred.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
T61String
]]></sourcecode>
        <section anchor="ber-encoding-17">
          <name>BER Encoding</name>
          <t>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 <tt>T61String</tt> 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 <tt>c2</tt> is a T.61 prefix that adds an
acute accent (') to the next character.</t>
        </section>
        <section anchor="der-encoding-17">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The DER encoding of the <tt>T61String</tt> value "clés
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>
      <section anchor="_section-5-19">
        <name>UTCTime</name>
        <t>The <tt>UTCTime</tt> type denotes a "coordinated universal time" or
Greenwich Mean Time (GMT) value. A <tt>UTCTime</tt> 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><tt>YY</tt> is the least significant two digits of the year (00 to 99)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>MM</tt> is the month (01 to 12)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>DD</tt> is the day (01 to 31)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>hh</tt> is the hour (00 to 23)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>mm</tt> are the minutes (00 to 59)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>ss</tt> are the seconds (00 to 59)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>Z</tt> indicates that local time is GMT,
<tt>+</tt> indicates that local time is later than GMT, and
<tt>-</tt> indicates that local time is earlier than GMT</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>hh'</tt> is the absolute value of the offset from GMT in hours</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>mm'</tt> is the absolute value of the offset from GMT in minutes</t>
          </li>
        </ul>
        <t>This type is a string type.</t>
        <t>The <tt>UTCTime</tt> type is used for signing times in PKCS #9 signing-time
attribute <xref target="RFC2985"/> and for certificate validity periods
in <tt>Validity</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
UTCTime
]]></sourcecode>
        <section anchor="ber-encoding-18">
          <name>BER Encoding</name>
          <t>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 <tt>UTCTime</tt>
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 <tt>UTCTime</tt> values,
among others:</t>
          <artwork><![CDATA[
"910506164540-0700"

"910506234540Z"
]]></artwork>
          <t>These values have the following BER encodings, among others:</t>
          <artwork><![CDATA[
17 11 39 31 30 35 30 36 31 36 34 35 34 30 2D 30 37 30 30

17 0d 39 31 30 35 30 36 32 33 34 35 34 30 5a
]]></artwork>
        </section>
        <section anchor="der-encoding-18">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-20">
        <name>GeneralizedTime</name>
        <t>The <tt>GeneralizedTime</tt> type consists of a calendar date and time.
A <tt>GeneralizedTime</tt> value includes the local time precise to fractions
of seconds.  A <tt>GeneralizedTime</tt> value can include midnight at the start
of a day, but it excludes midnight at the end of a day.  A
<tt>GeneralizedTime</tt> 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 <tt>VisibleString</tt>.</t>
        <t>The <tt>VisibleString</tt> 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 <tt>VisibleString</tt> 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 <tt>VisibleString</tt> ends with upper-case letter Z to indicate a UTC time.</t>
        <t>The <tt>VisibleString</tt> 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 <tt>GeneralizedTime</tt> 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 <tt>GeneralizedTime</tt> type is used for certificate validity periods
in <tt>Validity</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
GeneralizedTime
]]></sourcecode>
        <section anchor="ber-encoding-19">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
string, encoded in <tt>VisibleString</tt>. 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 <tt>GeneralizedTime</tt>
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 encoding, among others:</t>
          <artwork><![CDATA[
18 10 32 30 35 30 31 31 30 36 32 31 30 36 32 37 2e 33
]]></artwork>
        </section>
        <section anchor="der-encoding-19">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding.</t>
          <t>Example: <xref target="RFC5280"/> uses the <tt>GeneralizedTime</tt> value of "99991231235959Z"
to indicate that a certificate has no well-defined expiration date.</t>
          <t>This value has the following DER encoding:</t>
          <artwork><![CDATA[
18 0f 39 39 39 39 31 32 33 31 32 33 35 39 35 39 5a
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-21">
        <name>UTF8String</name>
        <t>The <tt>UTF8String</tt> 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 <tt>UTF8String</tt> type is used with many naming attributes in <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
UTF8String
]]></sourcecode>
        <section anchor="ber-encoding-20">
          <name>BER Encoding</name>
          <t>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>
    <section anchor="_section-6">
      <name>An example</name>
      <t>This section gives an example of ASN.1 notation and DER
encoding: the <tt>Name</tt> type <xref target="RFC5280"/>.</t>
      <section anchor="abstract-notation">
        <name>Abstract notation</name>
        <t>This section gives the ASN.1 notation for the <tt>Name</tt> type <xref target="RFC5280"/>.</t>
        <sourcecode type="asn.1"><![CDATA[
Name ::= CHOICE {
  RDNSequence }

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::=
  SET SIZE (1..MAX) OF AttributeTypeAndValue

AttributeTypeAndValue ::= SEQUENCE {
   AttributeType,
   AttributeValue }

AttributeType ::= OBJECT IDENTIFIER

AttributeValue ::= ANY
]]></sourcecode>
        <t>The <tt>Name</tt> type identifies an object in an X.500 directory.
<tt>Name</tt> is a <tt>CHOICE</tt> type consisting of one alternative:
<tt>RDNSequence</tt>. (Future revisions of X.500 may have other
alternatives.)</t>
        <t>The <tt>RDNSequence</tt> type gives a path through an X.500 directory
tree starting at the root. <tt>RDNSequence</tt> is a <tt>SEQUENCE OF</tt> type
consisting of zero or more occurrences of <tt>RelativeDistinguishedName</tt>.</t>
        <t>The <tt>RelativeDistinguishedName</tt> type gives a unique name to an
object relative to the object superior to it in the
directory tree. <tt>RelativeDistinguishedName</tt> is a <tt>SET OF</tt> type
consisting of one or more occurrences of
<tt>AttributeTypeAndValue</tt>.</t>
        <t>The <tt>AttributeTypeAndValue</tt> type assigns a value to some
attribute of a relative distinguished name, such as country
name or common name. <tt>AttributeTypeAndValue</tt> is a <tt>SEQUENCE</tt>
type consisting of two components, an <tt>AttributeType</tt> type and
an <tt>AttributeValue</tt> type.</t>
        <t>The <tt>AttributeType</tt> type identifies an attribute by object
identifier. The <tt>AttributeValue</tt> 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-20">
        <name>DER encoding</name>
        <t>This section gives an example of a DER encoding of a value
of type <tt>Name</tt>, working from the bottom up.</t>
        <t>The name is that of User 1. The name is represented by the following path:</t>
        <artwork><![CDATA[
                       (root)
                          |
                   countryName = "US"
                          |
           organizationName = "Example Inc."
                          |
                commonName = "User 1"
]]></artwork>
        <t>Each level corresponds to one <tt>RelativeDistinguishedName</tt>
value, each of which happens for this name to consist of one
<tt>AttributeTypeAndValue</tt> value. The <tt>AttributeType</tt> value is
before the equals sign, and the <tt>AttributeValue</tt> value (a
printable string for the given attribute types) is after the
equals sign.</t>
        <t>The <tt>countryName</tt>, <tt>organizationName</tt>, and <tt>commonName</tt> 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 }

commonName OBJECT IDENTIFIER ::= { attributeType 3 }
]]></sourcecode>
        <t>Note: <tt>joint-iso-ccitt</tt> and <tt>joint-iso-itu-t</tt> are interchangeable for (2).</t>
        <section anchor="attributetype">
          <name>AttributeType</name>
          <t>The three <tt>AttributeType</tt> values are <tt>OBJECT IDENTIFIER</tt> 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 <tt>OBJECT IDENTIFIER</tt>. 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 = <tt>55</tt> (hexadecimal); 4; and
6, 10, or 3.</t>
        </section>
        <section anchor="attributevalue">
          <name>AttributeValue</name>
          <t>The three <tt>AttributeValue</tt> values are <tt>PrintableString</tt> values,
so their encodings follow the primitive, definite-length
method:</t>
          <artwork><![CDATA[
13 02 55 53                                             "US"

13 0c 45 78 61 6d 70 6c 65 20 49 6e 63 2e     "Example Inc."

13 06 55 73 65 72 20 31                             "User 1"
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>PrintableString</tt>, 19 (decimal), is between 0 and
30. Bits 8 and 7 have value "0" since <tt>PrintableString</tt> 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="attributetypeandvalue">
          <name>AttributeTypeAndValue</name>
          <t>The three <tt>AttributeTypeAndValue</tt> values are <tt>SEQUENCE</tt>
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 13                     organizationName = "Example Inc."
   06 03 55 04 0a
   13 0c ... 63 2e

30 0d                                  commonName = "User 1"
   06 03 55 04 03
   13 06 ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>SEQUENCE</tt>, 16 (decimal), is between 0 and 30.
Bits 8 and 7 have value "0" since <tt>SEQUENCE</tt> 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 <tt>RelativeDistinguishedName</tt> values are <tt>SET OF</tt>
values, so their DER encodings follow the constructed,
definite-length method:</t>
          <artwork><![CDATA[
31 0b
   30 09 ... 55 53

31 15
   30 13 ... 63 2e

31 0f
   30 0d ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>SET OF</tt>, 17 (decimal), is between 0 and 30. Bits
8 and 7 have value "0" since <tt>SET OF</tt> 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
<tt>AttributeTypeAndValue</tt> values, since there is only one
value in each set.</t>
        </section>
        <section anchor="rdnsequence">
          <name>RDNSequence</name>
          <t>The <tt>RDNSequence</tt> value is a <tt>SEQUENCE OF</tt> value, so its DER
encoding follows the constructed, definite-length method:</t>
          <artwork><![CDATA[
30 35
   31 0b ... 55 53
   31 15 ... 63 2e
   31 0f ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>SEQUENCE OF</tt>, 16 (decimal), is between 0 and 30.
Bits 8 and 7 have value "0" since <tt>SEQUENCE OF</tt> 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 <tt>RelativeDistinguishedName</tt> values, in
order of occurrence.</t>
        </section>
        <section anchor="name">
          <name>Name</name>
          <t>The <tt>Name</tt> value is a <tt>CHOICE</tt> value, so its DER encoding is the
same as that of the <tt>RDNSequence</tt> value:</t>
          <artwork><![CDATA[
30 35
   31 0b
      30 09
         06 03 55 04 06          attributeType = countryName
         13 02 55 53                   attributeValue = "US"
   31 15
      30 13
         06 03 55 04 0a     attributeType = organizationName
         13 0c               attributeValue = "Example Inc."
            45 78 61 6d 70 6c 65 20 49 6e 63 2e
   31 0f
      30 0d
         06 03 55 04 03           attributeType = commonName
         13 06                     attributeValue = "User 1"
            55 73 65 72 20 31
]]></artwork>
          <t>If pretty-printed in strict order, this would provide an X.500 <tt>Name</tt> that looked like:</t>
          <artwork><![CDATA[
countryName=US,organizationName=Example Inc.,commonName=User 1
]]></artwork>
          <t>Occasionally, just occasionally you will also come across a '+' syntax in X.500 Names so instead the name might look like:</t>
          <artwork><![CDATA[
countryName=US,organizationName=Example Inc.+commonName=User 1
]]></artwork>
          <t>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 <tt>SET</tt> as can be seen in
the encoding below.</t>
          <artwork><![CDATA[
30 33
   31 0b
      30 09
         06 03 55 04 06
         13 02 55 53
   31 24
      30 13
         06 03 55 04 0a
         13 0c
            45 78 61 6d 70 6c 65 20 49 6e 63 2e
      30 0d
         06 03 55 04 03
         13 06
            55 73 65 72 20 31
]]></artwork>
          <t>While the above is a correct definite-length encoding of this X.500 name,
it is not the correct DER encoding, which looks like:</t>
          <artwork><![CDATA[
30 33
   31 0b
      30 09
         06 03 55 04 06
         13 02 55 53
   31 24
      30 0d
         06 03 55 04 03
         13 06
            55 73 65 72 20 31
      30 13
         06 03 55 04 0a
         13 0c
            45 78 61 6d 70 6c 65 20 49 6e 63 2e
]]></artwork>
          <t>If pretty-printed directly, this would give:</t>
          <artwork><![CDATA[
countryName=US,commonName=User 1+organizationName=Example Inc.
]]></artwork>
          <t>The difference between the two encodings being that the <tt>SET</tt> 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 <tt>Name</tt> is of type <tt>CHOICE</tt>, 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 <tt>DEFINITIONS IMPLICIT TAGS ::=</tt>. This convention is followed as <tt>CHOICE</tt> encodings need to maintain the original encoding of the ASN.1 primitive, or structure, making up the <tt>CHOICE</tt>. Overwriting the tag by following the implicit tagging rule could change the meaning of the <tt>CHOICE</tt> item completely!</t>
        </section>
      </section>
    </section>
    <section anchor="_section-7">
      <name>Useful Links</name>
      <t>The following table provides alternate implementations of the DER <tt>SET</tt> 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">
              <xref target="OPENSSL-DER-SET"/></td>
          </tr>
          <tr>
            <td align="left">C#</td>
            <td align="left">Bouncy Castle</td>
            <td align="left">
              <xref target="BCCSHARP-DER-SET"/></td>
          </tr>
          <tr>
            <td align="left">Java</td>
            <td align="left">Bouncy Castle</td>
            <td align="left">
              <xref target="BCJAVA-DER-SET"/></td>
          </tr>
          <tr>
            <td align="left">Rust</td>
            <td align="left">Rust Crypto</td>
            <td align="left">
              <xref target="RUSTCRYPTO-DER-SET"/></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. In addition to issues with nesting, the need to sort sets for DER can also cause issues if a large set is presented in a situation where DER encoding is required, such as with a signature verification. In situations where ASN.1 encodings are possibly being accepted from unknown third parties, a more sophisticated algorithm, such as a stable Dual-Pivot Quicksort, should be utilized. Doing so may avoid worst-case situations resulting in high CPU and/or memory usage when producing or verifying the sorted, distinguished encoded value for a SET type.</t>
      <t>Implementers of ASN.1 parsers and decoders are encouraged to use fuzz testing to identify security vulnerabilities and other flaws.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="X680" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information technology -- Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="X690" target="https://www.itu.int/rec/T-REC-X.690">
          <front>
            <title>Information technology -- ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1-2021"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0020.xml">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC20"/>
        </reference>
        <reference anchor="RFC2985" target="https://www.rfc-editor.org/info/rfc2985" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2985.xml">
          <front>
            <title>PKCS #9: Selected Object Classes and Attribute Types Version 2.0</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #9 v2.0 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from that specification. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2985"/>
          <seriesInfo name="DOI" value="10.17487/RFC2985"/>
        </reference>
        <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC4055" target="https://www.rfc-editor.org/info/rfc4055" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4055.xml">
          <front>
            <title>Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>This document supplements RFC 3279. It describes the conventions for using the RSA Probabilistic Signature Scheme (RSASSA-PSS) signature algorithm, the RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) key transport algorithm and additional one-way hash functions with the Public-Key Cryptography Standards (PKCS) #1 version 1.5 signature algorithm in the Internet X.509 Public Key Infrastructure (PKI). Encoding formats, algorithm identifiers, and parameter formats are specified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4055"/>
          <seriesInfo name="DOI" value="10.17487/RFC4055"/>
        </reference>
        <reference anchor="RFC5035" target="https://www.rfc-editor.org/info/rfc5035" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5035.xml">
          <front>
            <title>Enhanced Security Services (ESS) Update: Adding CertID Algorithm Agility</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>In the original Enhanced Security Services for S/MIME document (RFC 2634), a structure for cryptographically linking the certificate to be used in validation with the signature was introduced; this structure was hardwired to use SHA-1. This document allows for the structure to have algorithm agility and defines a new attribute for this purpose. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5035"/>
          <seriesInfo name="DOI" value="10.17487/RFC5035"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5958" target="https://www.rfc-editor.org/info/rfc5958" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC5912" target="https://www.rfc-editor.org/info/rfc5912" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5912.xml">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8018" target="https://www.rfc-editor.org/info/rfc8018" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8018.xml">
          <front>
            <title>PKCS #5: Password-Based Cryptography Specification Version 2.1</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document provides recommendations for the implementation of password-based cryptography, covering key derivation functions, encryption schemes, message authentication schemes, and ASN.1 syntax identifying the techniques.</t>
              <t>This document represents a republication of PKCS #5 v2.1 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 2898.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8018"/>
          <seriesInfo name="DOI" value="10.17487/RFC8018"/>
        </reference>
        <reference anchor="I-D.kaliski-asn1-layman-guide" target="https://datatracker.ietf.org/doc/html/draft-kaliski-asn1-layman-guide-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kaliski-asn1-layman-guide.xml">
          <front>
            <title>A Layman's Guide to a Subset of ASN.1, BER, and DER</title>
            <author fullname="Burt Kaliski" initials="B." surname="Kaliski">
              <organization>Verisign, Inc.</organization>
            </author>
            <date day="2" month="April" year="2026"/>
            <abstract>
              <t>This note gives a layman's introduction to a subset of the Abstract Syntax Notation One (ASN.1), Basic Encoding Rules (BER), and Distinguished Encoding Rules (DER). The particular purpose of this note is to provide background material sufficient for understanding and implementing the RSA Data Security, Inc. Public Key Cryptography Standards (PKCS) family of standards. This document represents a republication of A Layman's Guide to a Subset of ASN.1, BER, and DER, originally authored and published by RSA Security USA LLC. This document is submitted with permission from, and on behalf of RSA Security USA LLC. By publishing this document, change control is transferred to the IETF and the Internet technical community in full conformance with the provisions of BCP 78 and BCP 79.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kaliski-asn1-layman-guide-00"/>
        </reference>
        <reference anchor="NIST92">
          <front>
            <title>Stable Implementation Agreements for Open Systems Interconnection Protocols. Part 11 (Directory Services Protocols)</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="1992" month="December"/>
          </front>
          <seriesInfo name="NIST SP" value="500-202"/>
        </reference>
        <reference anchor="X200" target="https://www.itu.int/rec/T-REC-X.200">
          <front>
            <title>Information technology -- Open Systems Interconnection -= Basic Reference Model: The basic model</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="1994" month="July"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.200"/>
        </reference>
        <reference anchor="X500" target="https://www.itu.int/rec/T-REC-X.500">
          <front>
            <title>Information technology –- Open Systems Interconnection –- The Directory: Overview of concepts, models and services</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2008" month="November"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.500"/>
        </reference>
        <reference anchor="OPENSSL-DER-SET" target="https://github.com/openssl/openssl/blob/3206bb708246/crypto/asn1/tasn_enc.c#L399">
          <front>
            <title>OpenSSL: DER SET encoding sort implementation (tasn_enc.c)</title>
            <author>
              <organization>OpenSSL Project</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BCCSHARP-DER-SET" target="https://github.com/bcgit/bc-csharp/blob/0c87b54b4b78/crypto/src/asn1/Asn1Set.cs#L277C38-L277C44">
          <front>
            <title>Bouncy Castle (C#): DER SET encoding sort implementation (Asn1Set.cs)</title>
            <author>
              <organization>Bouncy Castle</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BCJAVA-DER-SET" target="https://github.com/bcgit/bc-java/blob/126ac9e14a0f/core/src/main/java/org/bouncycastle/asn1/ASN1Set.java#L500">
          <front>
            <title>Bouncy Castle (Java): DER SET encoding sort implementation (ASN1Set.java)</title>
            <author>
              <organization>Bouncy Castle</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RUSTCRYPTO-DER-SET" target="https://github.com/RustCrypto/formats/blob/master/der/src/asn1/set_of.rs#L456">
          <front>
            <title>RustCrypto: DER SET encoding sort implementation (set_of.rs)</title>
            <author>
              <organization>RustCrypto</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2553?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Adrian Farrel, Carl Wallace, Daniel Van Geest, Eliot Lear, Lijun Liao, Mike StJohns, and Sean Turner for their reviews and insightful feedback which meaningfully improved this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ImiK8IQpoUuUbeCoE0/yGF9L/b8MYlumT1YBAA==

-->

</rfc>
