1# 
    2# This file is part of pyasn1-modules software. 
    3# 
    4# Updated by Russ Housley to resolve the TODO regarding the Certificate 
    5#   Policies Certificate Extension. 
    6# 
    7# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com> 
    8# License: http://snmplabs.com/pyasn1/license.html 
    9# 
    10# X.509 message syntax 
    11# 
    12# ASN.1 source from: 
    13# http://www.trl.ibm.com/projects/xml/xss4j/data/asn1/grammars/x509.asn 
    14# http://www.ietf.org/rfc/rfc2459.txt 
    15# 
    16# Sample captures from: 
    17# http://wiki.wireshark.org/SampleCaptures/ 
    18# 
    19from pyasn1.type import char 
    20from pyasn1.type import constraint 
    21from pyasn1.type import namedtype 
    22from pyasn1.type import namedval 
    23from pyasn1.type import opentype 
    24from pyasn1.type import tag 
    25from pyasn1.type import univ 
    26from pyasn1.type import useful 
    27 
    28MAX = float('inf') 
    29 
    30# 
    31# PKIX1Explicit88 
    32# 
    33 
    34# Upper Bounds 
    35ub_name = univ.Integer(32768) 
    36ub_common_name = univ.Integer(64) 
    37ub_locality_name = univ.Integer(128) 
    38ub_state_name = univ.Integer(128) 
    39ub_organization_name = univ.Integer(64) 
    40ub_organizational_unit_name = univ.Integer(64) 
    41ub_title = univ.Integer(64) 
    42ub_match = univ.Integer(128) 
    43ub_emailaddress_length = univ.Integer(128) 
    44ub_common_name_length = univ.Integer(64) 
    45ub_country_name_alpha_length = univ.Integer(2) 
    46ub_country_name_numeric_length = univ.Integer(3) 
    47ub_domain_defined_attributes = univ.Integer(4) 
    48ub_domain_defined_attribute_type_length = univ.Integer(8) 
    49ub_domain_defined_attribute_value_length = univ.Integer(128) 
    50ub_domain_name_length = univ.Integer(16) 
    51ub_extension_attributes = univ.Integer(256) 
    52ub_e163_4_number_length = univ.Integer(15) 
    53ub_e163_4_sub_address_length = univ.Integer(40) 
    54ub_generation_qualifier_length = univ.Integer(3) 
    55ub_given_name_length = univ.Integer(16) 
    56ub_initials_length = univ.Integer(5) 
    57ub_integer_options = univ.Integer(256) 
    58ub_numeric_user_id_length = univ.Integer(32) 
    59ub_organization_name_length = univ.Integer(64) 
    60ub_organizational_unit_name_length = univ.Integer(32) 
    61ub_organizational_units = univ.Integer(4) 
    62ub_pds_name_length = univ.Integer(16) 
    63ub_pds_parameter_length = univ.Integer(30) 
    64ub_pds_physical_address_lines = univ.Integer(6) 
    65ub_postal_code_length = univ.Integer(16) 
    66ub_surname_length = univ.Integer(40) 
    67ub_terminal_id_length = univ.Integer(24) 
    68ub_unformatted_address_length = univ.Integer(180) 
    69ub_x121_address_length = univ.Integer(16) 
    70 
    71 
    72class UniversalString(char.UniversalString): 
    73    pass 
    74 
    75 
    76class BMPString(char.BMPString): 
    77    pass 
    78 
    79 
    80class UTF8String(char.UTF8String): 
    81    pass 
    82 
    83 
    84id_pkix = univ.ObjectIdentifier('1.3.6.1.5.5.7') 
    85id_pe = univ.ObjectIdentifier('1.3.6.1.5.5.7.1') 
    86id_qt = univ.ObjectIdentifier('1.3.6.1.5.5.7.2') 
    87id_kp = univ.ObjectIdentifier('1.3.6.1.5.5.7.3') 
    88id_ad = univ.ObjectIdentifier('1.3.6.1.5.5.7.48') 
    89 
    90id_qt_cps = univ.ObjectIdentifier('1.3.6.1.5.5.7.2.1') 
    91id_qt_unotice = univ.ObjectIdentifier('1.3.6.1.5.5.7.2.2') 
    92 
    93id_ad_ocsp = univ.ObjectIdentifier('1.3.6.1.5.5.7.48.1') 
    94id_ad_caIssuers = univ.ObjectIdentifier('1.3.6.1.5.5.7.48.2') 
    95 
    96 
    97 
    98 
    99id_at = univ.ObjectIdentifier('2.5.4') 
    100id_at_name = univ.ObjectIdentifier('2.5.4.41') 
    101# preserve misspelled variable for compatibility 
    102id_at_sutname = id_at_surname = univ.ObjectIdentifier('2.5.4.4') 
    103id_at_givenName = univ.ObjectIdentifier('2.5.4.42') 
    104id_at_initials = univ.ObjectIdentifier('2.5.4.43') 
    105id_at_generationQualifier = univ.ObjectIdentifier('2.5.4.44') 
    106 
    107 
    108class X520name(univ.Choice): 
    109    componentType = namedtype.NamedTypes( 
    110        namedtype.NamedType('teletexString', 
    111                            char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))), 
    112        namedtype.NamedType('printableString', 
    113                            char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))), 
    114        namedtype.NamedType('universalString', 
    115                            char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))), 
    116        namedtype.NamedType('utf8String', 
    117                            char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))), 
    118        namedtype.NamedType('bmpString', 
    119                            char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))) 
    120    ) 
    121 
    122 
    123id_at_commonName = univ.ObjectIdentifier('2.5.4.3') 
    124 
    125 
    126class X520CommonName(univ.Choice): 
    127    componentType = namedtype.NamedTypes( 
    128        namedtype.NamedType('teletexString', char.TeletexString().subtype( 
    129            subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))), 
    130        namedtype.NamedType('printableString', char.PrintableString().subtype( 
    131            subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))), 
    132        namedtype.NamedType('universalString', char.UniversalString().subtype( 
    133            subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))), 
    134        namedtype.NamedType('utf8String', 
    135                            char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))), 
    136        namedtype.NamedType('bmpString', 
    137                            char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))) 
    138    ) 
    139 
    140 
    141id_at_localityName = univ.ObjectIdentifier('2.5.4.7') 
    142 
    143 
    144class X520LocalityName(univ.Choice): 
    145    componentType = namedtype.NamedTypes( 
    146        namedtype.NamedType('teletexString', char.TeletexString().subtype( 
    147            subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))), 
    148        namedtype.NamedType('printableString', char.PrintableString().subtype( 
    149            subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))), 
    150        namedtype.NamedType('universalString', char.UniversalString().subtype( 
    151            subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))), 
    152        namedtype.NamedType('utf8String', 
    153                            char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))), 
    154        namedtype.NamedType('bmpString', 
    155                            char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))) 
    156    ) 
    157 
    158 
    159id_at_stateOrProvinceName = univ.ObjectIdentifier('2.5.4.8') 
    160 
    161 
    162class X520StateOrProvinceName(univ.Choice): 
    163    componentType = namedtype.NamedTypes( 
    164        namedtype.NamedType('teletexString', 
    165                            char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))), 
    166        namedtype.NamedType('printableString', char.PrintableString().subtype( 
    167            subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))), 
    168        namedtype.NamedType('universalString', char.UniversalString().subtype( 
    169            subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))), 
    170        namedtype.NamedType('utf8String', 
    171                            char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))), 
    172        namedtype.NamedType('bmpString', 
    173                            char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))) 
    174    ) 
    175 
    176 
    177id_at_organizationName = univ.ObjectIdentifier('2.5.4.10') 
    178 
    179 
    180class X520OrganizationName(univ.Choice): 
    181    componentType = namedtype.NamedTypes( 
    182        namedtype.NamedType('teletexString', char.TeletexString().subtype( 
    183            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))), 
    184        namedtype.NamedType('printableString', char.PrintableString().subtype( 
    185            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))), 
    186        namedtype.NamedType('universalString', char.UniversalString().subtype( 
    187            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))), 
    188        namedtype.NamedType('utf8String', char.UTF8String().subtype( 
    189            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))), 
    190        namedtype.NamedType('bmpString', char.BMPString().subtype( 
    191            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))) 
    192    ) 
    193 
    194 
    195id_at_organizationalUnitName = univ.ObjectIdentifier('2.5.4.11') 
    196 
    197 
    198class X520OrganizationalUnitName(univ.Choice): 
    199    componentType = namedtype.NamedTypes( 
    200        namedtype.NamedType('teletexString', char.TeletexString().subtype( 
    201            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))), 
    202        namedtype.NamedType('printableString', char.PrintableString().subtype( 
    203            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))), 
    204        namedtype.NamedType('universalString', char.UniversalString().subtype( 
    205            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))), 
    206        namedtype.NamedType('utf8String', char.UTF8String().subtype( 
    207            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))), 
    208        namedtype.NamedType('bmpString', char.BMPString().subtype( 
    209            subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))) 
    210    ) 
    211 
    212 
    213id_at_title = univ.ObjectIdentifier('2.5.4.12') 
    214 
    215 
    216class X520Title(univ.Choice): 
    217    componentType = namedtype.NamedTypes( 
    218        namedtype.NamedType('teletexString', 
    219                            char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))), 
    220        namedtype.NamedType('printableString', 
    221                            char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))), 
    222        namedtype.NamedType('universalString', 
    223                            char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))), 
    224        namedtype.NamedType('utf8String', 
    225                            char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))), 
    226        namedtype.NamedType('bmpString', 
    227                            char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))) 
    228    ) 
    229 
    230 
    231id_at_dnQualifier = univ.ObjectIdentifier('2.5.4.46') 
    232 
    233 
    234class X520dnQualifier(char.PrintableString): 
    235    pass 
    236 
    237 
    238id_at_countryName = univ.ObjectIdentifier('2.5.4.6') 
    239 
    240 
    241class X520countryName(char.PrintableString): 
    242    subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(2, 2) 
    243 
    244 
    245pkcs_9 = univ.ObjectIdentifier('1.2.840.113549.1.9') 
    246 
    247emailAddress = univ.ObjectIdentifier('1.2.840.113549.1.9.1') 
    248 
    249 
    250class Pkcs9email(char.IA5String): 
    251    subtypeSpec = char.IA5String.subtypeSpec + constraint.ValueSizeConstraint(1, ub_emailaddress_length) 
    252 
    253 
    254# ---- 
    255 
    256class DSAPrivateKey(univ.Sequence): 
    257    """PKIX compliant DSA private key structure""" 
    258    componentType = namedtype.NamedTypes( 
    259        namedtype.NamedType('version', univ.Integer(namedValues=namedval.NamedValues(('v1', 0)))), 
    260        namedtype.NamedType('p', univ.Integer()), 
    261        namedtype.NamedType('q', univ.Integer()), 
    262        namedtype.NamedType('g', univ.Integer()), 
    263        namedtype.NamedType('public', univ.Integer()), 
    264        namedtype.NamedType('private', univ.Integer()) 
    265    ) 
    266 
    267 
    268# ---- 
    269 
    270 
    271class DirectoryString(univ.Choice): 
    272    componentType = namedtype.NamedTypes( 
    273        namedtype.NamedType('teletexString', 
    274                            char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), 
    275        namedtype.NamedType('printableString', 
    276                            char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), 
    277        namedtype.NamedType('universalString', 
    278                            char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), 
    279        namedtype.NamedType('utf8String', 
    280                            char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), 
    281        namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), 
    282        namedtype.NamedType('ia5String', char.IA5String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))) 
    283        # hm, this should not be here!? XXX 
    284    ) 
    285 
    286 
    287# certificate and CRL specific structures begin here 
    288 
    289class AlgorithmIdentifier(univ.Sequence): 
    290    componentType = namedtype.NamedTypes( 
    291        namedtype.NamedType('algorithm', univ.ObjectIdentifier()), 
    292        namedtype.OptionalNamedType('parameters', univ.Any()) 
    293    ) 
    294 
    295 
    296 
    297# Algorithm OIDs and parameter structures 
    298 
    299pkcs_1 = univ.ObjectIdentifier('1.2.840.113549.1.1') 
    300rsaEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.1') 
    301md2WithRSAEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.2') 
    302md5WithRSAEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.4') 
    303sha1WithRSAEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.5') 
    304id_dsa_with_sha1 = univ.ObjectIdentifier('1.2.840.10040.4.3') 
    305 
    306 
    307class Dss_Sig_Value(univ.Sequence): 
    308    componentType = namedtype.NamedTypes( 
    309        namedtype.NamedType('r', univ.Integer()), 
    310        namedtype.NamedType('s', univ.Integer()) 
    311    ) 
    312 
    313 
    314dhpublicnumber = univ.ObjectIdentifier('1.2.840.10046.2.1') 
    315 
    316 
    317class ValidationParms(univ.Sequence): 
    318    componentType = namedtype.NamedTypes( 
    319        namedtype.NamedType('seed', univ.BitString()), 
    320        namedtype.NamedType('pgenCounter', univ.Integer()) 
    321    ) 
    322 
    323 
    324class DomainParameters(univ.Sequence): 
    325    componentType = namedtype.NamedTypes( 
    326        namedtype.NamedType('p', univ.Integer()), 
    327        namedtype.NamedType('g', univ.Integer()), 
    328        namedtype.NamedType('q', univ.Integer()), 
    329        namedtype.NamedType('j', univ.Integer()), 
    330        namedtype.OptionalNamedType('validationParms', ValidationParms()) 
    331    ) 
    332 
    333 
    334id_dsa = univ.ObjectIdentifier('1.2.840.10040.4.1') 
    335 
    336 
    337class Dss_Parms(univ.Sequence): 
    338    componentType = namedtype.NamedTypes( 
    339        namedtype.NamedType('p', univ.Integer()), 
    340        namedtype.NamedType('q', univ.Integer()), 
    341        namedtype.NamedType('g', univ.Integer()) 
    342    ) 
    343 
    344 
    345# x400 address syntax starts here 
    346 
    347teletex_domain_defined_attributes = univ.Integer(6) 
    348 
    349 
    350class TeletexDomainDefinedAttribute(univ.Sequence): 
    351    componentType = namedtype.NamedTypes( 
    352        namedtype.NamedType('type', char.TeletexString().subtype( 
    353            subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_type_length))), 
    354        namedtype.NamedType('value', char.TeletexString()) 
    355    ) 
    356 
    357 
    358class TeletexDomainDefinedAttributes(univ.SequenceOf): 
    359    componentType = TeletexDomainDefinedAttribute() 
    360    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, ub_domain_defined_attributes) 
    361 
    362 
    363terminal_type = univ.Integer(23) 
    364 
    365 
    366class TerminalType(univ.Integer): 
    367    subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueSizeConstraint(0, ub_integer_options) 
    368    namedValues = namedval.NamedValues( 
    369        ('telex', 3), 
    370        ('teletelex', 4), 
    371        ('g3-facsimile', 5), 
    372        ('g4-facsimile', 6), 
    373        ('ia5-terminal', 7), 
    374        ('videotex', 8) 
    375    ) 
    376 
    377 
    378class PresentationAddress(univ.Sequence): 
    379    componentType = namedtype.NamedTypes( 
    380        namedtype.OptionalNamedType('pSelector', univ.OctetString().subtype( 
    381            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    382        namedtype.OptionalNamedType('sSelector', univ.OctetString().subtype( 
    383            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    384        namedtype.OptionalNamedType('tSelector', univ.OctetString().subtype( 
    385            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    386        namedtype.OptionalNamedType('nAddresses', univ.SetOf(componentType=univ.OctetString()).subtype( 
    387            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3), 
    388            subtypeSpec=constraint.ValueSizeConstraint(1, MAX))), 
    389    ) 
    390 
    391 
    392extended_network_address = univ.Integer(22) 
    393 
    394 
    395class E163_4_address(univ.Sequence): 
    396    componentType = namedtype.NamedTypes( 
    397        namedtype.NamedType('number', char.NumericString().subtype( 
    398            subtypeSpec=constraint.ValueSizeConstraint(1, ub_e163_4_number_length), 
    399            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    400        namedtype.OptionalNamedType('sub-address', char.NumericString().subtype( 
    401            subtypeSpec=constraint.ValueSizeConstraint(1, ub_e163_4_sub_address_length), 
    402            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))) 
    403    ) 
    404 
    405 
    406class ExtendedNetworkAddress(univ.Choice): 
    407    componentType = namedtype.NamedTypes( 
    408        namedtype.NamedType('e163-4-address', E163_4_address()), 
    409        namedtype.NamedType('psap-address', PresentationAddress().subtype( 
    410            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))) 
    411    ) 
    412 
    413 
    414class PDSParameter(univ.Set): 
    415    componentType = namedtype.NamedTypes( 
    416        namedtype.OptionalNamedType('printable-string', char.PrintableString().subtype( 
    417            subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length))), 
    418        namedtype.OptionalNamedType('teletex-string', char.TeletexString().subtype( 
    419            subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length))) 
    420    ) 
    421 
    422 
    423local_postal_attributes = univ.Integer(21) 
    424 
    425 
    426class LocalPostalAttributes(PDSParameter): 
    427    pass 
    428 
    429 
    430class UniquePostalName(PDSParameter): 
    431    pass 
    432 
    433 
    434unique_postal_name = univ.Integer(20) 
    435 
    436poste_restante_address = univ.Integer(19) 
    437 
    438 
    439class PosteRestanteAddress(PDSParameter): 
    440    pass 
    441 
    442 
    443post_office_box_address = univ.Integer(18) 
    444 
    445 
    446class PostOfficeBoxAddress(PDSParameter): 
    447    pass 
    448 
    449 
    450street_address = univ.Integer(17) 
    451 
    452 
    453class StreetAddress(PDSParameter): 
    454    pass 
    455 
    456 
    457class UnformattedPostalAddress(univ.Set): 
    458    componentType = namedtype.NamedTypes( 
    459        namedtype.OptionalNamedType('printable-address', univ.SequenceOf(componentType=char.PrintableString().subtype( 
    460            subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length)).subtype( 
    461            subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_physical_address_lines)))), 
    462        namedtype.OptionalNamedType('teletex-string', char.TeletexString().subtype( 
    463            subtypeSpec=constraint.ValueSizeConstraint(1, ub_unformatted_address_length))) 
    464    ) 
    465 
    466 
    467physical_delivery_office_name = univ.Integer(10) 
    468 
    469 
    470class PhysicalDeliveryOfficeName(PDSParameter): 
    471    pass 
    472 
    473 
    474physical_delivery_office_number = univ.Integer(11) 
    475 
    476 
    477class PhysicalDeliveryOfficeNumber(PDSParameter): 
    478    pass 
    479 
    480 
    481extension_OR_address_components = univ.Integer(12) 
    482 
    483 
    484class ExtensionORAddressComponents(PDSParameter): 
    485    pass 
    486 
    487 
    488physical_delivery_personal_name = univ.Integer(13) 
    489 
    490 
    491class PhysicalDeliveryPersonalName(PDSParameter): 
    492    pass 
    493 
    494 
    495physical_delivery_organization_name = univ.Integer(14) 
    496 
    497 
    498class PhysicalDeliveryOrganizationName(PDSParameter): 
    499    pass 
    500 
    501 
    502extension_physical_delivery_address_components = univ.Integer(15) 
    503 
    504 
    505class ExtensionPhysicalDeliveryAddressComponents(PDSParameter): 
    506    pass 
    507 
    508 
    509unformatted_postal_address = univ.Integer(16) 
    510 
    511postal_code = univ.Integer(9) 
    512 
    513 
    514class PostalCode(univ.Choice): 
    515    componentType = namedtype.NamedTypes( 
    516        namedtype.NamedType('numeric-code', char.NumericString().subtype( 
    517            subtypeSpec=constraint.ValueSizeConstraint(1, ub_postal_code_length))), 
    518        namedtype.NamedType('printable-code', char.PrintableString().subtype( 
    519            subtypeSpec=constraint.ValueSizeConstraint(1, ub_postal_code_length))) 
    520    ) 
    521 
    522 
    523class PhysicalDeliveryCountryName(univ.Choice): 
    524    componentType = namedtype.NamedTypes( 
    525        namedtype.NamedType('x121-dcc-code', char.NumericString().subtype( 
    526            subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_numeric_length, 
    527                                                       ub_country_name_numeric_length))), 
    528        namedtype.NamedType('iso-3166-alpha2-code', char.PrintableString().subtype( 
    529            subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_alpha_length, ub_country_name_alpha_length))) 
    530    ) 
    531 
    532 
    533class PDSName(char.PrintableString): 
    534    subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_pds_name_length) 
    535 
    536 
    537physical_delivery_country_name = univ.Integer(8) 
    538 
    539 
    540class TeletexOrganizationalUnitName(char.TeletexString): 
    541    subtypeSpec = char.TeletexString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organizational_unit_name_length) 
    542 
    543 
    544pds_name = univ.Integer(7) 
    545 
    546teletex_organizational_unit_names = univ.Integer(5) 
    547 
    548 
    549class TeletexOrganizationalUnitNames(univ.SequenceOf): 
    550    componentType = TeletexOrganizationalUnitName() 
    551    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, ub_organizational_units) 
    552 
    553 
    554teletex_personal_name = univ.Integer(4) 
    555 
    556 
    557class TeletexPersonalName(univ.Set): 
    558    componentType = namedtype.NamedTypes( 
    559        namedtype.NamedType('surname', char.TeletexString().subtype( 
    560            subtypeSpec=constraint.ValueSizeConstraint(1, ub_surname_length), 
    561            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    562        namedtype.OptionalNamedType('given-name', char.TeletexString().subtype( 
    563            subtypeSpec=constraint.ValueSizeConstraint(1, ub_given_name_length), 
    564            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    565        namedtype.OptionalNamedType('initials', char.TeletexString().subtype( 
    566            subtypeSpec=constraint.ValueSizeConstraint(1, ub_initials_length), 
    567            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    568        namedtype.OptionalNamedType('generation-qualifier', char.TeletexString().subtype( 
    569            subtypeSpec=constraint.ValueSizeConstraint(1, ub_generation_qualifier_length), 
    570            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))) 
    571    ) 
    572 
    573 
    574teletex_organization_name = univ.Integer(3) 
    575 
    576 
    577class TeletexOrganizationName(char.TeletexString): 
    578    subtypeSpec = char.TeletexString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organization_name_length) 
    579 
    580 
    581teletex_common_name = univ.Integer(2) 
    582 
    583 
    584class TeletexCommonName(char.TeletexString): 
    585    subtypeSpec = char.TeletexString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_common_name_length) 
    586 
    587 
    588class CommonName(char.PrintableString): 
    589    subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_common_name_length) 
    590 
    591 
    592common_name = univ.Integer(1) 
    593 
    594 
    595class ExtensionAttribute(univ.Sequence): 
    596    componentType = namedtype.NamedTypes( 
    597        namedtype.NamedType('extension-attribute-type', univ.Integer().subtype( 
    598            subtypeSpec=constraint.ValueSizeConstraint(0, ub_extension_attributes), 
    599            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    600        namedtype.NamedType('extension-attribute-value', 
    601                            univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))) 
    602    ) 
    603 
    604 
    605class ExtensionAttributes(univ.SetOf): 
    606    componentType = ExtensionAttribute() 
    607    sizeSpec = univ.SetOf.sizeSpec + constraint.ValueSizeConstraint(1, ub_extension_attributes) 
    608 
    609 
    610class BuiltInDomainDefinedAttribute(univ.Sequence): 
    611    componentType = namedtype.NamedTypes( 
    612        namedtype.NamedType('type', char.PrintableString().subtype( 
    613            subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_type_length))), 
    614        namedtype.NamedType('value', char.PrintableString().subtype( 
    615            subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_value_length))) 
    616    ) 
    617 
    618 
    619class BuiltInDomainDefinedAttributes(univ.SequenceOf): 
    620    componentType = BuiltInDomainDefinedAttribute() 
    621    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, ub_domain_defined_attributes) 
    622 
    623 
    624class OrganizationalUnitName(char.PrintableString): 
    625    subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organizational_unit_name_length) 
    626 
    627 
    628class OrganizationalUnitNames(univ.SequenceOf): 
    629    componentType = OrganizationalUnitName() 
    630    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, ub_organizational_units) 
    631 
    632 
    633class PersonalName(univ.Set): 
    634    componentType = namedtype.NamedTypes( 
    635        namedtype.NamedType('surname', char.PrintableString().subtype( 
    636            subtypeSpec=constraint.ValueSizeConstraint(1, ub_surname_length), 
    637            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    638        namedtype.OptionalNamedType('given-name', char.PrintableString().subtype( 
    639            subtypeSpec=constraint.ValueSizeConstraint(1, ub_given_name_length), 
    640            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    641        namedtype.OptionalNamedType('initials', char.PrintableString().subtype( 
    642            subtypeSpec=constraint.ValueSizeConstraint(1, ub_initials_length), 
    643            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    644        namedtype.OptionalNamedType('generation-qualifier', char.PrintableString().subtype( 
    645            subtypeSpec=constraint.ValueSizeConstraint(1, ub_generation_qualifier_length), 
    646            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))) 
    647    ) 
    648 
    649 
    650class NumericUserIdentifier(char.NumericString): 
    651    subtypeSpec = char.NumericString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_numeric_user_id_length) 
    652 
    653 
    654class OrganizationName(char.PrintableString): 
    655    subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organization_name_length) 
    656 
    657 
    658class PrivateDomainName(univ.Choice): 
    659    componentType = namedtype.NamedTypes( 
    660        namedtype.NamedType('numeric', char.NumericString().subtype( 
    661            subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_name_length))), 
    662        namedtype.NamedType('printable', char.PrintableString().subtype( 
    663            subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_name_length))) 
    664    ) 
    665 
    666 
    667class TerminalIdentifier(char.PrintableString): 
    668    subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_terminal_id_length) 
    669 
    670 
    671class X121Address(char.NumericString): 
    672    subtypeSpec = char.NumericString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_x121_address_length) 
    673 
    674 
    675class NetworkAddress(X121Address): 
    676    pass 
    677 
    678 
    679class AdministrationDomainName(univ.Choice): 
    680    tagSet = univ.Choice.tagSet.tagExplicitly( 
    681        tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 2) 
    682    ) 
    683    componentType = namedtype.NamedTypes( 
    684        namedtype.NamedType('numeric', char.NumericString().subtype( 
    685            subtypeSpec=constraint.ValueSizeConstraint(0, ub_domain_name_length))), 
    686        namedtype.NamedType('printable', char.PrintableString().subtype( 
    687            subtypeSpec=constraint.ValueSizeConstraint(0, ub_domain_name_length))) 
    688    ) 
    689 
    690 
    691class CountryName(univ.Choice): 
    692    tagSet = univ.Choice.tagSet.tagExplicitly( 
    693        tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 1) 
    694    ) 
    695    componentType = namedtype.NamedTypes( 
    696        namedtype.NamedType('x121-dcc-code', char.NumericString().subtype( 
    697            subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_numeric_length, 
    698                                                       ub_country_name_numeric_length))), 
    699        namedtype.NamedType('iso-3166-alpha2-code', char.PrintableString().subtype( 
    700            subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_alpha_length, ub_country_name_alpha_length))) 
    701    ) 
    702 
    703 
    704class BuiltInStandardAttributes(univ.Sequence): 
    705    componentType = namedtype.NamedTypes( 
    706        namedtype.OptionalNamedType('country-name', CountryName()), 
    707        namedtype.OptionalNamedType('administration-domain-name', AdministrationDomainName()), 
    708        namedtype.OptionalNamedType('network-address', NetworkAddress().subtype( 
    709            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    710        namedtype.OptionalNamedType('terminal-identifier', TerminalIdentifier().subtype( 
    711            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    712        namedtype.OptionalNamedType('private-domain-name', PrivateDomainName().subtype( 
    713            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    714        namedtype.OptionalNamedType('organization-name', OrganizationName().subtype( 
    715            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))), 
    716        namedtype.OptionalNamedType('numeric-user-identifier', NumericUserIdentifier().subtype( 
    717            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))), 
    718        namedtype.OptionalNamedType('personal-name', PersonalName().subtype( 
    719            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))), 
    720        namedtype.OptionalNamedType('organizational-unit-names', OrganizationalUnitNames().subtype( 
    721            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6))) 
    722    ) 
    723 
    724 
    725class ORAddress(univ.Sequence): 
    726    componentType = namedtype.NamedTypes( 
    727        namedtype.NamedType('built-in-standard-attributes', BuiltInStandardAttributes()), 
    728        namedtype.OptionalNamedType('built-in-domain-defined-attributes', BuiltInDomainDefinedAttributes()), 
    729        namedtype.OptionalNamedType('extension-attributes', ExtensionAttributes()) 
    730    ) 
    731 
    732 
    733# 
    734# PKIX1Implicit88 
    735# 
    736 
    737id_ce_invalidityDate = univ.ObjectIdentifier('2.5.29.24') 
    738 
    739 
    740class InvalidityDate(useful.GeneralizedTime): 
    741    pass 
    742 
    743 
    744id_holdinstruction_none = univ.ObjectIdentifier('2.2.840.10040.2.1') 
    745id_holdinstruction_callissuer = univ.ObjectIdentifier('2.2.840.10040.2.2') 
    746id_holdinstruction_reject = univ.ObjectIdentifier('2.2.840.10040.2.3') 
    747 
    748holdInstruction = univ.ObjectIdentifier('2.2.840.10040.2') 
    749 
    750id_ce_holdInstructionCode = univ.ObjectIdentifier('2.5.29.23') 
    751 
    752 
    753class HoldInstructionCode(univ.ObjectIdentifier): 
    754    pass 
    755 
    756 
    757id_ce_cRLReasons = univ.ObjectIdentifier('2.5.29.21') 
    758 
    759 
    760class CRLReason(univ.Enumerated): 
    761    namedValues = namedval.NamedValues( 
    762        ('unspecified', 0), 
    763        ('keyCompromise', 1), 
    764        ('cACompromise', 2), 
    765        ('affiliationChanged', 3), 
    766        ('superseded', 4), 
    767        ('cessationOfOperation', 5), 
    768        ('certificateHold', 6), 
    769        ('removeFromCRL', 8) 
    770    ) 
    771 
    772 
    773id_ce_cRLNumber = univ.ObjectIdentifier('2.5.29.20') 
    774 
    775 
    776class CRLNumber(univ.Integer): 
    777    subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueSizeConstraint(0, MAX) 
    778 
    779 
    780class BaseCRLNumber(CRLNumber): 
    781    pass 
    782 
    783 
    784id_kp_serverAuth = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.1') 
    785id_kp_clientAuth = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.2') 
    786id_kp_codeSigning = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.3') 
    787id_kp_emailProtection = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.4') 
    788id_kp_ipsecEndSystem = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.5') 
    789id_kp_ipsecTunnel = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.6') 
    790id_kp_ipsecUser = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.7') 
    791id_kp_timeStamping = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.8') 
    792id_pe_authorityInfoAccess = univ.ObjectIdentifier('1.3.6.1.5.5.7.1.1') 
    793id_ce_extKeyUsage = univ.ObjectIdentifier('2.5.29.37') 
    794 
    795 
    796class KeyPurposeId(univ.ObjectIdentifier): 
    797    pass 
    798 
    799 
    800class ExtKeyUsageSyntax(univ.SequenceOf): 
    801    componentType = KeyPurposeId() 
    802    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    803 
    804 
    805class ReasonFlags(univ.BitString): 
    806    namedValues = namedval.NamedValues( 
    807        ('unused', 0), 
    808        ('keyCompromise', 1), 
    809        ('cACompromise', 2), 
    810        ('affiliationChanged', 3), 
    811        ('superseded', 4), 
    812        ('cessationOfOperation', 5), 
    813        ('certificateHold', 6) 
    814    ) 
    815 
    816 
    817class SkipCerts(univ.Integer): 
    818    subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueSizeConstraint(0, MAX) 
    819 
    820 
    821id_ce_policyConstraints = univ.ObjectIdentifier('2.5.29.36') 
    822 
    823 
    824class PolicyConstraints(univ.Sequence): 
    825    componentType = namedtype.NamedTypes( 
    826        namedtype.OptionalNamedType('requireExplicitPolicy', SkipCerts().subtype( 
    827            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 
    828        namedtype.OptionalNamedType('inhibitPolicyMapping', SkipCerts().subtype( 
    829            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))) 
    830    ) 
    831 
    832 
    833id_ce_basicConstraints = univ.ObjectIdentifier('2.5.29.19') 
    834 
    835 
    836class BasicConstraints(univ.Sequence): 
    837    componentType = namedtype.NamedTypes( 
    838        namedtype.DefaultedNamedType('cA', univ.Boolean(False)), 
    839        namedtype.OptionalNamedType('pathLenConstraint', 
    840                                    univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, MAX))) 
    841    ) 
    842 
    843 
    844id_ce_subjectDirectoryAttributes = univ.ObjectIdentifier('2.5.29.9') 
    845 
    846 
    847class EDIPartyName(univ.Sequence): 
    848    componentType = namedtype.NamedTypes( 
    849        namedtype.OptionalNamedType('nameAssigner', DirectoryString().subtype( 
    850            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    851        namedtype.NamedType('partyName', 
    852                            DirectoryString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))) 
    853    ) 
    854 
    855 
    856 
    857id_ce_deltaCRLIndicator = univ.ObjectIdentifier('2.5.29.27') 
    858 
    859 
    860 
    861class BaseDistance(univ.Integer): 
    862    subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueRangeConstraint(0, MAX) 
    863 
    864 
    865id_ce_cRLDistributionPoints = univ.ObjectIdentifier('2.5.29.31') 
    866 
    867 
    868id_ce_issuingDistributionPoint = univ.ObjectIdentifier('2.5.29.28') 
    869 
    870 
    871 
    872 
    873id_ce_nameConstraints = univ.ObjectIdentifier('2.5.29.30') 
    874 
    875 
    876class DisplayText(univ.Choice): 
    877    componentType = namedtype.NamedTypes( 
    878        namedtype.NamedType('visibleString', 
    879                            char.VisibleString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))), 
    880        namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))), 
    881        namedtype.NamedType('utf8String', char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))) 
    882    ) 
    883 
    884 
    885class NoticeReference(univ.Sequence): 
    886    componentType = namedtype.NamedTypes( 
    887        namedtype.NamedType('organization', DisplayText()), 
    888        namedtype.NamedType('noticeNumbers', univ.SequenceOf(componentType=univ.Integer())) 
    889    ) 
    890 
    891 
    892class UserNotice(univ.Sequence): 
    893    componentType = namedtype.NamedTypes( 
    894        namedtype.OptionalNamedType('noticeRef', NoticeReference()), 
    895        namedtype.OptionalNamedType('explicitText', DisplayText()) 
    896    ) 
    897 
    898 
    899class CPSuri(char.IA5String): 
    900    pass 
    901 
    902 
    903class PolicyQualifierId(univ.ObjectIdentifier): 
    904    subtypeSpec = univ.ObjectIdentifier.subtypeSpec + constraint.SingleValueConstraint(id_qt_cps, id_qt_unotice) 
    905 
    906 
    907class CertPolicyId(univ.ObjectIdentifier): 
    908    pass 
    909 
    910 
    911class PolicyQualifierInfo(univ.Sequence): 
    912    componentType = namedtype.NamedTypes( 
    913        namedtype.NamedType('policyQualifierId', PolicyQualifierId()), 
    914        namedtype.NamedType('qualifier', univ.Any()) 
    915    ) 
    916 
    917 
    918id_ce_certificatePolicies = univ.ObjectIdentifier('2.5.29.32') 
    919 
    920 
    921class PolicyInformation(univ.Sequence): 
    922    componentType = namedtype.NamedTypes( 
    923        namedtype.NamedType('policyIdentifier', CertPolicyId()), 
    924        namedtype.OptionalNamedType('policyQualifiers', univ.SequenceOf(componentType=PolicyQualifierInfo()).subtype( 
    925            subtypeSpec=constraint.ValueSizeConstraint(1, MAX))) 
    926    ) 
    927 
    928 
    929class CertificatePolicies(univ.SequenceOf): 
    930    componentType = PolicyInformation() 
    931    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    932 
    933 
    934id_ce_policyMappings = univ.ObjectIdentifier('2.5.29.33') 
    935 
    936 
    937class PolicyMapping(univ.Sequence): 
    938    componentType = namedtype.NamedTypes( 
    939        namedtype.NamedType('issuerDomainPolicy', CertPolicyId()), 
    940        namedtype.NamedType('subjectDomainPolicy', CertPolicyId()) 
    941    ) 
    942 
    943 
    944class PolicyMappings(univ.SequenceOf): 
    945    componentType = PolicyMapping() 
    946    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    947 
    948 
    949id_ce_privateKeyUsagePeriod = univ.ObjectIdentifier('2.5.29.16') 
    950 
    951 
    952class PrivateKeyUsagePeriod(univ.Sequence): 
    953    componentType = namedtype.NamedTypes( 
    954        namedtype.OptionalNamedType('notBefore', useful.GeneralizedTime().subtype( 
    955            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    956        namedtype.OptionalNamedType('notAfter', useful.GeneralizedTime().subtype( 
    957            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))) 
    958    ) 
    959 
    960 
    961id_ce_keyUsage = univ.ObjectIdentifier('2.5.29.15') 
    962 
    963 
    964class KeyUsage(univ.BitString): 
    965    namedValues = namedval.NamedValues( 
    966        ('digitalSignature', 0), 
    967        ('nonRepudiation', 1), 
    968        ('keyEncipherment', 2), 
    969        ('dataEncipherment', 3), 
    970        ('keyAgreement', 4), 
    971        ('keyCertSign', 5), 
    972        ('cRLSign', 6), 
    973        ('encipherOnly', 7), 
    974        ('decipherOnly', 8) 
    975    ) 
    976 
    977 
    978id_ce = univ.ObjectIdentifier('2.5.29') 
    979 
    980id_ce_authorityKeyIdentifier = univ.ObjectIdentifier('2.5.29.35') 
    981 
    982 
    983class KeyIdentifier(univ.OctetString): 
    984    pass 
    985 
    986 
    987id_ce_subjectKeyIdentifier = univ.ObjectIdentifier('2.5.29.14') 
    988 
    989 
    990class SubjectKeyIdentifier(KeyIdentifier): 
    991    pass 
    992 
    993 
    994id_ce_certificateIssuer = univ.ObjectIdentifier('2.5.29.29') 
    995 
    996 
    997id_ce_subjectAltName = univ.ObjectIdentifier('2.5.29.17') 
    998 
    999 
    1000id_ce_issuerAltName = univ.ObjectIdentifier('2.5.29.18') 
    1001 
    1002 
    1003class AttributeValue(univ.Any): 
    1004    pass 
    1005 
    1006 
    1007class AttributeType(univ.ObjectIdentifier): 
    1008    pass 
    1009 
    1010certificateAttributesMap = {} 
    1011 
    1012 
    1013class AttributeTypeAndValue(univ.Sequence): 
    1014    componentType = namedtype.NamedTypes( 
    1015        namedtype.NamedType('type', AttributeType()), 
    1016        namedtype.NamedType('value', AttributeValue(), 
    1017                            openType=opentype.OpenType('type', certificateAttributesMap)) 
    1018    ) 
    1019 
    1020 
    1021class Attribute(univ.Sequence): 
    1022    componentType = namedtype.NamedTypes( 
    1023        namedtype.NamedType('type', AttributeType()), 
    1024        namedtype.NamedType('vals', univ.SetOf(componentType=AttributeValue())) 
    1025    ) 
    1026 
    1027 
    1028class SubjectDirectoryAttributes(univ.SequenceOf): 
    1029    componentType = Attribute() 
    1030    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    1031 
    1032 
    1033class RelativeDistinguishedName(univ.SetOf): 
    1034    componentType = AttributeTypeAndValue() 
    1035 
    1036 
    1037class RDNSequence(univ.SequenceOf): 
    1038    componentType = RelativeDistinguishedName() 
    1039 
    1040 
    1041class Name(univ.Choice): 
    1042    componentType = namedtype.NamedTypes( 
    1043        namedtype.NamedType('', RDNSequence()) 
    1044    ) 
    1045 
    1046class CertificateSerialNumber(univ.Integer): 
    1047    pass 
    1048 
    1049 
    1050class AnotherName(univ.Sequence): 
    1051    componentType = namedtype.NamedTypes( 
    1052        namedtype.NamedType('type-id', univ.ObjectIdentifier()), 
    1053        namedtype.NamedType('value', 
    1054                            univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))) 
    1055    ) 
    1056 
    1057 
    1058class GeneralName(univ.Choice): 
    1059    componentType = namedtype.NamedTypes( 
    1060        namedtype.NamedType('otherName', 
    1061                            AnotherName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    1062        namedtype.NamedType('rfc822Name', 
    1063                            char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    1064        namedtype.NamedType('dNSName', 
    1065                            char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    1066        namedtype.NamedType('x400Address', 
    1067                            ORAddress().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))), 
    1068        namedtype.NamedType('directoryName', 
    1069                            Name().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))), 
    1070        namedtype.NamedType('ediPartyName', 
    1071                            EDIPartyName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))), 
    1072        namedtype.NamedType('uniformResourceIdentifier', 
    1073                            char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6))), 
    1074        namedtype.NamedType('iPAddress', univ.OctetString().subtype( 
    1075            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))), 
    1076        namedtype.NamedType('registeredID', univ.ObjectIdentifier().subtype( 
    1077            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))) 
    1078    ) 
    1079 
    1080 
    1081class GeneralNames(univ.SequenceOf): 
    1082    componentType = GeneralName() 
    1083    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    1084 
    1085 
    1086class AccessDescription(univ.Sequence): 
    1087    componentType = namedtype.NamedTypes( 
    1088        namedtype.NamedType('accessMethod', univ.ObjectIdentifier()), 
    1089        namedtype.NamedType('accessLocation', GeneralName()) 
    1090    ) 
    1091 
    1092 
    1093class AuthorityInfoAccessSyntax(univ.SequenceOf): 
    1094    componentType = AccessDescription() 
    1095    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    1096 
    1097 
    1098class AuthorityKeyIdentifier(univ.Sequence): 
    1099    componentType = namedtype.NamedTypes( 
    1100        namedtype.OptionalNamedType('keyIdentifier', KeyIdentifier().subtype( 
    1101            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    1102        namedtype.OptionalNamedType('authorityCertIssuer', GeneralNames().subtype( 
    1103            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    1104        namedtype.OptionalNamedType('authorityCertSerialNumber', CertificateSerialNumber().subtype( 
    1105            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))) 
    1106    ) 
    1107 
    1108 
    1109class DistributionPointName(univ.Choice): 
    1110    componentType = namedtype.NamedTypes( 
    1111        namedtype.NamedType('fullName', GeneralNames().subtype( 
    1112            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 
    1113        namedtype.NamedType('nameRelativeToCRLIssuer', RelativeDistinguishedName().subtype( 
    1114            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))) 
    1115    ) 
    1116 
    1117 
    1118class DistributionPoint(univ.Sequence): 
    1119    componentType = namedtype.NamedTypes( 
    1120        namedtype.OptionalNamedType('distributionPoint', DistributionPointName().subtype( 
    1121            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 
    1122        namedtype.OptionalNamedType('reasons', ReasonFlags().subtype( 
    1123            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    1124        namedtype.OptionalNamedType('cRLIssuer', GeneralNames().subtype( 
    1125            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))) 
    1126    ) 
    1127 
    1128 
    1129class CRLDistPointsSyntax(univ.SequenceOf): 
    1130    componentType = DistributionPoint() 
    1131    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    1132 
    1133 
    1134class IssuingDistributionPoint(univ.Sequence): 
    1135    componentType = namedtype.NamedTypes( 
    1136        namedtype.OptionalNamedType('distributionPoint', DistributionPointName().subtype( 
    1137            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 
    1138        namedtype.NamedType('onlyContainsUserCerts', univ.Boolean(False).subtype( 
    1139            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    1140        namedtype.NamedType('onlyContainsCACerts', univ.Boolean(False).subtype( 
    1141            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    1142        namedtype.OptionalNamedType('onlySomeReasons', ReasonFlags().subtype( 
    1143            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))), 
    1144        namedtype.NamedType('indirectCRL', univ.Boolean(False).subtype( 
    1145            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))) 
    1146    ) 
    1147 
    1148 
    1149class GeneralSubtree(univ.Sequence): 
    1150    componentType = namedtype.NamedTypes( 
    1151        namedtype.NamedType('base', GeneralName()), 
    1152        namedtype.DefaultedNamedType('minimum', BaseDistance(0).subtype( 
    1153            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 
    1154        namedtype.OptionalNamedType('maximum', BaseDistance().subtype( 
    1155            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))) 
    1156    ) 
    1157 
    1158 
    1159class GeneralSubtrees(univ.SequenceOf): 
    1160    componentType = GeneralSubtree() 
    1161    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    1162 
    1163 
    1164class NameConstraints(univ.Sequence): 
    1165    componentType = namedtype.NamedTypes( 
    1166        namedtype.OptionalNamedType('permittedSubtrees', GeneralSubtrees().subtype( 
    1167            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 
    1168        namedtype.OptionalNamedType('excludedSubtrees', GeneralSubtrees().subtype( 
    1169            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))) 
    1170    ) 
    1171 
    1172 
    1173class CertificateIssuer(GeneralNames): 
    1174    pass 
    1175 
    1176 
    1177class SubjectAltName(GeneralNames): 
    1178    pass 
    1179 
    1180 
    1181class IssuerAltName(GeneralNames): 
    1182    pass 
    1183 
    1184 
    1185certificateExtensionsMap = {} 
    1186 
    1187 
    1188class Extension(univ.Sequence): 
    1189    componentType = namedtype.NamedTypes( 
    1190        namedtype.NamedType('extnID', univ.ObjectIdentifier()), 
    1191        namedtype.DefaultedNamedType('critical', univ.Boolean('False')), 
    1192        namedtype.NamedType('extnValue', univ.OctetString(), 
    1193                            openType=opentype.OpenType('extnID', certificateExtensionsMap)) 
    1194    ) 
    1195 
    1196 
    1197class Extensions(univ.SequenceOf): 
    1198    componentType = Extension() 
    1199    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX) 
    1200 
    1201 
    1202class SubjectPublicKeyInfo(univ.Sequence): 
    1203    componentType = namedtype.NamedTypes( 
    1204        namedtype.NamedType('algorithm', AlgorithmIdentifier()), 
    1205        namedtype.NamedType('subjectPublicKey', univ.BitString()) 
    1206    ) 
    1207 
    1208 
    1209class UniqueIdentifier(univ.BitString): 
    1210    pass 
    1211 
    1212 
    1213class Time(univ.Choice): 
    1214    componentType = namedtype.NamedTypes( 
    1215        namedtype.NamedType('utcTime', useful.UTCTime()), 
    1216        namedtype.NamedType('generalTime', useful.GeneralizedTime()) 
    1217    ) 
    1218 
    1219 
    1220class Validity(univ.Sequence): 
    1221    componentType = namedtype.NamedTypes( 
    1222        namedtype.NamedType('notBefore', Time()), 
    1223        namedtype.NamedType('notAfter', Time()) 
    1224    ) 
    1225 
    1226 
    1227class Version(univ.Integer): 
    1228    namedValues = namedval.NamedValues( 
    1229        ('v1', 0), ('v2', 1), ('v3', 2) 
    1230    ) 
    1231 
    1232 
    1233class TBSCertificate(univ.Sequence): 
    1234    componentType = namedtype.NamedTypes( 
    1235        namedtype.DefaultedNamedType('version', Version('v1').subtype( 
    1236            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 
    1237        namedtype.NamedType('serialNumber', CertificateSerialNumber()), 
    1238        namedtype.NamedType('signature', AlgorithmIdentifier()), 
    1239        namedtype.NamedType('issuer', Name()), 
    1240        namedtype.NamedType('validity', Validity()), 
    1241        namedtype.NamedType('subject', Name()), 
    1242        namedtype.NamedType('subjectPublicKeyInfo', SubjectPublicKeyInfo()), 
    1243        namedtype.OptionalNamedType('issuerUniqueID', UniqueIdentifier().subtype( 
    1244            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 
    1245        namedtype.OptionalNamedType('subjectUniqueID', UniqueIdentifier().subtype( 
    1246            implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 
    1247        namedtype.OptionalNamedType('extensions', Extensions().subtype( 
    1248            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))) 
    1249    ) 
    1250 
    1251 
    1252class Certificate(univ.Sequence): 
    1253    componentType = namedtype.NamedTypes( 
    1254        namedtype.NamedType('tbsCertificate', TBSCertificate()), 
    1255        namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()), 
    1256        namedtype.NamedType('signatureValue', univ.BitString()) 
    1257    ) 
    1258 
    1259# CRL structures 
    1260 
    1261class RevokedCertificate(univ.Sequence): 
    1262    componentType = namedtype.NamedTypes( 
    1263        namedtype.NamedType('userCertificate', CertificateSerialNumber()), 
    1264        namedtype.NamedType('revocationDate', Time()), 
    1265        namedtype.OptionalNamedType('crlEntryExtensions', Extensions()) 
    1266    ) 
    1267 
    1268 
    1269class TBSCertList(univ.Sequence): 
    1270    componentType = namedtype.NamedTypes( 
    1271        namedtype.OptionalNamedType('version', Version()), 
    1272        namedtype.NamedType('signature', AlgorithmIdentifier()), 
    1273        namedtype.NamedType('issuer', Name()), 
    1274        namedtype.NamedType('thisUpdate', Time()), 
    1275        namedtype.OptionalNamedType('nextUpdate', Time()), 
    1276        namedtype.OptionalNamedType('revokedCertificates', univ.SequenceOf(componentType=RevokedCertificate())), 
    1277        namedtype.OptionalNamedType('crlExtensions', Extensions().subtype( 
    1278            explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))) 
    1279    ) 
    1280 
    1281 
    1282class CertificateList(univ.Sequence): 
    1283    componentType = namedtype.NamedTypes( 
    1284        namedtype.NamedType('tbsCertList', TBSCertList()), 
    1285        namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()), 
    1286        namedtype.NamedType('signature', univ.BitString()) 
    1287    ) 
    1288 
    1289# map of AttributeType -> AttributeValue 
    1290 
    1291_certificateAttributesMapUpdate = { 
    1292    id_at_name: X520name(), 
    1293    id_at_surname: X520name(), 
    1294    id_at_givenName: X520name(), 
    1295    id_at_initials: X520name(), 
    1296    id_at_generationQualifier: X520name(), 
    1297    id_at_commonName: X520CommonName(), 
    1298    id_at_localityName: X520LocalityName(), 
    1299    id_at_stateOrProvinceName: X520StateOrProvinceName(), 
    1300    id_at_organizationName: X520OrganizationName(), 
    1301    id_at_organizationalUnitName: X520OrganizationalUnitName(), 
    1302    id_at_title: X520Title(), 
    1303    id_at_dnQualifier: X520dnQualifier(), 
    1304    id_at_countryName: X520countryName(), 
    1305    emailAddress: Pkcs9email(), 
    1306} 
    1307 
    1308certificateAttributesMap.update(_certificateAttributesMapUpdate) 
    1309 
    1310 
    1311# map of Certificate Extension OIDs to Extensions 
    1312 
    1313_certificateExtensionsMapUpdate = { 
    1314    id_ce_authorityKeyIdentifier: AuthorityKeyIdentifier(), 
    1315    id_ce_subjectKeyIdentifier: SubjectKeyIdentifier(), 
    1316    id_ce_keyUsage: KeyUsage(), 
    1317    id_ce_privateKeyUsagePeriod: PrivateKeyUsagePeriod(), 
    1318    id_ce_certificatePolicies: CertificatePolicies(), 
    1319    id_ce_policyMappings: PolicyMappings(), 
    1320    id_ce_subjectAltName: SubjectAltName(), 
    1321    id_ce_issuerAltName: IssuerAltName(), 
    1322    id_ce_subjectDirectoryAttributes: SubjectDirectoryAttributes(), 
    1323    id_ce_basicConstraints: BasicConstraints(), 
    1324    id_ce_nameConstraints: NameConstraints(), 
    1325    id_ce_policyConstraints: PolicyConstraints(), 
    1326    id_ce_extKeyUsage: ExtKeyUsageSyntax(), 
    1327    id_ce_cRLDistributionPoints: CRLDistPointsSyntax(), 
    1328    id_pe_authorityInfoAccess: AuthorityInfoAccessSyntax(), 
    1329    id_ce_cRLNumber: univ.Integer(), 
    1330    id_ce_deltaCRLIndicator: BaseCRLNumber(), 
    1331    id_ce_issuingDistributionPoint: IssuingDistributionPoint(), 
    1332    id_ce_cRLReasons: CRLReason(), 
    1333    id_ce_holdInstructionCode: univ.ObjectIdentifier(), 
    1334    id_ce_invalidityDate: useful.GeneralizedTime(), 
    1335    id_ce_certificateIssuer: GeneralNames(), 
    1336} 
    1337 
    1338certificateExtensionsMap.update(_certificateExtensionsMapUpdate) 
    1339