Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rfc2459.py 49KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337
  1. #
  2. # This file is part of pyasn1-modules software.
  3. #
  4. # Copyright (c) 2005-2018, Ilya Etingof <etingof@gmail.com>
  5. # License: http://snmplabs.com/pyasn1/license.html
  6. #
  7. # X.509 message syntax
  8. #
  9. # ASN.1 source from:
  10. # http://www.trl.ibm.com/projects/xml/xss4j/data/asn1/grammars/x509.asn
  11. # http://www.ietf.org/rfc/rfc2459.txt
  12. #
  13. # Sample captures from:
  14. # http://wiki.wireshark.org/SampleCaptures/
  15. #
  16. from pyasn1.type import char
  17. from pyasn1.type import constraint
  18. from pyasn1.type import namedtype
  19. from pyasn1.type import namedval
  20. from pyasn1.type import opentype
  21. from pyasn1.type import tag
  22. from pyasn1.type import univ
  23. from pyasn1.type import useful
  24. MAX = float('inf')
  25. #
  26. # PKIX1Explicit88
  27. #
  28. # Upper Bounds
  29. ub_name = univ.Integer(32768)
  30. ub_common_name = univ.Integer(64)
  31. ub_locality_name = univ.Integer(128)
  32. ub_state_name = univ.Integer(128)
  33. ub_organization_name = univ.Integer(64)
  34. ub_organizational_unit_name = univ.Integer(64)
  35. ub_title = univ.Integer(64)
  36. ub_match = univ.Integer(128)
  37. ub_emailaddress_length = univ.Integer(128)
  38. ub_common_name_length = univ.Integer(64)
  39. ub_country_name_alpha_length = univ.Integer(2)
  40. ub_country_name_numeric_length = univ.Integer(3)
  41. ub_domain_defined_attributes = univ.Integer(4)
  42. ub_domain_defined_attribute_type_length = univ.Integer(8)
  43. ub_domain_defined_attribute_value_length = univ.Integer(128)
  44. ub_domain_name_length = univ.Integer(16)
  45. ub_extension_attributes = univ.Integer(256)
  46. ub_e163_4_number_length = univ.Integer(15)
  47. ub_e163_4_sub_address_length = univ.Integer(40)
  48. ub_generation_qualifier_length = univ.Integer(3)
  49. ub_given_name_length = univ.Integer(16)
  50. ub_initials_length = univ.Integer(5)
  51. ub_integer_options = univ.Integer(256)
  52. ub_numeric_user_id_length = univ.Integer(32)
  53. ub_organization_name_length = univ.Integer(64)
  54. ub_organizational_unit_name_length = univ.Integer(32)
  55. ub_organizational_units = univ.Integer(4)
  56. ub_pds_name_length = univ.Integer(16)
  57. ub_pds_parameter_length = univ.Integer(30)
  58. ub_pds_physical_address_lines = univ.Integer(6)
  59. ub_postal_code_length = univ.Integer(16)
  60. ub_surname_length = univ.Integer(40)
  61. ub_terminal_id_length = univ.Integer(24)
  62. ub_unformatted_address_length = univ.Integer(180)
  63. ub_x121_address_length = univ.Integer(16)
  64. class UniversalString(char.UniversalString):
  65. pass
  66. class BMPString(char.BMPString):
  67. pass
  68. class UTF8String(char.UTF8String):
  69. pass
  70. id_pkix = univ.ObjectIdentifier('1.3.6.1.5.5.7')
  71. id_pe = univ.ObjectIdentifier('1.3.6.1.5.5.7.1')
  72. id_qt = univ.ObjectIdentifier('1.3.6.1.5.5.7.2')
  73. id_kp = univ.ObjectIdentifier('1.3.6.1.5.5.7.3')
  74. id_ad = univ.ObjectIdentifier('1.3.6.1.5.5.7.48')
  75. id_qt_cps = univ.ObjectIdentifier('1.3.6.1.5.5.7.2.1')
  76. id_qt_unotice = univ.ObjectIdentifier('1.3.6.1.5.5.7.2.2')
  77. id_ad_ocsp = univ.ObjectIdentifier('1.3.6.1.5.5.7.48.1')
  78. id_ad_caIssuers = univ.ObjectIdentifier('1.3.6.1.5.5.7.48.2')
  79. id_at = univ.ObjectIdentifier('2.5.4')
  80. id_at_name = univ.ObjectIdentifier('2.5.4.41')
  81. # preserve misspelled variable for compatibility
  82. id_at_sutname = id_at_surname = univ.ObjectIdentifier('2.5.4.4')
  83. id_at_givenName = univ.ObjectIdentifier('2.5.4.42')
  84. id_at_initials = univ.ObjectIdentifier('2.5.4.43')
  85. id_at_generationQualifier = univ.ObjectIdentifier('2.5.4.44')
  86. class X520name(univ.Choice):
  87. componentType = namedtype.NamedTypes(
  88. namedtype.NamedType('teletexString',
  89. char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
  90. namedtype.NamedType('printableString',
  91. char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
  92. namedtype.NamedType('universalString',
  93. char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
  94. namedtype.NamedType('utf8String',
  95. char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name))),
  96. namedtype.NamedType('bmpString',
  97. char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_name)))
  98. )
  99. id_at_commonName = univ.ObjectIdentifier('2.5.4.3')
  100. class X520CommonName(univ.Choice):
  101. componentType = namedtype.NamedTypes(
  102. namedtype.NamedType('teletexString', char.TeletexString().subtype(
  103. subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
  104. namedtype.NamedType('printableString', char.PrintableString().subtype(
  105. subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
  106. namedtype.NamedType('universalString', char.UniversalString().subtype(
  107. subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
  108. namedtype.NamedType('utf8String',
  109. char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name))),
  110. namedtype.NamedType('bmpString',
  111. char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_common_name)))
  112. )
  113. id_at_localityName = univ.ObjectIdentifier('2.5.4.7')
  114. class X520LocalityName(univ.Choice):
  115. componentType = namedtype.NamedTypes(
  116. namedtype.NamedType('teletexString', char.TeletexString().subtype(
  117. subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
  118. namedtype.NamedType('printableString', char.PrintableString().subtype(
  119. subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
  120. namedtype.NamedType('universalString', char.UniversalString().subtype(
  121. subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
  122. namedtype.NamedType('utf8String',
  123. char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name))),
  124. namedtype.NamedType('bmpString',
  125. char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_locality_name)))
  126. )
  127. id_at_stateOrProvinceName = univ.ObjectIdentifier('2.5.4.8')
  128. class X520StateOrProvinceName(univ.Choice):
  129. componentType = namedtype.NamedTypes(
  130. namedtype.NamedType('teletexString',
  131. char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
  132. namedtype.NamedType('printableString', char.PrintableString().subtype(
  133. subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
  134. namedtype.NamedType('universalString', char.UniversalString().subtype(
  135. subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
  136. namedtype.NamedType('utf8String',
  137. char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name))),
  138. namedtype.NamedType('bmpString',
  139. char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_state_name)))
  140. )
  141. id_at_organizationName = univ.ObjectIdentifier('2.5.4.10')
  142. class X520OrganizationName(univ.Choice):
  143. componentType = namedtype.NamedTypes(
  144. namedtype.NamedType('teletexString', char.TeletexString().subtype(
  145. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
  146. namedtype.NamedType('printableString', char.PrintableString().subtype(
  147. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
  148. namedtype.NamedType('universalString', char.UniversalString().subtype(
  149. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
  150. namedtype.NamedType('utf8String', char.UTF8String().subtype(
  151. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name))),
  152. namedtype.NamedType('bmpString', char.BMPString().subtype(
  153. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organization_name)))
  154. )
  155. id_at_organizationalUnitName = univ.ObjectIdentifier('2.5.4.11')
  156. class X520OrganizationalUnitName(univ.Choice):
  157. componentType = namedtype.NamedTypes(
  158. namedtype.NamedType('teletexString', char.TeletexString().subtype(
  159. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
  160. namedtype.NamedType('printableString', char.PrintableString().subtype(
  161. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
  162. namedtype.NamedType('universalString', char.UniversalString().subtype(
  163. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
  164. namedtype.NamedType('utf8String', char.UTF8String().subtype(
  165. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name))),
  166. namedtype.NamedType('bmpString', char.BMPString().subtype(
  167. subtypeSpec=constraint.ValueSizeConstraint(1, ub_organizational_unit_name)))
  168. )
  169. id_at_title = univ.ObjectIdentifier('2.5.4.12')
  170. class X520Title(univ.Choice):
  171. componentType = namedtype.NamedTypes(
  172. namedtype.NamedType('teletexString',
  173. char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
  174. namedtype.NamedType('printableString',
  175. char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
  176. namedtype.NamedType('universalString',
  177. char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
  178. namedtype.NamedType('utf8String',
  179. char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title))),
  180. namedtype.NamedType('bmpString',
  181. char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, ub_title)))
  182. )
  183. id_at_dnQualifier = univ.ObjectIdentifier('2.5.4.46')
  184. class X520dnQualifier(char.PrintableString):
  185. pass
  186. id_at_countryName = univ.ObjectIdentifier('2.5.4.6')
  187. class X520countryName(char.PrintableString):
  188. subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(2, 2)
  189. pkcs_9 = univ.ObjectIdentifier('1.2.840.113549.1.9')
  190. emailAddress = univ.ObjectIdentifier('1.2.840.113549.1.9.1')
  191. class Pkcs9email(char.IA5String):
  192. subtypeSpec = char.IA5String.subtypeSpec + constraint.ValueSizeConstraint(1, ub_emailaddress_length)
  193. # ----
  194. class DSAPrivateKey(univ.Sequence):
  195. """PKIX compliant DSA private key structure"""
  196. componentType = namedtype.NamedTypes(
  197. namedtype.NamedType('version', univ.Integer(namedValues=namedval.NamedValues(('v1', 0)))),
  198. namedtype.NamedType('p', univ.Integer()),
  199. namedtype.NamedType('q', univ.Integer()),
  200. namedtype.NamedType('g', univ.Integer()),
  201. namedtype.NamedType('public', univ.Integer()),
  202. namedtype.NamedType('private', univ.Integer())
  203. )
  204. # ----
  205. class DirectoryString(univ.Choice):
  206. componentType = namedtype.NamedTypes(
  207. namedtype.NamedType('teletexString',
  208. char.TeletexString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
  209. namedtype.NamedType('printableString',
  210. char.PrintableString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
  211. namedtype.NamedType('universalString',
  212. char.UniversalString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
  213. namedtype.NamedType('utf8String',
  214. char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
  215. namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
  216. namedtype.NamedType('ia5String', char.IA5String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX)))
  217. # hm, this should not be here!? XXX
  218. )
  219. # certificate and CRL specific structures begin here
  220. class AlgorithmIdentifier(univ.Sequence):
  221. componentType = namedtype.NamedTypes(
  222. namedtype.NamedType('algorithm', univ.ObjectIdentifier()),
  223. namedtype.OptionalNamedType('parameters', univ.Any())
  224. )
  225. # Algorithm OIDs and parameter structures
  226. pkcs_1 = univ.ObjectIdentifier('1.2.840.113549.1.1')
  227. rsaEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.1')
  228. md2WithRSAEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.2')
  229. md5WithRSAEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.4')
  230. sha1WithRSAEncryption = univ.ObjectIdentifier('1.2.840.113549.1.1.5')
  231. id_dsa_with_sha1 = univ.ObjectIdentifier('1.2.840.10040.4.3')
  232. class Dss_Sig_Value(univ.Sequence):
  233. componentType = namedtype.NamedTypes(
  234. namedtype.NamedType('r', univ.Integer()),
  235. namedtype.NamedType('s', univ.Integer())
  236. )
  237. dhpublicnumber = univ.ObjectIdentifier('1.2.840.10046.2.1')
  238. class ValidationParms(univ.Sequence):
  239. componentType = namedtype.NamedTypes(
  240. namedtype.NamedType('seed', univ.BitString()),
  241. namedtype.NamedType('pgenCounter', univ.Integer())
  242. )
  243. class DomainParameters(univ.Sequence):
  244. componentType = namedtype.NamedTypes(
  245. namedtype.NamedType('p', univ.Integer()),
  246. namedtype.NamedType('g', univ.Integer()),
  247. namedtype.NamedType('q', univ.Integer()),
  248. namedtype.NamedType('j', univ.Integer()),
  249. namedtype.OptionalNamedType('validationParms', ValidationParms())
  250. )
  251. id_dsa = univ.ObjectIdentifier('1.2.840.10040.4.1')
  252. class Dss_Parms(univ.Sequence):
  253. componentType = namedtype.NamedTypes(
  254. namedtype.NamedType('p', univ.Integer()),
  255. namedtype.NamedType('q', univ.Integer()),
  256. namedtype.NamedType('g', univ.Integer())
  257. )
  258. # x400 address syntax starts here
  259. teletex_domain_defined_attributes = univ.Integer(6)
  260. class TeletexDomainDefinedAttribute(univ.Sequence):
  261. componentType = namedtype.NamedTypes(
  262. namedtype.NamedType('type', char.TeletexString().subtype(
  263. subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_type_length))),
  264. namedtype.NamedType('value', char.TeletexString())
  265. )
  266. class TeletexDomainDefinedAttributes(univ.SequenceOf):
  267. componentType = TeletexDomainDefinedAttribute()
  268. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, ub_domain_defined_attributes)
  269. terminal_type = univ.Integer(23)
  270. class TerminalType(univ.Integer):
  271. subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueSizeConstraint(0, ub_integer_options)
  272. namedValues = namedval.NamedValues(
  273. ('telex', 3),
  274. ('teletelex', 4),
  275. ('g3-facsimile', 5),
  276. ('g4-facsimile', 6),
  277. ('ia5-terminal', 7),
  278. ('videotex', 8)
  279. )
  280. class PresentationAddress(univ.Sequence):
  281. componentType = namedtype.NamedTypes(
  282. namedtype.OptionalNamedType('pSelector', univ.OctetString().subtype(
  283. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  284. namedtype.OptionalNamedType('sSelector', univ.OctetString().subtype(
  285. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  286. namedtype.OptionalNamedType('tSelector', univ.OctetString().subtype(
  287. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  288. namedtype.OptionalNamedType('nAddresses', univ.SetOf(componentType=univ.OctetString()).subtype(
  289. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3),
  290. subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
  291. )
  292. extended_network_address = univ.Integer(22)
  293. class E163_4_address(univ.Sequence):
  294. componentType = namedtype.NamedTypes(
  295. namedtype.NamedType('number', char.NumericString().subtype(
  296. subtypeSpec=constraint.ValueSizeConstraint(1, ub_e163_4_number_length),
  297. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  298. namedtype.OptionalNamedType('sub-address', char.NumericString().subtype(
  299. subtypeSpec=constraint.ValueSizeConstraint(1, ub_e163_4_sub_address_length),
  300. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
  301. )
  302. class ExtendedNetworkAddress(univ.Choice):
  303. componentType = namedtype.NamedTypes(
  304. namedtype.NamedType('e163-4-address', E163_4_address()),
  305. namedtype.NamedType('psap-address', PresentationAddress().subtype(
  306. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
  307. )
  308. class PDSParameter(univ.Set):
  309. componentType = namedtype.NamedTypes(
  310. namedtype.OptionalNamedType('printable-string', char.PrintableString().subtype(
  311. subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length))),
  312. namedtype.OptionalNamedType('teletex-string', char.TeletexString().subtype(
  313. subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length)))
  314. )
  315. local_postal_attributes = univ.Integer(21)
  316. class LocalPostalAttributes(PDSParameter):
  317. pass
  318. class UniquePostalName(PDSParameter):
  319. pass
  320. unique_postal_name = univ.Integer(20)
  321. poste_restante_address = univ.Integer(19)
  322. class PosteRestanteAddress(PDSParameter):
  323. pass
  324. post_office_box_address = univ.Integer(18)
  325. class PostOfficeBoxAddress(PDSParameter):
  326. pass
  327. street_address = univ.Integer(17)
  328. class StreetAddress(PDSParameter):
  329. pass
  330. class UnformattedPostalAddress(univ.Set):
  331. componentType = namedtype.NamedTypes(
  332. namedtype.OptionalNamedType('printable-address', univ.SequenceOf(componentType=char.PrintableString().subtype(
  333. subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_parameter_length)).subtype(
  334. subtypeSpec=constraint.ValueSizeConstraint(1, ub_pds_physical_address_lines)))),
  335. namedtype.OptionalNamedType('teletex-string', char.TeletexString().subtype(
  336. subtypeSpec=constraint.ValueSizeConstraint(1, ub_unformatted_address_length)))
  337. )
  338. physical_delivery_office_name = univ.Integer(10)
  339. class PhysicalDeliveryOfficeName(PDSParameter):
  340. pass
  341. physical_delivery_office_number = univ.Integer(11)
  342. class PhysicalDeliveryOfficeNumber(PDSParameter):
  343. pass
  344. extension_OR_address_components = univ.Integer(12)
  345. class ExtensionORAddressComponents(PDSParameter):
  346. pass
  347. physical_delivery_personal_name = univ.Integer(13)
  348. class PhysicalDeliveryPersonalName(PDSParameter):
  349. pass
  350. physical_delivery_organization_name = univ.Integer(14)
  351. class PhysicalDeliveryOrganizationName(PDSParameter):
  352. pass
  353. extension_physical_delivery_address_components = univ.Integer(15)
  354. class ExtensionPhysicalDeliveryAddressComponents(PDSParameter):
  355. pass
  356. unformatted_postal_address = univ.Integer(16)
  357. postal_code = univ.Integer(9)
  358. class PostalCode(univ.Choice):
  359. componentType = namedtype.NamedTypes(
  360. namedtype.NamedType('numeric-code', char.NumericString().subtype(
  361. subtypeSpec=constraint.ValueSizeConstraint(1, ub_postal_code_length))),
  362. namedtype.NamedType('printable-code', char.PrintableString().subtype(
  363. subtypeSpec=constraint.ValueSizeConstraint(1, ub_postal_code_length)))
  364. )
  365. class PhysicalDeliveryCountryName(univ.Choice):
  366. componentType = namedtype.NamedTypes(
  367. namedtype.NamedType('x121-dcc-code', char.NumericString().subtype(
  368. subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_numeric_length,
  369. ub_country_name_numeric_length))),
  370. namedtype.NamedType('iso-3166-alpha2-code', char.PrintableString().subtype(
  371. subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_alpha_length, ub_country_name_alpha_length)))
  372. )
  373. class PDSName(char.PrintableString):
  374. subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_pds_name_length)
  375. physical_delivery_country_name = univ.Integer(8)
  376. class TeletexOrganizationalUnitName(char.TeletexString):
  377. subtypeSpec = char.TeletexString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organizational_unit_name_length)
  378. pds_name = univ.Integer(7)
  379. teletex_organizational_unit_names = univ.Integer(5)
  380. class TeletexOrganizationalUnitNames(univ.SequenceOf):
  381. componentType = TeletexOrganizationalUnitName()
  382. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organizational_units)
  383. teletex_personal_name = univ.Integer(4)
  384. class TeletexPersonalName(univ.Set):
  385. componentType = namedtype.NamedTypes(
  386. namedtype.NamedType('surname', char.TeletexString().subtype(
  387. subtypeSpec=constraint.ValueSizeConstraint(1, ub_surname_length),
  388. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  389. namedtype.OptionalNamedType('given-name', char.TeletexString().subtype(
  390. subtypeSpec=constraint.ValueSizeConstraint(1, ub_given_name_length),
  391. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  392. namedtype.OptionalNamedType('initials', char.TeletexString().subtype(
  393. subtypeSpec=constraint.ValueSizeConstraint(1, ub_initials_length),
  394. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  395. namedtype.OptionalNamedType('generation-qualifier', char.TeletexString().subtype(
  396. subtypeSpec=constraint.ValueSizeConstraint(1, ub_generation_qualifier_length),
  397. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
  398. )
  399. teletex_organization_name = univ.Integer(3)
  400. class TeletexOrganizationName(char.TeletexString):
  401. subtypeSpec = char.TeletexString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organization_name_length)
  402. teletex_common_name = univ.Integer(2)
  403. class TeletexCommonName(char.TeletexString):
  404. subtypeSpec = char.TeletexString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_common_name_length)
  405. class CommonName(char.PrintableString):
  406. subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_common_name_length)
  407. common_name = univ.Integer(1)
  408. class ExtensionAttribute(univ.Sequence):
  409. componentType = namedtype.NamedTypes(
  410. namedtype.NamedType('extension-attribute-type', univ.Integer().subtype(
  411. subtypeSpec=constraint.ValueSizeConstraint(0, ub_extension_attributes),
  412. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  413. namedtype.NamedType('extension-attribute-value',
  414. univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
  415. )
  416. class ExtensionAttributes(univ.SetOf):
  417. componentType = ExtensionAttribute()
  418. subtypeSpec = univ.SetOf.subtypeSpec + constraint.ValueSizeConstraint(1, ub_extension_attributes)
  419. class BuiltInDomainDefinedAttribute(univ.Sequence):
  420. componentType = namedtype.NamedTypes(
  421. namedtype.NamedType('type', char.PrintableString().subtype(
  422. subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_type_length))),
  423. namedtype.NamedType('value', char.PrintableString().subtype(
  424. subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_defined_attribute_value_length)))
  425. )
  426. class BuiltInDomainDefinedAttributes(univ.SequenceOf):
  427. componentType = BuiltInDomainDefinedAttribute()
  428. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, ub_domain_defined_attributes)
  429. class OrganizationalUnitName(char.PrintableString):
  430. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organizational_unit_name_length)
  431. class OrganizationalUnitNames(univ.SequenceOf):
  432. componentType = OrganizationalUnitName()
  433. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organizational_units)
  434. class PersonalName(univ.Set):
  435. componentType = namedtype.NamedTypes(
  436. namedtype.NamedType('surname', char.PrintableString().subtype(
  437. subtypeSpec=constraint.ValueSizeConstraint(1, ub_surname_length),
  438. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  439. namedtype.OptionalNamedType('given-name', char.PrintableString().subtype(
  440. subtypeSpec=constraint.ValueSizeConstraint(1, ub_given_name_length),
  441. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  442. namedtype.OptionalNamedType('initials', char.PrintableString().subtype(
  443. subtypeSpec=constraint.ValueSizeConstraint(1, ub_initials_length),
  444. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  445. namedtype.OptionalNamedType('generation-qualifier', char.PrintableString().subtype(
  446. subtypeSpec=constraint.ValueSizeConstraint(1, ub_generation_qualifier_length),
  447. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
  448. )
  449. class NumericUserIdentifier(char.NumericString):
  450. subtypeSpec = char.NumericString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_numeric_user_id_length)
  451. class OrganizationName(char.PrintableString):
  452. subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_organization_name_length)
  453. class PrivateDomainName(univ.Choice):
  454. componentType = namedtype.NamedTypes(
  455. namedtype.NamedType('numeric', char.NumericString().subtype(
  456. subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_name_length))),
  457. namedtype.NamedType('printable', char.PrintableString().subtype(
  458. subtypeSpec=constraint.ValueSizeConstraint(1, ub_domain_name_length)))
  459. )
  460. class TerminalIdentifier(char.PrintableString):
  461. subtypeSpec = char.PrintableString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_terminal_id_length)
  462. class X121Address(char.NumericString):
  463. subtypeSpec = char.NumericString.subtypeSpec + constraint.ValueSizeConstraint(1, ub_x121_address_length)
  464. class NetworkAddress(X121Address):
  465. pass
  466. class AdministrationDomainName(univ.Choice):
  467. tagSet = univ.Choice.tagSet.tagExplicitly(
  468. tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 2)
  469. )
  470. componentType = namedtype.NamedTypes(
  471. namedtype.NamedType('numeric', char.NumericString().subtype(
  472. subtypeSpec=constraint.ValueSizeConstraint(0, ub_domain_name_length))),
  473. namedtype.NamedType('printable', char.PrintableString().subtype(
  474. subtypeSpec=constraint.ValueSizeConstraint(0, ub_domain_name_length)))
  475. )
  476. class CountryName(univ.Choice):
  477. tagSet = univ.Choice.tagSet.tagExplicitly(
  478. tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 1)
  479. )
  480. componentType = namedtype.NamedTypes(
  481. namedtype.NamedType('x121-dcc-code', char.NumericString().subtype(
  482. subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_numeric_length,
  483. ub_country_name_numeric_length))),
  484. namedtype.NamedType('iso-3166-alpha2-code', char.PrintableString().subtype(
  485. subtypeSpec=constraint.ValueSizeConstraint(ub_country_name_alpha_length, ub_country_name_alpha_length)))
  486. )
  487. class BuiltInStandardAttributes(univ.Sequence):
  488. componentType = namedtype.NamedTypes(
  489. namedtype.OptionalNamedType('country-name', CountryName()),
  490. namedtype.OptionalNamedType('administration-domain-name', AdministrationDomainName()),
  491. namedtype.OptionalNamedType('network-address', NetworkAddress().subtype(
  492. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  493. namedtype.OptionalNamedType('terminal-identifier', TerminalIdentifier().subtype(
  494. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  495. namedtype.OptionalNamedType('private-domain-name', PrivateDomainName().subtype(
  496. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  497. namedtype.OptionalNamedType('organization-name', OrganizationName().subtype(
  498. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
  499. namedtype.OptionalNamedType('numeric-user-identifier', NumericUserIdentifier().subtype(
  500. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
  501. namedtype.OptionalNamedType('personal-name', PersonalName().subtype(
  502. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))),
  503. namedtype.OptionalNamedType('organizational-unit-names', OrganizationalUnitNames().subtype(
  504. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6)))
  505. )
  506. class ORAddress(univ.Sequence):
  507. componentType = namedtype.NamedTypes(
  508. namedtype.NamedType('built-in-standard-attributes', BuiltInStandardAttributes()),
  509. namedtype.OptionalNamedType('built-in-domain-defined-attributes', BuiltInDomainDefinedAttributes()),
  510. namedtype.OptionalNamedType('extension-attributes', ExtensionAttributes())
  511. )
  512. #
  513. # PKIX1Implicit88
  514. #
  515. id_ce_invalidityDate = univ.ObjectIdentifier('2.5.29.24')
  516. class InvalidityDate(useful.GeneralizedTime):
  517. pass
  518. id_holdinstruction_none = univ.ObjectIdentifier('2.2.840.10040.2.1')
  519. id_holdinstruction_callissuer = univ.ObjectIdentifier('2.2.840.10040.2.2')
  520. id_holdinstruction_reject = univ.ObjectIdentifier('2.2.840.10040.2.3')
  521. holdInstruction = univ.ObjectIdentifier('2.2.840.10040.2')
  522. id_ce_holdInstructionCode = univ.ObjectIdentifier('2.5.29.23')
  523. class HoldInstructionCode(univ.ObjectIdentifier):
  524. pass
  525. id_ce_cRLReasons = univ.ObjectIdentifier('2.5.29.21')
  526. class CRLReason(univ.Enumerated):
  527. namedValues = namedval.NamedValues(
  528. ('unspecified', 0),
  529. ('keyCompromise', 1),
  530. ('cACompromise', 2),
  531. ('affiliationChanged', 3),
  532. ('superseded', 4),
  533. ('cessationOfOperation', 5),
  534. ('certificateHold', 6),
  535. ('removeFromCRL', 8)
  536. )
  537. id_ce_cRLNumber = univ.ObjectIdentifier('2.5.29.20')
  538. class CRLNumber(univ.Integer):
  539. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(0, MAX)
  540. class BaseCRLNumber(CRLNumber):
  541. pass
  542. id_kp_serverAuth = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.1')
  543. id_kp_clientAuth = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.2')
  544. id_kp_codeSigning = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.3')
  545. id_kp_emailProtection = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.4')
  546. id_kp_ipsecEndSystem = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.5')
  547. id_kp_ipsecTunnel = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.6')
  548. id_kp_ipsecUser = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.7')
  549. id_kp_timeStamping = univ.ObjectIdentifier('1.3.6.1.5.5.7.3.8')
  550. id_pe_authorityInfoAccess = univ.ObjectIdentifier('1.3.6.1.5.5.7.1.1')
  551. id_ce_extKeyUsage = univ.ObjectIdentifier('2.5.29.37')
  552. class KeyPurposeId(univ.ObjectIdentifier):
  553. pass
  554. class ExtKeyUsageSyntax(univ.SequenceOf):
  555. componentType = KeyPurposeId()
  556. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  557. class ReasonFlags(univ.BitString):
  558. namedValues = namedval.NamedValues(
  559. ('unused', 0),
  560. ('keyCompromise', 1),
  561. ('cACompromise', 2),
  562. ('affiliationChanged', 3),
  563. ('superseded', 4),
  564. ('cessationOfOperation', 5),
  565. ('certificateHold', 6)
  566. )
  567. class SkipCerts(univ.Integer):
  568. subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueSizeConstraint(0, MAX)
  569. id_ce_policyConstraints = univ.ObjectIdentifier('2.5.29.36')
  570. class PolicyConstraints(univ.Sequence):
  571. componentType = namedtype.NamedTypes(
  572. namedtype.OptionalNamedType('requireExplicitPolicy', SkipCerts().subtype(
  573. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  574. namedtype.OptionalNamedType('inhibitPolicyMapping', SkipCerts().subtype(
  575. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
  576. )
  577. id_ce_basicConstraints = univ.ObjectIdentifier('2.5.29.19')
  578. class BasicConstraints(univ.Sequence):
  579. componentType = namedtype.NamedTypes(
  580. namedtype.DefaultedNamedType('cA', univ.Boolean(False)),
  581. namedtype.OptionalNamedType('pathLenConstraint',
  582. univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, MAX)))
  583. )
  584. id_ce_subjectDirectoryAttributes = univ.ObjectIdentifier('2.5.29.9')
  585. class EDIPartyName(univ.Sequence):
  586. componentType = namedtype.NamedTypes(
  587. namedtype.OptionalNamedType('nameAssigner', DirectoryString().subtype(
  588. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  589. namedtype.NamedType('partyName',
  590. DirectoryString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
  591. )
  592. id_ce_deltaCRLIndicator = univ.ObjectIdentifier('2.5.29.27')
  593. class BaseDistance(univ.Integer):
  594. subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueRangeConstraint(0, MAX)
  595. id_ce_cRLDistributionPoints = univ.ObjectIdentifier('2.5.29.31')
  596. id_ce_issuingDistributionPoint = univ.ObjectIdentifier('2.5.29.28')
  597. id_ce_nameConstraints = univ.ObjectIdentifier('2.5.29.30')
  598. class DisplayText(univ.Choice):
  599. componentType = namedtype.NamedTypes(
  600. namedtype.NamedType('visibleString',
  601. char.VisibleString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))),
  602. namedtype.NamedType('bmpString', char.BMPString().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200))),
  603. namedtype.NamedType('utf8String', char.UTF8String().subtype(subtypeSpec=constraint.ValueSizeConstraint(1, 200)))
  604. )
  605. class NoticeReference(univ.Sequence):
  606. componentType = namedtype.NamedTypes(
  607. namedtype.NamedType('organization', DisplayText()),
  608. namedtype.NamedType('noticeNumbers', univ.SequenceOf(componentType=univ.Integer()))
  609. )
  610. class UserNotice(univ.Sequence):
  611. componentType = namedtype.NamedTypes(
  612. namedtype.OptionalNamedType('noticeRef', NoticeReference()),
  613. namedtype.OptionalNamedType('explicitText', DisplayText())
  614. )
  615. class CPSuri(char.IA5String):
  616. pass
  617. class PolicyQualifierId(univ.ObjectIdentifier):
  618. subtypeSpec = univ.ObjectIdentifier.subtypeSpec + constraint.SingleValueConstraint(id_qt_cps, id_qt_unotice)
  619. class CertPolicyId(univ.ObjectIdentifier):
  620. pass
  621. class PolicyQualifierInfo(univ.Sequence):
  622. componentType = namedtype.NamedTypes(
  623. namedtype.NamedType('policyQualifierId', PolicyQualifierId()),
  624. namedtype.NamedType('qualifier', univ.Any())
  625. )
  626. id_ce_certificatePolicies = univ.ObjectIdentifier('2.5.29.32')
  627. class PolicyInformation(univ.Sequence):
  628. componentType = namedtype.NamedTypes(
  629. namedtype.NamedType('policyIdentifier', CertPolicyId()),
  630. namedtype.OptionalNamedType('policyQualifiers', univ.SequenceOf(componentType=PolicyQualifierInfo()).subtype(
  631. subtypeSpec=constraint.ValueSizeConstraint(1, MAX)))
  632. )
  633. class CertificatePolicies(univ.SequenceOf):
  634. componentType = PolicyInformation()
  635. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  636. id_ce_policyMappings = univ.ObjectIdentifier('2.5.29.33')
  637. class PolicyMapping(univ.Sequence):
  638. componentType = namedtype.NamedTypes(
  639. namedtype.NamedType('issuerDomainPolicy', CertPolicyId()),
  640. namedtype.NamedType('subjectDomainPolicy', CertPolicyId())
  641. )
  642. class PolicyMappings(univ.SequenceOf):
  643. componentType = PolicyMapping()
  644. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  645. id_ce_privateKeyUsagePeriod = univ.ObjectIdentifier('2.5.29.16')
  646. class PrivateKeyUsagePeriod(univ.Sequence):
  647. componentType = namedtype.NamedTypes(
  648. namedtype.OptionalNamedType('notBefore', useful.GeneralizedTime().subtype(
  649. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  650. namedtype.OptionalNamedType('notAfter', useful.GeneralizedTime().subtype(
  651. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
  652. )
  653. id_ce_keyUsage = univ.ObjectIdentifier('2.5.29.15')
  654. class KeyUsage(univ.BitString):
  655. namedValues = namedval.NamedValues(
  656. ('digitalSignature', 0),
  657. ('nonRepudiation', 1),
  658. ('keyEncipherment', 2),
  659. ('dataEncipherment', 3),
  660. ('keyAgreement', 4),
  661. ('keyCertSign', 5),
  662. ('cRLSign', 6),
  663. ('encipherOnly', 7),
  664. ('decipherOnly', 8)
  665. )
  666. id_ce = univ.ObjectIdentifier('2.5.29')
  667. id_ce_authorityKeyIdentifier = univ.ObjectIdentifier('2.5.29.35')
  668. class KeyIdentifier(univ.OctetString):
  669. pass
  670. id_ce_subjectKeyIdentifier = univ.ObjectIdentifier('2.5.29.14')
  671. class SubjectKeyIdentifier(KeyIdentifier):
  672. pass
  673. id_ce_certificateIssuer = univ.ObjectIdentifier('2.5.29.29')
  674. id_ce_subjectAltName = univ.ObjectIdentifier('2.5.29.17')
  675. id_ce_issuerAltName = univ.ObjectIdentifier('2.5.29.18')
  676. class AttributeValue(univ.Any):
  677. pass
  678. class AttributeType(univ.ObjectIdentifier):
  679. pass
  680. certificateAttributesMap = {}
  681. class AttributeTypeAndValue(univ.Sequence):
  682. componentType = namedtype.NamedTypes(
  683. namedtype.NamedType('type', AttributeType()),
  684. namedtype.NamedType('value', AttributeValue(),
  685. openType=opentype.OpenType('type', certificateAttributesMap))
  686. )
  687. class Attribute(univ.Sequence):
  688. componentType = namedtype.NamedTypes(
  689. namedtype.NamedType('type', AttributeType()),
  690. namedtype.NamedType('vals', univ.SetOf(componentType=AttributeValue()))
  691. )
  692. class SubjectDirectoryAttributes(univ.SequenceOf):
  693. componentType = Attribute()
  694. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  695. class RelativeDistinguishedName(univ.SetOf):
  696. componentType = AttributeTypeAndValue()
  697. class RDNSequence(univ.SequenceOf):
  698. componentType = RelativeDistinguishedName()
  699. class Name(univ.Choice):
  700. componentType = namedtype.NamedTypes(
  701. namedtype.NamedType('', RDNSequence())
  702. )
  703. class CertificateSerialNumber(univ.Integer):
  704. pass
  705. class AnotherName(univ.Sequence):
  706. componentType = namedtype.NamedTypes(
  707. namedtype.NamedType('type-id', univ.ObjectIdentifier()),
  708. namedtype.NamedType('value',
  709. univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
  710. )
  711. class GeneralName(univ.Choice):
  712. componentType = namedtype.NamedTypes(
  713. namedtype.NamedType('otherName',
  714. AnotherName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  715. namedtype.NamedType('rfc822Name',
  716. char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  717. namedtype.NamedType('dNSName',
  718. char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  719. namedtype.NamedType('x400Address',
  720. ORAddress().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
  721. namedtype.NamedType('directoryName',
  722. Name().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
  723. namedtype.NamedType('ediPartyName',
  724. EDIPartyName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))),
  725. namedtype.NamedType('uniformResourceIdentifier',
  726. char.IA5String().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6))),
  727. namedtype.NamedType('iPAddress', univ.OctetString().subtype(
  728. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))),
  729. namedtype.NamedType('registeredID', univ.ObjectIdentifier().subtype(
  730. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8)))
  731. )
  732. class GeneralNames(univ.SequenceOf):
  733. componentType = GeneralName()
  734. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  735. class AccessDescription(univ.Sequence):
  736. componentType = namedtype.NamedTypes(
  737. namedtype.NamedType('accessMethod', univ.ObjectIdentifier()),
  738. namedtype.NamedType('accessLocation', GeneralName())
  739. )
  740. class AuthorityInfoAccessSyntax(univ.SequenceOf):
  741. componentType = AccessDescription()
  742. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  743. class AuthorityKeyIdentifier(univ.Sequence):
  744. componentType = namedtype.NamedTypes(
  745. namedtype.OptionalNamedType('keyIdentifier', KeyIdentifier().subtype(
  746. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  747. namedtype.OptionalNamedType('authorityCertIssuer', GeneralNames().subtype(
  748. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  749. namedtype.OptionalNamedType('authorityCertSerialNumber', CertificateSerialNumber().subtype(
  750. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
  751. )
  752. class DistributionPointName(univ.Choice):
  753. componentType = namedtype.NamedTypes(
  754. namedtype.NamedType('fullName', GeneralNames().subtype(
  755. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  756. namedtype.NamedType('nameRelativeToCRLIssuer', RelativeDistinguishedName().subtype(
  757. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
  758. )
  759. class DistributionPoint(univ.Sequence):
  760. componentType = namedtype.NamedTypes(
  761. namedtype.OptionalNamedType('distributionPoint', DistributionPointName().subtype(
  762. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  763. namedtype.OptionalNamedType('reasons', ReasonFlags().subtype(
  764. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  765. namedtype.OptionalNamedType('cRLIssuer', GeneralNames().subtype(
  766. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2)))
  767. )
  768. class CRLDistPointsSyntax(univ.SequenceOf):
  769. componentType = DistributionPoint()
  770. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  771. class IssuingDistributionPoint(univ.Sequence):
  772. componentType = namedtype.NamedTypes(
  773. namedtype.OptionalNamedType('distributionPoint', DistributionPointName().subtype(
  774. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  775. namedtype.NamedType('onlyContainsUserCerts', univ.Boolean(False).subtype(
  776. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  777. namedtype.NamedType('onlyContainsCACerts', univ.Boolean(False).subtype(
  778. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  779. namedtype.OptionalNamedType('onlySomeReasons', ReasonFlags().subtype(
  780. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
  781. namedtype.NamedType('indirectCRL', univ.Boolean(False).subtype(
  782. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)))
  783. )
  784. class GeneralSubtree(univ.Sequence):
  785. componentType = namedtype.NamedTypes(
  786. namedtype.NamedType('base', GeneralName()),
  787. namedtype.DefaultedNamedType('minimum', BaseDistance(0).subtype(
  788. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  789. namedtype.OptionalNamedType('maximum', BaseDistance().subtype(
  790. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
  791. )
  792. class GeneralSubtrees(univ.SequenceOf):
  793. componentType = GeneralSubtree()
  794. subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1, MAX)
  795. class NameConstraints(univ.Sequence):
  796. componentType = namedtype.NamedTypes(
  797. namedtype.OptionalNamedType('permittedSubtrees', GeneralSubtrees().subtype(
  798. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  799. namedtype.OptionalNamedType('excludedSubtrees', GeneralSubtrees().subtype(
  800. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
  801. )
  802. class CertificateIssuer(GeneralNames):
  803. pass
  804. class SubjectAltName(GeneralNames):
  805. pass
  806. class IssuerAltName(GeneralNames):
  807. pass
  808. certificateExtensionsMap = {}
  809. class Extension(univ.Sequence):
  810. componentType = namedtype.NamedTypes(
  811. namedtype.NamedType('extnID', univ.ObjectIdentifier()),
  812. namedtype.DefaultedNamedType('critical', univ.Boolean('False')),
  813. namedtype.NamedType('extnValue', univ.OctetString(),
  814. openType=opentype.OpenType('extnID', certificateExtensionsMap))
  815. )
  816. class Extensions(univ.SequenceOf):
  817. componentType = Extension()
  818. sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
  819. class SubjectPublicKeyInfo(univ.Sequence):
  820. componentType = namedtype.NamedTypes(
  821. namedtype.NamedType('algorithm', AlgorithmIdentifier()),
  822. namedtype.NamedType('subjectPublicKey', univ.BitString())
  823. )
  824. class UniqueIdentifier(univ.BitString):
  825. pass
  826. class Time(univ.Choice):
  827. componentType = namedtype.NamedTypes(
  828. namedtype.NamedType('utcTime', useful.UTCTime()),
  829. namedtype.NamedType('generalTime', useful.GeneralizedTime())
  830. )
  831. class Validity(univ.Sequence):
  832. componentType = namedtype.NamedTypes(
  833. namedtype.NamedType('notBefore', Time()),
  834. namedtype.NamedType('notAfter', Time())
  835. )
  836. class Version(univ.Integer):
  837. namedValues = namedval.NamedValues(
  838. ('v1', 0), ('v2', 1), ('v3', 2)
  839. )
  840. class TBSCertificate(univ.Sequence):
  841. componentType = namedtype.NamedTypes(
  842. namedtype.DefaultedNamedType('version', Version('v1').subtype(
  843. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
  844. namedtype.NamedType('serialNumber', CertificateSerialNumber()),
  845. namedtype.NamedType('signature', AlgorithmIdentifier()),
  846. namedtype.NamedType('issuer', Name()),
  847. namedtype.NamedType('validity', Validity()),
  848. namedtype.NamedType('subject', Name()),
  849. namedtype.NamedType('subjectPublicKeyInfo', SubjectPublicKeyInfo()),
  850. namedtype.OptionalNamedType('issuerUniqueID', UniqueIdentifier().subtype(
  851. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
  852. namedtype.OptionalNamedType('subjectUniqueID', UniqueIdentifier().subtype(
  853. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
  854. namedtype.OptionalNamedType('extensions', Extensions().subtype(
  855. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))
  856. )
  857. class Certificate(univ.Sequence):
  858. componentType = namedtype.NamedTypes(
  859. namedtype.NamedType('tbsCertificate', TBSCertificate()),
  860. namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()),
  861. namedtype.NamedType('signatureValue', univ.BitString())
  862. )
  863. # CRL structures
  864. class RevokedCertificate(univ.Sequence):
  865. componentType = namedtype.NamedTypes(
  866. namedtype.NamedType('userCertificate', CertificateSerialNumber()),
  867. namedtype.NamedType('revocationDate', Time()),
  868. namedtype.OptionalNamedType('crlEntryExtensions', Extensions())
  869. )
  870. class TBSCertList(univ.Sequence):
  871. componentType = namedtype.NamedTypes(
  872. namedtype.OptionalNamedType('version', Version()),
  873. namedtype.NamedType('signature', AlgorithmIdentifier()),
  874. namedtype.NamedType('issuer', Name()),
  875. namedtype.NamedType('thisUpdate', Time()),
  876. namedtype.OptionalNamedType('nextUpdate', Time()),
  877. namedtype.OptionalNamedType('revokedCertificates', univ.SequenceOf(componentType=RevokedCertificate())),
  878. namedtype.OptionalNamedType('crlExtensions', Extensions().subtype(
  879. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
  880. )
  881. class CertificateList(univ.Sequence):
  882. componentType = namedtype.NamedTypes(
  883. namedtype.NamedType('tbsCertList', TBSCertList()),
  884. namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()),
  885. namedtype.NamedType('signature', univ.BitString())
  886. )
  887. # map of AttributeType -> AttributeValue
  888. _certificateAttributesMapUpdate = {
  889. id_at_name: X520name(),
  890. id_at_surname: X520name(),
  891. id_at_givenName: X520name(),
  892. id_at_initials: X520name(),
  893. id_at_generationQualifier: X520name(),
  894. id_at_commonName: X520CommonName(),
  895. id_at_localityName: X520LocalityName(),
  896. id_at_stateOrProvinceName: X520StateOrProvinceName(),
  897. id_at_organizationName: X520OrganizationName(),
  898. id_at_organizationalUnitName: X520OrganizationalUnitName(),
  899. id_at_title: X520Title(),
  900. id_at_dnQualifier: X520dnQualifier(),
  901. id_at_countryName: X520countryName(),
  902. emailAddress: Pkcs9email(),
  903. }
  904. certificateAttributesMap.update(_certificateAttributesMapUpdate)
  905. # map of Certificate Extension OIDs to Extensions
  906. _certificateExtensionsMapUpdate = {
  907. id_ce_authorityKeyIdentifier: AuthorityKeyIdentifier(),
  908. id_ce_subjectKeyIdentifier: SubjectKeyIdentifier(),
  909. id_ce_keyUsage: KeyUsage(),
  910. id_ce_privateKeyUsagePeriod: PrivateKeyUsagePeriod(),
  911. # TODO
  912. # id_ce_certificatePolicies: PolicyInformation(), # could be a sequence of concat'ed objects?
  913. id_ce_policyMappings: PolicyMappings(),
  914. id_ce_subjectAltName: SubjectAltName(),
  915. id_ce_issuerAltName: IssuerAltName(),
  916. id_ce_subjectDirectoryAttributes: SubjectDirectoryAttributes(),
  917. id_ce_basicConstraints: BasicConstraints(),
  918. id_ce_nameConstraints: NameConstraints(),
  919. id_ce_policyConstraints: PolicyConstraints(),
  920. id_ce_extKeyUsage: ExtKeyUsageSyntax(),
  921. id_ce_cRLDistributionPoints: CRLDistPointsSyntax(),
  922. id_pe_authorityInfoAccess: AuthorityInfoAccessSyntax(),
  923. id_ce_cRLNumber: univ.Integer(),
  924. id_ce_deltaCRLIndicator: BaseCRLNumber(),
  925. id_ce_issuingDistributionPoint: IssuingDistributionPoint(),
  926. id_ce_cRLReasons: CRLReason(),
  927. id_ce_holdInstructionCode: univ.ObjectIdentifier(),
  928. id_ce_invalidityDate: useful.GeneralizedTime(),
  929. id_ce_certificateIssuer: GeneralNames(),
  930. }
  931. certificateExtensionsMap.update(_certificateExtensionsMapUpdate)