123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- # This file is being contributed to 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
- #
- # S/MIME Version 3.2 Message Specification
- #
- # ASN.1 source from:
- # https://www.rfc-editor.org/rfc/rfc5751.txt
- from pyasn1.type import namedtype
- from pyasn1.type import opentype
- from pyasn1.type import tag
- from pyasn1.type import univ
- from pyasn1_modules import rfc5652
- from pyasn1_modules import rfc8018
- def _OID(*components):
- output = []
- for x in tuple(components):
- if isinstance(x, univ.ObjectIdentifier):
- output.extend(list(x))
- else:
- output.append(int(x))
- return univ.ObjectIdentifier(output)
- # Imports from RFC 5652 and RFC 8018
- IssuerAndSerialNumber = rfc5652.IssuerAndSerialNumber
- RecipientKeyIdentifier = rfc5652.RecipientKeyIdentifier
- SubjectKeyIdentifier = rfc5652.SubjectKeyIdentifier
- rc2CBC = rfc8018.rc2CBC
- # S/MIME Capabilities Attribute
- smimeCapabilities = univ.ObjectIdentifier('1.2.840.113549.1.9.15')
- smimeCapabilityMap = { }
- class SMIMECapability(univ.Sequence):
- pass
- SMIMECapability.componentType = namedtype.NamedTypes(
- namedtype.NamedType('capabilityID', univ.ObjectIdentifier()),
- namedtype.OptionalNamedType('parameters', univ.Any(),
- openType=opentype.OpenType('capabilityID', smimeCapabilityMap))
- )
- class SMIMECapabilities(univ.SequenceOf):
- pass
- SMIMECapabilities.componentType = SMIMECapability()
- class SMIMECapabilitiesParametersForRC2CBC(univ.Integer):
- # which carries the RC2 Key Length (number of bits)
- pass
- # S/MIME Encryption Key Preference Attribute
- id_smime = univ.ObjectIdentifier('1.2.840.113549.1.9.16')
- id_aa = _OID(id_smime, 2)
- id_aa_encrypKeyPref = _OID(id_aa, 11)
- class SMIMEEncryptionKeyPreference(univ.Choice):
- pass
- SMIMEEncryptionKeyPreference.componentType = namedtype.NamedTypes(
- namedtype.NamedType('issuerAndSerialNumber',
- IssuerAndSerialNumber().subtype(implicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.NamedType('receipentKeyId',
- # Yes, 'receipentKeyId' is spelled incorrectly, but kept
- # this way for alignment with the ASN.1 module in the RFC.
- RecipientKeyIdentifier().subtype(implicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatSimple, 1))),
- namedtype.NamedType('subjectAltKeyIdentifier',
- SubjectKeyIdentifier().subtype(implicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatSimple, 2)))
- )
- # The Prefer Binary Inside SMIMECapabilities attribute
- id_cap = _OID(id_smime, 11)
- id_cap_preferBinaryInside = _OID(id_cap, 1)
- # CMS Attribute Map
- _cmsAttributesMapUpdate = {
- smimeCapabilities: SMIMECapabilities(),
- id_aa_encrypKeyPref: SMIMEEncryptionKeyPreference(),
- }
- rfc5652.cmsAttributesMap.update(_cmsAttributesMapUpdate)
- # SMIMECapabilities Attribute Map
- #
- # Do not include OIDs in the dictionary when the parameters are absent.
- _smimeCapabilityMapUpdate = {
- rc2CBC: SMIMECapabilitiesParametersForRC2CBC(),
- }
- smimeCapabilityMap.update(_smimeCapabilityMapUpdate)
|