200 lines
4.4 KiB
Python
200 lines
4.4 KiB
Python
#
|
|
# This file is part of pyasn1-modules software.
|
|
#
|
|
# Created by Russ Housley with assistance from asn1ate v.0.6.0.
|
|
# Modified by Russ Housley to add a map for use with opentypes.
|
|
#
|
|
# Copyright (c) 2019, Vigil Security, LLC
|
|
# License: http://snmplabs.com/pyasn1/license.html
|
|
#
|
|
# Update to Enhanced Security Services for S/MIME
|
|
#
|
|
# ASN.1 source from:
|
|
# https://www.rfc-editor.org/rfc/rfc5035.txt
|
|
#
|
|
|
|
from pyasn1.codec.der.encoder import encode as der_encode
|
|
|
|
from pyasn1.type import namedtype
|
|
from pyasn1.type import univ
|
|
|
|
from pyasn1_modules import rfc2634
|
|
from pyasn1_modules import rfc4055
|
|
from pyasn1_modules import rfc5652
|
|
from pyasn1_modules import rfc5280
|
|
|
|
ContentType = rfc5652.ContentType
|
|
|
|
IssuerAndSerialNumber = rfc5652.IssuerAndSerialNumber
|
|
|
|
SubjectKeyIdentifier = rfc5652.SubjectKeyIdentifier
|
|
|
|
AlgorithmIdentifier = rfc5280.AlgorithmIdentifier
|
|
|
|
PolicyInformation = rfc5280.PolicyInformation
|
|
|
|
GeneralNames = rfc5280.GeneralNames
|
|
|
|
CertificateSerialNumber = rfc5280.CertificateSerialNumber
|
|
|
|
|
|
# Signing Certificate Attribute V1 and V2
|
|
|
|
id_aa_signingCertificate = rfc2634.id_aa_signingCertificate
|
|
|
|
id_aa_signingCertificateV2 = univ.ObjectIdentifier('1.2.840.113549.1.9.16.2.47')
|
|
|
|
Hash = rfc2634.Hash
|
|
|
|
IssuerSerial = rfc2634.IssuerSerial
|
|
|
|
ESSCertID = rfc2634.ESSCertID
|
|
|
|
SigningCertificate = rfc2634.SigningCertificate
|
|
|
|
|
|
sha256AlgId = AlgorithmIdentifier()
|
|
sha256AlgId['algorithm'] = rfc4055.id_sha256
|
|
# A non-schema object for sha256AlgId['parameters'] as absent
|
|
sha256AlgId['parameters'] = der_encode(univ.OctetString(''))
|
|
|
|
|
|
class ESSCertIDv2(univ.Sequence):
|
|
pass
|
|
|
|
ESSCertIDv2.componentType = namedtype.NamedTypes(
|
|
namedtype.DefaultedNamedType('hashAlgorithm', sha256AlgId),
|
|
namedtype.NamedType('certHash', Hash()),
|
|
namedtype.OptionalNamedType('issuerSerial', IssuerSerial())
|
|
)
|
|
|
|
|
|
class SigningCertificateV2(univ.Sequence):
|
|
pass
|
|
|
|
SigningCertificateV2.componentType = namedtype.NamedTypes(
|
|
namedtype.NamedType('certs', univ.SequenceOf(
|
|
componentType=ESSCertIDv2())),
|
|
namedtype.OptionalNamedType('policies', univ.SequenceOf(
|
|
componentType=PolicyInformation()))
|
|
)
|
|
|
|
|
|
# Mail List Expansion History Attribute
|
|
|
|
id_aa_mlExpandHistory = rfc2634.id_aa_mlExpandHistory
|
|
|
|
ub_ml_expansion_history = rfc2634.ub_ml_expansion_history
|
|
|
|
EntityIdentifier = rfc2634.EntityIdentifier
|
|
|
|
MLReceiptPolicy = rfc2634.MLReceiptPolicy
|
|
|
|
MLData = rfc2634.MLData
|
|
|
|
MLExpansionHistory = rfc2634.MLExpansionHistory
|
|
|
|
|
|
# ESS Security Label Attribute
|
|
|
|
id_aa_securityLabel = rfc2634.id_aa_securityLabel
|
|
|
|
ub_privacy_mark_length = rfc2634.ub_privacy_mark_length
|
|
|
|
ub_security_categories = rfc2634.ub_security_categories
|
|
|
|
ub_integer_options = rfc2634.ub_integer_options
|
|
|
|
ESSPrivacyMark = rfc2634.ESSPrivacyMark
|
|
|
|
SecurityClassification = rfc2634.SecurityClassification
|
|
|
|
SecurityPolicyIdentifier = rfc2634.SecurityPolicyIdentifier
|
|
|
|
SecurityCategory = rfc2634.SecurityCategory
|
|
|
|
SecurityCategories = rfc2634.SecurityCategories
|
|
|
|
ESSSecurityLabel = rfc2634.ESSSecurityLabel
|
|
|
|
|
|
# Equivalent Labels Attribute
|
|
|
|
id_aa_equivalentLabels = rfc2634.id_aa_equivalentLabels
|
|
|
|
EquivalentLabels = rfc2634.EquivalentLabels
|
|
|
|
|
|
# Content Identifier Attribute
|
|
|
|
id_aa_contentIdentifier = rfc2634.id_aa_contentIdentifier
|
|
|
|
ContentIdentifier = rfc2634.ContentIdentifier
|
|
|
|
|
|
# Content Reference Attribute
|
|
|
|
id_aa_contentReference = rfc2634.id_aa_contentReference
|
|
|
|
ContentReference = rfc2634.ContentReference
|
|
|
|
|
|
# Message Signature Digest Attribute
|
|
|
|
id_aa_msgSigDigest = rfc2634.id_aa_msgSigDigest
|
|
|
|
MsgSigDigest = rfc2634.MsgSigDigest
|
|
|
|
|
|
# Content Hints Attribute
|
|
|
|
id_aa_contentHint = rfc2634.id_aa_contentHint
|
|
|
|
ContentHints = rfc2634.ContentHints
|
|
|
|
|
|
# Receipt Request Attribute
|
|
|
|
AllOrFirstTier = rfc2634.AllOrFirstTier
|
|
|
|
ReceiptsFrom = rfc2634.ReceiptsFrom
|
|
|
|
id_aa_receiptRequest = rfc2634.id_aa_receiptRequest
|
|
|
|
ub_receiptsTo = rfc2634.ub_receiptsTo
|
|
|
|
ReceiptRequest = rfc2634.ReceiptRequest
|
|
|
|
|
|
# Receipt Content Type
|
|
|
|
ESSVersion = rfc2634.ESSVersion
|
|
|
|
id_ct_receipt = rfc2634.id_ct_receipt
|
|
|
|
Receipt = rfc2634.Receipt
|
|
|
|
ub_receiptsTo = rfc2634.ub_receiptsTo
|
|
|
|
ReceiptRequest = rfc2634.ReceiptRequest
|
|
|
|
|
|
# Map of Attribute Type to the Attribute structure is added to the
|
|
# ones that are in rfc5652.py
|
|
|
|
_cmsAttributesMapUpdate = {
|
|
id_aa_signingCertificateV2: SigningCertificateV2(),
|
|
}
|
|
|
|
rfc5652.cmsAttributesMap.update(_cmsAttributesMapUpdate)
|
|
|
|
|
|
# Map of Content Type OIDs to Content Types is added to the
|
|
# ones that are in rfc5652.py
|
|
|
|
_cmsContentTypesMapUpdate = {
|
|
id_ct_receipt: Receipt(),
|
|
}
|
|
|
|
rfc5652.cmsContentTypesMap.update(_cmsContentTypesMapUpdate)
|