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