<?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-05" 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-05"/>
    <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="30"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 138?>

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

<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 of 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.
When an octet is written in binary, bit 8 is the leftmost bit; for
example, the octet <tt>80</tt> has only bit 8 set and the octet <tt>01</tt> has only
bit 1 set. Bit numbers are used only to describe the fields within a
single octet. A sequence of octets is always written, and transmitted,
with the first octet first.</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. An encoding carries
its tag instead of a type name, so a decoder uses the tag to learn what
kind of value it is. <xref target="_section-2-3"/> explains how tags
distinguish the components of a structured type, and <xref target="_section-3"/>
shows how a tag is encoded. 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 <xref target="X680"/>, 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">BOOLEAN</td>
            <td align="left">1</td>
            <td align="left">01</td>
          </tr>
          <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, and hyphens;
identifiers begin with lower-case letters; type
references begin with upper-case letters. A hyphen can appear within
a name, but it cannot be the last character or be followed by another
hyphen, since two hyphens begin a comment.</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>BOOLEAN</tt></dt>
              <dd>
                <t>a Boolean value, either true or false.</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 in <xref target="RFC9881"/> 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 preceded 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.</t>
          <t>Consider the <tt>both</tt> item within the <tt>CHOICE</tt>, where the contents octets
are the encodings of the two elements of the <tt>SEQUENCE</tt>. These elements have no
context-specific tags. The <tt>seed</tt> inside the <tt>SEQUENCE</tt> is a plain
<tt>OCTET STRING</tt>, so its prefix is <tt>04 20</tt>. It is not
the <tt>80 20</tt> prefix of the <tt>seed</tt> <tt>CHOICE</tt> item, which carries the <tt>[0]</tt>
tag. The <tt>expandedKey</tt> inside the <tt>SEQUENCE</tt> has the same <tt>04 82 0a 00</tt>
prefix as the second row. The contents octets of <tt>both</tt> are therefore
the 34 octets of the <tt>seed</tt> encoding followed by the 2564 octets of the
<tt>expandedKey</tt> encoding, 2598 octets in total.</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> in many protocols, including
the content component of the <tt>ContentInfo</tt> type <xref target="RFC5652"/>.
It is also used for components of any underlying type when the
default tagging for an ASN.1 module is explicit, as is the case for
the version component of the <tt>TBSCertificate</tt> type <xref target="RFC5280"/>.</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
of type <tt>Version</tt>, which is an <tt>INTEGER</tt> type (see <xref target="_section-5-8"/>), 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
certificates and for public keys in the
<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 will be no
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>Put another way, the first bit of the bit string becomes bit 8, the
leftmost and most significant bit, of the first octet. A bit string
written left to right therefore reads in the same order as the binary
digits of the octets that encode it, and the examples below can be
checked by grouping the bits of the string into groups of eight.</t>
          <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 they are 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>
        <t>The <tt>BOOLEAN</tt> type denotes a Boolean value, which is either true or
false. This type is a non-string type.</t>
        <t>The <tt>BOOLEAN</tt> type is used for flags such as the <tt>cA</tt> component of the
<tt>BasicConstraints</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <sourcecode type="asn.1"><![CDATA[
BOOLEAN
]]></sourcecode>
        <t>The ASN.1 value notation is <tt>TRUE</tt> or <tt>FALSE</tt>.</t>
        <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 in several places as a required placeholder
for 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, <tt>'value1'</tt>, ..., <tt>'valueN'</tt> are optional integer
values, and each <tt>'componentI'</tt>, for <tt>I</tt> from 1 to <tt>N</tt>, takes one of the
three forms shown.</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"/>, <tt>N</tt> 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 * 128^2 + <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 DER 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 SIZE (size) OF</tt> form, the <tt>SEQUENCE</tt> must have exactly <tt>'size'</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>
        <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>To require exactly a given number of items, use a single size value
instead of a range. For example, the following (illustrative, not taken
from a published specification) type always contains exactly two
integers:</t>
        <sourcecode type="asn.1"><![CDATA[
IntegerPair  ::=  SEQUENCE SIZE (2) OF INTEGER
]]></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 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>
        </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 used in the <tt>ESSSecurityLabel</tt> type <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, or C# if
// sbyte is used, must mask each octet with 0xFF before comparing it,
// otherwise octets of 0x80 and above compare as negative and
// produce incorrect ordering.

// Bit 6 of the identifier octet, which indicates a constructed encoding.
CONSTRUCTED = 0x20

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

    var 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><tt>CONSTRUCTED</tt> is the constructed-encoding bit of the identifier octet (see <xref target="_section-3-2"/>). <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 one's complement 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 SIZE (size) OF</tt> form, the <tt>SET</tt> must have exactly <tt>'size'</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>
        <t>To require exactly a given number of items, use a single size value
instead of a range. For example, the following (illustrative, not taken
from a published specification) type always contains exactly two
integers, in no particular order:</t>
        <sourcecode type="asn.1"><![CDATA[
IntegerSet  ::=  SET SIZE (2) OF INTEGER
]]></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 shift the
character interpretation dynamically, so that subsequent
character values are interpreted 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, except that the optional parts of the BER forms
are fixed. The time is always in GMT, so the string always ends with <tt>Z</tt>,
and the seconds are always present. The only DER form is therefore:</t>
          <artwork><![CDATA[
YYMMDDhhmmssZ
]]></artwork>
          <t>Midnight is encoded as <tt>YYMMDD000000Z</tt>.</t>
          <t>Example: The DER encoding of the <tt>UTCTime</tt> value "910506234540Z" is</t>
          <artwork><![CDATA[
17 0d 39 31 30 35 30 36 32 33 34 35 34 30 5a
]]></artwork>
        </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, which can be as precise
as fractions of seconds but need not be.  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>What follows the time of day depends on which of the three forms is used.
For a local time of day, nothing follows it.  For a UTC time of day, the
<tt>VisibleString</tt> ends with the upper-case letter Z.  For a local time of day
with the difference between local time and UTC, the <tt>VisibleString</tt> ends with
the signed difference (a plus or minus sign followed by hours and minutes),
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 that dates in 2050 and later be encoded as
<tt>GeneralizedTime</tt> using the following form, which is the <tt>UTCTime</tt> form with
a four-digit year:</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, except that the optional parts of the BER forms
are fixed so that each value has exactly one encoding. The rules are:</t>
          <ul spacing="normal">
            <li>
              <t>the time is always expressed in UTC, so the string always ends with <tt>Z</tt>
and the local time forms are not used;</t>
            </li>
            <li>
              <t>the seconds are always present, so the hours-only and hours-and-minutes
