| # coding: utf-8 |
| # |
| # This file is part of pyasn1-modules software. |
| # |
| # Created by Stanisław Pitucha with asn1ate tool. |
| # Copyright (c) 2005-2019, Ilya Etingof <[email protected]> |
| # License: http://snmplabs.com/pyasn1/license.html |
| # |
| # Internet X.509 Public Key Infrastructure Certificate Request |
| # Message Format (CRMF) |
| # |
| # ASN.1 source from: |
| # http://www.ietf.org/rfc/rfc4211.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 tag |
| from pyasn1.type import univ |
| |
| from pyasn1_modules import rfc3280 |
| from pyasn1_modules import rfc3852 |
| |
| 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) |
| |
| |
| id_pkix = _buildOid(1, 3, 6, 1, 5, 5, 7) |
| |
| id_pkip = _buildOid(id_pkix, 5) |
| |
| id_regCtrl = _buildOid(id_pkip, 1) |
| |
| |
| class SinglePubInfo(univ.Sequence): |
| pass |
| |
| |
| SinglePubInfo.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('pubMethod', univ.Integer( |
| namedValues=namedval.NamedValues(('dontCare', 0), ('x500', 1), ('web', 2), ('ldap', 3)))), |
| namedtype.OptionalNamedType('pubLocation', rfc3280.GeneralName()) |
| ) |
| |
| |
| class UTF8Pairs(char.UTF8String): |
| pass |
| |
| |
| class PKMACValue(univ.Sequence): |
| pass |
| |
| |
| PKMACValue.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('algId', rfc3280.AlgorithmIdentifier()), |
| namedtype.NamedType('value', univ.BitString()) |
| ) |
| |
| |
| class POPOSigningKeyInput(univ.Sequence): |
| pass |
| |
| |
| POPOSigningKeyInput.componentType = namedtype.NamedTypes( |
| namedtype.NamedType( |
| 'authInfo', univ.Choice( |
| componentType=namedtype.NamedTypes( |
| namedtype.NamedType( |
| 'sender', rfc3280.GeneralName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)) |
| ), |
| namedtype.NamedType( |
| 'publicKeyMAC', PKMACValue() |
| ) |
| ) |
| ) |
| ), |
| namedtype.NamedType('publicKey', rfc3280.SubjectPublicKeyInfo()) |
| ) |
| |
| |
| class POPOSigningKey(univ.Sequence): |
| pass |
| |
| |
| POPOSigningKey.componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('poposkInput', POPOSigningKeyInput().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| namedtype.NamedType('algorithmIdentifier', rfc3280.AlgorithmIdentifier()), |
| namedtype.NamedType('signature', univ.BitString()) |
| ) |
| |
| |
| class Attributes(univ.SetOf): |
| pass |
| |
| |
| Attributes.componentType = rfc3280.Attribute() |
| |
| |
| class PrivateKeyInfo(univ.Sequence): |
| pass |
| |
| |
| PrivateKeyInfo.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('version', univ.Integer()), |
| namedtype.NamedType('privateKeyAlgorithm', rfc3280.AlgorithmIdentifier()), |
| namedtype.NamedType('privateKey', univ.OctetString()), |
| namedtype.OptionalNamedType('attributes', |
| Attributes().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))) |
| ) |
| |
| |
| class EncryptedValue(univ.Sequence): |
| pass |
| |
| |
| EncryptedValue.componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('intendedAlg', rfc3280.AlgorithmIdentifier().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), |
| namedtype.OptionalNamedType('symmAlg', rfc3280.AlgorithmIdentifier().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), |
| namedtype.OptionalNamedType('encSymmKey', univ.BitString().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), |
| namedtype.OptionalNamedType('keyAlg', rfc3280.AlgorithmIdentifier().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))), |
| namedtype.OptionalNamedType('valueHint', univ.OctetString().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))), |
| namedtype.NamedType('encValue', univ.BitString()) |
| ) |
| |
| |
| class EncryptedKey(univ.Choice): |
| pass |
| |
| |
| EncryptedKey.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('encryptedValue', EncryptedValue()), |
| namedtype.NamedType('envelopedData', rfc3852.EnvelopedData().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))) |
| ) |
| |
| |
| class KeyGenParameters(univ.OctetString): |
| pass |
| |
| |
| class PKIArchiveOptions(univ.Choice): |
| pass |
| |
| |
| PKIArchiveOptions.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))) |
| ) |
| |
| id_regCtrl_authenticator = _buildOid(id_regCtrl, 2) |
| |
| id_regInfo = _buildOid(id_pkip, 2) |
| |
| id_regInfo_certReq = _buildOid(id_regInfo, 2) |
| |
| |
| class ProtocolEncrKey(rfc3280.SubjectPublicKeyInfo): |
| pass |
| |
| |
| class Authenticator(char.UTF8String): |
| pass |
| |
| |
| class SubsequentMessage(univ.Integer): |
| pass |
| |
| |
| SubsequentMessage.namedValues = namedval.NamedValues( |
| ('encrCert', 0), |
| ('challengeResp', 1) |
| ) |
| |
| |
| class AttributeTypeAndValue(univ.Sequence): |
| pass |
| |
| |
| AttributeTypeAndValue.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('type', univ.ObjectIdentifier()), |
| namedtype.NamedType('value', univ.Any()) |
| ) |
| |
| |
| class POPOPrivKey(univ.Choice): |
| pass |
| |
| |
| POPOPrivKey.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))), |
| namedtype.NamedType('agreeMAC', |
| PKMACValue().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), |
| namedtype.NamedType('encryptedKey', rfc3852.EnvelopedData().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))) |
| ) |
| |
| |
| class ProofOfPossession(univ.Choice): |
| pass |
| |
| |
| ProofOfPossession.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 OptionalValidity(univ.Sequence): |
| pass |
| |
| |
| OptionalValidity.componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('notBefore', rfc3280.Time().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| namedtype.OptionalNamedType('notAfter', rfc3280.Time().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))) |
| ) |
| |
| |
| class CertTemplate(univ.Sequence): |
| pass |
| |
| |
| CertTemplate.componentType = namedtype.NamedTypes( |
| namedtype.OptionalNamedType('version', rfc3280.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', rfc3280.AlgorithmIdentifier().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), |
| namedtype.OptionalNamedType('issuer', rfc3280.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', rfc3280.Name().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))), |
| namedtype.OptionalNamedType('publicKey', rfc3280.SubjectPublicKeyInfo().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6))), |
| namedtype.OptionalNamedType('issuerUID', rfc3280.UniqueIdentifier().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))), |
| namedtype.OptionalNamedType('subjectUID', rfc3280.UniqueIdentifier().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))), |
| namedtype.OptionalNamedType('extensions', rfc3280.Extensions().subtype( |
| implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 9))) |
| ) |
| |
| |
| class Controls(univ.SequenceOf): |
| pass |
| |
| |
| Controls.componentType = AttributeTypeAndValue() |
| Controls.sizeSpec = constraint.ValueSizeConstraint(1, MAX) |
| |
| |
| class CertRequest(univ.Sequence): |
| pass |
| |
| |
| CertRequest.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('certReqId', univ.Integer()), |
| namedtype.NamedType('certTemplate', CertTemplate()), |
| namedtype.OptionalNamedType('controls', Controls()) |
| ) |
| |
| |
| class CertReqMsg(univ.Sequence): |
| pass |
| |
| |
| CertReqMsg.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('certReq', CertRequest()), |
| namedtype.OptionalNamedType('popo', ProofOfPossession()), |
| namedtype.OptionalNamedType('regInfo', univ.SequenceOf(componentType=AttributeTypeAndValue())) |
| ) |
| |
| |
| class CertReqMessages(univ.SequenceOf): |
| pass |
| |
| |
| CertReqMessages.componentType = CertReqMsg() |
| CertReqMessages.sizeSpec = constraint.ValueSizeConstraint(1, MAX) |
| |
| |
| class CertReq(CertRequest): |
| pass |
| |
| |
| id_regCtrl_pkiPublicationInfo = _buildOid(id_regCtrl, 3) |
| |
| |
| class CertId(univ.Sequence): |
| pass |
| |
| |
| CertId.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('issuer', rfc3280.GeneralName()), |
| namedtype.NamedType('serialNumber', univ.Integer()) |
| ) |
| |
| |
| class OldCertId(CertId): |
| pass |
| |
| |
| class PKIPublicationInfo(univ.Sequence): |
| pass |
| |
| |
| PKIPublicationInfo.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('action', |
| univ.Integer(namedValues=namedval.NamedValues(('dontPublish', 0), ('pleasePublish', 1)))), |
| namedtype.OptionalNamedType('pubInfos', univ.SequenceOf(componentType=SinglePubInfo())) |
| ) |
| |
| |
| class EncKeyWithID(univ.Sequence): |
| pass |
| |
| |
| EncKeyWithID.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('privateKey', PrivateKeyInfo()), |
| namedtype.OptionalNamedType( |
| 'identifier', univ.Choice( |
| componentType=namedtype.NamedTypes( |
| namedtype.NamedType('string', char.UTF8String()), |
| namedtype.NamedType('generalName', rfc3280.GeneralName()) |
| ) |
| ) |
| ) |
| ) |
| |
| id_regCtrl_protocolEncrKey = _buildOid(id_regCtrl, 6) |
| |
| id_regCtrl_oldCertID = _buildOid(id_regCtrl, 5) |
| |
| id_smime = _buildOid(1, 2, 840, 113549, 1, 9, 16) |
| |
| |
| class PBMParameter(univ.Sequence): |
| pass |
| |
| |
| PBMParameter.componentType = namedtype.NamedTypes( |
| namedtype.NamedType('salt', univ.OctetString()), |
| namedtype.NamedType('owf', rfc3280.AlgorithmIdentifier()), |
| namedtype.NamedType('iterationCount', univ.Integer()), |
| namedtype.NamedType('mac', rfc3280.AlgorithmIdentifier()) |
| ) |
| |
| id_regCtrl_regToken = _buildOid(id_regCtrl, 1) |
| |
| id_regCtrl_pkiArchiveOptions = _buildOid(id_regCtrl, 4) |
| |
| id_regInfo_utf8Pairs = _buildOid(id_regInfo, 1) |
| |
| id_ct = _buildOid(id_smime, 1) |
| |
| id_ct_encKeyWithID = _buildOid(id_ct, 21) |
| |
| |
| class RegToken(char.UTF8String): |
| pass |