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-2019, Ilya Etingof <[email protected]> 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 1340