accuracies are not used;</t>
            </li>
            <li>
              <t>if fractions of a second are present, the decimal sign is a full stop, and
the fraction has no trailing zeros; if the fraction is zero, the full stop and
fraction are omitted entirely; and</t>
            </li>
            <li>
              <t>midnight is encoded as <tt>YYYYMMDD000000Z</tt>.</t>
            </li>
          </ul>
          <t>Individual protocols may restrict the encoding further. For example,
<xref target="RFC5280"/> does not allow fractional seconds in certificates.</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 BER encodings, among others:</t>
          <artwork><![CDATA[
0c 09 ed 95 9c ea b5 ad ec 96 b4                DER encoding

0c 81 09 ed 95 9c ea b5 ad ec 96 b4   long form of length octets

2c 0d                  constructed encoding: U+D55C + U+AD6D U+C5B4
   0c 03 ed 95 9c
   0c 06 ea b5 ad ec 96 b4
]]></artwork>
        </section>
        <section anchor="der-encoding-20">
          <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>UTF8String</tt> value U+D55C U+AD6D U+C5B4 is</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-21">
        <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 length 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 length 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 preserve 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 that 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="RFC9881" target="https://www.rfc-editor.org/info/rfc9881" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9881.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure -- Algorithm Identifiers for the Module-Lattice-Based Digital Signature Algorithm (ML-DSA)</title>
            <author fullname="J. Massimo" initials="J." surname="Massimo"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="B. E. Westerbaan" initials="B. E." surname="Westerbaan"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>Digital signatures are used within X.509 certificates and Certificate Revocation Lists (CRLs), and to sign messages. This document specifies the conventions for using FIPS 204, the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) in Internet X.509 certificates and CRLs. The conventions for the associated signatures, subject public keys, and private key are also described.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9881"/>
          <seriesInfo name="DOI" value="10.17487/RFC9881"/>
        </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 2677?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Adrian Farrel, Alex Railean, Carl Wallace, Daniel Van Geest, Eliot Lear, Joe Mandel, Lijun Liao, Mike StJohns, Sean Turner, and Zaid AlBanna for their reviews and insightful feedback which meaningfully improved this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+2963Ybx7kg+r+eokKttUXGAASAF5FSnB2Komw6EqURoSS2
