Home | History | Annotate | Line # | Download | only in doc
      1 A Layman's Guide to a Subset of ASN.1, BER, and DER
      2 
      3 An RSA Laboratories Technical Note
      4 Burton S. Kaliski Jr.
      5 Revised November 1, 1993
      6 
      7 
      8 Supersedes June 3, 1991 version, which was also published as
      9 NIST/OSI Implementors' Workshop document SEC-SIG-91-17.
     10 PKCS documents are available by electronic mail to
     11 <pkcs (a] rsa.com>.
     12 
     13 Copyright (C) 1991-1993 RSA Laboratories, a division of RSA
     14 Data Security, Inc. License to copy this document is granted
     15 provided that it is identified as "RSA Data Security, Inc.
     16 Public-Key Cryptography Standards (PKCS)" in all material
     17 mentioning or referencing this document.
     18 003-903015-110-000-000
     19 
     20 
     21 Abstract. This note gives a layman's introduction to a
     22 subset of OSI's Abstract Syntax Notation One (ASN.1), Basic
     23 Encoding Rules (BER), and Distinguished Encoding Rules
     24 (DER). The particular purpose of this note is to provide
     25 background material sufficient for understanding and
     26 implementing the PKCS family of standards.
     27 
     28 
     29 1. Introduction
     30 
     31 It is a generally accepted design principle that abstraction
     32 is a key to managing software development. With abstraction,
     33 a designer can specify a part of a system without concern
     34 for how the part is actually implemented or represented.
     35 Such a practice leaves the implementation open; it
     36 simplifies the specification; and it makes it possible to
     37 state "axioms" about the part that can be proved when the
     38 part is implemented, and assumed when the part is employed
     39 in another, higher-level part. Abstraction is the hallmark
     40 of most modern software specifications.
     41 
     42 One of the most complex systems today, and one that also
     43 involves a great deal of abstraction, is Open Systems
     44 Interconnection (OSI, described in X.200). OSI is an
     45 internationally standardized architecture that governs the
     46 interconnection of computers from the physical layer up to
     47 the user application layer. Objects at higher layers are
     48 defined abstractly and intended to be implemented with
     49 objects at lower layers. For instance, a service at one
     50 layer may require transfer of certain abstract objects
     51 between computers; a lower layer may provide transfer
     52 services for strings of ones and zeroes, using encoding
     53 rules to transform the abstract objects into such strings.
     54 OSI is called an open system because it supports many
     55 different implementations of the services at each layer.
     56 
     57 OSI's method of specifying abstract objects is called ASN.1
     58 (Abstract Syntax Notation One, defined in X.208), and one
     59 set of rules for representing such objects as strings of
     60 ones and zeros is called the BER (Basic Encoding Rules,
     61 defined in X.209). ASN.1 is a flexible notation that allows
     62 one to define a variety data types, from simple types such
     63 as integers and bit strings to structured types such as sets
     64 and sequences, as well as complex types defined in terms of
     65 others. BER describes how to represent or encode values of
     66 each ASN.1 type as a string of eight-bit octets. There is
     67 generally more than one way to BER-encode a given value.
     68 Another set of rules, called the Distinguished Encoding
     69 Rules (DER), which is a subset of BER, gives a unique
     70 encoding to each ASN.1 value.
     71 
     72 The purpose of this note is to describe a subset of ASN.1,
     73 BER and DER sufficient to understand and implement one OSI-
     74 based application, RSA Data Security, Inc.'s Public-Key
     75 Cryptography Standards. The features described include an
     76 overview of ASN.1, BER, and DER and an abridged list of
     77 ASN.1 types and their BER and DER encodings. Sections 2-4
     78 give an overview of ASN.1, BER, and DER, in that order.
     79 Section 5 lists some ASN.1 types, giving their notation,
     80 specific encoding rules, examples, and comments about their
     81 application to PKCS. Section 6 concludes with an example,
     82 X.500 distinguished names.
     83 
     84 Advanced features of ASN.1, such as macros, are not
     85 described in this note, as they are not needed to implement
     86 PKCS. For information on the other features, and for more
     87 detail generally, the reader is referred to CCITT
     88 Recommendations X.208 and X.209, which define ASN.1 and BER.
     89 
     90 Terminology and notation. In this note, an octet is an eight-
     91 bit unsigned integer. Bit 8 of the octet is the most
     92 significant and bit 1 is the least significant.
     93 
     94 The following meta-syntax is used for in describing ASN.1
     95 notation:
     96 
     97      BIT  monospace denotes literal characters in the type
     98           and value notation; in examples, it generally
     99           denotes an octet value in hexadecimal
    100 
    101      n1   bold italics denotes a variable
    102 
    103      []   bold square brackets indicate that a term is
    104           optional
    105 
    106      {}   bold braces group related terms
    107 
    108      |    bold vertical bar delimits alternatives with a
    109           group
    110 
    111      ...  bold ellipsis indicates repeated occurrences
    112 
    113      =    bold equals sign expresses terms as subterms
    114 
    115 
    116 2. Abstract Syntax Notation One
    117 
    118 Abstract Syntax Notation One, abbreviated ASN.1, is a
    119 notation for describing abstract types and values.
    120 
    121 In ASN.1, a type is a set of values. For some types, there
    122 are a finite number of values, and for other types there are
    123 an infinite number. A value of a given ASN.1 type is an
    124 element of the type's set. ASN.1 has four kinds of type:
    125 simple types, which are "atomic" and have no components;
    126 structured types, which have components; tagged types, which
    127 are derived from other types; and other types, which include
    128 the CHOICE type and the ANY type. Types and values can be
    129 given names with the ASN.1 assignment operator (::=) , and
    130 those names can be used in defining other types and values.
    131 
    132 Every ASN.1 type other than CHOICE and ANY has a tag, which
    133 consists of a class and a nonnegative tag number. ASN.1
    134 types are abstractly the same if and only if their tag
    135 numbers are the same. In other words, the name of an ASN.1
    136 type does not affect its abstract meaning, only the tag
    137 does. There are four classes of tag:
    138 
    139      Universal, for types whose meaning is the same in all
    140           applications; these types are only defined in
    141           X.208.
    142 
    143      Application, for types whose meaning is specific to an
    144           application, such as X.500 directory services;
    145           types in two different applications may have the
    146           same application-specific tag and different
    147           meanings.
    148 
    149      Private, for types whose meaning is specific to a given
    150           enterprise.
    151 
    152      Context-specific, for types whose meaning is specific
    153           to a given structured type; context-specific tags
    154           are used to distinguish between component types
    155           with the same underlying tag within the context of
    156           a given structured type, and component types in
    157           two different structured types may have the same
    158           tag and different meanings.
    159 
    160 The types with universal tags are defined in X.208, which
    161 also gives the types' universal tag numbers. Types with
    162 other tags are defined in many places, and are always
    163 obtained by implicit or explicit tagging (see Section 2.3).
    164 Table 1 lists some ASN.1 types and their universal-class
    165 tags.
    166 
    167     Type                     Tag number     Tag number
    168                              (decimal)      (hexadecimal)
    169     INTEGER                  2              02
    170     BIT STRING               3              03
    171     OCTET STRING             4              04
    172     NULL                     5              05
    173     OBJECT IDENTIFIER        6              06
    174     SEQUENCE and SEQUENCE OF 16             10
    175     SET and SET OF           17             11
    176     PrintableString          19             13
    177     T61String                20             14
    178     IA5String                22             16
    179     UTCTime                  23             17
    180 
    181      Table 1. Some types and their universal-class tags.
    182 
    183 ASN.1 types and values are expressed in a flexible,
    184 programming-language-like notation, with the following
    185 special rules:
    186 
    187      o    Layout is not significant; multiple spaces and
    188           line breaks can be considered as a single space.
    189 
    190      o    Comments are delimited by pairs of hyphens (--),
    191           or a pair of hyphens and a line break.
    192 
    193      o    Identifiers (names of values and fields) and type
    194           references (names of types) consist of upper- and
    195           lower-case letters, digits, hyphens, and spaces;
    196           identifiers begin with lower-case letters; type
    197           references begin with upper-case letters.
    198 
    199 The following four subsections give an overview of simple
    200 types, structured types, implicitly and explicitly tagged
    201 types, and other types. Section 5 describes specific types
    202 in more detail.
    203 
    204 
    205 2.1 Simple types
    206 
    207 Simple types are those not consisting of components; they
    208 are the "atomic" types. ASN.1 defines several; the types
    209 that are relevant to the PKCS standards are the following:
    210 
    211      BIT STRING, an arbitrary string of bits (ones and
    212           zeroes).
    213 
    214      IA5String, an arbitrary string of IA5 (ASCII)
    215           characters.
    216 
    217      INTEGER, an arbitrary integer.
    218 
    219      NULL, a null value.
    220 
    221      OBJECT IDENTIFIER, an object identifier, which is a
    222           sequence of integer components that identify an
    223           object such as an algorithm or attribute type.
    224 
    225      OCTET STRING, an arbitrary string of octets (eight-bit
    226           values).
    227 
    228      PrintableString, an arbitrary string of printable
    229           characters.
    230 
    231      T61String, an arbitrary string of T.61 (eight-bit)
    232           characters.
    233 
    234      UTCTime, a "coordinated universal time" or Greenwich
    235           Mean Time (GMT) value.
    236 
    237 Simple types fall into two categories: string types and non-
    238 string types. BIT STRING, IA5String, OCTET STRING,
    239 PrintableString, T61String, and UTCTime are string types.
    240 
    241 String types can be viewed, for the purposes of encoding, as
    242 consisting of components, where the components are
    243 substrings. This view allows one to encode a value whose
    244 length is not known in advance (e.g., an octet string value
    245 input from a file stream) with a constructed, indefinite-
    246 length encoding (see Section 3).
    247 
    248 The string types can be given size constraints limiting the
    249 length of values.
    250 
    251 
    252 2.2 Structured types
    253 
    254 Structured types are those consisting of components. ASN.1
    255 defines four, all of which are relevant to the PKCS
    256 standards:
    257 
    258      SEQUENCE, an ordered collection of one or more types.
    259 
    260      SEQUENCE OF, an ordered collection of zero or more
    261           occurrences of a given type.
    262 
    263      SET, an unordered collection of one or more types.
    264 
    265      SET OF, an unordered collection of zero or more
    266           occurrences of a given type.
    267 
    268 The structured types can have optional components, possibly
    269 with default values.
    270 
    271 
    272 2.3 Implicitly and explicitly tagged types
    273 
    274 Tagging is useful to distinguish types within an
    275 application; it is also commonly used to distinguish
    276 component types within a structured type. For instance,
    277 optional components of a SET or SEQUENCE type are typically
    278 given distinct context-specific tags to avoid ambiguity.
    279 
    280 There are two ways to tag a type: implicitly and explicitly.
    281 
    282 Implicitly tagged types are derived from other types by
    283 changing the tag of the underlying type. Implicit tagging is
    284 denoted by the ASN.1 keywords [class number] IMPLICIT (see
    285 Section 5.1).
    286 
    287 Explicitly tagged types are derived from other types by
    288 adding an outer tag to the underlying type. In effect,
    289 explicitly tagged types are structured types consisting of
    290 one component, the underlying type. Explicit tagging is
    291 denoted by the ASN.1 keywords [class number] EXPLICIT (see
    292 Section 5.2).
    293 
    294 The keyword [class number] alone is the same as explicit
    295 tagging, except when the "module" in which the ASN.1 type is
    296 defined has implicit tagging by default. ("Modules" are
    297 among the advanced features not described in this note.)
    298 
    299 For purposes of encoding, an implicitly tagged type is
    300 considered the same as the underlying type, except that the
    301 tag is different. An explicitly tagged type is considered
    302 like a structured type with one component, the underlying
    303 type. Implicit tags result in shorter encodings, but
    304 explicit tags may be necessary to avoid ambiguity if the tag
    305 of the underlying type is indeterminate (e.g., the
    306 underlying type is CHOICE or ANY).
    307 
    308 
    309 2.4 Other types
    310 
    311 Other types in ASN.1 include the CHOICE and ANY types. The
    312 CHOICE type denotes a union of one or more alternatives; the
    313 ANY type denotes an arbitrary value of an arbitrary type,
    314 where the arbitrary type is possibly defined in the
    315 registration of an object identifier or integer value.
    316 
    317 
    318 3. Basic Encoding Rules
    319 
    320 The Basic Encoding Rules for ASN.1, abbreviated BER, give
    321 one or more ways to represent any ASN.1 value as an octet
    322 string. (There are certainly other ways to represent ASN.1
    323 values, but BER is the standard for interchanging such
    324 values in OSI.)
    325 
    326 There are three methods to encode an ASN.1 value under BER,
    327 the choice of which depends on the type of value and whether
    328 the length of the value is known. The three methods are
    329 primitive, definite-length encoding; constructed, definite-
    330 length encoding; and constructed, indefinite-length
    331 encoding. Simple non-string types employ the primitive,
    332 definite-length method; structured types employ either of
    333 the constructed methods; and simple string types employ any
    334 of the methods, depending on whether the length of the value
    335 is known. Types derived by implicit tagging employ the
    336 method of the underlying type and types derived by explicit
    337 tagging employ the constructed methods.
    338 
    339 In each method, the BER encoding has three or four parts:
    340 
    341      Identifier octets. These identify the class and tag
    342           number of the ASN.1 value, and indicate whether
    343           the method is primitive or constructed.
    344 
    345      Length octets. For the definite-length methods, these
    346           give the number of contents octets. For the
    347           constructed, indefinite-length method, these
    348           indicate that the length is indefinite.
    349 
    350      Contents octets. For the primitive, definite-length
    351           method, these give a concrete representation of
    352           the  value. For the constructed methods, these
    353           give the concatenation of the BER encodings of the
    354           components of the value.
    355 
    356      End-of-contents octets. For the constructed, indefinite-
    357           length method, these denote the end of the
    358           contents. For the other methods, these are absent.
    359 
    360 The three methods of encoding are described in the following
    361 sections.
    362 
    363 
    364 3.1 Primitive, definite-length method
    365 
    366 This method applies to simple types and types derived from
    367 simple types by implicit tagging. It requires that the
    368 length of the value be known in advance. The parts of the
    369 BER encoding are as follows:
    370 
    371 Identifier octets. There are two forms: low tag number (for
    372 tag numbers between 0 and 30) and high tag number (for tag
    373 numbers 31 and greater).
    374 
    375      Low-tag-number form. One octet. Bits 8 and 7 specify
    376           the class (see Table 2), bit 6 has value "0,"
    377           indicating that the encoding is primitive, and
    378           bits 5-1 give the tag number.
    379 
    380                   Class            Bit  Bit
    381                                    8    7
    382                   universal        0    0
    383                   application      0    1
    384                   context-specific 1    0
    385                   private          1    1
    386 
    387         Table 2. Class encoding in identifier octets.
    388 
    389      High-tag-number form. Two or more octets. First octet
    390           is as in low-tag-number form, except that bits 5-1
    391           all have value "1." Second and following octets
    392           give the tag number, base 128, most significant
    393           digit first, with as few digits as possible, and
    394           with the bit 8 of each octet except the last set
    395           to "1."
    396 
    397 Length octets. There are two forms: short (for lengths
    398 between 0 and 127), and long definite (for lengths between 0
    399 and 21008-1).
    400 
    401      Short form. One octet. Bit 8 has value "0" and bits 7-1
    402           give the length.
    403 
    404      Long form. Two to 127 octets. Bit 8 of first octet has
    405           value "1" and bits 7-1 give the number of
    406           additional length octets. Second and following
    407           octets give the length, base 256, most significant
    408           digit first.
    409 
    410 Contents octets. These give a concrete representation of the
    411 value (or the value of the underlying type, if the type is
    412 derived by implicit tagging). Details for particular types
    413 are given in Section 5.
    414 
    415 
    416 3.2 Constructed, definite-length method
    417 
    418 This method applies to simple string types, structured
    419 types, types derived simple string types and structured
    420 types by implicit tagging, and types derived from anything
    421 by explicit tagging. It requires that the length of the
    422 value be known in advance. The parts of the BER encoding are
    423 as follows:
    424 
    425 Identifier octets. As described in Section 3.1, except that
    426 bit 6 has value "1," indicating that the encoding is
    427 constructed.
    428 
    429 Length octets. As described in Section 3.1.
    430 
    431 Contents octets. The concatenation of the BER encodings of
    432 the components of the value:
    433 
    434      o    For simple string types and types derived from
    435           them by implicit tagging, the concatenation of the
    436           BER encodings of consecutive substrings of the
    437           value (underlying value for implicit tagging).
    438 
    439      o    For structured types and types derived from them
    440           by implicit tagging, the concatenation of the BER
    441           encodings of components of the value (underlying
    442           value for implicit tagging).
    443 
    444      o    For types derived from anything by explicit
    445           tagging, the BER encoding of the underlying value.
    446 
    447 Details for particular types are given in Section 5.
    448 
    449 
    450 3.3 Constructed, indefinite-length method
    451 
    452 This method applies to simple string types, structured
    453 types, types derived simple string types and structured
    454 types by implicit tagging, and types derived from anything
    455 by explicit tagging. It does not require that the length of
    456 the value be known in advance. The parts of the BER encoding
    457 are as follows:
    458 
    459 Identifier octets. As described in Section 3.2.
    460 
    461 Length octets. One octet, 80.
    462 
    463 Contents octets. As described in Section 3.2.
    464 
    465 End-of-contents octets. Two octets, 00 00.
    466 
    467 Since the end-of-contents octets appear where an ordinary
    468 BER encoding might be expected (e.g., in the contents octets
    469 of a sequence value), the 00 and 00 appear as identifier and
    470 length octets, respectively. Thus the end-of-contents octets
    471 is really the primitive, definite-length encoding of a value
    472 with universal class, tag number 0, and length 0.
    473 
    474 
    475 4. Distinguished Encoding Rules
    476 
    477 The Distinguished Encoding Rules for ASN.1, abbreviated DER,
    478 are a subset of BER, and give exactly one way to represent
    479 any ASN.1 value as an octet string. DER is intended for
    480 applications in which a unique octet string encoding is
    481 needed, as is the case when a digital signature is computed
    482 on an ASN.1 value. DER is defined in Section 8.7 of X.509.
    483 
    484 DER adds the following restrictions to the rules given in
    485 Section 3:
    486 
    487      1.   When the length is between 0 and 127, the short
    488           form of length must be used
    489 
    490      2.   When the length is 128 or greater, the long form
    491           of length must be used, and the length must be
    492           encoded in the minimum number of octets.
    493 
    494      3.   For simple string types and implicitly tagged
    495           types derived from simple string types, the
    496           primitive, definite-length method must be
    497           employed.
    498 
    499      4.   For structured types, implicitly tagged types
    500           derived from structured types, and explicitly
    501           tagged types derived from anything, the
    502           constructed, definite-length method must be
    503           employed.
    504 
    505 Other restrictions are defined for particular types (such as
    506 BIT STRING, SEQUENCE, SET, and SET OF), and can be found in
    507 Section 5.
    508 
    509 
    510 5. Notation and encodings for some types
    511 
    512 This section gives the notation for some ASN.1 types and
    513 describes how to encode values of those types under both BER
    514 and DER.
    515 
    516 The types described are those presented in Section 2. They
    517 are listed alphabetically here.
    518 
    519 Each description includes ASN.1 notation, BER encoding, and
    520 DER encoding. The focus of the encodings is primarily on the
    521 contents octets; the tag and length octets follow Sections 3
    522 and 4. The descriptions also explain where each type is used
    523 in PKCS and related standards. ASN.1 notation is generally
    524 only for types, although for the type OBJECT IDENTIFIER,
    525 value notation is given as well.
    526 
    527 
    528 5.1 Implicitly tagged types
    529 
    530 An implicitly tagged type is a type derived from another
    531 type by changing the tag of the underlying type.
    532 
    533 Implicit tagging is used for optional SEQUENCE components
    534 with underlying type other than ANY throughout PKCS, and for
    535 the extendedCertificate alternative of PKCS #7's
    536 ExtendedCertificateOrCertificate type.
    537 
    538 ASN.1 notation:
    539 
    540 [[class] number] IMPLICIT Type
    541 
    542 class = UNIVERSAL  |  APPLICATION  |  PRIVATE
    543 
    544 where Type is a type, class is an optional class name, and
    545 number is the tag number within the class, a nonnegative
    546 integer.
    547 
    548 In ASN.1 "modules" whose default tagging method is implicit
    549 tagging, the notation [[class] number] Type is also
    550 acceptable, and the keyword IMPLICIT is implied. (See
    551 Section 2.3.) For definitions stated outside a module, the
    552 explicit inclusion of the keyword IMPLICIT is preferable to
    553 prevent ambiguity.
    554 
    555 If the class name is absent, then the tag is context-
    556 specific. Context-specific tags can only appear in a
    557 component of a structured or CHOICE type.
    558 
    559 Example: PKCS #8's PrivateKeyInfo type has an optional
    560 attributes component with an implicit, context-specific tag:
    561 
    562 PrivateKeyInfo ::= SEQUENCE {
    563   version Version,
    564   privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
    565   privateKey PrivateKey,
    566   attributes [0] IMPLICIT Attributes OPTIONAL }
    567 
    568 Here the underlying type is Attributes, the class is absent
    569 (i.e., context-specific), and the tag number within the
    570 class is 0.
    571 
    572 BER encoding. Primitive or constructed, depending on the
    573 underlying type. Contents octets are as for the BER encoding
    574 of the underlying value.
    575 
    576 Example: The BER encoding of the attributes component of a
    577 PrivateKeyInfo value is as follows:
    578 
    579      o    the identifier octets are 80 if the underlying
    580           Attributes value has a primitive BER encoding and
    581           a0 if the underlying Attributes value has a
    582           constructed BER encoding
    583 
    584      o    the length and contents octets are the same as the
    585           length and contents octets of the BER encoding of
    586           the underlying Attributes value
    587 
    588 DER encoding. Primitive or constructed, depending on the
    589 underlying type. Contents octets are as for the DER encoding
    590 of the underlying value.
    591 
    592 
    593 5.2 Explicitly tagged types
    594 
    595 Explicit tagging denotes a type derived from another type by
    596 adding an outer tag to the underlying type.
    597 
    598 Explicit tagging is used for optional SEQUENCE components
    599 with underlying type ANY throughout PKCS, and for the
    600 version component of X.509's Certificate type.
    601 
    602 ASN.1 notation:
    603 
    604 [[class] number] EXPLICIT Type
    605 
    606 class = UNIVERSAL  |  APPLICATION  |  PRIVATE
    607 
    608 where Type is a type, class is an optional class name, and
    609 number is the tag number within the class, a nonnegative
    610 integer.
    611 
    612 If the class name is absent, then the tag is context-
    613 specific. Context-specific tags can only appear in a
    614 component of a SEQUENCE, SET or CHOICE type.
    615 
    616 In ASN.1 "modules" whose default tagging method is explicit
    617 tagging, the notation [[class] number] Type is also
    618 acceptable, and the keyword EXPLICIT is implied. (See
    619 Section 2.3.) For definitions stated outside a module, the
    620 explicit inclusion of the keyword EXPLICIT is preferable to
    621 prevent ambiguity.
    622 
    623 Example 1: PKCS #7's ContentInfo type has an optional
    624 content component with an explicit, context-specific tag:
    625 
    626 ContentInfo ::= SEQUENCE {
    627   contentType ContentType,
    628   content
    629     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    630 
    631 Here the underlying type is ANY DEFINED BY contentType, the
    632 class is absent (i.e., context-specific), and the tag number
    633 within the class is 0.
    634 
    635 Example 2: X.509's Certificate type has a version component
    636 with an explicit, context-specific tag, where the EXPLICIT
    637 keyword is omitted:
    638 
    639 Certificate ::= ...
    640   version [0] Version DEFAULT v1988,
    641 ...
    642 
    643 The tag is explicit because the default tagging method for
    644 the ASN.1 "module" in X.509 that defines the Certificate
    645 type is explicit tagging.
    646 
    647 BER encoding. Constructed. Contents octets are the BER
    648 encoding of the underlying value.
    649 
    650 Example: the BER encoding of the content component of a
    651 ContentInfo value is as follows:
    652 
    653      o    identifier octets are a0
    654 
    655      o    length octets represent the length of the BER
    656           encoding of the underlying ANY DEFINED BY
    657           contentType value
    658 
    659      o    contents octets are the BER encoding of the
    660           underlying ANY DEFINED BY contentType value
    661 
    662 DER encoding. Constructed. Contents octets are the DER
    663 encoding of the underlying value.
    664 
    665 
    666 5.3 ANY
    667 
    668 The ANY type denotes an arbitrary value of an arbitrary
    669 type, where the arbitrary type is possibly defined in the
    670 registration of an object identifier or associated with an
    671 integer index.
    672 
    673 The ANY type is used for content of a particular content
    674 type in PKCS #7's ContentInfo type, for parameters of a
    675 particular algorithm in X.509's AlgorithmIdentifier type,
    676 and for attribute values in X.501's Attribute and
    677 AttributeValueAssertion types. The Attribute type is used by
    678 PKCS #6, #7, #8, #9 and #10, and the AttributeValueAssertion
    679 type is used in X.501 distinguished names.
    680 
    681 ASN.1 notation:
    682 
    683 ANY [DEFINED BY identifier]
    684 
    685 where identifier is an optional identifier.
    686 
    687 In the ANY form, the actual type is indeterminate.
    688 
    689 The ANY DEFINED BY identifier form can only appear in a
    690 component of a SEQUENCE or SET type for which identifier
    691 identifies some other component, and that other component
    692 has type INTEGER or OBJECT IDENTIFIER (or a type derived
    693 from either of those by tagging). In that form, the actual
    694 type is determined by the value of the other component,
    695 either in the registration of the object identifier value,
    696 or in a table of integer values.
    697 
    698 Example: X.509's AlgorithmIdentifier type has a component of
    699 type ANY:
    700 
    701 AlgorithmIdentifier ::= SEQUENCE {
    702   algorithm OBJECT IDENTIFIER,
    703   parameters ANY DEFINED BY algorithm OPTIONAL }
    704 
    705 Here the actual type of the parameter component depends on
    706 the value of the algorithm component. The actual type would
    707 be defined in the registration of object identifier values
    708 for the algorithm component.
    709 
    710 BER encoding. Same as the BER encoding of the actual value.
    711 
    712 Example: The BER encoding of the value of the parameter
    713 component is the BER encoding of the value of the actual
    714 type as defined in the registration of object identifier
    715 values for the algorithm component.
    716 
    717 DER encoding. Same as the DER encoding of the actual value.
    718 
    719 
    720 5.4 BIT STRING
    721 
    722 The BIT STRING type denotes an arbitrary string of bits
    723 (ones and zeroes). A BIT STRING value can have any length,
    724 including zero. This type is a string type.
    725 
    726 The BIT STRING type is used for digital signatures on
    727 extended certificates in PKCS #6's ExtendedCertificate type,
    728 for digital signatures on certificates in X.509's
    729 Certificate type, and for public keys in certificates in
    730 X.509's SubjectPublicKeyInfo type.
    731 
    732 ASN.1 notation:
    733 
    734 BIT STRING
    735 
    736 Example: X.509's SubjectPublicKeyInfo type has a component
    737 of type BIT STRING:
    738 
    739 SubjectPublicKeyInfo ::= SEQUENCE {
    740   algorithm AlgorithmIdentifier,
    741   publicKey BIT STRING }
    742 
    743 BER encoding. Primitive or constructed. In a primitive
    744 encoding, the first contents octet gives the number of bits
    745 by which the length of the bit string is less than the next
    746 multiple of eight (this is called the "number of unused
    747 bits"). The second and following contents octets give the
    748 value of the bit string, converted to an octet string. The
    749 conversion process is as follows:
    750 
    751      1.   The bit string is padded after the last bit with
    752           zero to seven bits of any value to make the length
    753           of the bit string a multiple of eight. If the
    754           length of the bit string is a multiple of eight
    755           already, no padding is done.
    756 
    757      2.   The padded bit string is divided into octets. The
    758           first eight bits of the padded bit string become
    759           the first octet, bit 8 to bit 1, and so on through
    760           the last eight bits of the padded bit string.
    761 
    762 In a constructed encoding, the contents octets give the
    763 concatenation of the BER encodings of consecutive substrings
    764 of the bit string, where each substring except the last has
    765 a length that is a multiple of eight bits.
    766 
    767 Example: The BER encoding of the BIT STRING value
    768 "011011100101110111" can be any of the following, among
    769 others, depending on the choice of padding bits, the form of
    770 length octets, and whether the encoding is primitive or
    771 constructed:
    772 
    773 03 04 06 6e 5d c0                               DER encoding
    774 
    775 03 04 06 6e 5d e0                       padded with "100000"
    776 
    777 03 81 04 06 6e 5d c0              long form of length octets
    778 
    779 23 09        constructed encoding: "0110111001011101" + "11"
    780    03 03 00 6e 5d
    781    03 02 06 c0
    782 
    783 DER encoding. Primitive. The contents octects are as for a
    784 primitive BER encoding, except that the bit string is padded
    785 with zero-valued bits.
    786 
    787 Example: The DER encoding of the BIT STRING value
    788 "011011100101110111" is
    789 
    790 03 04 06 6e 5d c0
    791 
    792 
    793 5.5 CHOICE
    794 
    795 The CHOICE type denotes a union of one or more alternatives.
    796 
    797 The CHOICE type is used to represent the union of an
    798 extended certificate and an X.509 certificate in PKCS #7's
    799 ExtendedCertificateOrCertificate type.
    800 
    801 ASN.1 notation:
    802 
    803 CHOICE {
    804   [identifier1] Type1,
    805   ...,
    806   [identifiern] Typen }
    807 
    808 where identifier1 , ..., identifiern are optional, distinct
    809 identifiers for the alternatives, and Type1, ..., Typen are
    810 the types of the alternatives. The identifiers are primarily
    811 for documentation; they do not affect values of the type or
    812 their encodings in any way.
    813 
    814 The types must have distinct tags. This requirement is
    815 typically satisfied with explicit or implicit tagging on
    816 some of the alternatives.
    817 
    818 Example: PKCS #7's ExtendedCertificateOrCertificate type is
    819 a CHOICE type:
    820 
    821 ExtendedCertificateOrCertificate ::= CHOICE {
    822   certificate Certificate, -- X.509
    823   extendedCertificate [0] IMPLICIT ExtendedCertificate
    824 }
    825 
    826 Here the identifiers for the alternatives are certificate
    827 and extendedCertificate, and the types of the alternatives
    828 are Certificate and [0] IMPLICIT ExtendedCertificate.
    829 
    830 BER encoding. Same as the BER encoding of the chosen
    831 alternative. The fact that the alternatives have distinct
    832 tags makes it possible to distinguish between their BER
    833 encodings.
    834 
    835 Example: The identifier octets for the BER encoding are 30
    836 if the chosen alternative is certificate, and a0 if the
    837 chosen alternative is extendedCertificate.
    838 
    839 DER encoding. Same as the DER encoding of the chosen
    840 alternative.
    841 
    842 
    843 5.6 IA5String
    844 
    845 The IA5String type denotes an arbtrary string of IA5
    846 characters. IA5 stands for International Alphabet 5, which
    847 is the same as ASCII. The character set includes non-
    848 printing control characters. An IA5String value can have any
    849 length, including zero. This type is a string type.
    850 
    851 The IA5String type is used in PKCS #9's electronic-mail
    852 address, unstructured-name, and unstructured-address
    853 attributes.
    854 
    855 ASN.1 notation:
    856 
    857 IA5String
    858 
    859 BER encoding. Primitive or constructed. In a primitive
    860 encoding, the contents octets give the characters in the IA5
    861 string, encoded in ASCII. In a constructed encoding, the
    862 contents octets give the concatenation of the BER encodings
    863 of consecutive substrings of the IA5 string.
    864 
    865 Example: The BER encoding of the IA5String value
    866 "test1 (a] rsa.com" can be any of the following, among others,
    867 depending on the form of length octets and whether the
    868 encoding is primitive or constructed:
    869 
    870 16 0d 74 65 73 74 31 40 72 73 61 2e 63 6f 6d DER encoding
    871 
    872 16 81 0d                       long form of length octets
    873    74 65 73 74 31 40 72 73 61 2e 63 6f 6d
    874 
    875 36 13     constructed encoding: "test1" + "@" + "rsa.com"
    876    16 05 74 65 73 74 31
    877    16 01 40
    878    16 07 72 73 61 2e 63 6f 6d
    879 
    880 DER encoding. Primitive. Contents octets are as for a
    881 primitive BER encoding.
    882 
    883 Example: The DER encoding of the IA5String value
    884 "test1 (a] rsa.com" is
    885 
    886 16 0d 74 65 73 74 31 40 72 73 61 2e 63 6f 6d
    887 
    888 
    889 5.7 INTEGER
    890 
    891 The INTEGER type denotes an arbitrary integer. INTEGER
    892 values can be positive, negative, or zero, and can have any
    893 magnitude.
    894 
    895 The INTEGER type is used for version numbers throughout
    896 PKCS, cryptographic values such as modulus, exponent, and
    897 primes in PKCS #1's RSAPublicKey and RSAPrivateKey types and
    898 PKCS #3's DHParameter type, a message-digest iteration count
    899 in PKCS #5's PBEParameter type, and version numbers and
    900 serial numbers in X.509's Certificate type.
    901 
    902 ASN.1 notation:
    903 
    904 INTEGER [{ identifier1(value1) ... identifiern(valuen) }]
    905 
    906 where identifier1, ..., identifiern are optional distinct
    907 identifiers and value1, ..., valuen are optional integer
    908 values. The identifiers, when present, are associated with
    909 values of the type.
    910 
    911 Example: X.509's Version type is an INTEGER type with
    912 identified values:
    913 
    914 Version ::= INTEGER { v1988(0) }
    915 
    916 The identifier v1988 is associated with the value 0. X.509's
    917 Certificate type uses the identifier v1988 to give a default
    918 value of 0 for the version component:
    919 
    920 Certificate ::= ...
    921   version Version DEFAULT v1988,
    922 ...
    923 
    924 BER encoding. Primitive. Contents octets give the value of
    925 the integer, base 256, in two's complement form, most
    926 significant digit first, with the minimum number of octets.
    927 The value 0 is encoded as a single 00 octet.
    928 
    929 Some example BER encodings (which also happen to be DER
    930 encodings) are given in Table 3.
    931 
    932                     Integer   BER encoding
    933                     value
    934                     0         02 01 00
    935                     127       02 01 7F
    936                     128       02 02 00 80
    937                     256       02 02 01 00
    938                     -128      02 01 80
    939                     -129      02 02 FF 7F
    940 
    941       Table 3. Example BER encodings of INTEGER values.
    942 
    943 DER encoding. Primitive. Contents octets are as for a
    944 primitive BER encoding.
    945 
    946 
    947 5.8 NULL
    948 
    949 The NULL type denotes a null value.
    950 
    951 The NULL type is used for algorithm parameters in several
    952 places in PKCS.
    953 
    954 ASN.1 notation:
    955 
    956 NULL
    957 
    958 BER encoding. Primitive. Contents octets are empty.
    959 
    960 Example: The BER encoding of a NULL value can be either of
    961 the following, as well as others, depending on the form of
    962 the length octets:
    963 
    964 05 00
    965 
    966 05 81 00
    967 
    968 DER encoding. Primitive. Contents octets are empty; the DER
    969 encoding of a NULL value is always 05 00.
    970 
    971 
    972 5.9 OBJECT IDENTIFIER
    973 
    974 The OBJECT IDENTIFIER type denotes an object identifier, a
    975 sequence of integer components that identifies an object
    976 such as an algorithm, an attribute type, or perhaps a
    977 registration authority that defines other object
    978 identifiers. An OBJECT IDENTIFIER value can have any number
    979 of components, and components can generally have any
    980 nonnegative value. This type is a non-string type.
    981 
    982 OBJECT IDENTIFIER values are given meanings by registration
    983 authorities. Each registration authority is responsible for
    984 all sequences of components beginning with a given sequence.
    985 A registration authority typically delegates responsibility
    986 for subsets of the sequences in its domain to other
    987 registration authorities, or for particular types of object.
    988 There are always at least two components.
    989 
    990 The OBJECT IDENTIFIER type is used to identify content in
    991 PKCS #7's ContentInfo type, to identify algorithms in
    992 X.509's AlgorithmIdentifier type, and to identify attributes
    993 in X.501's Attribute and AttributeValueAssertion types. The
    994 Attribute type is used by PKCS #6, #7, #8, #9, and #10, and
    995 the AttributeValueAssertion type is used in X.501
    996 distinguished names. OBJECT IDENTIFIER values are defined
    997 throughout PKCS.
    998 
    999 ASN.1 notation:
   1000 
   1001 OBJECT IDENTIFIER
   1002 
   1003 The ASN.1 notation for values of the OBJECT IDENTIFIER type
   1004 is
   1005 
   1006 { [identifier] component1 ... componentn }
   1007 
   1008 componenti = identifieri | identifieri (valuei) | valuei
   1009 
   1010 where identifier, identifier1, ..., identifiern are
   1011 identifiers, and value1, ..., valuen are optional integer
   1012 values.
   1013 
   1014 The form without identifier is the "complete" value with all
   1015 its components; the form with identifier abbreviates the
   1016 beginning components with another object identifier value.
   1017 The identifiers identifier1, ..., identifiern are intended
   1018 primarily for documentation, but they must correspond to the
   1019 integer value when both are present. These identifiers can
   1020 appear without integer values only if they are among a small
   1021 set of identifiers defined in X.208.
   1022 
   1023 Example: The following values both refer to the object
   1024 identifier assigned to RSA Data Security, Inc.:
   1025 
   1026 { iso(1) member-body(2) 840 113549 }
   1027 { 1 2 840 113549 }
   1028 
   1029 (In this example, which gives ASN.1 value notation, the
   1030 object identifier values are decimal, not hexadecimal.)
   1031 Table 4 gives some other object identifier values and their
   1032 meanings.
   1033 
   1034  Object identifier value       Meaning
   1035  { 1 2 }                       ISO member bodies
   1036  { 1 2 840 }                   US (ANSI)
   1037  { 1 2 840 113549 }            RSA Data Security, Inc.
   1038  { 1 2 840 113549 1 }          RSA Data Security, Inc. PKCS
   1039  { 2 5 }                       directory services (X.500)
   1040  { 2 5 8 }                     directory services-algorithms
   1041 
   1042  Table 4. Some object identifier values and their meanings.
   1043 
   1044 BER encoding. Primitive. Contents octets are as follows,
   1045 where value1, ..., valuen denote the integer values of the
   1046 components in the complete object identifier:
   1047 
   1048      1.   The first octet has value 40 * value1 + value2.
   1049           (This is unambiguous, since value1 is limited to
   1050           values 0, 1, and 2; value2 is limited to the range
   1051           0 to 39 when value1 is 0 or 1; and, according to
   1052           X.208, n is always at least 2.)
   1053 
   1054      2.   The following octets, if any, encode value3, ...,
   1055           valuen. Each value is encoded base 128, most
   1056           significant digit first, with as few digits as
   1057           possible, and the most significant bit of each
   1058           octet except the last in the value's encoding set
   1059           to "1."
   1060 
   1061 Example: The first octet of the BER encoding of RSA Data
   1062 Security, Inc.'s object identifier is 40 * 1 + 2 = 42 =
   1063 2a16. The encoding of 840 = 6 * 128 + 4816 is 86 48 and the
   1064 encoding of 113549 = 6 * 1282 + 7716 * 128 + d16 is 86 f7
   1065 0d. This leads to the following BER encoding:
   1066 
   1067 06 06 2a 86 48 86 f7 0d
   1068 
   1069 DER encoding. Primitive. Contents octets are as for a
   1070 primitive BER encoding.
   1071 
   1072 
   1073 5.10 OCTET STRING
   1074 
   1075 The OCTET STRING type denotes an arbitrary string of octets
   1076 (eight-bit values). An OCTET STRING value can have any
   1077 length, including zero. This type is a string type.
   1078 
   1079 The OCTET STRING type is used for salt values in PKCS #5's
   1080 PBEParameter type, for message digests, encrypted message
   1081 digests, and encrypted content in PKCS #7, and for private
   1082 keys and encrypted private keys in PKCS #8.
   1083 
   1084 ASN.1 notation:
   1085 
   1086 OCTET STRING [SIZE ({size | size1..size2})]
   1087 
   1088 where size, size1, and size2 are optional size constraints.
   1089 In the OCTET STRING SIZE (size) form, the octet string must
   1090 have size octets. In the OCTET STRING SIZE (size1..size2)
   1091 form, the octet string must have between size1 and size2
   1092 octets. In the OCTET STRING form, the octet string can have
   1093 any size.
   1094 
   1095 Example: PKCS #5's PBEParameter type has a component of type
   1096 OCTET STRING:
   1097 
   1098 PBEParameter ::= SEQUENCE {
   1099   salt OCTET STRING SIZE(8),
   1100   iterationCount INTEGER }
   1101 
   1102 Here the size of the salt component is always eight octets.
   1103 
   1104 BER encoding. Primitive or constructed. In a primitive
   1105 encoding, the contents octets give the value of the octet
   1106 string, first octet to last octet. In a constructed
   1107 encoding, the contents octets give the concatenation of the
   1108 BER encodings of substrings of the OCTET STRING value.
   1109 
   1110 Example: The BER encoding of the OCTET STRING value 01 23 45
   1111 67 89 ab cd ef can be any of the following, among others,
   1112 depending on the form of length octets and whether the
   1113 encoding is primitive or constructed:
   1114 
   1115 04 08 01 23 45 67 89 ab cd ef                   DER encoding
   1116 
   1117 04 81 08 01 23 45 67 89 ab cd ef  long form of length octets
   1118 
   1119 24 0c            constructed encoding: 01 ... 67 + 89 ... ef
   1120    04 04 01 23 45 67
   1121    04 04 89 ab cd ef
   1122 
   1123 DER encoding. Primitive. Contents octets are as for a
   1124 primitive BER encoding.
   1125 
   1126 Example: The BER encoding of the OCTET STRING value 01 23 45
   1127 67 89 ab cd ef is
   1128 
   1129 04 08 01 23 45 67 89 ab cd ef
   1130 
   1131 
   1132 5.11 PrintableString
   1133 
   1134 The PrintableString type denotes an arbitrary string of
   1135 printable characters from the following character set:
   1136 
   1137                          A, B, ..., Z
   1138                          a, b, ..., z
   1139                          0, 1, ..., 9
   1140                (space) ' ( ) + , - . / : = ?
   1141 
   1142 This type is a string type.
   1143 
   1144 The PrintableString type is used in PKCS #9's challenge-
   1145 password and unstructuerd-address attributes, and in several
   1146 X.521 distinguished names attributes.
   1147 
   1148 ASN.1 notation:
   1149 
   1150 PrintableString
   1151 
   1152 BER encoding. Primitive or constructed. In a primitive
   1153 encoding, the contents octets give the characters in the
   1154 printable string, encoded in ASCII. In a constructed
   1155 encoding, the contents octets give the concatenation of the
   1156 BER encodings of consecutive substrings of the string.
   1157 
   1158 Example: The BER encoding of the PrintableString value "Test
   1159 User 1" can be any of the following, among others, depending
   1160 on the form of length octets and whether the encoding is
   1161 primitive or constructed:
   1162 
   1163 13 0b 54 65 73 74 20 55 73 65 72 20 31          DER encoding
   1164 
   1165 13 81 0b                          long form of length octets
   1166    54 65 73 74 20 55 73 65 72 20 31
   1167 
   1168 33 0f               constructed encoding: "Test " + "User 1"
   1169    13 05 54 65 73 74 20
   1170    13 06 55 73 65 72 20 31
   1171 
   1172 DER encoding. Primitive. Contents octets are as for a
   1173 primitive BER encoding.
   1174 
   1175 Example: The DER encoding of the PrintableString value "Test
   1176 User 1" is
   1177 
   1178 13 0b 54 65 73 74 20 55 73 65 72 20 31
   1179 
   1180 
   1181 5.12 SEQUENCE
   1182 
   1183 The SEQUENCE type denotes an ordered collection of one or
   1184 more types.
   1185 
   1186 The SEQUENCE type is used throughout PKCS and related
   1187 standards.
   1188 
   1189 ASN.1 notation:
   1190 
   1191 SEQUENCE {
   1192   [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
   1193   ...,
   1194   [identifiern] Typen [{OPTIONAL | DEFAULT valuen}]}
   1195 
   1196 where identifier1 , ..., identifiern are optional, distinct
   1197 identifiers for the components, Type1, ..., Typen are the
   1198 types of the components, and value1, ..., valuen are optional
   1199 default values for the components. The identifiers are
   1200 primarily for documentation; they do not affect values of
   1201 the type or their encodings in any way.
   1202 
   1203 The OPTIONAL qualifier indicates that the value of a
   1204 component is optional and need not be present in the
   1205 sequence. The DEFAULT qualifier also indicates that the
   1206 value of a component is optional, and assigns a default
   1207 value to the component when the component is absent.
   1208 
   1209 The types of any consecutive series of components with the
   1210 OPTIONAL or DEFAULT qualifier, as well as of any component
   1211 immediately following that series, must have distinct tags.
   1212 This requirement is typically satisfied with explicit or
   1213 implicit tagging on some of the components.
   1214 
   1215 Example: X.509's Validity type is a SEQUENCE type with two
   1216 components:
   1217 
   1218 Validity ::= SEQUENCE {
   1219   start UTCTime,
   1220   end UTCTime }
   1221 
   1222 Here the identifiers for the components are start and end,
   1223 and the types of the components are both UTCTime.
   1224 
   1225 BER encoding. Constructed. Contents octets are the
   1226 concatenation of the BER encodings of the values of the
   1227 components of the sequence, in order of definition, with the
   1228 following rules for components with the OPTIONAL and DEFAULT
   1229 qualifiers:
   1230 
   1231      o    if the value of a component with the OPTIONAL or
   1232           DEFAULT qualifier is absent from the sequence,
   1233           then the encoding of that component is not
   1234           included in the contents octets
   1235 
   1236      o    if the value of a component with the DEFAULT
   1237           qualifier is the default value, then the encoding
   1238           of that component may or may not be included in
   1239           the contents octets
   1240 
   1241 DER encoding. Constructed. Contents octets are the same as
   1242 the BER encoding, except that if the value of a component
   1243 with the DEFAULT qualifier is the default value, the
   1244 encoding of that component is not included in the contents
   1245 octets.
   1246 
   1247 
   1248 5.13 SEQUENCE OF
   1249 
   1250 The SEQUENCE OF type denotes an ordered collection of zero
   1251 or more occurrences of a given type.
   1252 
   1253 The SEQUENCE OF type is used in X.501 distinguished names.
   1254 
   1255 ASN.1 notation:
   1256 
   1257 SEQUENCE OF Type
   1258 
   1259 where Type is a type.
   1260 
   1261 Example: X.501's RDNSequence type consists of zero or more
   1262 occurences of the RelativeDistinguishedName type, most
   1263 significant occurrence first:
   1264 
   1265 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
   1266 
   1267 BER encoding. Constructed. Contents octets are the
   1268 concatenation of the BER encodings of the values of the
   1269 occurrences in the collection, in order of occurence.
   1270 
   1271 DER encoding. Constructed. Contents octets are the
   1272 concatenation of the DER encodings of the values of the
   1273 occurrences in the collection, in order of occurence.
   1274 
   1275 
   1276 5.14 SET
   1277 
   1278 The SET type denotes an unordered collection of one or more
   1279 types.
   1280 
   1281 The SET type is not used in PKCS.
   1282 
   1283 ASN.1 notation:
   1284 
   1285 SET {
   1286   [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
   1287   ...,
   1288   [identifiern] Typen [{OPTIONAL | DEFAULT valuen}]}
   1289 
   1290 where identifier1, ..., identifiern are optional, distinct
   1291 identifiers for the components, Type1, ..., Typen are the
   1292 types of the components, and value1, ..., valuen are
   1293 optional default values for the components. The identifiers
   1294 are primarily for documentation; they do not affect values
   1295 of the type or their encodings in any way.
   1296 
   1297 The OPTIONAL qualifier indicates that the value of a
   1298 component is optional and need not be present in the set.
   1299 The DEFAULT qualifier also indicates that the value of a
   1300 component is optional, and assigns a default value to the
   1301 component when the component is absent.
   1302 
   1303 The types must have distinct tags. This requirement is
   1304 typically satisfied with explicit or implicit tagging on
   1305 some of the components.
   1306 
   1307 BER encoding. Constructed. Contents octets are the
   1308 concatenation of the BER encodings of the values of the
   1309 components of the set, in any order, with the following
   1310 rules for components with the OPTIONAL and DEFAULT
   1311 qualifiers:
   1312 
   1313      o    if the value of a component with the OPTIONAL or
   1314           DEFAULT qualifier is absent from the set, then the
   1315           encoding of that component is not included in the
   1316           contents octets
   1317 
   1318      o    if the value of a component with the DEFAULT
   1319           qualifier is the default value, then the encoding
   1320           of that component may or may not be included in
   1321           the contents octets
   1322 
   1323 DER encoding. Constructed. Contents octets are the same as
   1324 for the BER encoding, except that:
   1325 
   1326      1.   If the value of a component with the DEFAULT
   1327           qualifier is the default value, the encoding of
   1328           that component is not included.
   1329 
   1330      2.   There is an order to the components, namely
   1331           ascending order by tag.
   1332 
   1333 
   1334 5.15 SET OF
   1335 
   1336 The SET OF type denotes an unordered collection of zero or
   1337 more occurrences of a given type.
   1338 
   1339 The SET OF type is used for sets of attributes in PKCS #6,
   1340 #7, #8, #9 and #10, for sets of message-digest algorithm
   1341 identifiers, signer information, and recipient information
   1342 in PKCS #7, and in X.501 distinguished names.
   1343 
   1344 ASN.1 notation:
   1345 
   1346 SET OF Type
   1347 
   1348 where Type is a type.
   1349 
   1350 Example: X.501's RelativeDistinguishedName type consists of
   1351 zero or more occurrences of the AttributeValueAssertion
   1352 type, where the order is unimportant:
   1353 
   1354 RelativeDistinguishedName ::=
   1355   SET OF AttributeValueAssertion
   1356 
   1357 BER encoding. Constructed. Contents octets are the
   1358 concatenation of the BER encodings of the values of the
   1359 occurrences in the collection, in any order.
   1360 
   1361 DER encoding. Constructed. Contents octets are the same as
   1362 for the BER encoding, except that there is an order, namely
   1363 ascending lexicographic order of BER encoding. Lexicographic
   1364 comparison of two different BER encodings is done as
   1365 follows: Logically pad the shorter BER encoding after the
   1366 last octet with dummy octets that are smaller in value than
   1367 any normal octet. Scan the BER encodings from left to right
   1368 until a difference is found. The smaller-valued BER encoding
   1369 is the one with the smaller-valued octet at the point of
   1370 difference.
   1371 
   1372 
   1373 5.16 T61String
   1374 
   1375 The T61String type denotes an arbtrary string of T.61
   1376 characters. T.61 is an eight-bit extension to the ASCII
   1377 character set. Special "escape" sequences specify the
   1378 interpretation of subsequent character values as, for
   1379 example, Japanese; the initial interpretation is Latin. The
   1380 character set includes non-printing control characters. The
   1381 T61String type allows only the Latin and Japanese character
   1382 interepretations, and implementors' agreements for directory
   1383 names exclude control characters [NIST92]. A T61String value
   1384 can have any length, including zero. This type is a string
   1385 type.
   1386 
   1387 The T61String type is used in PKCS #9's unstructured-address
   1388 and challenge-password attributes, and in several X.521
   1389 attributes.
   1390 
   1391 ASN.1 notation:
   1392 
   1393 T61String
   1394 
   1395 BER encoding. Primitive or constructed. In a primitive
   1396 encoding, the contents octets give the characters in the
   1397 T.61 string, encoded in ASCII. In a constructed encoding,
   1398 the contents octets give the concatenation of the BER
   1399 encodings of consecutive substrings of the T.61 string.
   1400 
   1401 Example: The BER encoding of the T61String value "cl'es
   1402 publiques" (French for "public keys") can be any of the
   1403 following, among others, depending on the form of length
   1404 octets and whether the encoding is primitive or constructed:
   1405 
   1406 14 0f                                           DER encoding
   1407    63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73
   1408 
   1409 14 81 0f                          long form of length octets
   1410    63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73
   1411 
   1412 34 15      constructed encoding: "cl'es" + " " + "publiques"
   1413    14 05 63 6c c2 65 73
   1414    14 01 20
   1415    14 09 70 75 62 6c 69 71 75 65 73
   1416 
   1417 The eight-bit character c2 is a T.61 prefix that adds an
   1418 acute accent (') to the next character.
   1419 
   1420 DER encoding. Primitive. Contents octets are as for a
   1421 primitive BER encoding.
   1422 
   1423 Example: The DER encoding of the T61String value "cl'es
   1424 publiques" is
   1425 
   1426 14 0f 63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73
   1427 
   1428 
   1429 5.17 UTCTime
   1430 
   1431 The UTCTime type denotes a "coordinated universal time" or
   1432 Greenwich Mean Time (GMT) value. A UTCTime value includes
   1433 the local time precise to either minutes or seconds, and an
   1434 offset from GMT in hours and minutes. It takes any of the
   1435 following forms:
   1436 
   1437 YYMMDDhhmmZ
   1438 YYMMDDhhmm+hh'mm'
   1439 YYMMDDhhmm-hh'mm'
   1440 YYMMDDhhmmssZ
   1441 YYMMDDhhmmss+hh'mm'
   1442 YYMMDDhhmmss-hh'mm'
   1443 
   1444 where:
   1445 
   1446      YY is the least significant two digits of the year
   1447 
   1448      MM is the month (01 to 12)
   1449 
   1450      DD is the day (01 to 31)
   1451 
   1452      hh is the hour (00 to 23)
   1453 
   1454      mm are the minutes (00 to 59)
   1455 
   1456      ss are the seconds (00 to 59)
   1457 
   1458      Z indicates that local time is GMT, + indicates that
   1459           local time is later than GMT, and - indicates that
   1460           local time is earlier than GMT
   1461 
   1462      hh' is the absolute value of the offset from GMT in
   1463           hours
   1464 
   1465      mm' is the absolute value of the offset from GMT in
   1466           minutes
   1467 
   1468 This type is a string type.
   1469 
   1470 The UTCTime type is used for signing times in PKCS #9's
   1471 signing-time attribute and for certificate validity periods
   1472 in X.509's Validity type.
   1473 
   1474 ASN.1 notation:
   1475 
   1476 UTCTime
   1477 
   1478 BER encoding. Primitive or constructed. In a primitive
   1479 encoding, the contents octets give the characters in the
   1480 string, encoded in ASCII. In a constructed encoding, the
   1481 contents octets give the concatenation of the BER encodings
   1482 of consecutive substrings of the string. (The constructed
   1483 encoding is not particularly interesting, since UTCTime
   1484 values are so short, but the constructed encoding is
   1485 permitted.)
   1486 
   1487 Example: The time this sentence was originally written was
   1488 4:45:40 p.m. Pacific Daylight Time on May 6, 1991, which can
   1489 be represented with either of the following UTCTime values,
   1490 among others:
   1491 
   1492 "910506164540-0700"
   1493 
   1494 "910506234540Z"
   1495 
   1496 These values have the following BER encodings, among others:
   1497 
   1498 17 0d 39 31 30 35 30 36 32 33 34 35 34 30 5a
   1499 
   1500 17 11 39 31 30 35 30 36 31 36 34 35 34 30 2D 30 37 30
   1501       30
   1502 
   1503 DER encoding. Primitive. Contents octets are as for a
   1504 primitive BER encoding.
   1505 
   1506 
   1507 6. An example
   1508 
   1509 This section gives an example of ASN.1 notation and DER
   1510 encoding: the X.501 type Name.
   1511 
   1512 
   1513 6.1 Abstract notation
   1514 
   1515 This section gives the ASN.1 notation for the X.501 type
   1516 Name.
   1517 
   1518 Name ::= CHOICE {
   1519   RDNSequence }
   1520 
   1521 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
   1522 
   1523 RelativeDistinguishedName ::=
   1524   SET OF AttributeValueAssertion
   1525 
   1526 AttributeValueAssertion ::= SEQUENCE {
   1527    AttributeType,
   1528    AttributeValue }
   1529 
   1530 AttributeType ::= OBJECT IDENTIFIER
   1531 
   1532 AttributeValue ::= ANY
   1533 
   1534 The Name type identifies an object in an X.500 directory.
   1535 Name is a CHOICE type consisting of one alternative:
   1536 RDNSequence. (Future revisions of X.500 may have other
   1537 alternatives.)
   1538 
   1539 The RDNSequence type gives a path through an X.500 directory
   1540 tree starting at the root. RDNSequence is a SEQUENCE OF type
   1541 consisting of zero or more occurences of
   1542 RelativeDistinguishedName.
   1543 
   1544 The RelativeDistinguishedName type gives a unique name to an
   1545 object relative to the object superior to it in the
   1546 directory tree. RelativeDistinguishedName is a SET OF type
   1547 consisting of zero or more occurrences of
   1548 AttributeValueAssertion.
   1549 
   1550 The AttributeValueAssertion type assigns a value to some
   1551 attribute of a relative distinguished name, such as country
   1552 name or common name. AttributeValueAssertion is a SEQUENCE
   1553 type consisting of two components, an AttributeType type and
   1554 an AttributeValue type.
   1555 
   1556 The AttributeType type identifies an attribute by object
   1557 identifier. The AttributeValue type gives an arbitrary
   1558 attribute value. The actual type of the attribute value is
   1559 determined by the attribute type.
   1560 
   1561 
   1562 6.2 DER encoding
   1563 
   1564 This section gives an example of a DER encoding of a value
   1565 of type Name, working from the bottom up.
   1566 
   1567 The name is that of the Test User 1 from the PKCS examples
   1568 [Kal93]. The name is represented by the following path:
   1569 
   1570                            (root)
   1571                               |
   1572                      countryName = "US"
   1573                               |
   1574           organizationName = "Example Organization"
   1575                               |
   1576                  commonName = "Test User 1"
   1577 
   1578 Each level corresponds to one RelativeDistinguishedName
   1579 value, each of which happens for this name to consist of one
   1580 AttributeValueAssertion value. The AttributeType value is
   1581 before the equals sign, and the AttributeValue value (a
   1582 printable string for the given attribute types) is after the
   1583 equals sign.
   1584 
   1585 The countryName, organizationName, and commonUnitName are
   1586 attribute types defined in X.520 as:
   1587 
   1588 attributeType OBJECT IDENTIFIER ::=
   1589   { joint-iso-ccitt(2) ds(5) 4 }
   1590 
   1591 countryName OBJECT IDENTIFIER ::= { attributeType 6 }
   1592 organizationName OBJECT IDENTIFIER ::=
   1593   { attributeType 10 }
   1594 commonUnitName OBJECT IDENTIFIER ::=
   1595   { attributeType 3 }
   1596 
   1597 
   1598 6.2.1 AttributeType
   1599 
   1600 The three AttributeType values are OCTET STRING values, so
   1601 their DER encoding follows the primitive, definite-length
   1602 method:
   1603 
   1604 06 03 55 04 06                                   countryName
   1605 
   1606 06 03 55 04 0a                              organizationName
   1607 
   1608 06 03 55 04 03                                    commonName
   1609 
   1610 The identifier octets follow the low-tag form, since the tag
   1611 is 6 for OBJECT IDENTIFIER. Bits 8 and 7 have value "0,"
   1612 indicating universal class, and bit 6 has value "0,"
   1613 indicating that the encoding is primitive. The length octets
   1614 follow the short form. The contents octets are the
   1615 concatenation of three octet strings derived from
   1616 subidentifiers (in decimal): 40 * 2 + 5 = 85 = 5516; 4; and
   1617 6, 10, or 3.
   1618 
   1619 
   1620 6.2.2 AttributeValue
   1621 
   1622 The three AttributeValue values are PrintableString values,
   1623 so their encodings follow the primitive, definite-length
   1624 method:
   1625 
   1626 13 02 55 53                                             "US"
   1627 
   1628 13 14                                 "Example Organization"
   1629    45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
   1630    74 69 6f 6e
   1631 
   1632 13 0b                                          "Test User 1"
   1633    54 65 73 74 20 55 73 65 72 20 31
   1634 
   1635 The identifier octets follow the low-tag-number form, since
   1636 the tag for PrintableString, 19 (decimal), is between 0 and
   1637 30. Bits 8 and 7 have value "0" since PrintableString is in
   1638 the universal class. Bit 6 has value "0" since the encoding
   1639 is primitive. The length octets follow the short form, and
   1640 the contents octets are the ASCII representation of the
   1641 attribute value.
   1642 
   1643 
   1644 6.2.3 AttributeValueAssertion
   1645 
   1646 The three AttributeValueAssertion values are SEQUENCE
   1647 values, so their DER encodings follow the constructed,
   1648 definite-length method:
   1649 
   1650 30 09                                     countryName = "US"
   1651    06 03 55 04 06
   1652    13 02 55 53
   1653 
   1654 30 1b              organizationName = "Example Organizaiton"
   1655    06 03 55 04 0a
   1656    13 14 ... 6f 6e
   1657 
   1658 30 12                             commonName = "Test User 1"
   1659    06 03 55 04 0b
   1660    13 0b ... 20 31
   1661 
   1662 The identifier octets follow the low-tag-number form, since
   1663 the tag for SEQUENCE, 16 (decimal), is between 0 and 30.
   1664 Bits 8 and 7 have value "0" since SEQUENCE is in the
   1665 universal class. Bit 6 has value "1" since the encoding is
   1666 constructed. The length octets follow the short form, and
   1667 the contents octets are the concatenation of the DER
   1668 encodings of the attributeType and attributeValue
   1669 components.
   1670 
   1671 
   1672 6.2.4 RelativeDistinguishedName
   1673 
   1674 The three RelativeDistinguishedName values are SET OF
   1675 values, so their DER encodings follow the constructed,
   1676 definite-length method:
   1677 
   1678 31 0b
   1679    30 09 ... 55 53
   1680 
   1681 31 1d
   1682    30 1b ... 6f 6e
   1683 
   1684 31 14
   1685    30 12 ... 20 31
   1686 
   1687 The identifier octets follow the low-tag-number form, since
   1688 the tag for SET OF, 17 (decimal), is between 0 and 30. Bits
   1689 8 and 7 have value "0" since SET OF is in the universal
   1690 class Bit 6 has value "1" since the encoding is constructed.
   1691 The lengths octets follow the short form, and the contents
   1692 octets are the DER encodings of the respective
   1693 AttributeValueAssertion values, since there is only one
   1694 value in each set.
   1695 
   1696 
   1697 6.2.5 RDNSequence
   1698 
   1699 The RDNSequence value is a SEQUENCE OF value, so its DER
   1700 encoding follows the constructed, definite-length method:
   1701 
   1702 30 42
   1703    31 0b ... 55 53
   1704    31 1d ... 6f 6e
   1705    31 14 ... 20 31
   1706 
   1707 The identifier octets follow the low-tag-number form, since
   1708 the tag for SEQUENCE OF, 16 (decimal), is between 0 and 30.
   1709 Bits 8 and 7 have value "0" since SEQUENCE OF is in the
   1710 universal class. Bit 6 has value "1" since the encoding is
   1711 constructed. The lengths octets follow the short form, and
   1712 the contents octets are the concatenation of the DER
   1713 encodings of the three RelativeDistinguishedName values, in
   1714 order of occurrence.
   1715 
   1716 
   1717 6.2.6 Name
   1718 
   1719 The Name value is a CHOICE value, so its DER encoding is the
   1720 same as that of the RDNSequence value:
   1721 
   1722 30 42
   1723    31 0b
   1724       30 09
   1725          06 03 55 04 06          attributeType = countryName
   1726          13 02 55 53                   attributeValue = "US"
   1727    31 1d
   1728       30 1b
   1729          06 03 55 04 0a     attributeType = organizationName
   1730          13 14       attributeValue = "Example Organization"
   1731             45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
   1732             74 69 6f 6e
   1733 
   1734    31 14
   1735       30 12
   1736          06 03 55 04 03           attributeType = commonName
   1737          13 0b                attributeValue = "Test User 1"
   1738             54 65 73 74 20 55 73 65 72 20 31
   1739 
   1740 
   1741 References
   1742 
   1743 PKCS #1   RSA Laboratories. PKCS #1: RSA Encryption
   1744           Standard. Version 1.5, November 1993.
   1745 
   1746 PKCS #3   RSA Laboratories. PKCS #3: Diffie-Hellman Key-
   1747           Agreement Standard. Version 1.4, November 1993.
   1748 
   1749 PKCS #5   RSA Laboratories. PKCS #5: Password-Based
   1750           Encryption Standard. Version 1.5, November 1993.
   1751 
   1752 PKCS #6   RSA Laboratories. PKCS #6: Extended-Certificate
   1753           Syntax Standard. Version 1.5, November 1993.
   1754 
   1755 PKCS #7   RSA Laboratories. PKCS #7: Cryptographic Message
   1756           Syntax Standard. Version 1.5, November 1993.
   1757 
   1758 PKCS #8   RSA Laboratories. PKCS #8: Private-Key Information
   1759           Syntax Standard. Version 1.2, November 1993.
   1760 
   1761 PKCS #9   RSA Laboratories. PKCS #9: Selected Attribute
   1762           Types. Version 1.1, November 1993.
   1763 
   1764 PKCS #10  RSA Laboratories. PKCS #10: Certification Request
   1765           Syntax Standard. Version 1.0, November 1993.
   1766 
   1767 X.200     CCITT. Recommendation X.200: Reference Model of
   1768           Open Systems Interconnection for CCITT
   1769           Applications. 1984.
   1770 
   1771 X.208     CCITT. Recommendation X.208: Specification of
   1772           Abstract Syntax Notation One (ASN.1). 1988.
   1773 
   1774 X.209     CCITT. Recommendation X.209: Specification of
   1775           Basic Encoding Rules for Abstract Syntax Notation
   1776           One (ASN.1). 1988.
   1777 
   1778 X.500     CCITT. Recommendation X.500: The
   1779           Directory--Overview of Concepts, Models and
   1780           Services. 1988.
   1781 
   1782 X.501     CCITT. Recommendation X.501: The Directory--
   1783           Models. 1988.
   1784 
   1785 X.509     CCITT. Recommendation X.509: The Directory--
   1786           Authentication Framework. 1988.
   1787 
   1788 X.520     CCITT. Recommendation X.520: The Directory--
   1789           Selected Attribute Types. 1988.
   1790 
   1791 [Kal93]   Burton S. Kaliski Jr. Some Examples of the PKCS
   1792           Standards. RSA Laboratories, November 1993.
   1793 
   1794 [NIST92]  NIST. Special Publication 500-202: Stable
   1795           Implementation Agreements for Open Systems
   1796           Interconnection Protocols. Part 11 (Directory
   1797           Services Protocols). December 1992.
   1798 
   1799 
   1800 Revision history
   1801 
   1802 
   1803 June 3, 1991 version
   1804 
   1805 The June 3, 1991 version is part of the initial public
   1806 release of PKCS. It was published as NIST/OSI Implementors'
   1807 Workshop document SEC-SIG-91-17.
   1808 
   1809 
   1810 November 1, 1993 version
   1811 
   1812 The November 1, 1993 version incorporates several editorial
   1813 changes, including the addition of a revision history. It is
   1814 updated to be consistent with the following versions of the
   1815 PKCS documents:
   1816 
   1817      PKCS #1: RSA Encryption Standard. Version 1.5, November
   1818           1993.
   1819 
   1820      PKCS #3: Diffie-Hellman Key-Agreement Standard. Version
   1821           1.4, November 1993.
   1822 
   1823      PKCS #5: Password-Based Encryption Standard. Version
   1824           1.5, November 1993.
   1825 
   1826      PKCS #6: Extended-Certificate Syntax Standard. Version
   1827           1.5, November 1993.
   1828 
   1829      PKCS #7: Cryptographic Message Syntax Standard. Version
   1830           1.5, November 1993.
   1831 
   1832      PKCS #8: Private-Key Information Syntax Standard.
   1833           Version 1.2, November 1993.
   1834 
   1835      PKCS #9: Selected Attribute Types. Version 1.1,
   1836           November 1993.
   1837 
   1838      PKCS #10: Certification Request Syntax Standard.
   1839           Version 1.0, November 1993.
   1840 
   1841 The following substantive changes were made:
   1842 
   1843      Section 5: Description of T61String type is added.
   1844 
   1845      Section 6: Names are changed, consistent with other
   1846           PKCS examples.
   1847 
   1848 
   1849 Author's address
   1850 
   1851 Burton S. Kaliski Jr., Ph.D.
   1852 Chief Scientist
   1853 RSA Laboratories              (415) 595-7703
   1854 100 Marine Parkway            (415) 595-4126 (fax)
   1855 Redwood City, CA  94065  USA  burt (a] rsa.com
   1856