123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- #
- # This file is part of pyasn1-modules software.
- #
- # Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
- # License: http://snmplabs.com/pyasn1/license.html
- #
- # X.509 certificate Request Message Format (CRMF) syntax
- #
- # ASN.1 source from:
- # http://tools.ietf.org/html/rfc2511
- #
- # Sample captures could be obtained with OpenSSL
- #
- from pyasn1_modules import rfc2315
- from pyasn1_modules.rfc2459 import *
- MAX = float('inf')
- id_pkix = univ.ObjectIdentifier('1.3.6.1.5.5.7')
- id_pkip = univ.ObjectIdentifier('1.3.6.1.5.5.7.5')
- id_regCtrl = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1')
- id_regCtrl_regToken = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.1')
- id_regCtrl_authenticator = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.2')
- id_regCtrl_pkiPublicationInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.3')
- id_regCtrl_pkiArchiveOptions = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.4')
- id_regCtrl_oldCertID = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.5')
- id_regCtrl_protocolEncrKey = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.6')
- id_regInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2')
- id_regInfo_utf8Pairs = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.1')
- id_regInfo_certReq = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.2')
- # This should be in PKIX Certificate Extensions module
- class GeneralName(univ.OctetString):
- pass
- # end of PKIX Certificate Extensions module
- class UTF8Pairs(char.UTF8String):
- pass
- class ProtocolEncrKey(SubjectPublicKeyInfo):
- pass
- class CertId(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('issuer', GeneralName()),
- namedtype.NamedType('serialNumber', univ.Integer())
- )
- class OldCertId(CertId):
- pass
- class KeyGenParameters(univ.OctetString):
- pass
- class EncryptedValue(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('intendedAlg', AlgorithmIdentifier().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.OptionalNamedType('symmAlg', AlgorithmIdentifier().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
- namedtype.OptionalNamedType('encSymmKey', univ.BitString().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
- namedtype.OptionalNamedType('keyAlg', AlgorithmIdentifier().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))),
- namedtype.OptionalNamedType('valueHint', univ.OctetString().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),
- namedtype.NamedType('encValue', univ.BitString())
- )
- class EncryptedKey(univ.Choice):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('encryptedValue', EncryptedValue()),
- namedtype.NamedType('envelopedData', rfc2315.EnvelopedData().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
- )
- class PKIArchiveOptions(univ.Choice):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('encryptedPrivKey', EncryptedKey().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.NamedType('keyGenParameters', KeyGenParameters().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
- namedtype.NamedType('archiveRemGenPrivKey',
- univ.Boolean().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
- )
- class SinglePubInfo(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('pubMethod', univ.Integer(
- namedValues=namedval.NamedValues(('dontCare', 0), ('x500', 1), ('web', 2), ('ldap', 3)))),
- namedtype.OptionalNamedType('pubLocation', GeneralName())
- )
- class PKIPublicationInfo(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('action',
- univ.Integer(namedValues=namedval.NamedValues(('dontPublish', 0), ('pleasePublish', 1)))),
- namedtype.OptionalNamedType('pubInfos', univ.SequenceOf(componentType=SinglePubInfo()).subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX)))
- )
- class Authenticator(char.UTF8String):
- pass
- class RegToken(char.UTF8String):
- pass
- class SubsequentMessage(univ.Integer):
- namedValues = namedval.NamedValues(
- ('encrCert', 0),
- ('challengeResp', 1)
- )
- class POPOPrivKey(univ.Choice):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('thisMessage',
- univ.BitString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.NamedType('subsequentMessage', SubsequentMessage().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
- namedtype.NamedType('dhMAC',
- univ.BitString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
- )
- class PBMParameter(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('salt', univ.OctetString()),
- namedtype.NamedType('owf', AlgorithmIdentifier()),
- namedtype.NamedType('iterationCount', univ.Integer()),
- namedtype.NamedType('mac', AlgorithmIdentifier())
- )
- class PKMACValue(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('algId', AlgorithmIdentifier()),
- namedtype.NamedType('value', univ.BitString())
- )
- class POPOSigningKeyInput(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType(
- 'authInfo', univ.Choice(
- componentType=namedtype.NamedTypes(
- namedtype.NamedType(
- 'sender', GeneralName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))
- ),
- namedtype.NamedType('publicKeyMAC', PKMACValue())
- )
- )
- ),
- namedtype.NamedType('publicKey', SubjectPublicKeyInfo())
- )
- class POPOSigningKey(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('poposkInput', POPOSigningKeyInput().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
- namedtype.NamedType('algorithmIdentifier', AlgorithmIdentifier()),
- namedtype.NamedType('signature', univ.BitString())
- )
- class ProofOfPossession(univ.Choice):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('raVerified',
- univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.NamedType('signature', POPOSigningKey().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
- namedtype.NamedType('keyEncipherment', POPOPrivKey().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
- namedtype.NamedType('keyAgreement', POPOPrivKey().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)))
- )
- class Controls(univ.SequenceOf):
- componentType = AttributeTypeAndValue()
- sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
- class OptionalValidity(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('notBefore',
- Time().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.OptionalNamedType('notAfter',
- Time().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
- )
- class CertTemplate(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.OptionalNamedType('version', Version().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
- namedtype.OptionalNamedType('serialNumber', univ.Integer().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
- namedtype.OptionalNamedType('signingAlg', AlgorithmIdentifier().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
- namedtype.OptionalNamedType('issuer', Name().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))),
- namedtype.OptionalNamedType('validity', OptionalValidity().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),
- namedtype.OptionalNamedType('subject', Name().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))),
- namedtype.OptionalNamedType('publicKey', SubjectPublicKeyInfo().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))),
- namedtype.OptionalNamedType('issuerUID', UniqueIdentifier().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))),
- namedtype.OptionalNamedType('subjectUID', UniqueIdentifier().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))),
- namedtype.OptionalNamedType('extensions', Extensions().subtype(
- implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9)))
- )
- class CertRequest(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certReqId', univ.Integer()),
- namedtype.NamedType('certTemplate', CertTemplate()),
- namedtype.OptionalNamedType('controls', Controls())
- )
- class CertReq(CertRequest):
- pass
- class CertReqMsg(univ.Sequence):
- componentType = namedtype.NamedTypes(
- namedtype.NamedType('certReq', CertRequest()),
- namedtype.OptionalNamedType('pop', ProofOfPossession()),
- namedtype.OptionalNamedType('regInfo', univ.SequenceOf(componentType=AttributeTypeAndValue()).subtype(
- sizeSpec=constraint.ValueSizeConstraint(1, MAX)))
- )
- class CertReqMessages(univ.SequenceOf):
- componentType = CertReqMsg()
- sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
|