| # |
| # This file is part of pyasn1-modules software. |
| # |
| # Copyright (c) 2005-2019, Ilya Etingof <[email protected]> |
| # License: http://snmplabs.com/pyasn1/license.html |
| # |
| # PKCS#7 message syntax |
| # |
| # ASN.1 source from: |
| # https://opensource.apple.com/source/Security/Security-55179.1/libsecurity_asn1/asn1/pkcs7.asn.auto.html |
| # |
| # Sample captures from: |
| # openssl crl2pkcs7 -nocrl -certfile cert1.cer -out outfile.p7b |
| # |
| from pyasn1_modules.rfc2459 import * |
| |
| |
| class Attribute(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('type', AttributeType()), |
| namedtype.NamedType('values', univ.SetOf(componentType=AttributeValue())) |
| ) |
| |
| |
| class AttributeValueAssertion(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('attributeType', AttributeType()), |
| namedtype.NamedType('attributeValue', AttributeValue(), |
| openType=opentype.OpenType('type', certificateAttributesMap)) |
| ) |
| |
| |
| pkcs_7 = univ.ObjectIdentifier('1.2.840.113549.1.7') |
| data = univ.ObjectIdentifier('1.2.840.113549.1.7.1') |
| signedData = univ.ObjectIdentifier('1.2.840.113549.1.7.2') |
| envelopedData = univ.ObjectIdentifier('1.2.840.113549.1.7.3') |
| signedAndEnvelopedData = univ.ObjectIdentifier('1.2.840.113549.1.7.4') |
| digestedData = univ.ObjectIdentifier('1.2.840.113549.1.7.5') |
| encryptedData = univ.ObjectIdentifier('1.2.840.113549.1.7.6') |
| |
| |
| class ContentType(univ.ObjectIdentifier): |
| pass |
| |
| |
| class ContentEncryptionAlgorithmIdentifier(AlgorithmIdentifier): |
| pass |
| |
| |
| class EncryptedContent(univ.OctetString): |
| pass |
| |
| |
| contentTypeMap = {} |
| |
| |
| class EncryptedContentInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('contentType', ContentType()), |
| namedtype.NamedType('contentEncryptionAlgorithm', ContentEncryptionAlgorithmIdentifier()), |
| namedtype.OptionalNamedType( |
| 'encryptedContent', EncryptedContent().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0) |
| ), |
| openType=opentype.OpenType('contentType', contentTypeMap) |
| ) |
| ) |
| |
| |
| class Version(univ.Integer): # overrides x509.Version |
| pass |
| |
| |
| class EncryptedData(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('encryptedContentInfo', EncryptedContentInfo()) |
| ) |
| |
| |
| class DigestAlgorithmIdentifier(AlgorithmIdentifier): |
| pass |
| |
| |
| class DigestAlgorithmIdentifiers(univ.SetOf): |
| componentType = DigestAlgorithmIdentifier() |
| |
| |
| class Digest(univ.OctetString): |
| pass |
| |
| |
| class ContentInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('contentType', ContentType()), |
| namedtype.OptionalNamedType( |
| 'content', |
| univ.Any().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)), |
| openType=opentype.OpenType('contentType', contentTypeMap) |
| ) |
| ) |
| |
| |
| class DigestedData(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('digestAlgorithm', DigestAlgorithmIdentifier()), |
| namedtype.NamedType('contentInfo', ContentInfo()), |
| namedtype.NamedType('digest', Digest()) |
| ) |
| |
| |
| class IssuerAndSerialNumber(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('issuer', Name()), |
| namedtype.NamedType('serialNumber', CertificateSerialNumber()) |
| ) |
| |
| |
| class KeyEncryptionAlgorithmIdentifier(AlgorithmIdentifier): |
| pass |
| |
| |
| class EncryptedKey(univ.OctetString): |
| pass |
| |
| |
| class RecipientInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('issuerAndSerialNumber', IssuerAndSerialNumber()), |
| namedtype.NamedType('keyEncryptionAlgorithm', KeyEncryptionAlgorithmIdentifier()), |
| namedtype.NamedType('encryptedKey', EncryptedKey()) |
| ) |
| |
| |
| class RecipientInfos(univ.SetOf): |
| componentType = RecipientInfo() |
| |
| |
| class Attributes(univ.SetOf): |
| componentType = Attribute() |
| |
| |
| class ExtendedCertificateInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('certificate', Certificate()), |
| namedtype.NamedType('attributes', Attributes()) |
| ) |
| |
| |
| class SignatureAlgorithmIdentifier(AlgorithmIdentifier): |
| pass |
| |
| |
| class Signature(univ.BitString): |
| pass |
| |
| |
| class ExtendedCertificate(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('extendedCertificateInfo', ExtendedCertificateInfo()), |
| namedtype.NamedType('signatureAlgorithm', SignatureAlgorithmIdentifier()), |
| namedtype.NamedType('signature', Signature()) |
| ) |
| |
| |
| class ExtendedCertificateOrCertificate(univ.Choice): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('certificate', Certificate()), |
| namedtype.NamedType('extendedCertificate', ExtendedCertificate().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))) |
| ) |
| |
| |
| class ExtendedCertificatesAndCertificates(univ.SetOf): |
| componentType = ExtendedCertificateOrCertificate() |
| |
| |
| class SerialNumber(univ.Integer): |
| pass |
| |
| |
| class CRLEntry(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('userCertificate', SerialNumber()), |
| namedtype.NamedType('revocationDate', useful.UTCTime()) |
| ) |
| |
| |
| class TBSCertificateRevocationList(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('signature', AlgorithmIdentifier()), |
| namedtype.NamedType('issuer', Name()), |
| namedtype.NamedType('lastUpdate', useful.UTCTime()), |
| namedtype.NamedType('nextUpdate', useful.UTCTime()), |
| namedtype.OptionalNamedType('revokedCertificates', univ.SequenceOf(componentType=CRLEntry())) |
| ) |
| |
| |
| class CertificateRevocationList(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('tbsCertificateRevocationList', TBSCertificateRevocationList()), |
| namedtype.NamedType('signatureAlgorithm', AlgorithmIdentifier()), |
| namedtype.NamedType('signature', univ.BitString()) |
| ) |
| |
| |
| class CertificateRevocationLists(univ.SetOf): |
| componentType = CertificateRevocationList() |
| |
| |
| class DigestEncryptionAlgorithmIdentifier(AlgorithmIdentifier): |
| pass |
| |
| |
| class EncryptedDigest(univ.OctetString): |
| pass |
| |
| |
| class SignerInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('issuerAndSerialNumber', IssuerAndSerialNumber()), |
| namedtype.NamedType('digestAlgorithm', DigestAlgorithmIdentifier()), |
| namedtype.OptionalNamedType('authenticatedAttributes', Attributes().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| namedtype.NamedType('digestEncryptionAlgorithm', DigestEncryptionAlgorithmIdentifier()), |
| namedtype.NamedType('encryptedDigest', EncryptedDigest()), |
| namedtype.OptionalNamedType('unauthenticatedAttributes', Attributes().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))) |
| ) |
| |
| |
| class SignerInfos(univ.SetOf): |
| componentType = SignerInfo() |
| |
| |
| class SignedAndEnvelopedData(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('recipientInfos', RecipientInfos()), |
| namedtype.NamedType('digestAlgorithms', DigestAlgorithmIdentifiers()), |
| namedtype.NamedType('encryptedContentInfo', EncryptedContentInfo()), |
| namedtype.OptionalNamedType('certificates', ExtendedCertificatesAndCertificates().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| namedtype.OptionalNamedType('crls', CertificateRevocationLists().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))), |
| namedtype.NamedType('signerInfos', SignerInfos()) |
| ) |
| |
| |
| class EnvelopedData(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.NamedType('recipientInfos', RecipientInfos()), |
| namedtype.NamedType('encryptedContentInfo', EncryptedContentInfo()) |
| ) |
| |
| |
| class DigestInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('digestAlgorithm', DigestAlgorithmIdentifier()), |
| namedtype.NamedType('digest', Digest()) |
| ) |
| |
| |
| class SignedData(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', Version()), |
| namedtype.OptionalNamedType('digestAlgorithms', DigestAlgorithmIdentifiers()), |
| namedtype.NamedType('contentInfo', ContentInfo()), |
| namedtype.OptionalNamedType('certificates', ExtendedCertificatesAndCertificates().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| namedtype.OptionalNamedType('crls', CertificateRevocationLists().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))), |
| namedtype.OptionalNamedType('signerInfos', SignerInfos()) |
| ) |
| |
| |
| class Data(univ.OctetString): |
| pass |
| |
| _contentTypeMapUpdate = { |
| data: Data(), |
| signedData: SignedData(), |
| envelopedData: EnvelopedData(), |
| signedAndEnvelopedData: SignedAndEnvelopedData(), |
| digestedData: DigestedData(), |
| encryptedData: EncryptedData() |
| } |
| |
| contentTypeMap.update(_contentTypeMapUpdate) |