x7PRAJpkRwAa6W6IZiRlzTvMC5y/5zXOeZPzJOe71a27AIKOvZ09axRHIrur
6/rVd7+0221VZdU0faKP9cvkdpbMH5b6q2U2SXWV60RfLEdlWun8Uh9fnHd6
Lf3s9G1LJ/OJfn76ViWjUZF+eBL5klqrST6eJzPofFIkl1X7Ol+W0/S2nZTz
XntK37Sv8It2d19Nkip9osrlaJaVZZbPq9sFfJjNJ+kihb/mlRpDi6u8uMWn
l7lS2aJ4oqtiWVb9bveo21fv09ubvJg80WfzKi3madV+juMqVVYw4/9Ipvkc
upznapE90d9X+bily7yoivSyhJ9uZ/jDD0oly+o6L54o3daap/9sWVT5XF90
9B+TaVa+z/Q3RUdp+JPNS3htn9OzvLh6ov+UFlmZXc3pidkn8xA2bFTSmxJG
T6snutfvHvT0s+kyncHS9Z+TW3o9zipY7tu0hOHpQZFewd5AT8f8Pp/A9Lb6
3d5Rd0ueLOcV7tG7C/o9nSXZ9IkevecJ/uGDTKEzzmfUYFnAZlxX1aJ88ujR
zc1Nx7SYwhyx1SNvI07yIr3Vz/L5PJ1O3QacdIJntAGDZTHKX2ZX15W+yKfL
CqYNu/zy5cm6aY6x/86I+/pDhV1MsYvS9MDTtvN5nnzIJvrrPH/vJvO84x7Q
TP6Y3l4m4yovwpGP3/kjT7CnzjV8+If3pn1tsLfLsoSuCYbdcG87wTM+/Owq
m+qLdAybW926VVs4CN6v2xC5Mn/4gF+U6ZimpBD+i1lSZR/gymj99sVJt9vv
yo/9o8N9+XH3oH8kP+51983T/e6u/bF/aD7bP9jvmx+P9g/tjz3z9LDbe+x+
NA2ODg97+ONZ+3lHYKx5v7HB+dnF4Ij60lpQzu/pF60vqmQ0TfXZbDFNZ3DT
EzxqfXwFVwN/LTWsVr8GNKAvbssqnZXyHV3zMQLLmL54U+RwqfNp2dFvkqLS
vZ7efp4VKZ7lLWx38SEbp6VrtsOHYq47/Gnz+eFc6XdCSrp3dNRv9/p8YeF2
pCUewBOZBTbWF2+e6P1ut93vYrO/AEKSlSbFFd5v/4Jl1bKTzatHMLFHg/bb
05P2XzrwQWxnzsxBw+qqdHw9z6f51a0GrM3v/U1pbEf7S2n1LCmzMWCRy7RI
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
8DpwUmuLnagl1kV83MVeJAqZSyoNEwCy8Ds2wxeH1BpW7zLIvOVjqX3D7MgD
L0tGkHgololCNXLX19PVaw5r4C/YP4zUosiIurzbg+vUnpYh6S4mwlZHCck8
EnnkUDjs0mQgny6uE7i37GZuEsWdJuR+hl0vKi+FbVlLV9kKGBw2lfqp0SVB
ez5eWo7IbbGYoJMiI6RsIMyntk+tUdejisJcMP4ysSml3qX92eMhvbmLV79k
HxJmhBRvxrOSUBC8othR7MQkS7SBIJ1Gms7SZbNUFCxgk9RglIlELJlwIj6q
iMcae7IFIY9GIRkMRWhYCibUgyRWRUXsky3meI0Ts8n1VLvx7JpCbzDycUNH
fhcq4Pmlu4ynNv7BUzY5WcowRqG/mp8Si5xqbRYZUxegJYCJ3DVZQLD2qU1k
LwVQOd1ScH6ByeN79m//oRFQQL53wEuTrftL/e4czujtxfFL/Ukfv8Emx5h7
EH578/bsT8eDUzYjMIBxEs+HQ7fNgKUeUlfycO7Fx7B/PYWlE0Q85Klwy9Cv
IUg1xPxjkPNLuQBgk2JQs+O9SZ9kYm7MMTlHOQMpocxpIXHY2Clc49AEziiu
MpUYpwn62AYRuCgNMxAy+qEXGOUJY3WDcdqkC0xllyYYhEE6y0QWxNOzshyB
QukJ7zK2CsdeUBaBhCs6ETtNDslexMzZpdtdOhVaIfll0ZBzeySsegq0wx1d
T2FFiYbYxoiIwkvW6eWAquc7QzW874dOUSzE8D9hPPXgkEI/xUSHVfDE6Zzh
/mj/EO7BdRIAmhraiOvSu3621oE5/1Y0vii4NOHQZCEMLHcm9/mfJLk6PFrY
T45tEPib5jOXoSL8yGuLL9xKyA5p7+yxe25ygxoD39fGYhCLM3DfiQsBH789
ebWdddJOc2d2HKxHL6my/XTZlI4U09Z9ebPCNbXmLlw1gyPianerYiia6ofV
6iILWYMVKqYVcINAqxpQaH3PA10Hqr1IyKzrPGjOwwTNdCam2D8MDu43XJ1z
ZEb7STDVrHRmBi/LitlRNwNhI8RhvbF91vzBlg61pnlMJS5KIm+Xg9WwHgDh
4Pl/Ihw83wwOHjxYFSkX8BVoGWkEoYV5sKM8hRae4j5xdZGR/lm2YgNewlM7
heDONkh+08C5wmucuVBSO89a1CeMW5+VrRRYJ89if/YpOWW5/NHg6poKgdxW
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
NrR5jnMwPz+7ezK/kApiI3FiI/AEjseDjJ+w3bJCW7zcpxeHll4Ebp1RamH8
ur1KmcKQyg0Cui1x2MYXnCr9sQxmQoct/p4lV/OsAmrQiU7Bl5+NscDLGlmL
NPBsguuiFrkUY3wk4sHHxe2iwkrMC6Brht82gjs5hC5L1C55rkMEAGkZUo+e
Hr69OLbWNcmhgY9saI9USOH5HXZ7j1FWumMjEj3DSjFXaXuSXQGoYKIycY4Y
58t5ZWNuH+zr4Ztnp2+cA4tTJMBYh3fJZQZYvv/osVK9bdqQ3g652nqCFT8/
39GfVzqUbSaSxSUylr14bK8bHrTeg0CpgGZD7mpxWIiIyC25yoG/omqKWR7M
e8Y8NFGESjfrNN200Ebdp2k4OztTKTw4CePrjIKLu8L6Q2+7u9PSH/rbPfxn
d7u/4zs/+y5DPTauhT6ZnrFQavTc6TG+LMXkGnaOBgzOwyte1coqPruW6274
mf9yvt9r1FgxXN6wZ5IgL1Dk52LG+32TPywlLS5Jyuy5h/Yq5durmsnQsc/V
+TEGnuU2s0bioPo65d9hq5dSVI7eZKsJzTvbki4FY6Wu0YVyTqa+0Ce53AlT
VnHa+13MrU6svvX7w7SpPuG6OzUq9BBaFzBXaR+pcpdSoGIDzLodafD4hWtw
2GzQRyvCIWY7hRZwItEWPAy2aAed2EEO7SygwVGkixcvaCJ+4tLT6E6j1CT3
UXANZiz9RTiJBw+wTE9IuY8M5aYKPnUtYlCcut7Mk3ekELgWDzWCOFEFTfjh
dT7FpM80Q+sNEvgNhZR3r7u/fxd1wbn8pMtKto7Zwo9BinP/iVmwExwxHVZQ
hsjn8jkRBP670mJorIKV57ZBszLK332APYX/oLntp9u2aH1PjT5ArVmVo0RD
GpzVC003vTCFRdcATsSNuc78ReqD36tkeeZ3o2JFyyn5YVi1nJjGRVoA+sJA
5cAFNFlW1/jhrQ7icNj5QIbxqD3rESILjXiXSYBVHhYh5iBluzj8wqYpcbys
F/5o8kfdaTNaOS0/n+AsTeaEbUa3gS+sMhuRIY9DyWVW7BPpdssF5jxDJE+R
BQDpQaVnb4Ej6GWOQ5qyxlKEWJp31PGqgZzKeJJOcTNSb+RsCk0IiXAuMecH
YeeBFS8qdI6ZJZRmVgr6REfLUCWfF/FER9ZNuOPVj5OLkmBeZnRaoALirrbx
HVfCM6/YmlomLgWTEa+NfWwFn1nIL+nLzfzo75V9pbGIujkwSKoUMrtrdsAf
4qNvj/nBbWSPGDH7K5ponEv4mf7SwyRnQHL931iGONuBx/zT6tCU1uaShQpY
/58oREh2L7xkw4duOdgLWRbPhhyUT7zwEPNqVaTK5gz2pAHislNUnIX9tgXi
bP5ALL/QDMDBI9kyZRi2TC1zupjTqcLr4mD4qaNS1KLWm0vtx47o7qJ7t1/C
tXx02og+6NQEjPIecp5J9KdcmqqG5YsKpbL1i0xW47xgNDKRjAYqCE1heY4y
erFJjQQ7k3rcn+aYK1RT/kzZ8TDIhX0QWKvPfhWs/QMmfIb7LTkQ/T5rWQHF
Qh+wJs6VUkahuVKItUnR0CBcKK6RcIkt3l4c6+dJlWBiriWi2hYw6ePOk/BC
ZmUOoiAQDKRi7VE+uUWR8HCvq3u93f29I7iKHwFC++EjumPbZ1LB1yYkZiGC
nWxjLgSs6V0VniI+5GM44mmL7JfX0LM86OwoFjf2pH8vJmt1h2zvyrC+GxNE
lFVex5vrT6+4UVydGSsPtVFhB/iQd/Bzs8+zi9ey9XC8E2R7whHd1ocff3p3
obePzy8A78Wn2jwzebUCKlZ/2Pu8/kPSG9GHfb0fW+MEhIJxlaPdKC0+ZEiz
t9FG2t0xI+KHh41PIx+2HRX0BS2Sa+8GAssVGYnrviKE8zRuWQKzmjJ4BQjr
+KJRDNEm2JXKOY3FONdmdmQN+RC97Sbiq736D4c7vqOX8lUDDPRw0L/1lqG/
8L4VH3KjV1jih8oa7FDF0bZV3dqeIqNNiow2z7QcX6ezVAUZj8sqXWiTadQb
nLzXAbH3Wt4skIeY4tmkE5sTFcNgoCn8untERRwID8GGjAitSt5vdOyn6MTA
DWh7IM75yznnpshRN1tSCuVgLv6ocnLdlnF97j8Np6hjU1QyRSY2sYVSAVvo
cTymlMyYfUcZioBldn29oWVC+52d6N71/W1TtMIRptvE7EWwRythhAqKm1zb
zv/WZGHtd2oEyXi2ZuQlb2x9psNdcxmUuwwia1j504BUWBnwDmVYvTKgCioD
sq4s4gJOjsQwuorXCJSrR1N76FXS82oHYsZuNl16IqxtSAxePR8JTVXFihhW
143iM14Ejj8D9HNDPYvCKj96GxVTQgx3GsxC2GHM4cLgbxXibxiwiTlhZMIL
PUAHfWC/9+AvNewnQ73tkWQJXfEHQbrxpT7AT2G2gEv2DmvfkI/D4YHGF3Jq
ga5CqI7t5H/0sZvHj+vd2BEmKwa4fKy6k6EI1FPy4Zer6QDZ3yOjjjlAn9V+
ommOmjrS3V/S3vfgQVAhK9S69KzWJUgnvolvhthat8mJvo0XgZHYjmg3gg5/
VkeJyFx9a1SZTK1PmvEWvMPoJAa49R0rMXJpNnKVhJjQMEeli2uvJMmwvDZJ
IWo+iJuM6hd14tTCrtvglbWxHfqZIe+QyX3I+J5rp30ss7+jhh3/6XU6+E//
807NgoZPWeKlZg+N/xH92q/LrdTj2PkPd2ymhmACPD423vHTNwSp1VH2UgRD
ZhI2DumOPs1adoZqTd8Mn8alyy4vXJ1aN+TKqRvop3hW7KkRah2BUgMxDKiR
zAXUrFZ3Kkzg6XXatGHRZWns2PYhhSFbM+4JWnGtXaHuREjHaxRn2F8Qbm9C
DCnWxhL9X9p7KMxIgS+t65BPzABlE5WWwK26D9HGvkobVepp+g3FsORGHkQx
7Drsgmi1q/f21cFjfXikk5EeAxK6HP5ruRJh1MahNnPV4Vwj0mYt6GiP7Bhr
OlgbNkT1hrw/cUefLisMoecvsG/8Ob2kICEufOGGdg+9Ofyqzjv3gwzjxbP2
UMx63qBnJCpJYi6evb5hJWrNNuIm1MJ85Pv92cKKXtyv77gpEGUO87iln4mc
/J19mLT0SB7+3T5kOYseHtHD7XKRjNMd/VBv6x049ZZu645+pJ8Ap/jvRlF9
F18SX7hn1oy4cKJ76xShNG0vkrKktIerPDW9VMhMbp2lVE2CUiro8ek33zxU
p7aGX8nV0wOHzR0+f15kvd7h8x7Ong2okHJ3A2AU1bsSIHmjmNGmBVjdB0MH
NWnucvbc1d2R3vdc+vpdvU8/45M+/rrruWWGGLrHgZ2jmOaQ/6z33LxrXKV2
YX51SrHCYxM3WZOvpuw0uWDuoptmOI55fhAZ8NdE5+ugRxvosb6YGx2cWY9f
jaKGy3cNLg8qVtS9Oah6BkHRz2qPt91izoS46tWEc8MmwN4wzhvdmly9lLQl
nDnvGnHPRsuFZjAvFdNJaE139ve7bOiqaUN/N6ea4ussl5idODpHLBmVV56q
lu3PaJuTmrGiZr5cTtkyRBohqW2GKqWE1V7NXeMydpaoym7ZYlZe3jC2R5n8
GxhCB1JcHTatptjXNFuxNZqOrp6WtQf0aEfZenxYY+t2PX3yt+w+BuQIINdt
x/+p5uI7DJK+eZgzX9/PRGx8v1C1SN6ckeNoNSLAfFuoDmyh6n620HAaKm4L
9UPvJMdDHG7DW27glqN74DpvYJRsRYyMfgYby17GrqSfqbFpvoL/fa7ZPOnZ
P2fDXI1aVxkzVWjMvK/9idmrdXBm0m5sZpNSUZuUbtqkaiv1rM2bKfV9dby6
W6mv40p9tUKprzdR6jvpVwK376vUV3dN9S6lfiB/k1JfR5T6WuhSDBeoAKP7
54SAJhSJrF9PNfZ/Gyp5jAEQc6siewqPp3d6Q0YQM1+4j3q3vwdMyy5Ztbnv
Up59CZfLae57/X2rqgeJddtq6bGgHLChlxO9fwSAuov7Oezuip6yz7/279bf
25012ouJZldK6pmzhvyiynurrQs5NJvnzuWcbXhJYhohUj5Pp1LBzsbvK4rf
J8e0Trwj61vG2ZfQLQVw718R3Scj/I2hwFROU4SKOVYW05nDSITd1lPzQBUZ
ibTX33+02Qw/Od96wj+ff7gjDn/1t+eff/iFo/R9X8218fnshuXHS9fdPDcl
/baeSC31qOdOGIv2X+fztD7a36YW0DzS+mj/oTmMof7bMpmKIZDLvfsF6112
8DBrq+VwcE+wqCrNaWTZCaM5sC6hrFKXc/cHpSCE5sguPiTR0ZH5OJjbKBtx
JYI8PEOt4S5CbfhIeJ/BtRcnj1sVKBzSImv4wJqIDeVtJTLazSWGnuOme0Ns
stksnaDHHR25wXW0DTxua2VSBhVJyuB52K5OyqAiSRm0n5QhcHr1ApdgRRNg
41ZELjWwFu9RIJKEYUvSX8QQUiVFpQfZjEpxAAmjnzdKmFAjlkPqSkxG0BEQ
12hihNpnxB8PcdBYroNNk/xvmGvN3rSYt1DNB5pijDgnHbxxCXtdDJHySgzb
2s0RyPWRAO2OAV1lQReP67fi7KijNzLWGQBY7Ka7YiZW6LWLUpb7D1mSpGa+
QtZa8gNMnB9VWCp84xk312vcaQPk7YkmVq/WnBx61WAmnuTWoEJvnio6z59c
OkJSKKg6MIUpzdZsgmpugt5gE9Sdh6NXHY7ybI32pr9+UeOj9ut8lCs+dycr
hf4KyuRCyscgcBY2dsFEKPj2geYQnm0gpsDfWGtve15vw8flU+2uOwpyie54
Y0u/Wm3p19ZGbucYMcnjjnhWeQ+rb2yTR2P1rHSO1md8BWLD0nD6juFMEXnr
ZkD9K6//2rJW9hkJ5yGdKPbXyBpddwl4+/z8QlBWhAbiTmOGPwONJjOXqkEj
S1oiaT/3Ie0cAM1oJBuCsOuFRcNQE+dmFlJTALKVQ9WS9PEaT036vbLm9CCr
FH7DqHt8BS5uomowgeGpNDMx0ViaZq1r8AEg+er4Lwgh2jYVPWNufRgNbJhL
Xj9UkoCsWyjdCdEkwcUAUZMRBLlwcs00qx0K5c/tbDpdcpQRpS/IKwrhmHMR
j4TTXBO+CJL+70jxTFsas4K7WNpZI3sk2pmQOZIY2zcJcPLRzaGLatxArPZV
QpmIm7sB/giGIKQWKUcgR8jhCRR4bkU0/8RUSDtR2kzqqEVuICXBNqnty5Tq
qOOFE59RDq2kml8YvxhU4MNUYRU3RqSOHDzusHwZXuKOPmZGAlepfAbYV04K
9C2KvHQOMWE5hqxqlrKrjVqbKW4I136sOFYb9qFs+N2IA9qvwTn6uMbSYEMn
Q+bRNY2knPrnJvr8l5woFqUN+YYDxzcMmvzCcr5O+cIompUvggJdL7WsT8PT
iwujy36ZjNJpQAW6u3cGNePU/4925adqVxxnc3/tigpyKd5Lu2KSXv+raVdQ
wS3ZYDZXrNw56ArFivYVK+onKFb+81NLxrQYnZ/lhnscTK25MF98y0t5017k
MNHbtmc3Mh+9oTdhvQz7GRXvdEV6zDcn4WNXTkfqtsNIAOXvNcztDf/+Cn/1
27khADgwygoOyHbvHtWL1/xL6EGqlrlxhNa95CmWV1M/h+Lj97+w6sMrb3x/
wbqeQe8+0/0vr/eIpekMdB8cQHf2s+9Grd78unOyoVRFaqokEjtT10wD5UP1
wvRWJeXYOPtSSy4DqLfHsHwp2Hvy+vxi8PbdyeD0OSU8N4NiegObiiq5MjNG
Bw8qOrHT0c9AQAoHgGs0S66Q9RfjEZpWOWdRLTDJrxnApZg4Ci8xdie/sT0o
8SUTbeucrazSVfBBkSZSrSxIfmWPiAKr0cPKIYsyL7zwO9YWG8kacTtyYVzj
DIhmmS4neZs4epMkyiAT6AbkunmbstjscM09Pc3z9xpts8y68fdkkH/0SJ+/
Hpw+kWU78+98zYqWc/GIENs531/oSgIbO53+/n6LNc43fr1zm4F8lpRYKkQU
QXPvWmA3CErwI9ydl9DhEuQOQXUy7OhWcqZ4pQe+ST4kJHOdPMAqQ9BLSc2E
GorNAcf1De/UK+ZB11JbgIemVVct7IXcIm+y0hZFwQRfaPsmnmKUfzDfkLnV
unKhUw18DaLaZDkmDII+LOOKAZWNr/D+GUD8gTm7evZem6DfsjzxBKQd5d0i
/SVMr9/FbFlFtQ2Me4/jxb//wVyFckd9JKdkwK3bLwmkt+0r/Tvd5zJvH603
c5FWy2L+lH4HsQT/+ZAUurxBN64JDIh1A/g1THiK5bH5Vb0j9wVVGHhqXyD6
28Y+M5z+U/jnd7oxszaGm2ZffLFjP3M9m+X85iXIqYPrZP66OEXstw1o2Xbx
ffYDhZ3c8Sf85IveDzs7O8FXHxt9xLbC/4NLS3Ft3lSarbyXQVP0Q1jbHOaI
H2Rhm88q/OkzVhis7w/eEQSN+fi4pd0vzwyM4G2cYu4IH8QIT8/pRvMdu6Rw
U7PSBIMosUdMXPdv+h/ep7bNSNo8W9EGDxP6+c2X0DIOjzjM7+BtAy7Jg+ZL
/SqbW+iGuey0tPvt2Q6DE38UQF+PoQ87eaq/+CLb8QbGSdG64IB+I9MHmAp2
XSZnmv3OtPJn6bfBgaCZ9Ea/KeZNPz7RDy6zqzZsbZvQuqQLeONhf4pHzLmU
CPLoHm+IrwCUMVdASGWFonmYpG1RvVe5qo6N6t6Vu+3+589AhoeyrTtDWRd3
74qGUURGgRWyhngmtXazBP6Gv1A4srkCcQo3NmpdONq39U+jDs0O4w01RjxI
+iKvetXwH8DVLjDyjKIfcyw5xh3CzoWJDonFEtaDNWTkS4qVOCxhIpenk5YQ
IBzk5AEQLnhKVIN8Vf9tCOCGI8D+0tPj8+ciSgrBKdFeXeULciCm/UtcEBlS
T9gOxyyQ0JlRXslZPheBkzIIkL4+YAdNoSeXwYCp1igdJ0vUbBLveZMby2va
lqMLNV6Od0FOCK5+Kzhmpo2T7BLzu7g6PQ3Gd5K3uOyax3miipSdykapRL4A
oUQdZvajDbFDMgxbxszKcalv8yV9iEBpRZBhHb1hoOdyLgo4lpEN2sT9C5dI
GiLRq7Grmp/XQJQklLN/m+RYVmaQbn7HuqxuzNLCYl5m8/fkFmYLqqEBnPaQ
+G8Dh6Lb9jSRvBTCChLacYmZEtiyYW4opdZVL6RWOBmQth0D3dKVTSQBI0FX
CWq9j6dTt0W2wKI5dFvZ1bOZpDNaAicZTLjsIsGm41Q4GIPfZnMvgo8NWrVt
Tkj/IdH5ZiqUBoR0WPDd9NYeVOSI6lUe3R6IT7Lt1FWRDDQ4XuYrU0eytiCO
m/YW4eYxve3oF1K/CjHP1dzchSZkjIk7r2ytPvQTpBxwwiTCsMLfl3RtMpuG
TxT9IxQiTIHHcomSmYO3ULVWx5QMgqx7bpitH3vq56jFepUGWqyEanOb9aBp
riaqJry2F2QWj3DrbNhRLYW0TcUT5kojCQNVm3ioYlNBYADePVtkvJ32VT3e
/k5F+b+0+XywmeV88LMYzQfr7eWDu03l8V5jPa01kNfzQzQM5Out2qvM5cqv
YxWzlh8buMbzPZ5P/oRchrGU0+nSolhxEiLp0Ey+an6ot1Vau632TM/Rwf83
NkOTfpWq0dqkmbSxMfP0BXBcxjo9WG2Y/hc0g1oF8j9h/NxcI8lky9cERvR+
0/THbGwLC1jzZ+CFDnKZ10h5DLGIAY4jCrdJagrzbLmCsn6ZX4mZZZEwu19e
o2atqFVAMrWUlcdnE4s7Wc5mt0EBXHI+IIUd0gVjNbrGtIoUvwfEYGoSPFyM
pbJ2OFMC5KBAr1oCzZmiMUoWN6atJC5OwuJ4SFOk0+/QFB7Cxdd0irY9L0mE
iUWekTSj3Gidn9W3YvCLu1UMNvWoGPw6zhSD+/tRDA560UwHtjqJbbBZxqRB
56AXlLPCB3JBXRYlV4xUdM0U7q6CxAcAyBKUuQVSY7JIt7yMxeV1dske7e4b
RLQFbJQESE5uARPwPWxZxbqrw+596EWb2T5Iz8xyqaUY3ySLZA70nozaijyE
JRrRGxaW+hJ+mq+rwaX8Glw6VoMruvUJ4RcKiCW6TOMQs2NmplfthkmmYKS5
vCgfquSqSEUIIcO9zRXJnpmAZ3G2kfmpjx/Pzy4GR5Tf6TiYaCS7dyMJlto0
CVZ9AyJpJuLVvjBzeCTnRC1XBPPujTQTXjPjy+CX1jSuqudwDZg/k1ggf7ow
U5erHOQ6ELIKuHITpwGCj9DuN3w3eHHofcUXvSBL1xpG3g71ayWvoGv9UwqV
xYyXdxcqUwFjsj5vhTe1jaLzGtC7NZ7+v/93qYjlA1xRbuntF0ivrumabNHz
MSUk29ppZrVQd2e1iOcdUndntbizhNleM2vEuj/1EmZYuGqsx31JrtDvYlmr
x/v6oE/FrY704x79im8VjoZZMNYMuD4Lxv1G293TvX3udkUiDDo2SoTB6TDc
AVLmiz2MagzHNM97JjvGHpZcXzMLG43vaJlDucNxX2RkAkFRHjL/Npngwapk
jKUWkvEYOYHthzuG/s0xSYHtaX1J5lWc88+RimODu2ATcRCs3esMBVe9G5xQ
3FHIcdiqKvK6kYpja5yTdouMwCCKolYK6G8FbbdQ3fMVULP5DRorMQk1hzZt
f/VqsGNyWhx7fRursRBkUiPnY+kOj26MKnKnUwRuiigCKXNg9ydCUeFM88tL
JO7EX8NwiAWB75TiWfId5bXg1PQxTMHp6eUSf/vtq1fPn19fz2bfeT9/cX39
cDZ76D1pN56U5XfBb81vytJ85fQ75JQz/PZba5Vh13PfSZ4lIIrZFki5RXvc
dpeS8x4d7VAXr17ZLgDvwVXf7lJe/l6f3z93hp9Jcmve7vb47fW1fYvbZzrv
7/Lr2cx6O9rDkCb7Mn5ZuiZySPUm3w3rznveqcPocH4tNfzijlbThCU3gDL8
gLNXtO/4CDZsmnmfyaJdtYFkVOZTRA9hXr8V0CWb8hM+l93bJNtXeBUDjSZC
B7Y2BfgMQyYv2vjCsVJBRVe8F+RE5hUe+2CCFhdpkeUTSjq9JjJyPXck0/61
eKN/zfqtwhFh7u7A8BrmVRAbESuoplx5EnjqiuYoCb4NVChPcAIBi5QczgYV
WyYl5koL2GDc8J0aRaKbQnI5Ss6kjrjB4N4CMM+cOOmbAr+c42O192Rv/8le
Vy86s45+k5DMrJ8nt1NKwknYH/bqFSCag5buHR31jCsLFqMYYVIOUd5aJ1hT
oqqmGqwRjbKlfLZOkPbWUa+73z3oHezt73Xb3cfd7pYyD/u7+PC7Lcs9lFav
Zo1b8YTKZchCGi7vMZYj3T3CBGW7Xb27T38f0K/w9x492cOH/ef06jH93VX4
ZXcS+7Kvd3eDL/eTXyrjQ0OB5xyzEfJKH7yJLJKPOXBSRmtoEKooXTNBwmXu
gbnNyIo0gGuyfOfFKBvq4JUn8quXcM6p5zIBQbBsHmvQaKS5tFOvssmcQC8s
Izjkpl36891wIy6sxqXUwMhxYD/hNL9iqTT7ezpp8mB9W6Cs1kwQsB+KB3gs
AY5+AmzABBE4bS00xTJVzc9DdkuH7JZ3MUmUKg3/hbUWLhG5GtOzOTfEMZ4H
f0fr1YNirzIwkD45I4E8cnFUtJoJOodgv6SeknnW22PIvGmNg6pVg1LBTleE
KMhBYMsRsT9t4vMJaHtPbp+Sl2vkhdO0eipbY//yWuNhABA9RbZY7WJX8Jvf
EdJP1OUnY5uMkbFvrXrSuokTG9Iy7ASzw5Y3pokGZ5fIS2THQiOYJLSRSoi8
+AYHHe+SX97ZpdkHmXKkJ+aq7uqos5Zp0sjk08knUmuN1EJ/yijDkchVhrUK
nzIkmipQqIIvuAKII1MB7Uf2GxMQAmO+th3x4SKp6DWNlTDlLas1F6VWmWLB
SdQXrpg4UgA4hNTzzvEBljYUBV4LawhcuNctMk/yAbboKcMHV5eLQU6Ly6cY
Qo2ORwk1XmKFqCpfIOqghcihIS8K0/4zEhqxzjQmyEoZhHnBQuY6eGXDhPHt
kA9H5FqSvfCa5TgeJQNCorl17eYxp1ffRUenSDe4ACapjcYJkMUqlDW+s901
Blf3wwlilF41PtemYRdnr79tYIynSxJ/8cS4ALOsljPWNS7sTsvNzAhsXlJ3
ofnoRcPsoAmzCI1RhLyr9AoVs+5W0mCIw6ZTm0FMzgpvXAMpAw2QMIoUOkG3
O1TFCraHUW6Ac73GQ8yoOg+Ay+rY7EkifiB9IMq0YBYHR6lH9iOEgWE3xKns
JSAe1mWN+Nt6cipACHj1LRcS4UPW0G9fgPvFhK/a0P9CQlgdE/9vIo7Vz9oX
y5blku4Yh6L8MwLaS4dJDhxN7j/u7DpumgzaR3oxQ2x6oM/zD1yXDW9KR+Qk
/LnXA24W/w9fW6kIlusy2K4WieIS0aHudYnvtWxwz3DFzA/7Pz/W/RQ45H9B
AccFALmskLgdxp/Ed1nl+XFIXkKCyW8dcfNqUvyIpF6sZoT/7xaUrJzkkQ/G
riZRIqKRp2bE1dKUHYwQdpvEKuybf4Wf2kYZJRxClkbGAMIQ5yS9TKutBuFn
/gx5A3JqZi0dwZX0RTs7h/kV4imJZkngFYUO2WbQD74RjyHTH3Vn25DbrtAx
9OQr0ukt1SXD+c9WSoYN2fBsPsk+ZJMlwkqRV/k4n5ZSWkxckgOL0OWywGsQ
ejYpn3a5vMN4meyicI/k1NCr1NGCIDWZ3xHxtVWUtliF49YR/On1d+G//aP9
o++2MFWzUYqKISQgPHICmMatbep5AsBmUnMYSW3nDtzgC9AOG3QvSS62//WM
UGx/2Kfn9LeTjp0xtiYY95xxwplriS6WwKzlRVWGB4Po3zf9l5J+epyj1YKT
ugoaAN5jOnlYkm4LPy1vS/Rse6o51AFOYPegfyQFnDiIe53CtjY9Q/Lpas9I
tklmdO8Dn9Z7qFbNAL8WYYcZtA8t+fw1Dc3BTGp6Hf/0JYHQuy+e7++fwD/H
zw+ewz8n+8/29PYf8wKtVVvXGMxxleZbLVNoVW/hIPLexHps7fhYhFA6TMK6
FYhfE7tAriekcd1id4wWUOj6aF8fjYEO6dG+TmBbx/roQI/21lqQ8Wu0CN/R
wdrqNWPUaTX+xC2+sqNfhHtK9WrGmLbWzMI8OWhO51ctfODfVsZvURixBWzu
OBtZy/HckAIfiXEyF9KtM8ni9NyJa5xf1nPMS6CFyw/M0457HpPR+hjvCMC9
7SM6aHUdTWe/vnOHg4xnsT75+vWZpLb0M3XBSn9a4q6f05FZRR83c3KGn7eC
J/zJ51pf1Eez0ryqfYatjs+/9YRCb2tjRSnYfVdTXWHnDNZR8h3nIuUtD/XB
AtLkBjsFlDenPXyigsRuIOm8WKKblsZa6KXh5Xg05HDIFEK4SHm9lCiE0Oyb
WeIEgoGrJjUD5XCOrEBVqMkhBRsTPgK0Is+rTq3XMN2qDeVQ4Tr9JHR1t/o1
rvqGRN/lzG9WtZyjwwX54rEWzRT99muHkHTBj4ERQem94FBDQy2dUx/uQmft
8Gb5g1UrXx1PoFbEEphFr4k08JLi2GQ45DTrjMfsw2+W3cwi6SLwx1jED46c
do3zlACNo0adlbOoZdlVEdgO88W3yPU46M2sBTj+4J230OheRO+jW/noNlYz
IOzG30uL1K1vrreNtrQLeiBVKGNw7iWmRrV2SHUmWE9xlnG6g1ojWRETTscB
3ElikgYplHOnLCg4H8Y3LWSM35OQYyIrR3lVwY/LhewkHbKpkAFfc6kgXqB5
51t5ZQ2OHULEUauvVvuzjWhiZ9VbjcXXIw8FColwfKm33l1sbdpDXlwB7/d3
oonmc+EjqMjHxh3JPBD67TSkOhSnp0QFwzT9kE61q2xCcaB4yddgCSWhyJzA
4lKUl9eYe2BuUoah5krQllwjwR6r0IQPmvX7YaHRi+hNMbCWldBeTHX9RvCX
20mj0prlNjimKATqkjhsF5zhjWVusHe+GPZWPzQT/+a2n0PgauNoI/HWUoEm
YcbKJKD9DbpPdP6j/itGV7SzMm+Px1lVYbTQpNze39F7XNnHAeSqHsJxDvCz
BjRu9m2vK9WEZvf6bNfkw2LP6mFtSRLW555m1bJdDZ3b/hhFqDQRUwAGTLEf
ZQBPkjuNjDtRSJP85pHKTuL9AcQJRcusCBGZb1+yIkGrHtAOsl11ndsyoQco
pezvU3nNg9U3O4ZYVPh1sv7D+knWvt7dYGwPmziesp6goZR9EO3hTRvjtdnK
wdpq0lAmFD10sKqGVgdT0pT6kA78MTOG4gnRbW0pUSjhpjsvUAqG53s3onw2
KPzGP7Jq2ahjNSOhUCr11kQ6dFrRvSPsEOT8YsmIAAoYcUIUTpXLkRcF/ISr
x2P9l31A3of413B/v1ao/aneYy0jujh1yXK6WwN6kUZiUO+jSQH7eCm+sqVK
E9juBZS5XdkU4LF4Xx+Bbn8jiLN/iITS12Ms3fr4UB/09MEEfY3Ry3gf/Y73
jvRBiv7I/ZS/CemmWlH58I5xfZq5KcC3xVDpwb0SuGeQr+8y+qe5uj4tDqpn
Ay5ZGNVud92d2DKWoMbpYW4FDkyu3ZSOZH3yb8mWd0X9KL91V0NHr4bTta+K
8CR/yLjPQoNhbSJxJ2SvQuY1zkKg27H4DpfrJi4PVuVpnrBydJieJADu3S6q
ZzbDpDH+MKQGplinXBeF3ffit2YjpjGkFqb3MReBxktDI8R0b83Zx7jK+hC7
rtooDuFV5fzZrpGX57p3sO7+aLg/aoP74/LZZ1bdfPfF6cUuDjKsgfr7Z7s6
qzJDh5rrQFgbiGjqnvD1CVK5wiVboxnzLtoaDUJ42Tgg9xe5alh8FwGM7xwC
mLklPd3blzcAfT50Y6iS+WbyCwKlROH2Ht8FkoTS1V0gydoYC5AOk6v7AmRg
j1H3AcjARqNqABnNSi61WtHSsx4ze4whR/KTkRhlRZvYkURNyspMQOo0djHN
oC2lWNfkmeydOdWa9S9MwLv7QNhIR1XH97sMalQK2gEhP+rte9AnrS5/cVwo
sPezosMQAP8rY8RNMRgGK6uVGf0dRhx6H9UU5A1wq6dzVZLlwqqvqjgsR6FN
VD2E/pzaZ5U8GRKCLwMx0jZaz5uHlMPjWizCNTh3xXSS6EwacmkwnfGdk1it
G9tATLC30tvNyYrp78amYbfTCsbB9OMSfWQnHQtl/6yoaH52iQ4vFSY/R16f
lUfiGSL5T0j9xil3JbGgs4kYExBHp+WY/tZl5PW1RF++u2jVz+ZLf7NbbtFf
8vx5gq/H46QUz84Wl9LMvUeUMo/ymVEi/THm/EjGRY6J7PTDLx7q8hakgR9x
VTzjc0pFQGnHOJ9PZZS7M3KpqWUVvtcavlixhoFJDcJIz/O4Y8qWlNZgSag1
UCrgItCAL0EOiRSbrWvXF0lWYEnbiV4ubOEBXBYggJY1sthcILh1tglnlEpK
EzBRImYXOc9l0cQEex2HO3bvhTuiaEF66O9tct1rN/mn3M27rmTttm1yf/5M
uYGJOaYElBnnM+a0yHVqH9rroSmDJFmclMtxxySIu3ge+AGybhxBtPRh9Jc7
jp9rr/4TzncFOmN75fQ2wGNXZE6O3e/GDf5i7Y13TFfEV54YhCDFae1q871D
PmeE7eXMsZoG502XbLee8kTSPGD0ou8ZMrBJjxIqhw13HU0MZM+lxPA2Q1iV
YHENL9WoSS6PaMa31xt7FyZjVMmHPBMnQ7SkcozuIs0XrBq/Sk19Y0IpkroX
ExuJrWa++irAHElnU3yQvHCS26juiocNATVRbixO6268SMmSkpAnAKdIsa4m
0MwmPuros0lKaC+7pMVzpGRuQ7mYXGxTMAtnWckpnhLtUDvAcylygS1xFhRB
AZ+ihx3MWtbt79vcBvslYWwYMXDJ/JaWMcWMAMWtrI5me6sSbz1cH5roEsWx
lfk4S2x8KQlvLs8TjSykkHxm6VgsJoFNXk6rjv4zy0W0HnIHN+EOGy/IX8P4
Oh2/N3EILhmSOzackFdszsw9WQ0RQphbTKxQKkDApsyJIw4ooyxPQMMQpCVS
MEUqCL9Q+jK7gRRf8ur4BMA4QadFSZNCS3LhEyGOLTB3s0TVV+QCHJ9nS7ks
+jaRpmRfldgQSa8lJ8u9JVUCF/b13NxiTEZBGbacV4y1WwvrT6kTOZcwEwks
pIOcWhUctyTwIu9urrgzvZWmLbwyc4T8DItG4D0HHDFZTgXEwmAxV60W9m2a
j9/jjaCjwSocZ+dnmCHtQp+9evPy7ORsoAfHX12gAc4Uhgfx6QNKoOzqbGN6
cI1GmHEokaIuKdlrRrkO2QNFIrQbHm7s5OVZB/D6m3xNLcwYS1acBaNXGa2j
X8PeGXdYI+WOwkLOabNOEbrCSzZbNgVSM+NMaQQssyRMHylptrFK9G9AsgMK
crmcas6I7LnOmUS03vgEKjZvt/FXSjdLl0x5DdHrocjSimLibCZvgLVPpt6E
rv359KbIydPH/E4zrbdq/PmkPrVX/Km/WNkw+rH6dAJzeA349uICC6R9/Pj6
zek5/NyG5bZhtZ8/4+AnD+DdMyDb41t9AuzwNKW2z05OLr4+fvsmbIwJzFc0
/+b4T8dh47eIYz5p+uekuF0AWGLTt+8uBidvv30zeB00//jEJK+3HEHzsPCg
yMmPiWIHM9erB/rs+PxYY/pKOG4mWCZ9hskQZlzZqaXEKqC2wNZ/anxuX4yD
F8QWYMawJeeNZ7c2xvFYtCSd5RhoWps6B43Aw/zWeFbKRUUEzCiZipwAb4GI
lCI8JqncVsRy5GOGfIMeLSmBOnqqX6JaDNVgc0TsFA5afMhIscPedoCz82Ux
xjyt1wmcg81V7HIDcjLFH8mNmvPEA2VRkUVTzAc7vcFcaBVSPs6sZZTazWJ3
HszlTZPHZaUSf0jLSik+8GwubmOcaTA6Wy4XwpsmGfboftoFzFPrBhak3ya/
rNJwLrdwiYGzEo0WAVPmgjlokvIFDEkkCFjXlFSrKIwjhuSBqWJNRUkiKN84
pnoeIz5eAL4BVIpoxvivADvBYaJkhKU9IBwrW9DyI/46+gKd5GQk5CWtegDb
IOZLKcbsJinmdr1FsVwQX44L4K0irmpbIst2pBfyrKRVfZA8lWVWLUPf3tgE
kWIsUcS2aL0s0RMI/fonk8ycHD0Vijf3pXEDGpSGvkxdzQlaISsZsMSA6SFD
fzM+qTI1qTVLm+Iv8abN6a3rmjsJBp04n0Mhw44NrPGxc9dnKZ0ytIVZ/4Wx
uxWpA3OE0c6T+9ty/n6e35B3fzFhAYFC7kVNkC+uUZU55vpIJqu4myLGitCh
PIdDa7/JPsBV+2/LbPy+pIjA8pqoJlwvuKMU2NPRz3MKRsnJN5cRw01elBXD
m7ciZlSZE9TXwPzqkzfv8FY8Qi0GoKsC87kiPWMERNWIROBgTsvyoyRGtWoO
nibWgfUmTDoRRYsDosWEeP2tC3sMH8h1MqkYEWoQMC6Xf/+7ruSOI6ixOv7W
VvPTH5ZTlFNGsDVVJrVAiJnUl9PkBvEMkENgWcfvEeEfj/GopunkilJrAt1h
3X06+XKLSg5tCTuRLKtr2FFiXd/r4wlc7bl+kQD7P23p42n6o36bwH1LAEed
wMXUf4b7loyBbXoOHE061X/CPFIpTLylT6cZnOhLSgrwTZ7qVzBF7OVl9tfl
HP5O8pZ+hTVCLqpv8mvMBnpBKdKWxRwvIS7ouwRO+Hj6LJnPE3Njs4KctdOb
UnJklijbIKa4hGuHCxYVhzBZGBx3izwQoASiXR6B7Kj/Hx/rrVXLawEA

-->

</rfc>
