123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #
- # This file is part of pyasn1-modules software.
- #
- # Created by Russ Housley with some assistance from asn1ate v.0.6.0.
- #
- # Copyright (c) 2019, Vigil Security, LLC
- # License: http://snmplabs.com/pyasn1/license.html
- #
- # S/MIME Capabilities for Public Key Definitions
- #
- # ASN.1 source from:
- # https://www.rfc-editor.org/rfc/rfc6664.txt
- #
- from pyasn1.type import constraint
- from pyasn1.type import namedtype
- from pyasn1.type import tag
- from pyasn1.type import univ
- from pyasn1_modules import rfc5280
- from pyasn1_modules import rfc5751
- from pyasn1_modules import rfc5480
- from pyasn1_modules import rfc4055
- from pyasn1_modules import rfc3279
- MAX = float('inf')
- # Imports from RFC 5280
- AlgorithmIdentifier = rfc5280.AlgorithmIdentifier
- # Imports from RFC 3279
- dhpublicnumber = rfc3279.dhpublicnumber
- Dss_Parms = rfc3279.Dss_Parms
- id_dsa = rfc3279.id_dsa
- id_ecPublicKey = rfc3279.id_ecPublicKey
- rsaEncryption = rfc3279.rsaEncryption
- # Imports from RFC 4055
- id_mgf1 = rfc4055.id_mgf1
- id_RSAES_OAEP = rfc4055.id_RSAES_OAEP
- id_RSASSA_PSS = rfc4055.id_RSASSA_PSS
- # Imports from RFC 5480
- ECParameters = rfc5480.ECParameters
- id_ecDH = rfc5480.id_ecDH
- id_ecMQV = rfc5480.id_ecMQV
- # RSA
- class RSAKeySize(univ.Integer):
- # suggested values are 1024, 2048, 3072, 4096, 7680, 8192, and 15360;
- # however, the integer value is not limited to these suggestions
- pass
- class RSAKeyCapabilities(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('minKeySize', RSAKeySize()),
- namedtype.OptionalNamedType('maxKeySize', RSAKeySize())
- )
- class RsaSsa_Pss_sig_caps(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('hashAlg', AlgorithmIdentifier()),
- namedtype.OptionalNamedType('maskAlg', AlgorithmIdentifier()),
- namedtype.DefaultedNamedType('trailerField', univ.Integer().subtype(value=1))
- )
- # Diffie-Hellman and DSA
- class DSAKeySize(univ.Integer):
- subtypeSpec = constraint.SingleValueConstraint(1024, 2048, 3072, 7680, 15360)
- class DSAKeyCapabilities(univ.Choice):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('keySizes', univ.Sequence(componentType=namedtype.NamedTypes(
- namedtype.NamedType('minKeySize',
- DSAKeySize()),
- namedtype.OptionalNamedType('maxKeySize',
- DSAKeySize()),
- namedtype.OptionalNamedType('maxSizeP',
- univ.Integer().subtype(explicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatSimple, 1))),
- namedtype.OptionalNamedType('maxSizeQ',
- univ.Integer().subtype(explicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatSimple, 2))),
- namedtype.OptionalNamedType('maxSizeG',
- univ.Integer().subtype(explicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatSimple, 3)))
- )).subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.NamedType('keyParams',
- Dss_Parms().subtype(explicitTag=tag.Tag(
- tag.tagClassContext, tag.tagFormatConstructed, 1)))
- )
- # Elliptic Curve
- class EC_SMimeCaps(univ.SequenceOf):
- componentType = ECParameters()
- subtypeSpec=constraint.ValueSizeConstraint(1, MAX)
- # Update the SMIMECapabilities Attribute Map in rfc5751.py
- #
- # The map can either include an entry for scap-sa-rsaSSA-PSS or
- # scap-pk-rsaSSA-PSS, but not both. One is associated with the
- # public key and the other is associated with the signature
- # algorithm; however, they use the same OID. If you need the
- # other one in your application, copy the map into a local dict,
- # adjust as needed, and pass the local dict to the decoder with
- # openTypes=your_local_map.
- _smimeCapabilityMapUpdate = {
- rsaEncryption: RSAKeyCapabilities(),
- id_RSASSA_PSS: RSAKeyCapabilities(),
- # id_RSASSA_PSS: RsaSsa_Pss_sig_caps(),
- id_RSAES_OAEP: RSAKeyCapabilities(),
- id_dsa: DSAKeyCapabilities(),
- dhpublicnumber: DSAKeyCapabilities(),
- id_ecPublicKey: EC_SMimeCaps(),
- id_ecDH: EC_SMimeCaps(),
- id_ecMQV: EC_SMimeCaps(),
- id_mgf1: AlgorithmIdentifier(),
- }
- rfc5751.smimeCapabilityMap.update(_smimeCapabilityMapUpdate)
|