<?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-04" 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-04"/>
    <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="October" day="13"/>
    <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>ASN.1 has two kinds of notation. Type notation describes a type,
such as <tt>INTEGER</tt> or <tt>SEQUENCE { ... }</tt>. Value notation specifies a
particular value of a type. For example, <tt>{ 2 5 4 }</tt> is
value notation for a value of type <tt>OBJECT IDENTIFIER</tt>, and <tt>TRUE</tt> is
value notation for a value of type <tt>BOOLEAN</tt>. A named value is
defined with the assignment operator, as in
<tt>id-at OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) ds(5) 4 }</tt>.</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. 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 take one of two forms. A comment begins with a pair of hyphens (<tt>--</tt>) and ends with another pair of hyphens or a line break, so it is always contained on a single line. A comment can also begin with <tt>/*</tt> and end with <tt>*/</tt>; this form can span multiple lines.</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. The character string types (<tt>IA5String</tt>, <tt>PrintableString</tt>,
<tt>T61String</tt>, and <tt>UTF8String</tt>) and the time types (<tt>GeneralizedTime</tt>
and <tt>UTCTime</tt>) are string types because their values are sequences of
characters. <tt>BIT STRING</tt> and <tt>OCTET STRING</tt> are also string types,
although their values are sequences of bits and octets rather than characters.</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 a <tt>BIT STRING</tt>, the first contents octet is the
"unused bits" octet; see <xref target="_section-5-4"/>.) 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 types <tt>OBJECT IDENTIFIER</tt> and
<tt>RELATIVE-OID</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>a0</tt>, because <tt>Attributes</tt> is a
<tt>SET OF</tt> type and its BER encoding is therefore always constructed</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>TBSCertificate</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>TBSCertificate</tt> type <xref target="RFC5280"/> has a version component
with an explicit, context-specific tag:</t>
        <sourcecode type="asn.1"><![CDATA[
TBSCertificate ::= SEQUENCE {
  version [0] Version DEFAULT v1,
  ... }
]]></sourcecode>
        <t>The tag is explicit because the default tagging method for
the ASN.1 module in <xref target="RFC5280"/> that defines the <tt>TBSCertificate</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>TBSCertificate</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[
TBSCertificate ::= SEQUENCE {
  version [0] 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 2559?>

<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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
J8rx71gBAA==

-->

</rfc>
