| # |
| # This file is part of pyasn1-modules software. |
| # |
| # Copyright (c) 2005-2019, Ilya Etingof <[email protected]> |
| # 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) |