rfc2315.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. #
  2. # This file is part of pyasn1-modules software.
  3. #
  4. # Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com>
  5. # License: http://pyasn1.sf.net/license.html
  6. #
  7. # PKCS#7 message syntax
  8. #
  9. # ASN.1 source from:
  10. # http://www.trl.ibm.com/projects/xml/xss4j/data/asn1/grammars/pkcs7.asn
  11. #
  12. # Sample captures from:
  13. # openssl crl2pkcs7 -nocrl -certfile cert1.cer -out outfile.p7b
  14. #
  15. from pyasn1_modules.rfc2459 import *
  16. class Attribute(univ.Sequence):
  17. componentType = namedtype.NamedTypes(
  18. namedtype.NamedType('type', AttributeType()),
  19. namedtype.NamedType('values', univ.SetOf(componentType=AttributeValue()))
  20. )
  21. class AttributeValueAssertion(univ.Sequence):
  22. componentType = namedtype.NamedTypes(
  23. namedtype.NamedType('attributeType', AttributeType()),
  24. namedtype.NamedType('attributeValue', AttributeValue())
  25. )
  26. pkcs_7 = univ.ObjectIdentifier('1.2.840.113549.1.7')
  27. data = univ.ObjectIdentifier('1.2.840.113549.1.7.1')
  28. signedData = univ.ObjectIdentifier('1.2.840.113549.1.7.2')
  29. envelopedData = univ.ObjectIdentifier('1.2.840.113549.1.7.3')
  30. signedAndEnvelopedData = univ.ObjectIdentifier('1.2.840.113549.1.7.4')
  31. digestedData = univ.ObjectIdentifier('1.2.840.113549.1.7.5')
  32. encryptedData = univ.ObjectIdentifier('1.2.840.113549.1.7.6')
  33. class ContentType(univ.ObjectIdentifier):
  34. pass
  35. class ContentEncryptionAlgorithmIdentifier(AlgorithmIdentifier):
  36. pass
  37. class EncryptedContent(univ.OctetString):
  38. pass
  39. class EncryptedContentInfo(univ.Sequence):
  40. componentType = namedtype.NamedTypes(
  41. namedtype.NamedType('contentType', ContentType()),
  42. namedtype.NamedType('contentEncryptionAlgorithm', ContentEncryptionAlgorithmIdentifier()),
  43. namedtype.OptionalNamedType('encryptedContent', EncryptedContent().subtype(
  44. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
  45. )
  46. class Version(univ.Integer): # overrides x509.Version
  47. pass
  48. class EncryptedData(univ.Sequence):
  49. componentType = namedtype.NamedTypes(
  50. namedtype.NamedType('version', Version()),
  51. namedtype.NamedType('encryptedContentInfo', EncryptedContentInfo())
  52. )
  53. class DigestAlgorithmIdentifier(AlgorithmIdentifier):
  54. pass
  55. class DigestAlgorithmIdentifiers(univ.SetOf):
  56. componentType = DigestAlgorithmIdentifier()
  57. class Digest(univ.OctetString):
  58. pass
  59. class ContentInfo(univ.Sequence):
  60. componentType = namedtype.NamedTypes(
  61. namedtype.NamedType('contentType', ContentType()),
  62. namedtype.OptionalNamedType('content', univ.Any().subtype(
  63. explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
  64. )
  65. class DigestedData(univ.Sequence):
  66. componentType = namedtype.NamedTypes(
  67. namedtype.NamedType('version', Version()),
  68. namedtype.NamedType('digestAlgorithm', DigestAlgorithmIdentifier()),
  69. namedtype.NamedType('contentInfo', ContentInfo()),
  70. namedtype.NamedType('digest', Digest)
  71. )
  72. class IssuerAndSerialNumber(univ.Sequence):
  73. componentType = namedtype.NamedTypes(
  74. namedtype.NamedType('issuer', Name()),
  75. namedtype.NamedType('serialNumber', CertificateSerialNumber())
  76. )
  77. class KeyEncryptionAlgorithmIdentifier(AlgorithmIdentifier):
  78. pass
  79. class EncryptedKey(univ.OctetString):
  80. pass
  81. class RecipientInfo(univ.Sequence):
  82. componentType = namedtype.NamedTypes(
  83. namedtype.NamedType('version', Version()),
  84. namedtype.NamedType('issuerAndSerialNumber', IssuerAndSerialNumber()),
  85. namedtype.NamedType('keyEncryptionAlgorithm', KeyEncryptionAlgorithmIdentifier()),
  86. namedtype.NamedType('encryptedKey', EncryptedKey())
  87. )
  88. class RecipientInfos(univ.SetOf):
  89. componentType = RecipientInfo()
  90. class Attributes(univ.SetOf):
  91. componentType = Attribute()
  92. class ExtendedCertificateInfo(univ.Sequence):
  93. componentType = namedtype.NamedTypes(
  94. namedtype.NamedType('version', Version()),
  95. namedtype.NamedType('certificate', Certificate()),
  96. namedtype.NamedType('attributes', Attributes())
  97. )
  98. class SignatureAlgorithmIdentifier(AlgorithmIdentifier):
  99. pass
  100. class Signature(univ.BitString):
  101. pass
  102. class ExtendedCertificate(univ.Sequence):
  103. componentType = namedtype.NamedTypes(
  104. namedtype.NamedType('extendedCertificateInfo', ExtendedCertificateInfo()),
  105. namedtype.NamedType('signatureAlgorithm', SignatureAlgorithmIdentifier()),
  106. namedtype.NamedType('signature', Signature())
  107. )
  108. class ExtendedCertificateOrCertificate(univ.Choice):
  109. componentType = namedtype.NamedTypes(
  110. namedtype.NamedType('certificate', Certificate()),
  111. namedtype.NamedType('extendedCertificate', ExtendedCertificate().subtype(
  112. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
  113. )
  114. class ExtendedCertificatesAndCertificates(univ.SetOf):
  115. componentType = ExtendedCertificateOrCertificate()
  116. class SerialNumber(univ.Integer):
  117. pass
  118. class CRLEntry(univ.Sequence):
  119. componentType = namedtype.NamedTypes(
  120. namedtype.NamedType('userCertificate', SerialNumber()),
  121. namedtype.NamedType('revocationDate', useful.UTCTime())
  122. )
  123. class TBSCertificateRevocationList(univ.Sequence):
  124. componentType = namedtype.NamedTypes(
  125. namedtype.NamedType('signature', AlgorithmIdentifier()),
  126. namedtype.NamedType('issuer', Name()),
  127. namedtype.NamedType('lastUpdate', useful.UTCTime()),
  128. namedtype.NamedType('nextUpdate', useful.UTCTime()),
  129. namedtype.OptionalNamedType('revokedCertificates', univ.SequenceOf(componentType=CRLEntry()))
  130. )
  131. class CertificateRevocationList(univ.Sequence):
  132. componentType = namedtype.NamedTypes(
  133. namedtype.NamedType('tbsCertificateRevocationList', TBSCertificateRevocationList()),
  134. namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()),
  135. namedtype.NamedType('signature', univ.BitString())
  136. )
  137. class CertificateRevocationLists(univ.SetOf):
  138. componentType = CertificateRevocationList()
  139. class DigestEncryptionAlgorithmIdentifier(AlgorithmIdentifier):
  140. pass
  141. class EncryptedDigest(univ.OctetString):
  142. pass
  143. class SignerInfo(univ.Sequence):
  144. componentType = namedtype.NamedTypes(
  145. namedtype.NamedType('version', Version()),
  146. namedtype.NamedType('issuerAndSerialNumber', IssuerAndSerialNumber()),
  147. namedtype.NamedType('digestAlgorithm', DigestAlgorithmIdentifier()),
  148. namedtype.OptionalNamedType('authenticatedAttributes', Attributes().subtype(
  149. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  150. namedtype.NamedType('digestEncryptionAlgorithm', DigestEncryptionAlgorithmIdentifier()),
  151. namedtype.NamedType('encryptedDigest', EncryptedDigest()),
  152. namedtype.OptionalNamedType('unauthenticatedAttributes', Attributes().subtype(
  153. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
  154. )
  155. class SignerInfos(univ.SetOf):
  156. componentType = SignerInfo()
  157. class SignedAndEnvelopedData(univ.Sequence):
  158. componentType = namedtype.NamedTypes(
  159. namedtype.NamedType('version', Version()),
  160. namedtype.NamedType('recipientInfos', RecipientInfos()),
  161. namedtype.NamedType('digestAlgorithms', DigestAlgorithmIdentifiers()),
  162. namedtype.NamedType('encryptedContentInfo', EncryptedContentInfo()),
  163. namedtype.OptionalNamedType('certificates', ExtendedCertificatesAndCertificates().subtype(
  164. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  165. namedtype.OptionalNamedType('crls', CertificateRevocationLists().subtype(
  166. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
  167. namedtype.NamedType('signerInfos', SignerInfos())
  168. )
  169. class EnvelopedData(univ.Sequence):
  170. componentType = namedtype.NamedTypes(
  171. namedtype.NamedType('version', Version()),
  172. namedtype.NamedType('recipientInfos', RecipientInfos()),
  173. namedtype.NamedType('encryptedContentInfo', EncryptedContentInfo())
  174. )
  175. class DigestInfo(univ.Sequence):
  176. componentType = namedtype.NamedTypes(
  177. namedtype.NamedType('digestAlgorithm', DigestAlgorithmIdentifier()),
  178. namedtype.NamedType('digest', Digest())
  179. )
  180. class SignedData(univ.Sequence):
  181. componentType = namedtype.NamedTypes(
  182. namedtype.NamedType('version', Version()),
  183. namedtype.NamedType('digestAlgorithms', DigestAlgorithmIdentifiers()),
  184. namedtype.NamedType('contentInfo', ContentInfo()),
  185. namedtype.OptionalNamedType('certificates', ExtendedCertificatesAndCertificates().subtype(
  186. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
  187. namedtype.OptionalNamedType('crls', CertificateRevocationLists().subtype(
  188. implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
  189. namedtype.NamedType('signerInfos', SignerInfos())
  190. )
  191. class Data(univ.OctetString):
  192. pass