123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 |
- # coding: utf-8
- #
- # This file is part of pyasn1-modules software.
- #
- # Created by Stanisław Pitucha with asn1ate tool.
- # Modified by Russ Housley to add a maps for CMC Control Attributes
- # and CMC Content Types for use with opentypes.
- #
- # Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
- # License: http://snmplabs.com/pyasn1/license.html
- #
- # Certificate Management over CMS (CMC) Updates
- #
- # ASN.1 source from:
- # https://www.rfc-editor.org/rfc/rfc6402.txt
- #
- from pyasn1.type import char
- from pyasn1.type import constraint
- from pyasn1.type import namedtype
- from pyasn1.type import namedval
- from pyasn1.type import opentype
- from pyasn1.type import tag
- from pyasn1.type import univ
- from pyasn1.type import useful
- from pyasn1_modules import rfc4211
- from pyasn1_modules import rfc5280
- from pyasn1_modules import rfc5652
- MAX = float('inf')
- def _buildOid(*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)
- # Since CMS Attributes and CMC Controls both use 'attrType', one map is used
- cmcControlAttributesMap = rfc5652.cmsAttributesMap
- class ChangeSubjectName(univ.Sequence):
- pass
- ChangeSubjectName.componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('subject', rfc5280.Name()),
- namedtype.OptionalNamedType('subjectAlt', rfc5280.GeneralNames())
- )
- class AttributeValue(univ.Any):
- pass
- class CMCStatus(univ.Integer):
- pass
- CMCStatus.namedValues = namedval.NamedValues(
- ('success', 0),
- ('failed', 2),
- ('pending', 3),
- ('noSupport', 4),
- ('confirmRequired', 5),
- ('popRequired', 6),
- ('partial', 7)
- )
- class PendInfo(univ.Sequence):
- pass
- PendInfo.componentType = namedtype.NamedTypes(
- namedtype.NamedType('pendToken', univ.OctetString()),
- namedtype.NamedType('pendTime', useful.GeneralizedTime())
- )
- bodyIdMax = univ.Integer(4294967295)
- class BodyPartID(univ.Integer):
- pass
- BodyPartID.subtypeSpec = constraint.ValueRangeConstraint(0, bodyIdMax)
- class BodyPartPath(univ.SequenceOf):
- pass
- BodyPartPath.componentType = BodyPartID()
- BodyPartPath.sizeSpec = constraint.ValueSizeConstraint(1, MAX)
- class BodyPartReference(univ.Choice):
- pass
- BodyPartReference.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('bodyPartPath', BodyPartPath())
- )
- class CMCFailInfo(univ.Integer):
- pass
- CMCFailInfo.namedValues = namedval.NamedValues(
- ('badAlg', 0),
- ('badMessageCheck', 1),
- ('badRequest', 2),
- ('badTime', 3),
- ('badCertId', 4),
- ('unsupportedExt', 5),
- ('mustArchiveKeys', 6),
- ('badIdentity', 7),
- ('popRequired', 8),
- ('popFailed', 9),
- ('noKeyReuse', 10),
- ('internalCAError', 11),
- ('tryLater', 12),
- ('authDataFail', 13)
- )
- class CMCStatusInfoV2(univ.Sequence):
- pass
- CMCStatusInfoV2.componentType = namedtype.NamedTypes(
- namedtype.NamedType('cMCStatus', CMCStatus()),
- namedtype.NamedType('bodyList', univ.SequenceOf(componentType=BodyPartReference())),
- namedtype.OptionalNamedType('statusString', char.UTF8String()),
- namedtype.OptionalNamedType(
- 'otherInfo', univ.Choice(
- componentType=namedtype.NamedTypes(
- namedtype.NamedType('failInfo', CMCFailInfo()),
- namedtype.NamedType('pendInfo', PendInfo()),
- namedtype.NamedType(
- 'extendedFailInfo', univ.Sequence(
- componentType=namedtype.NamedTypes(
- namedtype.NamedType('failInfoOID', univ.ObjectIdentifier()),
- namedtype.NamedType('failInfoValue', AttributeValue()))
- )
- )
- )
- )
- )
- )
- class GetCRL(univ.Sequence):
- pass
- GetCRL.componentType = namedtype.NamedTypes(
- namedtype.NamedType('issuerName', rfc5280.Name()),
- namedtype.OptionalNamedType('cRLName', rfc5280.GeneralName()),
- namedtype.OptionalNamedType('time', useful.GeneralizedTime()),
- namedtype.OptionalNamedType('reasons', rfc5280.ReasonFlags())
- )
- id_pkix = _buildOid(1, 3, 6, 1, 5, 5, 7)
- id_cmc = _buildOid(id_pkix, 7)
- id_cmc_batchResponses = _buildOid(id_cmc, 29)
- id_cmc_popLinkWitness = _buildOid(id_cmc, 23)
- class PopLinkWitnessV2(univ.Sequence):
- pass
- PopLinkWitnessV2.componentType = namedtype.NamedTypes(
- namedtype.NamedType('keyGenAlgorithm', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('macAlgorithm', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('witness', univ.OctetString())
- )
- id_cmc_popLinkWitnessV2 = _buildOid(id_cmc, 33)
- id_cmc_identityProofV2 = _buildOid(id_cmc, 34)
- id_cmc_revokeRequest = _buildOid(id_cmc, 17)
- id_cmc_recipientNonce = _buildOid(id_cmc, 7)
- class ControlsProcessed(univ.Sequence):
- pass
- ControlsProcessed.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyList', univ.SequenceOf(componentType=BodyPartReference()))
- )
- class CertificationRequest(univ.Sequence):
- pass
- CertificationRequest.componentType = namedtype.NamedTypes(
- namedtype.NamedType(
- 'certificationRequestInfo', univ.Sequence(
- componentType=namedtype.NamedTypes(
- namedtype.NamedType('version', univ.Integer()),
- namedtype.NamedType('subject', rfc5280.Name()),
- namedtype.NamedType(
- 'subjectPublicKeyInfo', univ.Sequence(
- componentType=namedtype.NamedTypes(
- namedtype.NamedType('algorithm', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('subjectPublicKey', univ.BitString())
- )
- )
- ),
- namedtype.NamedType(
- 'attributes', univ.SetOf(
- componentType=rfc5652.Attribute()).subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))
- )
- )
- )
- ),
- namedtype.NamedType('signatureAlgorithm', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('signature', univ.BitString())
- )
- class TaggedCertificationRequest(univ.Sequence):
- pass
- TaggedCertificationRequest.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('certificationRequest', CertificationRequest())
- )
- class TaggedRequest(univ.Choice):
- pass
- TaggedRequest.componentType = namedtype.NamedTypes(
- namedtype.NamedType('tcr', TaggedCertificationRequest().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.NamedType('crm',
- rfc4211.CertReqMsg().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
- namedtype.NamedType('orm', univ.Sequence(componentType=namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('requestMessageType', univ.ObjectIdentifier()),
- namedtype.NamedType('requestMessageValue', univ.Any())
- ))
- .subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2)))
- )
- id_cmc_popLinkRandom = _buildOid(id_cmc, 22)
- id_cmc_statusInfo = _buildOid(id_cmc, 1)
- id_cmc_trustedAnchors = _buildOid(id_cmc, 26)
- id_cmc_transactionId = _buildOid(id_cmc, 5)
- id_cmc_encryptedPOP = _buildOid(id_cmc, 9)
- class PublishTrustAnchors(univ.Sequence):
- pass
- PublishTrustAnchors.componentType = namedtype.NamedTypes(
- namedtype.NamedType('seqNumber', univ.Integer()),
- namedtype.NamedType('hashAlgorithm', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('anchorHashes', univ.SequenceOf(componentType=univ.OctetString()))
- )
- class RevokeRequest(univ.Sequence):
- pass
- RevokeRequest.componentType = namedtype.NamedTypes(
- namedtype.NamedType('issuerName', rfc5280.Name()),
- namedtype.NamedType('serialNumber', univ.Integer()),
- namedtype.NamedType('reason', rfc5280.CRLReason()),
- namedtype.OptionalNamedType('invalidityDate', useful.GeneralizedTime()),
- namedtype.OptionalNamedType('passphrase', univ.OctetString()),
- namedtype.OptionalNamedType('comment', char.UTF8String())
- )
- id_cmc_senderNonce = _buildOid(id_cmc, 6)
- id_cmc_authData = _buildOid(id_cmc, 27)
- class TaggedContentInfo(univ.Sequence):
- pass
- TaggedContentInfo.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('contentInfo', rfc5652.ContentInfo())
- )
- class IdentifyProofV2(univ.Sequence):
- pass
- IdentifyProofV2.componentType = namedtype.NamedTypes(
- namedtype.NamedType('proofAlgID', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('macAlgId', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('witness', univ.OctetString())
- )
- class CMCPublicationInfo(univ.Sequence):
- pass
- CMCPublicationInfo.componentType = namedtype.NamedTypes(
- namedtype.NamedType('hashAlg', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('certHashes', univ.SequenceOf(componentType=univ.OctetString())),
- namedtype.NamedType('pubInfo', rfc4211.PKIPublicationInfo())
- )
- id_kp_cmcCA = _buildOid(rfc5280.id_kp, 27)
- id_cmc_confirmCertAcceptance = _buildOid(id_cmc, 24)
- id_cmc_raIdentityWitness = _buildOid(id_cmc, 35)
- id_ExtensionReq = _buildOid(1, 2, 840, 113549, 1, 9, 14)
- id_cct = _buildOid(id_pkix, 12)
- id_cct_PKIData = _buildOid(id_cct, 2)
- id_kp_cmcRA = _buildOid(rfc5280.id_kp, 28)
- class CMCStatusInfo(univ.Sequence):
- pass
- CMCStatusInfo.componentType = namedtype.NamedTypes(
- namedtype.NamedType('cMCStatus', CMCStatus()),
- namedtype.NamedType('bodyList', univ.SequenceOf(componentType=BodyPartID())),
- namedtype.OptionalNamedType('statusString', char.UTF8String()),
- namedtype.OptionalNamedType(
- 'otherInfo', univ.Choice(
- componentType=namedtype.NamedTypes(
- namedtype.NamedType('failInfo', CMCFailInfo()),
- namedtype.NamedType('pendInfo', PendInfo())
- )
- )
- )
- )
- class DecryptedPOP(univ.Sequence):
- pass
- DecryptedPOP.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('thePOPAlgID', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('thePOP', univ.OctetString())
- )
- id_cmc_addExtensions = _buildOid(id_cmc, 8)
- id_cmc_modCertTemplate = _buildOid(id_cmc, 31)
- class TaggedAttribute(univ.Sequence):
- pass
- TaggedAttribute.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('attrType', univ.ObjectIdentifier()),
- namedtype.NamedType('attrValues', univ.SetOf(componentType=AttributeValue()),
- openType=opentype.OpenType('attrType', cmcControlAttributesMap)
- )
- )
- class OtherMsg(univ.Sequence):
- pass
- OtherMsg.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartID', BodyPartID()),
- namedtype.NamedType('otherMsgType', univ.ObjectIdentifier()),
- namedtype.NamedType('otherMsgValue', univ.Any())
- )
- class PKIData(univ.Sequence):
- pass
- PKIData.componentType = namedtype.NamedTypes(
- namedtype.NamedType('controlSequence', univ.SequenceOf(componentType=TaggedAttribute())),
- namedtype.NamedType('reqSequence', univ.SequenceOf(componentType=TaggedRequest())),
- namedtype.NamedType('cmsSequence', univ.SequenceOf(componentType=TaggedContentInfo())),
- namedtype.NamedType('otherMsgSequence', univ.SequenceOf(componentType=OtherMsg()))
- )
- class BodyPartList(univ.SequenceOf):
- pass
- BodyPartList.componentType = BodyPartID()
- BodyPartList.sizeSpec = constraint.ValueSizeConstraint(1, MAX)
- id_cmc_responseBody = _buildOid(id_cmc, 37)
- class AuthPublish(BodyPartID):
- pass
- class CMCUnsignedData(univ.Sequence):
- pass
- CMCUnsignedData.componentType = namedtype.NamedTypes(
- namedtype.NamedType('bodyPartPath', BodyPartPath()),
- namedtype.NamedType('identifier', univ.ObjectIdentifier()),
- namedtype.NamedType('content', univ.Any())
- )
- class CMCCertId(rfc5652.IssuerAndSerialNumber):
- pass
- class PKIResponse(univ.Sequence):
- pass
- PKIResponse.componentType = namedtype.NamedTypes(
- namedtype.NamedType('controlSequence', univ.SequenceOf(componentType=TaggedAttribute())),
- namedtype.NamedType('cmsSequence', univ.SequenceOf(componentType=TaggedContentInfo())),
- namedtype.NamedType('otherMsgSequence', univ.SequenceOf(componentType=OtherMsg()))
- )
- class ResponseBody(PKIResponse):
- pass
- id_cmc_statusInfoV2 = _buildOid(id_cmc, 25)
- id_cmc_lraPOPWitness = _buildOid(id_cmc, 11)
- class ModCertTemplate(univ.Sequence):
- pass
- ModCertTemplate.componentType = namedtype.NamedTypes(
- namedtype.NamedType('pkiDataReference', BodyPartPath()),
- namedtype.NamedType('certReferences', BodyPartList()),
- namedtype.DefaultedNamedType('replace', univ.Boolean().subtype(value=1)),
- namedtype.NamedType('certTemplate', rfc4211.CertTemplate())
- )
- id_cmc_regInfo = _buildOid(id_cmc, 18)
- id_cmc_identityProof = _buildOid(id_cmc, 3)
- class ExtensionReq(univ.SequenceOf):
- pass
- ExtensionReq.componentType = rfc5280.Extension()
- ExtensionReq.sizeSpec = constraint.ValueSizeConstraint(1, MAX)
- id_kp_cmcArchive = _buildOid(rfc5280.id_kp, 28)
- id_cmc_publishCert = _buildOid(id_cmc, 30)
- id_cmc_dataReturn = _buildOid(id_cmc, 4)
- class LraPopWitness(univ.Sequence):
- pass
- LraPopWitness.componentType = namedtype.NamedTypes(
- namedtype.NamedType('pkiDataBodyid', BodyPartID()),
- namedtype.NamedType('bodyIds', univ.SequenceOf(componentType=BodyPartID()))
- )
- id_aa = _buildOid(1, 2, 840, 113549, 1, 9, 16, 2)
- id_aa_cmc_unsignedData = _buildOid(id_aa, 34)
- id_cmc_getCert = _buildOid(id_cmc, 15)
- id_cmc_batchRequests = _buildOid(id_cmc, 28)
- id_cmc_decryptedPOP = _buildOid(id_cmc, 10)
- id_cmc_responseInfo = _buildOid(id_cmc, 19)
- id_cmc_changeSubjectName = _buildOid(id_cmc, 36)
- class GetCert(univ.Sequence):
- pass
- GetCert.componentType = namedtype.NamedTypes(
- namedtype.NamedType('issuerName', rfc5280.GeneralName()),
- namedtype.NamedType('serialNumber', univ.Integer())
- )
- id_cmc_identification = _buildOid(id_cmc, 2)
- id_cmc_queryPending = _buildOid(id_cmc, 21)
- class AddExtensions(univ.Sequence):
- pass
- AddExtensions.componentType = namedtype.NamedTypes(
- namedtype.NamedType('pkiDataReference', BodyPartID()),
- namedtype.NamedType('certReferences', univ.SequenceOf(componentType=BodyPartID())),
- namedtype.NamedType('extensions', univ.SequenceOf(componentType=rfc5280.Extension()))
- )
- class EncryptedPOP(univ.Sequence):
- pass
- EncryptedPOP.componentType = namedtype.NamedTypes(
- namedtype.NamedType('request', TaggedRequest()),
- namedtype.NamedType('cms', rfc5652.ContentInfo()),
- namedtype.NamedType('thePOPAlgID', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('witnessAlgID', rfc5280.AlgorithmIdentifier()),
- namedtype.NamedType('witness', univ.OctetString())
- )
- id_cmc_getCRL = _buildOid(id_cmc, 16)
- id_cct_PKIResponse = _buildOid(id_cct, 3)
- id_cmc_controlProcessed = _buildOid(id_cmc, 32)
- class NoSignatureValue(univ.OctetString):
- pass
- id_ad_cmc = _buildOid(rfc5280.id_ad, 12)
- id_alg_noSignature = _buildOid(id_pkix, 6, 2)
- # Map of CMC Control OIDs to CMC Control Attributes
- _cmcControlAttributesMapUpdate = {
- id_cmc_statusInfo: CMCStatusInfo(),
- id_cmc_statusInfoV2: CMCStatusInfoV2(),
- id_cmc_identification: char.UTF8String(),
- id_cmc_identityProof: univ.OctetString(),
- id_cmc_identityProofV2: IdentifyProofV2(),
- id_cmc_dataReturn: univ.OctetString(),
- id_cmc_transactionId: univ.Integer(),
- id_cmc_senderNonce: univ.OctetString(),
- id_cmc_recipientNonce: univ.OctetString(),
- id_cmc_addExtensions: AddExtensions(),
- id_cmc_encryptedPOP: EncryptedPOP(),
- id_cmc_decryptedPOP: DecryptedPOP(),
- id_cmc_lraPOPWitness: LraPopWitness(),
- id_cmc_getCert: GetCert(),
- id_cmc_getCRL: GetCRL(),
- id_cmc_revokeRequest: RevokeRequest(),
- id_cmc_regInfo: univ.OctetString(),
- id_cmc_responseInfo: univ.OctetString(),
- id_cmc_queryPending: univ.OctetString(),
- id_cmc_popLinkRandom: univ.OctetString(),
- id_cmc_popLinkWitness: univ.OctetString(),
- id_cmc_popLinkWitnessV2: PopLinkWitnessV2(),
- id_cmc_confirmCertAcceptance: CMCCertId(),
- id_cmc_trustedAnchors: PublishTrustAnchors(),
- id_cmc_authData: AuthPublish(),
- id_cmc_batchRequests: BodyPartList(),
- id_cmc_batchResponses: BodyPartList(),
- id_cmc_publishCert: CMCPublicationInfo(),
- id_cmc_modCertTemplate: ModCertTemplate(),
- id_cmc_controlProcessed: ControlsProcessed(),
- id_ExtensionReq: ExtensionReq(),
- }
- cmcControlAttributesMap.update(_cmcControlAttributesMapUpdate)
- # Map of CMC Content Type OIDs to CMC Content Types are added to
- # the ones that are in rfc5652.py
- _cmsContentTypesMapUpdate = {
- id_cct_PKIData: PKIData(),
- id_cct_PKIResponse: PKIResponse(),
- }
- rfc5652.cmsContentTypesMap.update(_cmsContentTypesMapUpdate)
|