123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803 |
- #
- # This file is part of pyasn1-modules software.
- #
- # Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
- # License: http://snmplabs.com/pyasn1/license.html
- #
- # Certificate Management Protocol structures as per RFC4210
- #
- # Based on Alex Railean's work
- #
- from pyasn1.type import char
- from pyasn1.type import constraint
- from pyasn1.type import namedtype
- from pyasn1.type import namedval
- from pyasn1.type import tag
- from pyasn1.type import univ
- from pyasn1.type import useful
- from pyasn1_modules import rfc2314
- from pyasn1_modules import rfc2459
- from pyasn1_modules import rfc2511
- MAX = float('inf')
- class KeyIdentifier(univ.OctetString):
- pass
- class CMPCertificate(rfc2459.Certificate):
- pass
- class OOBCert(CMPCertificate):
- pass
- class CertAnnContent(CMPCertificate):
- pass
- class PKIFreeText(univ.SequenceOf):
- """
- PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
- """
- componentType = char.UTF8String()
- sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
- class PollRepContent(univ.SequenceOf):
- """
- PollRepContent ::= SEQUENCE OF SEQUENCE {
- certReqId INTEGER,
- checkAfter INTEGER, -- time in seconds
- reason PKIFreeText OPTIONAL
- }
- """
- class CertReq(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certReqId', univ.Integer()),
- namedtype.NamedType('checkAfter', univ.Integer()),
- namedtype.OptionalNamedType('reason', PKIFreeText())
- )
- componentType = CertReq()
- class PollReqContent(univ.SequenceOf):
- """
- PollReqContent ::= SEQUENCE OF SEQUENCE {
- certReqId INTEGER
- }
- """
- class CertReq(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certReqId', univ.Integer())
- )
- componentType = CertReq()
- class InfoTypeAndValue(univ.Sequence):
- """
- InfoTypeAndValue ::= SEQUENCE {
- infoType OBJECT IDENTIFIER,
- infoValue ANY DEFINED BY infoType OPTIONAL
- }"""
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('infoType', univ.ObjectIdentifier()),
- namedtype.OptionalNamedType('infoValue', univ.Any())
- )
- class GenRepContent(univ.SequenceOf):
- componentType = InfoTypeAndValue()
- class GenMsgContent(univ.SequenceOf):
- componentType = InfoTypeAndValue()
- class PKIConfirmContent(univ.Null):
- pass
- class CRLAnnContent(univ.SequenceOf):
- componentType = rfc2459.CertificateList()
- class CAKeyUpdAnnContent(univ.Sequence):
- """
- CAKeyUpdAnnContent ::= SEQUENCE {
- oldWithNew CMPCertificate,
- newWithOld CMPCertificate,
- newWithNew CMPCertificate
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('oldWithNew', CMPCertificate()),
- namedtype.NamedType('newWithOld', CMPCertificate()),
- namedtype.NamedType('newWithNew', CMPCertificate())
- )
- class RevDetails(univ.Sequence):
- """
- RevDetails ::= SEQUENCE {
- certDetails CertTemplate,
- crlEntryDetails Extensions OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certDetails', rfc2511.CertTemplate()),
- namedtype.OptionalNamedType('crlEntryDetails', rfc2459.Extensions())
- )
- class RevReqContent(univ.SequenceOf):
- componentType = RevDetails()
- class CertOrEncCert(univ.Choice):
- """
- CertOrEncCert ::= CHOICE {
- certificate [0] CMPCertificate,
- encryptedCert [1] EncryptedValue
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certificate', CMPCertificate().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.NamedType('encryptedCert', rfc2511.EncryptedValue().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
- )
- class CertifiedKeyPair(univ.Sequence):
- """
- CertifiedKeyPair ::= SEQUENCE {
- certOrEncCert CertOrEncCert,
- privateKey [0] EncryptedValue OPTIONAL,
- publicationInfo [1] PKIPublicationInfo OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certOrEncCert', CertOrEncCert()),
- namedtype.OptionalNamedType('privateKey', rfc2511.EncryptedValue().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.OptionalNamedType('publicationInfo', rfc2511.PKIPublicationInfo().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)))
- )
- class POPODecKeyRespContent(univ.SequenceOf):
- componentType = univ.Integer()
- class Challenge(univ.Sequence):
- """
- Challenge ::= SEQUENCE {
- owf AlgorithmIdentifier OPTIONAL,
- witness OCTET STRING,
- challenge OCTET STRING
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('owf', rfc2459.AlgorithmIdentifier()),
- namedtype.NamedType('witness', univ.OctetString()),
- namedtype.NamedType('challenge', univ.OctetString())
- )
- class PKIStatus(univ.Integer):
- """
- PKIStatus ::= INTEGER {
- accepted (0),
- grantedWithMods (1),
- rejection (2),
- waiting (3),
- revocationWarning (4),
- revocationNotification (5),
- keyUpdateWarning (6)
- }
- """
- namedValues = namedval.NamedValues(
- ('accepted', 0),
- ('grantedWithMods', 1),
- ('rejection', 2),
- ('waiting', 3),
- ('revocationWarning', 4),
- ('revocationNotification', 5),
- ('keyUpdateWarning', 6)
- )
- class PKIFailureInfo(univ.BitString):
- """
- PKIFailureInfo ::= BIT STRING {
- badAlg (0),
- badMessageCheck (1),
- badRequest (2),
- badTime (3),
- badCertId (4),
- badDataFormat (5),
- wrongAuthority (6),
- incorrectData (7),
- missingTimeStamp (8),
- badPOP (9),
- certRevoked (10),
- certConfirmed (11),
- wrongIntegrity (12),
- badRecipientNonce (13),
- timeNotAvailable (14),
- unacceptedPolicy (15),
- unacceptedExtension (16),
- addInfoNotAvailable (17),
- badSenderNonce (18),
- badCertTemplate (19),
- signerNotTrusted (20),
- transactionIdInUse (21),
- unsupportedVersion (22),
- notAuthorized (23),
- systemUnavail (24),
- systemFailure (25),
- duplicateCertReq (26)
- """
- namedValues = namedval.NamedValues(
- ('badAlg', 0),
- ('badMessageCheck', 1),
- ('badRequest', 2),
- ('badTime', 3),
- ('badCertId', 4),
- ('badDataFormat', 5),
- ('wrongAuthority', 6),
- ('incorrectData', 7),
- ('missingTimeStamp', 8),
- ('badPOP', 9),
- ('certRevoked', 10),
- ('certConfirmed', 11),
- ('wrongIntegrity', 12),
- ('badRecipientNonce', 13),
- ('timeNotAvailable', 14),
- ('unacceptedPolicy', 15),
- ('unacceptedExtension', 16),
- ('addInfoNotAvailable', 17),
- ('badSenderNonce', 18),
- ('badCertTemplate', 19),
- ('signerNotTrusted', 20),
- ('transactionIdInUse', 21),
- ('unsupportedVersion', 22),
- ('notAuthorized', 23),
- ('systemUnavail', 24),
- ('systemFailure', 25),
- ('duplicateCertReq', 26)
- )
- class PKIStatusInfo(univ.Sequence):
- """
- PKIStatusInfo ::= SEQUENCE {
- status PKIStatus,
- statusString PKIFreeText OPTIONAL,
- failInfo PKIFailureInfo OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('status', PKIStatus()),
- namedtype.OptionalNamedType('statusString', PKIFreeText()),
- namedtype.OptionalNamedType('failInfo', PKIFailureInfo())
- )
- class ErrorMsgContent(univ.Sequence):
- """
- ErrorMsgContent ::= SEQUENCE {
- pKIStatusInfo PKIStatusInfo,
- errorCode INTEGER OPTIONAL,
- -- implementation-specific error codes
- errorDetails PKIFreeText OPTIONAL
- -- implementation-specific error details
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('pKIStatusInfo', PKIStatusInfo()),
- namedtype.OptionalNamedType('errorCode', univ.Integer()),
- namedtype.OptionalNamedType('errorDetails', PKIFreeText())
- )
- class CertStatus(univ.Sequence):
- """
- CertStatus ::= SEQUENCE {
- certHash OCTET STRING,
- certReqId INTEGER,
- statusInfo PKIStatusInfo OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certHash', univ.OctetString()),
- namedtype.NamedType('certReqId', univ.Integer()),
- namedtype.OptionalNamedType('statusInfo', PKIStatusInfo())
- )
- class CertConfirmContent(univ.SequenceOf):
- componentType = CertStatus()
- class RevAnnContent(univ.Sequence):
- """
- RevAnnContent ::= SEQUENCE {
- status PKIStatus,
- certId CertId,
- willBeRevokedAt GeneralizedTime,
- badSinceDate GeneralizedTime,
- crlDetails Extensions OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('status', PKIStatus()),
- namedtype.NamedType('certId', rfc2511.CertId()),
- namedtype.NamedType('willBeRevokedAt', useful.GeneralizedTime()),
- namedtype.NamedType('badSinceDate', useful.GeneralizedTime()),
- namedtype.OptionalNamedType('crlDetails', rfc2459.Extensions())
- )
- class RevRepContent(univ.Sequence):
- """
- RevRepContent ::= SEQUENCE {
- status SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
- revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId
- OPTIONAL,
- crls [1] SEQUENCE SIZE (1..MAX) OF CertificateList
- OPTIONAL
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType(
- 'status', univ.SequenceOf(
- componentType=PKIStatusInfo(),
- sizeSpec=constraint.ValueSizeConstraint(1, MAX)
- )
- ),
- namedtype.OptionalNamedType(
- 'revCerts', univ.SequenceOf(componentType=rfc2511.CertId()).subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX),
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)
- )
- ),
- namedtype.OptionalNamedType(
- 'crls', univ.SequenceOf(componentType=rfc2459.CertificateList()).subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX),
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)
- )
- )
- )
- class KeyRecRepContent(univ.Sequence):
- """
- KeyRecRepContent ::= SEQUENCE {
- status PKIStatusInfo,
- newSigCert [0] CMPCertificate OPTIONAL,
- caCerts [1] SEQUENCE SIZE (1..MAX) OF
- CMPCertificate OPTIONAL,
- keyPairHist [2] SEQUENCE SIZE (1..MAX) OF
- CertifiedKeyPair OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('status', PKIStatusInfo()),
- namedtype.OptionalNamedType(
- 'newSigCert', CMPCertificate().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)
- )
- ),
- namedtype.OptionalNamedType(
- 'caCerts', univ.SequenceOf(componentType=CMPCertificate()).subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1),
- sizeSpec=constraint.ValueSizeConstraint(1, MAX)
- )
- ),
- namedtype.OptionalNamedType('keyPairHist', univ.SequenceOf(componentType=CertifiedKeyPair()).subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2),
- sizeSpec=constraint.ValueSizeConstraint(1, MAX))
- )
- )
- class CertResponse(univ.Sequence):
- """
- CertResponse ::= SEQUENCE {
- certReqId INTEGER,
- status PKIStatusInfo,
- certifiedKeyPair CertifiedKeyPair OPTIONAL,
- rspInfo OCTET STRING OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certReqId', univ.Integer()),
- namedtype.NamedType('status', PKIStatusInfo()),
- namedtype.OptionalNamedType('certifiedKeyPair', CertifiedKeyPair()),
- namedtype.OptionalNamedType('rspInfo', univ.OctetString())
- )
- class CertRepMessage(univ.Sequence):
- """
- CertRepMessage ::= SEQUENCE {
- caPubs [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
- OPTIONAL,
- response SEQUENCE OF CertResponse
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType(
- 'caPubs', univ.SequenceOf(
- componentType=CMPCertificate()
- ).subtype(sizeSpec=constraint.ValueSizeConstraint(1, MAX),
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))
- ),
- namedtype.NamedType('response', univ.SequenceOf(componentType=CertResponse()))
- )
- class POPODecKeyChallContent(univ.SequenceOf):
- componentType = Challenge()
- class OOBCertHash(univ.Sequence):
- """
- OOBCertHash ::= SEQUENCE {
- hashAlg [0] AlgorithmIdentifier OPTIONAL,
- certId [1] CertId OPTIONAL,
- hashVal BIT STRING
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType(
- 'hashAlg', rfc2459.AlgorithmIdentifier().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))
- ),
- namedtype.OptionalNamedType(
- 'certId', rfc2511.CertId().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))
- ),
- namedtype.NamedType('hashVal', univ.BitString())
- )
- # pyasn1 does not naturally handle recursive definitions, thus this hack:
- # NestedMessageContent ::= PKIMessages
- class NestedMessageContent(univ.SequenceOf):
- """
- NestedMessageContent ::= PKIMessages
- """
- componentType = univ.Any()
- class DHBMParameter(univ.Sequence):
- """
- DHBMParameter ::= SEQUENCE {
- owf AlgorithmIdentifier,
- -- AlgId for a One-Way Function (SHA-1 recommended)
- mac AlgorithmIdentifier
- -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11],
- } -- or HMAC [RFC2104, RFC2202])
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('owf', rfc2459.AlgorithmIdentifier()),
- namedtype.NamedType('mac', rfc2459.AlgorithmIdentifier())
- )
- id_DHBasedMac = univ.ObjectIdentifier('1.2.840.113533.7.66.30')
- class PBMParameter(univ.Sequence):
- """
- PBMParameter ::= SEQUENCE {
- salt OCTET STRING,
- owf AlgorithmIdentifier,
- iterationCount INTEGER,
- mac AlgorithmIdentifier
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType(
- 'salt', univ.OctetString().subtype(subtypeSpec=constraint.ValueSizeConstraint(0, 128))
- ),
- namedtype.NamedType('owf', rfc2459.AlgorithmIdentifier()),
- namedtype.NamedType('iterationCount', univ.Integer()),
- namedtype.NamedType('mac', rfc2459.AlgorithmIdentifier())
- )
- id_PasswordBasedMac = univ.ObjectIdentifier('1.2.840.113533.7.66.13')
- class PKIProtection(univ.BitString):
- pass
- # pyasn1 does not naturally handle recursive definitions, thus this hack:
- # NestedMessageContent ::= PKIMessages
- nestedMessageContent = NestedMessageContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 20))
- class PKIBody(univ.Choice):
- """
- PKIBody ::= CHOICE { -- message-specific body elements
- ir [0] CertReqMessages, --Initialization Request
- ip [1] CertRepMessage, --Initialization Response
- cr [2] CertReqMessages, --Certification Request
- cp [3] CertRepMessage, --Certification Response
- p10cr [4] CertificationRequest, --imported from [PKCS10]
- popdecc [5] POPODecKeyChallContent, --pop Challenge
- popdecr [6] POPODecKeyRespContent, --pop Response
- kur [7] CertReqMessages, --Key Update Request
- kup [8] CertRepMessage, --Key Update Response
- krr [9] CertReqMessages, --Key Recovery Request
- krp [10] KeyRecRepContent, --Key Recovery Response
- rr [11] RevReqContent, --Revocation Request
- rp [12] RevRepContent, --Revocation Response
- ccr [13] CertReqMessages, --Cross-Cert. Request
- ccp [14] CertRepMessage, --Cross-Cert. Response
- ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann.
- cann [16] CertAnnContent, --Certificate Ann.
- rann [17] RevAnnContent, --Revocation Ann.
- crlann [18] CRLAnnContent, --CRL Announcement
- pkiconf [19] PKIConfirmContent, --Confirmation
- nested [20] NestedMessageContent, --Nested Message
- genm [21] GenMsgContent, --General Message
- genp [22] GenRepContent, --General Response
- error [23] ErrorMsgContent, --Error Message
- certConf [24] CertConfirmContent, --Certificate confirm
- pollReq [25] PollReqContent, --Polling request
- pollRep [26] PollRepContent --Polling response
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType(
- 'ir', rfc2511.CertReqMessages().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)
- )
- ),
- namedtype.NamedType(
- 'ip', CertRepMessage().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)
- )
- ),
- namedtype.NamedType(
- 'cr', rfc2511.CertReqMessages().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2)
- )
- ),
- namedtype.NamedType(
- 'cp', CertRepMessage().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)
- )
- ),
- namedtype.NamedType(
- 'p10cr', rfc2314.CertificationRequest().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4)
- )
- ),
- namedtype.NamedType(
- 'popdecc', POPODecKeyChallContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5)
- )
- ),
- namedtype.NamedType(
- 'popdecr', POPODecKeyRespContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6)
- )
- ),
- namedtype.NamedType(
- 'kur', rfc2511.CertReqMessages().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 7)
- )
- ),
- namedtype.NamedType(
- 'kup', CertRepMessage().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 8)
- )
- ),
- namedtype.NamedType(
- 'krr', rfc2511.CertReqMessages().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9)
- )
- ),
- namedtype.NamedType(
- 'krp', KeyRecRepContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 10)
- )
- ),
- namedtype.NamedType(
- 'rr', RevReqContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 11)
- )
- ),
- namedtype.NamedType(
- 'rp', RevRepContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 12)
- )
- ),
- namedtype.NamedType(
- 'ccr', rfc2511.CertReqMessages().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 13)
- )
- ),
- namedtype.NamedType(
- 'ccp', CertRepMessage().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 14)
- )
- ),
- namedtype.NamedType(
- 'ckuann', CAKeyUpdAnnContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 15)
- )
- ),
- namedtype.NamedType(
- 'cann', CertAnnContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 16)
- )
- ),
- namedtype.NamedType(
- 'rann', RevAnnContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 17)
- )
- ),
- namedtype.NamedType(
- 'crlann', CRLAnnContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 18)
- )
- ),
- namedtype.NamedType(
- 'pkiconf', PKIConfirmContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 19)
- )
- ),
- namedtype.NamedType(
- 'nested', nestedMessageContent
- ),
- # namedtype.NamedType('nested', NestedMessageContent().subtype(
- # explicitTag=tag.Tag(tag.tagClassContext,tag.tagFormatConstructed,20)
- # )
- # ),
- namedtype.NamedType(
- 'genm', GenMsgContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 21)
- )
- ),
- namedtype.NamedType(
- 'gen', GenRepContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 22)
- )
- ),
- namedtype.NamedType(
- 'error', ErrorMsgContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 23)
- )
- ),
- namedtype.NamedType(
- 'certConf', CertConfirmContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 24)
- )
- ),
- namedtype.NamedType(
- 'pollReq', PollReqContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 25)
- )
- ),
- namedtype.NamedType(
- 'pollRep', PollRepContent().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 26)
- )
- )
- )
- class PKIHeader(univ.Sequence):
- """
- PKIHeader ::= SEQUENCE {
- pvno INTEGER { cmp1999(1), cmp2000(2) },
- sender GeneralName,
- recipient GeneralName,
- messageTime [0] GeneralizedTime OPTIONAL,
- protectionAlg [1] AlgorithmIdentifier OPTIONAL,
- senderKID [2] KeyIdentifier OPTIONAL,
- recipKID [3] KeyIdentifier OPTIONAL,
- transactionID [4] OCTET STRING OPTIONAL,
- senderNonce [5] OCTET STRING OPTIONAL,
- recipNonce [6] OCTET STRING OPTIONAL,
- freeText [7] PKIFreeText OPTIONAL,
- generalInfo [8] SEQUENCE SIZE (1..MAX) OF
- InfoTypeAndValue OPTIONAL
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType(
- 'pvno', univ.Integer(
- namedValues=namedval.NamedValues(('cmp1999', 1), ('cmp2000', 2))
- )
- ),
- namedtype.NamedType('sender', rfc2459.GeneralName()),
- namedtype.NamedType('recipient', rfc2459.GeneralName()),
- namedtype.OptionalNamedType('messageTime', useful.GeneralizedTime().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.OptionalNamedType('protectionAlg', rfc2459.AlgorithmIdentifier().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
- namedtype.OptionalNamedType('senderKID', rfc2459.KeyIdentifier().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
- namedtype.OptionalNamedType('recipKID', rfc2459.KeyIdentifier().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
- namedtype.OptionalNamedType('transactionID', univ.OctetString().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
- namedtype.OptionalNamedType('senderNonce', univ.OctetString().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))),
- namedtype.OptionalNamedType('recipNonce', univ.OctetString().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6))),
- namedtype.OptionalNamedType('freeText', PKIFreeText().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 7))),
- namedtype.OptionalNamedType('generalInfo',
- univ.SequenceOf(
- componentType=InfoTypeAndValue().subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX)
- )
- ).subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))
- )
- )
- class ProtectedPart(univ.Sequence):
- """
- ProtectedPart ::= SEQUENCE {
- header PKIHeader,
- body PKIBody
- }
- """
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('header', PKIHeader()),
- namedtype.NamedType('infoValue', PKIBody())
- )
- class PKIMessage(univ.Sequence):
- """
- PKIMessage ::= SEQUENCE {
- header PKIHeader,
- body PKIBody,
- protection [0] PKIProtection OPTIONAL,
- extraCerts [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
- OPTIONAL
- }"""
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('header', PKIHeader()),
- namedtype.NamedType('body', PKIBody()),
- namedtype.OptionalNamedType('protection', PKIProtection().subtype(
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.OptionalNamedType('extraCerts',
- univ.SequenceOf(
- componentType=CMPCertificate()
- ).subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX),
- explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1)
- )
- )
- )
- class PKIMessages(univ.SequenceOf):
- """
- PKIMessages ::= SEQUENCE SIZE (1..MAX) OF PKIMessage
- """
- componentType = PKIMessage()
- sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
- # pyasn1 does not naturally handle recursive definitions, thus this hack:
- # NestedMessageContent ::= PKIMessages
- NestedMessageContent._componentType = PKIMessages()
- nestedMessageContent._componentType = PKIMessages()
|