| # |
| # This file is part of pyasn1-modules software. |
| # |
| # Created by Russ Housley with assistance from asn1ate v.0.6.0. |
| # |
| # Copyright (c) 2019, Vigil Security, LLC |
| # License: http://snmplabs.com/pyasn1/license.html |
| # |
| # CMS Advanced Electronic Signatures (CAdES) |
| # |
| # ASN.1 source from: |
| # https://www.rfc-editor.org/rfc/rfc5126.txt |
| # |
| |
| from pyasn1.type import char |
| from pyasn1.type import constraint |
| from pyasn1.type import namedtype |
| from pyasn1.type import opentype |
| from pyasn1.type import tag |
| from pyasn1.type import useful |
| from pyasn1.type import univ |
| |
| from pyasn1_modules import rfc5280 |
| from pyasn1_modules import rfc5652 |
| from pyasn1_modules import rfc5035 |
| from pyasn1_modules import rfc5755 |
| from pyasn1_modules import rfc6960 |
| from pyasn1_modules import rfc3161 |
| |
| MAX = float('inf') |
| |
| |
| # Maps for OpenTypes |
| |
| commitmentQualifierMap = { } |
| |
| sigQualifiersMap = { } |
| |
| otherRevRefMap = { } |
| |
| otherRevValMap = { } |
| |
| |
| # Imports from RFC 5652 |
| |
| ContentInfo = rfc5652.ContentInfo |
| |
| ContentType = rfc5652.ContentType |
| |
| SignedData = rfc5652.SignedData |
| |
| EncapsulatedContentInfo = rfc5652.EncapsulatedContentInfo |
| |
| SignerInfo = rfc5652.SignerInfo |
| |
| MessageDigest = rfc5652.MessageDigest |
| |
| SigningTime = rfc5652.SigningTime |
| |
| Countersignature = rfc5652.Countersignature |
| |
| id_data = rfc5652.id_data |
| |
| id_signedData = rfc5652.id_signedData |
| |
| id_contentType= rfc5652.id_contentType |
| |
| id_messageDigest = rfc5652.id_messageDigest |
| |
| id_signingTime = rfc5652.id_signingTime |
| |
| id_countersignature = rfc5652.id_countersignature |
| |
| |
| # Imports from RFC 5035 |
| |
| SigningCertificate = rfc5035.SigningCertificate |
| |
| IssuerSerial = rfc5035.IssuerSerial |
| |
| ContentReference = rfc5035.ContentReference |
| |
| ContentIdentifier = rfc5035.ContentIdentifier |
| |
| id_aa_contentReference = rfc5035.id_aa_contentReference |
| |
| id_aa_contentIdentifier = rfc5035.id_aa_contentIdentifier |
| |
| id_aa_signingCertificate = rfc5035.id_aa_signingCertificate |
| |
| id_aa_signingCertificateV2 = rfc5035.id_aa_signingCertificateV2 |
| |
| |
| # Imports from RFC 5280 |
| |
| Certificate = rfc5280.Certificate |
| |
| AlgorithmIdentifier = rfc5280.AlgorithmIdentifier |
| |
| CertificateList = rfc5280.CertificateList |
| |
| Name = rfc5280.Name |
| |
| Attribute = rfc5280.Attribute |
| |
| GeneralNames = rfc5280.GeneralNames |
| |
| GeneralName = rfc5280.GeneralName |
| |
| PolicyInformation = rfc5280.PolicyInformation |
| |
| DirectoryString = rfc5280.DirectoryString |
| |
| |
| # Imports from RFC 5755 |
| |
| AttributeCertificate = rfc5755.AttributeCertificate |
| |
| |
| # Imports from RFC 6960 |
| |
| BasicOCSPResponse = rfc6960.BasicOCSPResponse |
| |
| ResponderID = rfc6960.ResponderID |
| |
| |
| # Imports from RFC 3161 |
| |
| TimeStampToken = rfc3161.TimeStampToken |
| |
| |
| # OID used referencing electronic signature mechanisms |
| |
| id_etsi_es_IDUP_Mechanism_v1 = univ.ObjectIdentifier('0.4.0.1733.1.4.1') |
| |
| |
| # OtherSigningCertificate - deprecated |
| |
| id_aa_ets_otherSigCert = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.19') |
| |
| |
| class OtherHashValue(univ.OctetString): |
| pass |
| |
| |
| class OtherHashAlgAndValue(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('hashAlgorithm', AlgorithmIdentifier()), |
| namedtype.NamedType('hashValue', OtherHashValue()) |
| ) |
| |
| |
| class OtherHash(univ.Choice): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('sha1Hash', OtherHashValue()), |
| namedtype.NamedType('otherHash', OtherHashAlgAndValue()) |
| ) |
| |
| |
| class OtherCertID(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('otherCertHash', OtherHash()), |
| namedtype.OptionalNamedType('issuerSerial', IssuerSerial()) |
| ) |
| |
| |
| class OtherSigningCertificate(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('certs', |
| univ.SequenceOf(componentType=OtherCertID())), |
| namedtype.OptionalNamedType('policies', |
| univ.SequenceOf(componentType=PolicyInformation())) |
| ) |
| |
| |
| # Signature Policy Identifier |
| |
| id_aa_ets_sigPolicyId = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.15') |
| |
| |
| class SigPolicyId(univ.ObjectIdentifier): |
| pass |
| |
| |
| class SigPolicyHash(OtherHashAlgAndValue): |
| pass |
| |
| |
| class SigPolicyQualifierId(univ.ObjectIdentifier): |
| pass |
| |
| |
| class SigPolicyQualifierInfo(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('sigPolicyQualifierId', SigPolicyQualifierId()), |
| namedtype.NamedType('sigQualifier', univ.Any(), |
| openType=opentype.OpenType('sigPolicyQualifierId', sigQualifiersMap)) |
| ) |
| |
| |
| class SignaturePolicyId(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('sigPolicyId', SigPolicyId()), |
| namedtype.NamedType('sigPolicyHash', SigPolicyHash()), |
| namedtype.OptionalNamedType('sigPolicyQualifiers', |
| univ.SequenceOf(componentType=SigPolicyQualifierInfo()).subtype( |
| subtypeSpec=constraint.ValueSizeConstraint(1, MAX))) |
| ) |
| |
| |
| class SignaturePolicyImplied(univ.Null): |
| pass |
| |
| |
| class SignaturePolicy(univ.Choice): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('signaturePolicyId', SignaturePolicyId()), |
| namedtype.NamedType('signaturePolicyImplied', SignaturePolicyImplied()) |
| ) |
| |
| |
| id_spq_ets_unotice = univ.ObjectIdentifier('1.2.840.113549.1.9.16.5.2') |
| |
| |
| class DisplayText(univ.Choice): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('visibleString', char.VisibleString().subtype( |
| subtypeSpec=constraint.ValueSizeConstraint(1, 200))), |
| namedtype.NamedType('bmpString', char.BMPString().subtype( |
| subtypeSpec=constraint.ValueSizeConstraint(1, 200))), |
| namedtype.NamedType('utf8String', char.UTF8String().subtype( |
| subtypeSpec=constraint.ValueSizeConstraint(1, 200))) |
| ) |
| |
| |
| class NoticeReference(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('organization', DisplayText()), |
| namedtype.NamedType('noticeNumbers', |
| univ.SequenceOf(componentType=univ.Integer())) |
| ) |
| |
| class SPUserNotice(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('noticeRef', NoticeReference()), |
| namedtype.OptionalNamedType('explicitText', DisplayText()) |
| ) |
| |
| |
| noticeToUser = SigPolicyQualifierInfo() |
| noticeToUser['sigPolicyQualifierId'] = id_spq_ets_unotice |
| noticeToUser['sigQualifier'] = SPUserNotice() |
| |
| |
| id_spq_ets_uri = univ.ObjectIdentifier('1.2.840.113549.1.9.16.5.1') |
| |
| |
| class SPuri(char.IA5String): |
| pass |
| |
| |
| pointerToSigPolSpec = SigPolicyQualifierInfo() |
| pointerToSigPolSpec['sigPolicyQualifierId'] = id_spq_ets_uri |
| pointerToSigPolSpec['sigQualifier'] = SPuri() |
| |
| |
| # Commitment Type |
| |
| id_aa_ets_commitmentType = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.16') |
| |
| |
| class CommitmentTypeIdentifier(univ.ObjectIdentifier): |
| pass |
| |
| |
| class CommitmentTypeQualifier(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('commitmentTypeIdentifier', |
| CommitmentTypeIdentifier()), |
| namedtype.NamedType('qualifier', univ.Any(), |
| openType=opentype.OpenType('commitmentTypeIdentifier', |
| commitmentQualifierMap)) |
| ) |
| |
| |
| class CommitmentTypeIndication(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('commitmentTypeId', CommitmentTypeIdentifier()), |
| namedtype.OptionalNamedType('commitmentTypeQualifier', |
| univ.SequenceOf(componentType=CommitmentTypeQualifier()).subtype( |
| subtypeSpec=constraint.ValueSizeConstraint(1, MAX))) |
| ) |
| |
| |
| id_cti_ets_proofOfOrigin = univ.ObjectIdentifier('1.2.840.113549.1.9.16.6.1') |
| |
| id_cti_ets_proofOfReceipt = univ.ObjectIdentifier('1.2.840.113549.1.9.16.6.2') |
| |
| id_cti_ets_proofOfDelivery = univ.ObjectIdentifier('1.2.840.113549.1.9.16.6.3') |
| |
| id_cti_ets_proofOfSender = univ.ObjectIdentifier('1.2.840.113549.1.9.16.6.4') |
| |
| id_cti_ets_proofOfApproval = univ.ObjectIdentifier('1.2.840.113549.1.9.16.6.5') |
| |
| id_cti_ets_proofOfCreation = univ.ObjectIdentifier('1.2.840.113549.1.9.16.6.6') |
| |
| |
| # Signer Location |
| |
| id_aa_ets_signerLocation = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.17') |
| |
| |
| class PostalAddress(univ.SequenceOf): |
| componentType = DirectoryString() |
| subtypeSpec = constraint.ValueSizeConstraint(1, 6) |
| |
| |
| class SignerLocation(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('countryName', |
| DirectoryString().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatSimple, 0))), |
| namedtype.OptionalNamedType('localityName', |
| DirectoryString().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatSimple, 1))), |
| namedtype.OptionalNamedType('postalAdddress', |
| PostalAddress().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatSimple, 2))) |
| ) |
| |
| |
| # Signature Timestamp |
| |
| id_aa_signatureTimeStampToken = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.14') |
| |
| |
| class SignatureTimeStampToken(TimeStampToken): |
| pass |
| |
| |
| # Content Timestamp |
| |
| id_aa_ets_contentTimestamp = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.20') |
| |
| |
| class ContentTimestamp(TimeStampToken): |
| pass |
| |
| |
| # Signer Attributes |
| |
| id_aa_ets_signerAttr = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.18') |
| |
| |
| class ClaimedAttributes(univ.SequenceOf): |
| componentType = Attribute() |
| |
| |
| class CertifiedAttributes(AttributeCertificate): |
| pass |
| |
| |
| class SignerAttribute(univ.SequenceOf): |
| componentType = univ.Choice(componentType=namedtype.NamedTypes( |
| namedtype.NamedType('claimedAttributes', |
| ClaimedAttributes().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatSimple, 0))), |
| namedtype.NamedType('certifiedAttributes', |
| CertifiedAttributes().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatSimple, 1))) |
| )) |
| |
| |
| # Complete Certificate Refs |
| |
| id_aa_ets_certificateRefs = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.21') |
| |
| |
| class CompleteCertificateRefs(univ.SequenceOf): |
| componentType = OtherCertID() |
| |
| |
| # Complete Revocation Refs |
| |
| id_aa_ets_revocationRefs = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.22') |
| |
| |
| class CrlIdentifier(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('crlissuer', Name()), |
| namedtype.NamedType('crlIssuedTime', useful.UTCTime()), |
| namedtype.OptionalNamedType('crlNumber', univ.Integer()) |
| ) |
| |
| |
| class CrlValidatedID(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('crlHash', OtherHash()), |
| namedtype.OptionalNamedType('crlIdentifier', CrlIdentifier()) |
| ) |
| |
| |
| class CRLListID(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('crls', |
| univ.SequenceOf(componentType=CrlValidatedID())) |
| ) |
| |
| |
| class OcspIdentifier(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('ocspResponderID', ResponderID()), |
| namedtype.NamedType('producedAt', useful.GeneralizedTime()) |
| ) |
| |
| |
| class OcspResponsesID(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('ocspIdentifier', OcspIdentifier()), |
| namedtype.OptionalNamedType('ocspRepHash', OtherHash()) |
| ) |
| |
| |
| class OcspListID(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('ocspResponses', |
| univ.SequenceOf(componentType=OcspResponsesID())) |
| ) |
| |
| |
| class OtherRevRefType(univ.ObjectIdentifier): |
| pass |
| |
| |
| class OtherRevRefs(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('otherRevRefType', OtherRevRefType()), |
| namedtype.NamedType('otherRevRefs', univ.Any(), |
| openType=opentype.OpenType('otherRevRefType', otherRevRefMap)) |
| ) |
| |
| |
| class CrlOcspRef(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('crlids', |
| CRLListID().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| namedtype.OptionalNamedType('ocspids', |
| OcspListID().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatConstructed, 1))), |
| namedtype.OptionalNamedType('otherRev', |
| OtherRevRefs().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatConstructed, 2))) |
| ) |
| |
| |
| class CompleteRevocationRefs(univ.SequenceOf): |
| componentType = CrlOcspRef() |
| |
| |
| # Certificate Values |
| |
| id_aa_ets_certValues = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.23') |
| |
| |
| class CertificateValues(univ.SequenceOf): |
| componentType = Certificate() |
| |
| |
| # Certificate Revocation Values |
| |
| id_aa_ets_revocationValues = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.24') |
| |
| |
| class OtherRevValType(univ.ObjectIdentifier): |
| pass |
| |
| |
| class OtherRevVals(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('otherRevValType', OtherRevValType()), |
| namedtype.NamedType('otherRevVals', univ.Any(), |
| openType=opentype.OpenType('otherRevValType', otherRevValMap)) |
| ) |
| |
| |
| class RevocationValues(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('crlVals', |
| univ.SequenceOf(componentType=CertificateList()).subtype( |
| explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), |
| namedtype.OptionalNamedType('ocspVals', |
| univ.SequenceOf(componentType=BasicOCSPResponse()).subtype( |
| explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), |
| namedtype.OptionalNamedType('otherRevVals', |
| OtherRevVals().subtype(explicitTag=tag.Tag( |
| tag.tagClassContext, tag.tagFormatConstructed, 2))) |
| ) |
| |
| |
| # CAdES-C Timestamp |
| |
| id_aa_ets_escTimeStamp = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.25') |
| |
| |
| class ESCTimeStampToken(TimeStampToken): |
| pass |
| |
| |
| # Time-Stamped Certificates and CRLs |
| |
| id_aa_ets_certCRLTimestamp = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.26') |
| |
| |
| class TimestampedCertsCRLs(TimeStampToken): |
| pass |
| |
| |
| # Archive Timestamp |
| |
| id_aa_ets_archiveTimestampV2 = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.48') |
| |
| |
| class ArchiveTimeStampToken(TimeStampToken): |
| pass |
| |
| |
| # Attribute certificate references |
| |
| id_aa_ets_attrCertificateRefs = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.44') |
| |
| |
| class AttributeCertificateRefs(univ.SequenceOf): |
| componentType = OtherCertID() |
| |
| |
| # Attribute revocation references |
| |
| id_aa_ets_attrRevocationRefs = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.45') |
| |
| |
| class AttributeRevocationRefs(univ.SequenceOf): |
| componentType = CrlOcspRef() |
| |
| |
| # Update the sigQualifiersMap |
| |
| _sigQualifiersMapUpdate = { |
| id_spq_ets_unotice: SPUserNotice(), |
| id_spq_ets_uri: SPuri(), |
| } |
| |
| sigQualifiersMap.update(_sigQualifiersMapUpdate) |
| |
| |
| # Update the CMS Attribute Map in rfc5652.py |
| |
| _cmsAttributesMapUpdate = { |
| id_aa_ets_otherSigCert: OtherSigningCertificate(), |
| id_aa_ets_sigPolicyId: SignaturePolicy(), |
| id_aa_ets_commitmentType: CommitmentTypeIndication(), |
| id_aa_ets_signerLocation: SignerLocation(), |
| id_aa_signatureTimeStampToken: SignatureTimeStampToken(), |
| id_aa_ets_contentTimestamp: ContentTimestamp(), |
| id_aa_ets_signerAttr: SignerAttribute(), |
| id_aa_ets_certificateRefs: CompleteCertificateRefs(), |
| id_aa_ets_revocationRefs: CompleteRevocationRefs(), |
| id_aa_ets_certValues: CertificateValues(), |
| id_aa_ets_revocationValues: RevocationValues(), |
| id_aa_ets_escTimeStamp: ESCTimeStampToken(), |
| id_aa_ets_certCRLTimestamp: TimestampedCertsCRLs(), |
| id_aa_ets_archiveTimestampV2: ArchiveTimeStampToken(), |
| id_aa_ets_attrCertificateRefs: AttributeCertificateRefs(), |
| id_aa_ets_attrRevocationRefs: AttributeRevocationRefs(), |
| } |
| |
| rfc5652.cmsAttributesMap.update(_cmsAttributesMapUpdate) |