1# coding: utf-8
2#
3# This file is part of pyasn1-modules software.
4#
5# Created by Stanisław Pitucha with asn1ate tool.
6# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com>
7# License: http://pyasn1.sf.net/license.html
8#
9# Internet X.509 Public Key Infrastructure Certificate and Certificate
10# Revocation List (CRL) Profile
11#
12# ASN.1 source from:
13# http://www.ietf.org/rfc/rfc5280.txt
14#
15from pyasn1.type import univ
16from pyasn1.type import char
17from pyasn1.type import namedtype
18from pyasn1.type import namedval
19from pyasn1.type import tag
20from pyasn1.type import constraint
21from pyasn1.type import useful
22
23MAX = float('inf')
24
25def _buildOid(*components):
26    output = []
27    for x in tuple(components):
28        if isinstance(x, univ.ObjectIdentifier):
29            output.extend(list(x))
30        else:
31            output.append(int(x))
32
33    return univ.ObjectIdentifier(output)
34
35
36ub_e163_4_sub_address_length = univ.Integer(40)
37
38ub_e163_4_number_length = univ.Integer(15)
39
40unformatted_postal_address = univ.Integer(16)
41
42
43class TerminalType(univ.Integer):
44    pass
45
46
47TerminalType.namedValues = namedval.NamedValues(
48    ('telex', 3),
49    ('teletex', 4),
50    ('g3-facsimile', 5),
51    ('g4-facsimile', 6),
52    ('ia5-terminal', 7),
53    ('videotex', 8)
54)
55
56
57class Extension(univ.Sequence):
58    pass
59
60
61Extension.componentType = namedtype.NamedTypes(
62    namedtype.NamedType('extnID', univ.ObjectIdentifier()),
63    namedtype.DefaultedNamedType('critical', univ.Boolean().subtype(value=0)),
64    namedtype.NamedType('extnValue', univ.OctetString())
65)
66
67
68class Extensions(univ.SequenceOf):
69    pass
70
71
72Extensions.componentType = Extension()
73Extensions.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
74
75physical_delivery_personal_name = univ.Integer(13)
76
77ub_unformatted_address_length = univ.Integer(180)
78
79ub_pds_parameter_length = univ.Integer(30)
80
81ub_pds_physical_address_lines = univ.Integer(6)
82
83
84class UnformattedPostalAddress(univ.Set):
85    pass
86
87
88UnformattedPostalAddress.componentType = namedtype.NamedTypes(
89    namedtype.OptionalNamedType('printable-address', univ.SequenceOf(componentType=char.PrintableString().subtype(
90        subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length)))),
91    namedtype.OptionalNamedType('teletex-string', char.TeletexString().subtype(
92        subtypeSpec=constraint.ValueSizeConstraint(1, ub_unformatted_address_length)))
93)
94
95ub_organization_name = univ.Integer(64)
96
97
98class X520OrganizationName(univ.Choice):
99    pass
100
101
102X520OrganizationName.componentType = namedtype.NamedTypes(
103    namedtype.NamedType('teletexString', char.TeletexString().subtype(
104        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
105    namedtype.NamedType('printableString', char.PrintableString().subtype(
106        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
107    namedtype.NamedType('universalString', char.UniversalString().subtype(
108        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
109    namedtype.NamedType('utf8String',
110                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
111    namedtype.NamedType('bmpString',
112                        char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name)))
113)
114
115ub_x121_address_length = univ.Integer(16)
116
117pds_name = univ.Integer(7)
118
119id_pkix = _buildOid(1, 3, 6, 1, 5, 5, 7)
120
121id_kp = _buildOid(id_pkix, 3)
122
123ub_postal_code_length = univ.Integer(16)
124
125
126class PostalCode(univ.Choice):
127    pass
128
129
130PostalCode.componentType = namedtype.NamedTypes(
131    namedtype.NamedType('numeric-code', char.NumericString().subtype(
132        subtypeSpec=constraint.ValueSizeConstraint(1, ub_postal_code_length))),
133    namedtype.NamedType('printable-code', char.PrintableString().subtype(
134        subtypeSpec=constraint.ValueSizeConstraint(1, ub_postal_code_length)))
135)
136
137ub_generation_qualifier_length = univ.Integer(3)
138
139unique_postal_name = univ.Integer(20)
140
141
142class DomainComponent(char.IA5String):
143    pass
144
145
146ub_domain_defined_attribute_value_length = univ.Integer(128)
147
148ub_match = univ.Integer(128)
149
150id_at = _buildOid(2, 5, 4)
151
152
153class AttributeType(univ.ObjectIdentifier):
154    pass
155
156
157id_at_organizationalUnitName = _buildOid(id_at, 11)
158
159terminal_type = univ.Integer(23)
160
161
162class PDSParameter(univ.Set):
163    pass
164
165
166PDSParameter.componentType = namedtype.NamedTypes(
167    namedtype.OptionalNamedType('printable-string', char.PrintableString().subtype(
168        subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length))),
169    namedtype.OptionalNamedType('teletex-string', char.TeletexString().subtype(
170        subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length)))
171)
172
173
174class PhysicalDeliveryPersonalName(PDSParameter):
175    pass
176
177
178ub_surname_length = univ.Integer(40)
179
180id_ad = _buildOid(id_pkix, 48)
181
182ub_domain_defined_attribute_type_length = univ.Integer(8)
183
184
185class TeletexDomainDefinedAttribute(univ.Sequence):
186    pass
187
188
189TeletexDomainDefinedAttribute.componentType = namedtype.NamedTypes(
190    namedtype.NamedType('type', char.TeletexString().subtype(
191        subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_type_length))),
192    namedtype.NamedType('value', char.TeletexString().subtype(
193        subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_value_length)))
194)
195
196ub_domain_defined_attributes = univ.Integer(4)
197
198
199class TeletexDomainDefinedAttributes(univ.SequenceOf):
200    pass
201
202
203TeletexDomainDefinedAttributes.componentType = TeletexDomainDefinedAttribute()
204TeletexDomainDefinedAttributes.subtypeSpec = constraint.ValueSizeConstraint(1, ub_domain_defined_attributes)
205
206extended_network_address = univ.Integer(22)
207
208ub_locality_name = univ.Integer(128)
209
210
211class X520LocalityName(univ.Choice):
212    pass
213
214
215X520LocalityName.componentType = namedtype.NamedTypes(
216    namedtype.NamedType('teletexString',
217                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
218    namedtype.NamedType('printableString', char.PrintableString().subtype(
219        subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
220    namedtype.NamedType('universalString', char.UniversalString().subtype(
221        subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
222    namedtype.NamedType('utf8String',
223                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
224    namedtype.NamedType('bmpString',
225                        char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name)))
226)
227
228teletex_organization_name = univ.Integer(3)
229
230ub_given_name_length = univ.Integer(16)
231
232ub_initials_length = univ.Integer(5)
233
234
235class PersonalName(univ.Set):
236    pass
237
238
239PersonalName.componentType = namedtype.NamedTypes(
240    namedtype.NamedType('surname', char.PrintableString().subtype(
241        subtypeSpec=constraint.ValueSizeConstraint(1, ub_surname_length)).subtype(
242        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
243    namedtype.OptionalNamedType('given-name', char.PrintableString().subtype(
244        subtypeSpec=constraint.ValueSizeConstraint(1, ub_given_name_length)).subtype(
245        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
246    namedtype.OptionalNamedType('initials', char.PrintableString().subtype(
247        subtypeSpec=constraint.ValueSizeConstraint(1, ub_initials_length)).subtype(
248        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
249    namedtype.OptionalNamedType('generation-qualifier', char.PrintableString().subtype(
250        subtypeSpec=constraint.ValueSizeConstraint(1, ub_generation_qualifier_length)).subtype(
251        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
252)
253
254ub_organizational_unit_name_length = univ.Integer(32)
255
256
257class OrganizationalUnitName(char.PrintableString):
258    pass
259
260
261OrganizationalUnitName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_organizational_unit_name_length)
262
263id_at_generationQualifier = _buildOid(id_at, 44)
264
265
266class Version(univ.Integer):
267    pass
268
269
270Version.namedValues = namedval.NamedValues(
271    ('v1', 0),
272    ('v2', 1),
273    ('v3', 2)
274)
275
276
277class CertificateSerialNumber(univ.Integer):
278    pass
279
280
281class AlgorithmIdentifier(univ.Sequence):
282    pass
283
284
285AlgorithmIdentifier.componentType = namedtype.NamedTypes(
286    namedtype.NamedType('algorithm', univ.ObjectIdentifier()),
287    namedtype.OptionalNamedType('parameters', univ.Any())
288)
289
290
291class Time(univ.Choice):
292    pass
293
294
295Time.componentType = namedtype.NamedTypes(
296    namedtype.NamedType('utcTime', useful.UTCTime()),
297    namedtype.NamedType('generalTime', useful.GeneralizedTime())
298)
299
300
301class AttributeValue(univ.Any):
302    pass
303
304
305class AttributeTypeAndValue(univ.Sequence):
306    pass
307
308
309AttributeTypeAndValue.componentType = namedtype.NamedTypes(
310    namedtype.NamedType('type', AttributeType()),
311    namedtype.NamedType('value', AttributeValue())
312)
313
314
315class RelativeDistinguishedName(univ.SetOf):
316    pass
317
318
319RelativeDistinguishedName.componentType = AttributeTypeAndValue()
320RelativeDistinguishedName.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
321
322
323class RDNSequence(univ.SequenceOf):
324    pass
325
326
327RDNSequence.componentType = RelativeDistinguishedName()
328
329
330class Name(univ.Choice):
331    pass
332
333
334Name.componentType = namedtype.NamedTypes(
335    namedtype.NamedType('rdnSequence', RDNSequence())
336)
337
338
339class TBSCertList(univ.Sequence):
340    pass
341
342
343TBSCertList.componentType = namedtype.NamedTypes(
344    namedtype.OptionalNamedType('version', Version()),
345    namedtype.NamedType('signature', AlgorithmIdentifier()),
346    namedtype.NamedType('issuer', Name()),
347    namedtype.NamedType('thisUpdate', Time()),
348    namedtype.OptionalNamedType('nextUpdate', Time()),
349    namedtype.OptionalNamedType(
350        'revokedCertificates', univ.SequenceOf(
351            componentType=univ.Sequence(
352                componentType=namedtype.NamedTypes(
353                    namedtype.NamedType('userCertificate', CertificateSerialNumber()),
354                    namedtype.NamedType('revocationDate', Time()),
355                    namedtype.OptionalNamedType('crlEntryExtensions', Extensions())
356                )
357            )
358        )
359    ),
360    namedtype.OptionalNamedType(
361        'crlExtensions', Extensions().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
362)
363
364
365class CertificateList(univ.Sequence):
366    pass
367
368
369CertificateList.componentType = namedtype.NamedTypes(
370    namedtype.NamedType('tbsCertList', TBSCertList()),
371    namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()),
372    namedtype.NamedType('signature', univ.BitString())
373)
374
375
376class PhysicalDeliveryOfficeName(PDSParameter):
377    pass
378
379
380ub_extension_attributes = univ.Integer(256)
381
382
383class ExtensionAttribute(univ.Sequence):
384    pass
385
386
387ExtensionAttribute.componentType = namedtype.NamedTypes(
388    namedtype.NamedType('extension-attribute-type', univ.Integer().subtype(
389        subtypeSpec=constraint.ValueRangeConstraint(0, ub_extension_attributes)).subtype(
390        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
391    namedtype.NamedType('extension-attribute-value',
392                        univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
393)
394
395id_qt = _buildOid(id_pkix, 2)
396
397id_qt_cps = _buildOid(id_qt, 1)
398
399id_at_stateOrProvinceName = _buildOid(id_at, 8)
400
401id_at_title = _buildOid(id_at, 12)
402
403id_at_serialNumber = _buildOid(id_at, 5)
404
405
406class X520dnQualifier(char.PrintableString):
407    pass
408
409
410class PosteRestanteAddress(PDSParameter):
411    pass
412
413
414poste_restante_address = univ.Integer(19)
415
416
417class UniqueIdentifier(univ.BitString):
418    pass
419
420
421class Validity(univ.Sequence):
422    pass
423
424
425Validity.componentType = namedtype.NamedTypes(
426    namedtype.NamedType('notBefore', Time()),
427    namedtype.NamedType('notAfter', Time())
428)
429
430
431class SubjectPublicKeyInfo(univ.Sequence):
432    pass
433
434
435SubjectPublicKeyInfo.componentType = namedtype.NamedTypes(
436    namedtype.NamedType('algorithm', AlgorithmIdentifier()),
437    namedtype.NamedType('subjectPublicKey', univ.BitString())
438)
439
440
441class TBSCertificate(univ.Sequence):
442    pass
443
444
445TBSCertificate.componentType = namedtype.NamedTypes(
446    namedtype.DefaultedNamedType('version',
447                                 Version().subtype(explicitTag=tag.Tag(tag.tagClassContext,
448                                                                       tag.tagFormatSimple, 0)).subtype(value="v1")),
449    namedtype.NamedType('serialNumber', CertificateSerialNumber()),
450    namedtype.NamedType('signature', AlgorithmIdentifier()),
451    namedtype.NamedType('issuer', Name()),
452    namedtype.NamedType('validity', Validity()),
453    namedtype.NamedType('subject', Name()),
454    namedtype.NamedType('subjectPublicKeyInfo', SubjectPublicKeyInfo()),
455    namedtype.OptionalNamedType('issuerUniqueID', UniqueIdentifier().subtype(
456        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
457    namedtype.OptionalNamedType('subjectUniqueID', UniqueIdentifier().subtype(
458        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
459    namedtype.OptionalNamedType('extensions',
460                                Extensions().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
461)
462
463physical_delivery_office_name = univ.Integer(10)
464
465ub_name = univ.Integer(32768)
466
467
468class X520name(univ.Choice):
469    pass
470
471
472X520name.componentType = namedtype.NamedTypes(
473    namedtype.NamedType('teletexString',
474                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
475    namedtype.NamedType('printableString',
476                        char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
477    namedtype.NamedType('universalString',
478                        char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
479    namedtype.NamedType('utf8String',
480                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
481    namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name)))
482)
483
484id_at_dnQualifier = _buildOid(id_at, 46)
485
486ub_serial_number = univ.Integer(64)
487
488ub_pseudonym = univ.Integer(128)
489
490pkcs_9 = _buildOid(1, 2, 840, 113549, 1, 9)
491
492
493class X121Address(char.NumericString):
494    pass
495
496
497X121Address.subtypeSpec = constraint.ValueSizeConstraint(1, ub_x121_address_length)
498
499
500class NetworkAddress(X121Address):
501    pass
502
503
504ub_integer_options = univ.Integer(256)
505
506id_at_commonName = _buildOid(id_at, 3)
507
508ub_organization_name_length = univ.Integer(64)
509
510id_ad_ocsp = _buildOid(id_ad, 1)
511
512ub_country_name_numeric_length = univ.Integer(3)
513
514ub_country_name_alpha_length = univ.Integer(2)
515
516
517class PhysicalDeliveryCountryName(univ.Choice):
518    pass
519
520
521PhysicalDeliveryCountryName.componentType = namedtype.NamedTypes(
522    namedtype.NamedType('x121-dcc-code', char.NumericString().subtype(
523        subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_numeric_length, ub_country_name_numeric_length))),
524    namedtype.NamedType('iso-3166-alpha2-code', char.PrintableString().subtype(
525        subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_alpha_length, ub_country_name_alpha_length)))
526)
527
528id_emailAddress = _buildOid(pkcs_9, 1)
529
530common_name = univ.Integer(1)
531
532
533class X520Pseudonym(univ.Choice):
534    pass
535
536
537X520Pseudonym.componentType = namedtype.NamedTypes(
538    namedtype.NamedType('teletexString',
539                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_pseudonym))),
540    namedtype.NamedType('printableString',
541                        char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_pseudonym))),
542    namedtype.NamedType('universalString',
543                        char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_pseudonym))),
544    namedtype.NamedType('utf8String',
545                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_pseudonym))),
546    namedtype.NamedType('bmpString',
547                        char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_pseudonym)))
548)
549
550ub_domain_name_length = univ.Integer(16)
551
552
553class AdministrationDomainName(univ.Choice):
554    pass
555
556
557AdministrationDomainName.tagSet = univ.Choice.tagSet.tagExplicitly(
558    tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 2))
559AdministrationDomainName.componentType = namedtype.NamedTypes(
560    namedtype.NamedType('numeric', char.NumericString().subtype(
561        subtypeSpec=constraint.ValueSizeConstraint(0, ub_domain_name_length))),
562    namedtype.NamedType('printable', char.PrintableString().subtype(
563        subtypeSpec=constraint.ValueSizeConstraint(0, ub_domain_name_length)))
564)
565
566
567class PresentationAddress(univ.Sequence):
568    pass
569
570
571PresentationAddress.componentType = namedtype.NamedTypes(
572    namedtype.OptionalNamedType('pSelector', univ.OctetString().subtype(
573        explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
574    namedtype.OptionalNamedType('sSelector', univ.OctetString().subtype(
575        explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
576    namedtype.OptionalNamedType('tSelector', univ.OctetString().subtype(
577        explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
578    namedtype.NamedType('nAddresses', univ.SetOf(componentType=univ.OctetString()).subtype(
579        explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
580)
581
582
583class ExtendedNetworkAddress(univ.Choice):
584    pass
585
586
587ExtendedNetworkAddress.componentType = namedtype.NamedTypes(
588    namedtype.NamedType(
589        'e163-4-address', univ.Sequence(
590            componentType=namedtype.NamedTypes(
591                namedtype.NamedType('number', char.NumericString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_e163_4_number_length)).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
592                namedtype.OptionalNamedType('sub-address', char.NumericString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_e163_4_sub_address_length)).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
593            )
594        )
595    ),
596    namedtype.NamedType('psap-address', PresentationAddress().subtype(
597        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
598)
599
600
601class TeletexOrganizationName(char.TeletexString):
602    pass
603
604
605TeletexOrganizationName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_organization_name_length)
606
607ub_terminal_id_length = univ.Integer(24)
608
609
610class TerminalIdentifier(char.PrintableString):
611    pass
612
613
614TerminalIdentifier.subtypeSpec = constraint.ValueSizeConstraint(1, ub_terminal_id_length)
615
616id_ad_caIssuers = _buildOid(id_ad, 2)
617
618id_at_countryName = _buildOid(id_at, 6)
619
620
621class StreetAddress(PDSParameter):
622    pass
623
624
625postal_code = univ.Integer(9)
626
627id_at_givenName = _buildOid(id_at, 42)
628
629ub_title = univ.Integer(64)
630
631
632class ExtensionAttributes(univ.SetOf):
633    pass
634
635
636ExtensionAttributes.componentType = ExtensionAttribute()
637ExtensionAttributes.subtypeSpec = constraint.ValueSizeConstraint(1, ub_extension_attributes)
638
639ub_emailaddress_length = univ.Integer(255)
640
641id_ad_caRepository = _buildOid(id_ad, 5)
642
643
644class ExtensionORAddressComponents(PDSParameter):
645    pass
646
647
648ub_organizational_unit_name = univ.Integer(64)
649
650
651class X520OrganizationalUnitName(univ.Choice):
652    pass
653
654
655X520OrganizationalUnitName.componentType = namedtype.NamedTypes(
656    namedtype.NamedType('teletexString', char.TeletexString().subtype(
657        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
658    namedtype.NamedType('printableString', char.PrintableString().subtype(
659        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
660    namedtype.NamedType('universalString', char.UniversalString().subtype(
661        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
662    namedtype.NamedType('utf8String', char.UTF8String().subtype(
663        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
664    namedtype.NamedType('bmpString', char.BMPString().subtype(
665        subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name)))
666)
667
668
669class LocalPostalAttributes(PDSParameter):
670    pass
671
672
673teletex_organizational_unit_names = univ.Integer(5)
674
675
676class X520Title(univ.Choice):
677    pass
678
679
680X520Title.componentType = namedtype.NamedTypes(
681    namedtype.NamedType('teletexString',
682                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
683    namedtype.NamedType('printableString',
684                        char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
685    namedtype.NamedType('universalString',
686                        char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
687    namedtype.NamedType('utf8String',
688                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
689    namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title)))
690)
691
692id_at_localityName = _buildOid(id_at, 7)
693
694id_at_initials = _buildOid(id_at, 43)
695
696ub_state_name = univ.Integer(128)
697
698
699class X520StateOrProvinceName(univ.Choice):
700    pass
701
702
703X520StateOrProvinceName.componentType = namedtype.NamedTypes(
704    namedtype.NamedType('teletexString',
705                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
706    namedtype.NamedType('printableString',
707                        char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
708    namedtype.NamedType('universalString',
709                        char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
710    namedtype.NamedType('utf8String',
711                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
712    namedtype.NamedType('bmpString',
713                        char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name)))
714)
715
716physical_delivery_organization_name = univ.Integer(14)
717
718id_at_surname = _buildOid(id_at, 4)
719
720
721class X520countryName(char.PrintableString):
722    pass
723
724
725X520countryName.subtypeSpec = constraint.ValueSizeConstraint(2, 2)
726
727physical_delivery_office_number = univ.Integer(11)
728
729id_qt_unotice = _buildOid(id_qt, 2)
730
731
732class X520SerialNumber(char.PrintableString):
733    pass
734
735
736X520SerialNumber.subtypeSpec = constraint.ValueSizeConstraint(1, ub_serial_number)
737
738
739class Attribute(univ.Sequence):
740    pass
741
742
743Attribute.componentType = namedtype.NamedTypes(
744    namedtype.NamedType('type', AttributeType()),
745    namedtype.NamedType('values', univ.SetOf(componentType=AttributeValue()))
746)
747
748ub_common_name = univ.Integer(64)
749
750id_pe = _buildOid(id_pkix, 1)
751
752
753class ExtensionPhysicalDeliveryAddressComponents(PDSParameter):
754    pass
755
756
757class EmailAddress(char.IA5String):
758    pass
759
760
761EmailAddress.subtypeSpec = constraint.ValueSizeConstraint(1, ub_emailaddress_length)
762
763id_at_organizationName = _buildOid(id_at, 10)
764
765post_office_box_address = univ.Integer(18)
766
767
768class BuiltInDomainDefinedAttribute(univ.Sequence):
769    pass
770
771
772BuiltInDomainDefinedAttribute.componentType = namedtype.NamedTypes(
773    namedtype.NamedType('type', char.PrintableString().subtype(
774        subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_type_length))),
775    namedtype.NamedType('value', char.PrintableString().subtype(
776        subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_value_length)))
777)
778
779
780class BuiltInDomainDefinedAttributes(univ.SequenceOf):
781    pass
782
783
784BuiltInDomainDefinedAttributes.componentType = BuiltInDomainDefinedAttribute()
785BuiltInDomainDefinedAttributes.subtypeSpec = constraint.ValueSizeConstraint(1, ub_domain_defined_attributes)
786
787id_at_pseudonym = _buildOid(id_at, 65)
788
789id_domainComponent = _buildOid(0, 9, 2342, 19200300, 100, 1, 25)
790
791
792class X520CommonName(univ.Choice):
793    pass
794
795
796X520CommonName.componentType = namedtype.NamedTypes(
797    namedtype.NamedType('teletexString',
798                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
799    namedtype.NamedType('printableString',
800                        char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
801    namedtype.NamedType('universalString',
802                        char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
803    namedtype.NamedType('utf8String',
804                        char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
805    namedtype.NamedType('bmpString',
806                        char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name)))
807)
808
809extension_OR_address_components = univ.Integer(12)
810
811ub_organizational_units = univ.Integer(4)
812
813teletex_personal_name = univ.Integer(4)
814
815ub_numeric_user_id_length = univ.Integer(32)
816
817ub_common_name_length = univ.Integer(64)
818
819
820class TeletexCommonName(char.TeletexString):
821    pass
822
823
824TeletexCommonName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_common_name_length)
825
826
827class PhysicalDeliveryOrganizationName(PDSParameter):
828    pass
829
830
831extension_physical_delivery_address_components = univ.Integer(15)
832
833
834class NumericUserIdentifier(char.NumericString):
835    pass
836
837
838NumericUserIdentifier.subtypeSpec = constraint.ValueSizeConstraint(1, ub_numeric_user_id_length)
839
840
841class CountryName(univ.Choice):
842    pass
843
844
845CountryName.tagSet = univ.Choice.tagSet.tagExplicitly(tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 1))
846CountryName.componentType = namedtype.NamedTypes(
847    namedtype.NamedType('x121-dcc-code', char.NumericString().subtype(
848        subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_numeric_length, ub_country_name_numeric_length))),
849    namedtype.NamedType('iso-3166-alpha2-code', char.PrintableString().subtype(
850        subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_alpha_length, ub_country_name_alpha_length)))
851)
852
853
854class OrganizationName(char.PrintableString):
855    pass
856
857
858OrganizationName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_organization_name_length)
859
860
861class OrganizationalUnitNames(univ.SequenceOf):
862    pass
863
864
865OrganizationalUnitNames.componentType = OrganizationalUnitName()
866OrganizationalUnitNames.subtypeSpec = constraint.ValueSizeConstraint(1, ub_organizational_units)
867
868
869class PrivateDomainName(univ.Choice):
870    pass
871
872
873PrivateDomainName.componentType = namedtype.NamedTypes(
874    namedtype.NamedType('numeric', char.NumericString().subtype(
875        subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_name_length))),
876    namedtype.NamedType('printable', char.PrintableString().subtype(
877        subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_name_length)))
878)
879
880
881class BuiltInStandardAttributes(univ.Sequence):
882    pass
883
884
885BuiltInStandardAttributes.componentType = namedtype.NamedTypes(
886    namedtype.OptionalNamedType('country-name', CountryName()),
887    namedtype.OptionalNamedType('administration-domain-name', AdministrationDomainName()),
888    namedtype.OptionalNamedType('network-address', NetworkAddress().subtype(
889        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
890    namedtype.OptionalNamedType('terminal-identifier', TerminalIdentifier().subtype(
891        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
892    namedtype.OptionalNamedType('private-domain-name', PrivateDomainName().subtype(
893        explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
894    namedtype.OptionalNamedType('organization-name', OrganizationName().subtype(
895        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
896    namedtype.OptionalNamedType('numeric-user-identifier', NumericUserIdentifier().subtype(
897        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
898    namedtype.OptionalNamedType('personal-name', PersonalName().subtype(
899        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))),
900    namedtype.OptionalNamedType('organizational-unit-names', OrganizationalUnitNames().subtype(
901        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6)))
902)
903
904
905class ORAddress(univ.Sequence):
906    pass
907
908
909ORAddress.componentType = namedtype.NamedTypes(
910    namedtype.NamedType('built-in-standard-attributes', BuiltInStandardAttributes()),
911    namedtype.OptionalNamedType('built-in-domain-defined-attributes', BuiltInDomainDefinedAttributes()),
912    namedtype.OptionalNamedType('extension-attributes', ExtensionAttributes())
913)
914
915
916class DistinguishedName(RDNSequence):
917    pass
918
919
920id_ad_timeStamping = _buildOid(id_ad, 3)
921
922
923class PhysicalDeliveryOfficeNumber(PDSParameter):
924    pass
925
926
927teletex_domain_defined_attributes = univ.Integer(6)
928
929
930class UniquePostalName(PDSParameter):
931    pass
932
933
934physical_delivery_country_name = univ.Integer(8)
935
936ub_pds_name_length = univ.Integer(16)
937
938
939class PDSName(char.PrintableString):
940    pass
941
942
943PDSName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_pds_name_length)
944
945
946class TeletexPersonalName(univ.Set):
947    pass
948
949
950TeletexPersonalName.componentType = namedtype.NamedTypes(
951    namedtype.NamedType('surname', char.TeletexString().subtype(
952        subtypeSpec=constraint.ValueSizeConstraint(1, ub_surname_length)).subtype(
953        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
954    namedtype.OptionalNamedType('given-name', char.TeletexString().subtype(
955        subtypeSpec=constraint.ValueSizeConstraint(1, ub_given_name_length)).subtype(
956        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
957    namedtype.OptionalNamedType('initials', char.TeletexString().subtype(
958        subtypeSpec=constraint.ValueSizeConstraint(1, ub_initials_length)).subtype(
959        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
960    namedtype.OptionalNamedType('generation-qualifier', char.TeletexString().subtype(
961        subtypeSpec=constraint.ValueSizeConstraint(1, ub_generation_qualifier_length)).subtype(
962        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
963)
964
965street_address = univ.Integer(17)
966
967
968class PostOfficeBoxAddress(PDSParameter):
969    pass
970
971
972local_postal_attributes = univ.Integer(21)
973
974
975class DirectoryString(univ.Choice):
976    pass
977
978
979DirectoryString.componentType = namedtype.NamedTypes(
980    namedtype.NamedType('teletexString',
981                        char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
982    namedtype.NamedType('printableString',
983                        char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
984    namedtype.NamedType('universalString',
985                        char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
986    namedtype.NamedType('utf8String', char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
987    namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX)))
988)
989
990teletex_common_name = univ.Integer(2)
991
992
993class CommonName(char.PrintableString):
994    pass
995
996
997CommonName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_common_name_length)
998
999
1000class Certificate(univ.Sequence):
1001    pass
1002
1003
1004Certificate.componentType = namedtype.NamedTypes(
1005    namedtype.NamedType('tbsCertificate', TBSCertificate()),
1006    namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()),
1007    namedtype.NamedType('signature', univ.BitString())
1008)
1009
1010
1011class TeletexOrganizationalUnitName(char.TeletexString):
1012    pass
1013
1014
1015TeletexOrganizationalUnitName.subtypeSpec = constraint.ValueSizeConstraint(1, ub_organizational_unit_name_length)
1016
1017id_at_name = _buildOid(id_at, 41)
1018
1019
1020class TeletexOrganizationalUnitNames(univ.SequenceOf):
1021    pass
1022
1023
1024TeletexOrganizationalUnitNames.componentType = TeletexOrganizationalUnitName()
1025TeletexOrganizationalUnitNames.subtypeSpec = constraint.ValueSizeConstraint(1, ub_organizational_units)
1026
1027id_ce = _buildOid(2, 5, 29)
1028
1029id_ce_issuerAltName = _buildOid(id_ce, 18)
1030
1031
1032class SkipCerts(univ.Integer):
1033    pass
1034
1035
1036SkipCerts.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
1037
1038
1039class CRLReason(univ.Enumerated):
1040    pass
1041
1042
1043CRLReason.namedValues = namedval.NamedValues(
1044    ('unspecified', 0),
1045    ('keyCompromise', 1),
1046    ('cACompromise', 2),
1047    ('affiliationChanged', 3),
1048    ('superseded', 4),
1049    ('cessationOfOperation', 5),
1050    ('certificateHold', 6),
1051    ('removeFromCRL', 8),
1052    ('privilegeWithdrawn', 9),
1053    ('aACompromise', 10)
1054)
1055
1056
1057class PrivateKeyUsagePeriod(univ.Sequence):
1058    pass
1059
1060
1061PrivateKeyUsagePeriod.componentType = namedtype.NamedTypes(
1062    namedtype.OptionalNamedType('notBefore', useful.GeneralizedTime().subtype(
1063        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
1064    namedtype.OptionalNamedType('notAfter', useful.GeneralizedTime().subtype(
1065        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
1066)
1067
1068
1069class AnotherName(univ.Sequence):
1070    pass
1071
1072
1073AnotherName.componentType = namedtype.NamedTypes(
1074    namedtype.NamedType('type-id', univ.ObjectIdentifier()),
1075    namedtype.NamedType('value', univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
1076)
1077
1078
1079class EDIPartyName(univ.Sequence):
1080    pass
1081
1082
1083EDIPartyName.componentType = namedtype.NamedTypes(
1084    namedtype.OptionalNamedType('nameAssigner', DirectoryString().subtype(
1085        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
1086    namedtype.NamedType('partyName', DirectoryString().subtype(
1087        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
1088)
1089
1090
1091class GeneralName(univ.Choice):
1092    pass
1093
1094
1095GeneralName.componentType = namedtype.NamedTypes(
1096    namedtype.NamedType('otherName',
1097                        AnotherName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
1098    namedtype.NamedType('rfc822Name',
1099                        char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
1100    namedtype.NamedType('dNSName',
1101                        char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
1102    namedtype.NamedType('x400Address',
1103                        ORAddress().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
1104    namedtype.NamedType('directoryName',
1105                        Name().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),
1106    namedtype.NamedType('ediPartyName',
1107                        EDIPartyName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))),
1108    namedtype.NamedType('uniformResourceIdentifier',
1109                        char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6))),
1110    namedtype.NamedType('iPAddress',
1111                        univ.OctetString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))),
1112    namedtype.NamedType('registeredID', univ.ObjectIdentifier().subtype(
1113        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8)))
1114)
1115
1116
1117class BaseDistance(univ.Integer):
1118    pass
1119
1120
1121BaseDistance.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
1122
1123
1124class GeneralSubtree(univ.Sequence):
1125    pass
1126
1127
1128GeneralSubtree.componentType = namedtype.NamedTypes(
1129    namedtype.NamedType('base', GeneralName()),
1130    namedtype.DefaultedNamedType('minimum', BaseDistance().subtype(
1131        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)).subtype(value=0)),
1132    namedtype.OptionalNamedType('maximum', BaseDistance().subtype(
1133        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
1134)
1135
1136
1137class GeneralNames(univ.SequenceOf):
1138    pass
1139
1140
1141GeneralNames.componentType = GeneralName()
1142GeneralNames.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1143
1144
1145class DistributionPointName(univ.Choice):
1146    pass
1147
1148
1149DistributionPointName.componentType = namedtype.NamedTypes(
1150    namedtype.NamedType('fullName',
1151                        GeneralNames().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
1152    namedtype.NamedType('nameRelativeToCRLIssuer', RelativeDistinguishedName().subtype(
1153        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
1154)
1155
1156
1157class ReasonFlags(univ.BitString):
1158    pass
1159
1160
1161ReasonFlags.namedValues = namedval.NamedValues(
1162    ('unused', 0),
1163    ('keyCompromise', 1),
1164    ('cACompromise', 2),
1165    ('affiliationChanged', 3),
1166    ('superseded', 4),
1167    ('cessationOfOperation', 5),
1168    ('certificateHold', 6),
1169    ('privilegeWithdrawn', 7),
1170    ('aACompromise', 8)
1171)
1172
1173
1174class IssuingDistributionPoint(univ.Sequence):
1175    pass
1176
1177
1178IssuingDistributionPoint.componentType = namedtype.NamedTypes(
1179    namedtype.OptionalNamedType('distributionPoint', DistributionPointName().subtype(
1180        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
1181    namedtype.DefaultedNamedType('onlyContainsUserCerts', univ.Boolean().subtype(
1182        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)).subtype(value=0)),
1183    namedtype.DefaultedNamedType('onlyContainsCACerts', univ.Boolean().subtype(
1184        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)).subtype(value=0)),
1185    namedtype.OptionalNamedType('onlySomeReasons', ReasonFlags().subtype(
1186        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
1187    namedtype.DefaultedNamedType('indirectCRL', univ.Boolean().subtype(
1188        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)).subtype(value=0)),
1189    namedtype.DefaultedNamedType('onlyContainsAttributeCerts', univ.Boolean().subtype(
1190        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5)).subtype(value=0))
1191)
1192
1193id_ce_certificatePolicies = _buildOid(id_ce, 32)
1194
1195id_kp_emailProtection = _buildOid(id_kp, 4)
1196
1197
1198class AccessDescription(univ.Sequence):
1199    pass
1200
1201
1202AccessDescription.componentType = namedtype.NamedTypes(
1203    namedtype.NamedType('accessMethod', univ.ObjectIdentifier()),
1204    namedtype.NamedType('accessLocation', GeneralName())
1205)
1206
1207
1208class IssuerAltName(GeneralNames):
1209    pass
1210
1211
1212id_ce_cRLDistributionPoints = _buildOid(id_ce, 31)
1213
1214holdInstruction = _buildOid(2, 2, 840, 10040, 2)
1215
1216id_holdinstruction_callissuer = _buildOid(holdInstruction, 2)
1217
1218id_ce_subjectDirectoryAttributes = _buildOid(id_ce, 9)
1219
1220id_ce_issuingDistributionPoint = _buildOid(id_ce, 28)
1221
1222
1223class DistributionPoint(univ.Sequence):
1224    pass
1225
1226
1227DistributionPoint.componentType = namedtype.NamedTypes(
1228    namedtype.OptionalNamedType('distributionPoint', DistributionPointName().subtype(
1229        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
1230    namedtype.OptionalNamedType('reasons', ReasonFlags().subtype(
1231        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
1232    namedtype.OptionalNamedType('cRLIssuer', GeneralNames().subtype(
1233        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
1234)
1235
1236
1237class CRLDistributionPoints(univ.SequenceOf):
1238    pass
1239
1240
1241CRLDistributionPoints.componentType = DistributionPoint()
1242CRLDistributionPoints.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1243
1244
1245class GeneralSubtrees(univ.SequenceOf):
1246    pass
1247
1248
1249GeneralSubtrees.componentType = GeneralSubtree()
1250GeneralSubtrees.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1251
1252
1253class NameConstraints(univ.Sequence):
1254    pass
1255
1256
1257NameConstraints.componentType = namedtype.NamedTypes(
1258    namedtype.OptionalNamedType('permittedSubtrees', GeneralSubtrees().subtype(
1259        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
1260    namedtype.OptionalNamedType('excludedSubtrees', GeneralSubtrees().subtype(
1261        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
1262)
1263
1264
1265class SubjectDirectoryAttributes(univ.SequenceOf):
1266    pass
1267
1268
1269SubjectDirectoryAttributes.componentType = Attribute()
1270SubjectDirectoryAttributes.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1271
1272id_kp_OCSPSigning = _buildOid(id_kp, 9)
1273
1274id_kp_timeStamping = _buildOid(id_kp, 8)
1275
1276
1277class DisplayText(univ.Choice):
1278    pass
1279
1280
1281DisplayText.componentType = namedtype.NamedTypes(
1282    namedtype.NamedType('ia5String', char.IA5String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))),
1283    namedtype.NamedType('visibleString',
1284                        char.VisibleString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))),
1285    namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))),
1286    namedtype.NamedType('utf8String', char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200)))
1287)
1288
1289
1290class NoticeReference(univ.Sequence):
1291    pass
1292
1293
1294NoticeReference.componentType = namedtype.NamedTypes(
1295    namedtype.NamedType('organization', DisplayText()),
1296    namedtype.NamedType('noticeNumbers', univ.SequenceOf(componentType=univ.Integer()))
1297)
1298
1299
1300class UserNotice(univ.Sequence):
1301    pass
1302
1303
1304UserNotice.componentType = namedtype.NamedTypes(
1305    namedtype.OptionalNamedType('noticeRef', NoticeReference()),
1306    namedtype.OptionalNamedType('explicitText', DisplayText())
1307)
1308
1309
1310class PolicyQualifierId(univ.ObjectIdentifier):
1311    pass
1312
1313
1314class PolicyQualifierInfo(univ.Sequence):
1315    pass
1316
1317
1318PolicyQualifierInfo.componentType = namedtype.NamedTypes(
1319    namedtype.NamedType('policyQualifierId', PolicyQualifierId()),
1320    namedtype.NamedType('qualifier', univ.Any())
1321)
1322
1323
1324class CertPolicyId(univ.ObjectIdentifier):
1325    pass
1326
1327
1328class PolicyInformation(univ.Sequence):
1329    pass
1330
1331
1332PolicyInformation.componentType = namedtype.NamedTypes(
1333    namedtype.NamedType('policyIdentifier', CertPolicyId()),
1334    namedtype.OptionalNamedType('policyQualifiers', univ.SequenceOf(componentType=PolicyQualifierInfo()))
1335)
1336
1337
1338class CertificatePolicies(univ.SequenceOf):
1339    pass
1340
1341
1342CertificatePolicies.componentType = PolicyInformation()
1343CertificatePolicies.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1344
1345
1346class SubjectAltName(GeneralNames):
1347    pass
1348
1349
1350id_ce_basicConstraints = _buildOid(id_ce, 19)
1351
1352id_ce_authorityKeyIdentifier = _buildOid(id_ce, 35)
1353
1354id_kp_codeSigning = _buildOid(id_kp, 3)
1355
1356
1357class BasicConstraints(univ.Sequence):
1358    pass
1359
1360
1361BasicConstraints.componentType = namedtype.NamedTypes(
1362    namedtype.DefaultedNamedType('cA', univ.Boolean().subtype(value=0)),
1363    namedtype.OptionalNamedType('pathLenConstraint',
1364                                univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, MAX)))
1365)
1366
1367id_ce_certificateIssuer = _buildOid(id_ce, 29)
1368
1369
1370class PolicyMappings(univ.SequenceOf):
1371    pass
1372
1373
1374PolicyMappings.componentType = univ.Sequence(
1375    componentType=namedtype.NamedTypes(
1376        namedtype.NamedType('issuerDomainPolicy', CertPolicyId()),
1377        namedtype.NamedType('subjectDomainPolicy', CertPolicyId())
1378    )
1379)
1380
1381PolicyMappings.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1382
1383
1384class InhibitAnyPolicy(SkipCerts):
1385    pass
1386
1387
1388anyPolicy = _buildOid(id_ce_certificatePolicies, 0)
1389
1390
1391class CRLNumber(univ.Integer):
1392    pass
1393
1394
1395CRLNumber.subtypeSpec = constraint.ValueRangeConstraint(0, MAX)
1396
1397
1398class BaseCRLNumber(CRLNumber):
1399    pass
1400
1401
1402id_ce_nameConstraints = _buildOid(id_ce, 30)
1403
1404id_kp_serverAuth = _buildOid(id_kp, 1)
1405
1406id_ce_freshestCRL = _buildOid(id_ce, 46)
1407
1408id_ce_cRLReasons = _buildOid(id_ce, 21)
1409
1410id_ce_extKeyUsage = _buildOid(id_ce, 37)
1411
1412
1413class KeyIdentifier(univ.OctetString):
1414    pass
1415
1416
1417class AuthorityKeyIdentifier(univ.Sequence):
1418    pass
1419
1420
1421AuthorityKeyIdentifier.componentType = namedtype.NamedTypes(
1422    namedtype.OptionalNamedType('keyIdentifier', KeyIdentifier().subtype(
1423        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
1424    namedtype.OptionalNamedType('authorityCertIssuer', GeneralNames().subtype(
1425        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
1426    namedtype.OptionalNamedType('authorityCertSerialNumber', CertificateSerialNumber().subtype(
1427        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
1428)
1429
1430
1431class FreshestCRL(CRLDistributionPoints):
1432    pass
1433
1434
1435id_ce_policyConstraints = _buildOid(id_ce, 36)
1436
1437id_pe_authorityInfoAccess = _buildOid(id_pe, 1)
1438
1439
1440class AuthorityInfoAccessSyntax(univ.SequenceOf):
1441    pass
1442
1443
1444AuthorityInfoAccessSyntax.componentType = AccessDescription()
1445AuthorityInfoAccessSyntax.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1446
1447id_holdinstruction_none = _buildOid(holdInstruction, 1)
1448
1449
1450class CPSuri(char.IA5String):
1451    pass
1452
1453
1454id_pe_subjectInfoAccess = _buildOid(id_pe, 11)
1455
1456
1457class SubjectKeyIdentifier(KeyIdentifier):
1458    pass
1459
1460
1461id_ce_subjectAltName = _buildOid(id_ce, 17)
1462
1463
1464class KeyPurposeId(univ.ObjectIdentifier):
1465    pass
1466
1467
1468class ExtKeyUsageSyntax(univ.SequenceOf):
1469    pass
1470
1471
1472ExtKeyUsageSyntax.componentType = KeyPurposeId()
1473ExtKeyUsageSyntax.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1474
1475
1476class HoldInstructionCode(univ.ObjectIdentifier):
1477    pass
1478
1479
1480id_ce_deltaCRLIndicator = _buildOid(id_ce, 27)
1481
1482id_ce_keyUsage = _buildOid(id_ce, 15)
1483
1484id_ce_holdInstructionCode = _buildOid(id_ce, 23)
1485
1486
1487class SubjectInfoAccessSyntax(univ.SequenceOf):
1488    pass
1489
1490
1491SubjectInfoAccessSyntax.componentType = AccessDescription()
1492SubjectInfoAccessSyntax.subtypeSpec = constraint.ValueSizeConstraint(1, MAX)
1493
1494
1495class InvalidityDate(useful.GeneralizedTime):
1496    pass
1497
1498
1499class KeyUsage(univ.BitString):
1500    pass
1501
1502
1503KeyUsage.namedValues = namedval.NamedValues(
1504    ('digitalSignature', 0),
1505    ('nonRepudiation', 1),
1506    ('keyEncipherment', 2),
1507    ('dataEncipherment', 3),
1508    ('keyAgreement', 4),
1509    ('keyCertSign', 5),
1510    ('cRLSign', 6),
1511    ('encipherOnly', 7),
1512    ('decipherOnly', 8)
1513)
1514
1515id_ce_invalidityDate = _buildOid(id_ce, 24)
1516
1517id_ce_policyMappings = _buildOid(id_ce, 33)
1518
1519anyExtendedKeyUsage = _buildOid(id_ce_extKeyUsage, 0)
1520
1521id_ce_privateKeyUsagePeriod = _buildOid(id_ce, 16)
1522
1523id_ce_cRLNumber = _buildOid(id_ce, 20)
1524
1525
1526class CertificateIssuer(GeneralNames):
1527    pass
1528
1529
1530id_holdinstruction_reject = _buildOid(holdInstruction, 3)
1531
1532
1533class PolicyConstraints(univ.Sequence):
1534    pass
1535
1536
1537PolicyConstraints.componentType = namedtype.NamedTypes(
1538    namedtype.OptionalNamedType('requireExplicitPolicy',
1539                                SkipCerts().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
1540    namedtype.OptionalNamedType('inhibitPolicyMapping',
1541                                SkipCerts().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
1542)
1543
1544id_kp_clientAuth = _buildOid(id_kp, 2)
1545
1546id_ce_subjectKeyIdentifier = _buildOid(id_ce, 14)
1547
1548id_ce_inhibitAnyPolicy = _buildOid(id_ce, 54)
1549
1550# map of AttributeType -> AttributeValue
1551
1552certificateAttributesMap = {
1553    id_at_name: X520name(),
1554    id_at_surname: X520name(),
1555    id_at_givenName: X520name(),
1556    id_at_initials: X520name(),
1557    id_at_generationQualifier: X520name(),
1558    id_at_commonName: X520CommonName(),
1559    id_at_localityName: X520LocalityName(),
1560    id_at_stateOrProvinceName: X520StateOrProvinceName(),
1561    id_at_organizationName: X520OrganizationName(),
1562    id_at_organizationalUnitName: X520OrganizationalUnitName(),
1563    id_at_title: X520Title(),
1564    id_at_dnQualifier: X520dnQualifier(),
1565    id_at_countryName: X520countryName(),
1566    id_at_serialNumber: X520SerialNumber(),
1567    id_at_pseudonym: X520Pseudonym(),
1568    id_domainComponent: DomainComponent(),
1569    id_emailAddress: EmailAddress(),
1570}
1571
1572# map of Certificate Extension OIDs to Extensions
1573
1574certificateExtensionsMap = {
1575    id_ce_authorityKeyIdentifier: AuthorityKeyIdentifier(),
1576    id_ce_subjectKeyIdentifier: SubjectKeyIdentifier(),
1577    id_ce_keyUsage: KeyUsage(),
1578    id_ce_privateKeyUsagePeriod: PrivateKeyUsagePeriod(),
1579    id_ce_certificatePolicies: PolicyInformation(),  # could be a sequence of concat'ed objects?
1580    id_ce_policyMappings: PolicyMappings(),
1581    id_ce_subjectAltName: SubjectAltName(),
1582    id_ce_issuerAltName: IssuerAltName(),
1583    id_ce_subjectDirectoryAttributes: SubjectDirectoryAttributes(),
1584    id_ce_basicConstraints: BasicConstraints(),
1585    id_ce_nameConstraints: NameConstraints(),
1586    id_ce_policyConstraints: PolicyConstraints(),
1587    id_ce_extKeyUsage: ExtKeyUsageSyntax(),
1588    id_ce_cRLDistributionPoints: CRLDistributionPoints(),
1589    id_pe_authorityInfoAccess: AuthorityInfoAccessSyntax(),
1590    id_ce_cRLNumber: univ.Integer(),
1591    id_ce_deltaCRLIndicator: BaseCRLNumber(),
1592    id_ce_issuingDistributionPoint: IssuingDistributionPoint(),
1593    id_ce_cRLReasons: CRLReason(),
1594    id_ce_holdInstructionCode: univ.ObjectIdentifier(),
1595    id_ce_invalidityDate: useful.GeneralizedTime(),
1596    id_ce_certificateIssuer: GeneralNames(),
1597}
1598