codekingpro/portable-devtools
114k
1#2# This file is part of pyasn1-modules software.3#4# Updated by Russ Housley to resolve the TODO regarding the Certificate5# Policies Certificate Extension.6#7# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>8# License: http://snmplabs.com/pyasn1/license.html9#10# X.509 message syntax11#12# ASN.1 source from:13# http://www.trl.ibm.com/projects/xml/xss4j/data/asn1/grammars/x509.asn14# http://www.ietf.org/rfc/rfc2459.txt15#16# Sample captures from:17# http://wiki.wireshark.org/SampleCaptures/18#19from pyasn1.type import char20from pyasn1.type import constraint21from pyasn1.type import namedtype22from pyasn1.type import namedval23from pyasn1.type import opentype24from pyasn1.type import tag25from pyasn1.type import univ26from pyasn1.type import useful27 28MAX = float('inf')29 30#31# PKIX1Explicit8832#33 34# Upper Bounds35ub_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 pass74 75 76class BMPString(char.BMPString):77 pass78 79 80class UTF8String(char.UTF8String):81 pass82 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 compatibility102id_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 pass236 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!? XXX284 )285 286 287# certificate and CRL specific structures begin here288 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 structures298 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 here346 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 pass428 429 430class UniquePostalName(PDSParameter):431 pass432 433 434unique_postal_name = univ.Integer(20)435 436poste_restante_address = univ.Integer(19)437 438 439class PosteRestanteAddress(PDSParameter):440 pass441 442 443post_office_box_address = univ.Integer(18)444 445 446class PostOfficeBoxAddress(PDSParameter):447 pass448 449 450street_address = univ.Integer(17)451 452 453class StreetAddress(PDSParameter):454 pass455 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 pass472 473 474physical_delivery_office_number = univ.Integer(11)475 476 477class PhysicalDeliveryOfficeNumber(PDSParameter):478 pass479 480 481extension_OR_address_components = univ.Integer(12)482 483 484class ExtensionORAddressComponents(PDSParameter):485 pass486 487 488physical_delivery_personal_name = univ.Integer(13)489 490 491class PhysicalDeliveryPersonalName(PDSParameter):492 pass493 494 495physical_delivery_organization_name = univ.Integer(14)496 497 498class PhysicalDeliveryOrganizationName(PDSParameter):499 pass500 501 502extension_physical_delivery_address_components = univ.Integer(15)503 504 505class ExtensionPhysicalDeliveryAddressComponents(PDSParameter):506 pass507 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 pass677 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# PKIX1Implicit88735#736 737id_ce_invalidityDate = univ.ObjectIdentifier('2.5.29.24')738 739 740class InvalidityDate(useful.GeneralizedTime):741 pass742 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 pass755 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 pass782 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 pass798 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 pass901 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 pass909 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 pass985 986 987id_ce_subjectKeyIdentifier = univ.ObjectIdentifier('2.5.29.14')988 989 990class SubjectKeyIdentifier(KeyIdentifier):991 pass992 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 pass1005 1006 1007class AttributeType(univ.ObjectIdentifier):1008 pass1009 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 pass1048 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 pass1175 1176 1177class SubjectAltName(GeneralNames):1178 pass1179 1180 1181class IssuerAltName(GeneralNames):1182 pass1183 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 