codekingpro/portable-devtools
114k
1#2# This file is part of pyasn1-modules software.3#4# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>5# License: http://snmplabs.com/pyasn1/license.html6#7# X.509 certificate Request Message Format (CRMF) syntax8#9# ASN.1 source from:10# http://tools.ietf.org/html/rfc251111#12# Sample captures could be obtained with OpenSSL13#14from pyasn1_modules import rfc231515from pyasn1_modules.rfc2459 import *16 17MAX = float('inf')18 19id_pkix = univ.ObjectIdentifier('1.3.6.1.5.5.7')20id_pkip = univ.ObjectIdentifier('1.3.6.1.5.5.7.5')21id_regCtrl = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1')22id_regCtrl_regToken = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.1')23id_regCtrl_authenticator = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.2')24id_regCtrl_pkiPublicationInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.3')25id_regCtrl_pkiArchiveOptions = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.4')26id_regCtrl_oldCertID = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.5')27id_regCtrl_protocolEncrKey = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.6')28id_regInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2')29id_regInfo_utf8Pairs = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.1')30id_regInfo_certReq = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.2')31 32 33# This should be in PKIX Certificate Extensions module34 35class GeneralName(univ.OctetString):36 pass37 38 39# end of PKIX Certificate Extensions module40 41class UTF8Pairs(char.UTF8String):42 pass43 44 45class ProtocolEncrKey(SubjectPublicKeyInfo):46 pass47 48 49class CertId(univ.Sequence):50 componentType = namedtype.NamedTypes(51 namedtype.NamedType('issuer', GeneralName()),52 namedtype.NamedType('serialNumber', univ.Integer())53 )54 55 56class OldCertId(CertId):57 pass58 59 60class KeyGenParameters(univ.OctetString):61 pass62 63 64class EncryptedValue(univ.Sequence):65 componentType = namedtype.NamedTypes(66 namedtype.OptionalNamedType('intendedAlg', AlgorithmIdentifier().subtype(67 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),68 namedtype.OptionalNamedType('symmAlg', AlgorithmIdentifier().subtype(69 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),70 namedtype.OptionalNamedType('encSymmKey', univ.BitString().subtype(71 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),72 namedtype.OptionalNamedType('keyAlg', AlgorithmIdentifier().subtype(73 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))),74 namedtype.OptionalNamedType('valueHint', univ.OctetString().subtype(75 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),76 namedtype.NamedType('encValue', univ.BitString())77 )78 79 80class EncryptedKey(univ.Choice):81 componentType = namedtype.NamedTypes(82 namedtype.NamedType('encryptedValue', EncryptedValue()),83 namedtype.NamedType('envelopedData', rfc2315.EnvelopedData().subtype(84 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))85 )86 87 88class PKIArchiveOptions(univ.Choice):89 componentType = namedtype.NamedTypes(90 namedtype.NamedType('encryptedPrivKey', EncryptedKey().subtype(91 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),92 namedtype.NamedType('keyGenParameters', KeyGenParameters().subtype(93 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),94 namedtype.NamedType('archiveRemGenPrivKey',95 univ.Boolean().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))96 )97 98 99class SinglePubInfo(univ.Sequence):100 componentType = namedtype.NamedTypes(101 namedtype.NamedType('pubMethod', univ.Integer(102 namedValues=namedval.NamedValues(('dontCare', 0), ('x500', 1), ('web', 2), ('ldap', 3)))),103 namedtype.OptionalNamedType('pubLocation', GeneralName())104 )105 106 107class PKIPublicationInfo(univ.Sequence):108 componentType = namedtype.NamedTypes(109 namedtype.NamedType('action',110 univ.Integer(namedValues=namedval.NamedValues(('dontPublish', 0), ('pleasePublish', 1)))),111 namedtype.OptionalNamedType('pubInfos', univ.SequenceOf(componentType=SinglePubInfo()).subtype(112 sizeSpec=constraint.ValueSizeConstraint(1, MAX)))113 )114 115 116class Authenticator(char.UTF8String):117 pass118 119 120class RegToken(char.UTF8String):121 pass122 123 124class SubsequentMessage(univ.Integer):125 namedValues = namedval.NamedValues(126 ('encrCert', 0),127 ('challengeResp', 1)128 )129 130 131class POPOPrivKey(univ.Choice):132 componentType = namedtype.NamedTypes(133 namedtype.NamedType('thisMessage',134 univ.BitString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),135 namedtype.NamedType('subsequentMessage', SubsequentMessage().subtype(136 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),137 namedtype.NamedType('dhMAC',138 univ.BitString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))139 )140 141 142class PBMParameter(univ.Sequence):143 componentType = namedtype.NamedTypes(144 namedtype.NamedType('salt', univ.OctetString()),145 namedtype.NamedType('owf', AlgorithmIdentifier()),146 namedtype.NamedType('iterationCount', univ.Integer()),147 namedtype.NamedType('mac', AlgorithmIdentifier())148 )149 150 151class PKMACValue(univ.Sequence):152 componentType = namedtype.NamedTypes(153 namedtype.NamedType('algId', AlgorithmIdentifier()),154 namedtype.NamedType('value', univ.BitString())155 )156 157 158class POPOSigningKeyInput(univ.Sequence):159 componentType = namedtype.NamedTypes(160 namedtype.NamedType(161 'authInfo', univ.Choice(162 componentType=namedtype.NamedTypes(163 namedtype.NamedType(164 'sender', GeneralName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))165 ),166 namedtype.NamedType('publicKeyMAC', PKMACValue())167 )168 )169 ),170 namedtype.NamedType('publicKey', SubjectPublicKeyInfo())171 )172 173 174class POPOSigningKey(univ.Sequence):175 componentType = namedtype.NamedTypes(176 namedtype.OptionalNamedType('poposkInput', POPOSigningKeyInput().subtype(177 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),178 namedtype.NamedType('algorithmIdentifier', AlgorithmIdentifier()),179 namedtype.NamedType('signature', univ.BitString())180 )181 182 183class ProofOfPossession(univ.Choice):184 componentType = namedtype.NamedTypes(185 namedtype.NamedType('raVerified',186 univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),187 namedtype.NamedType('signature', POPOSigningKey().subtype(188 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),189 namedtype.NamedType('keyEncipherment', POPOPrivKey().subtype(190 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),191 namedtype.NamedType('keyAgreement', POPOPrivKey().subtype(192 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)))193 )194 195 196class Controls(univ.SequenceOf):197 componentType = AttributeTypeAndValue()198 sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)199 200 201class OptionalValidity(univ.Sequence):202 componentType = namedtype.NamedTypes(203 namedtype.OptionalNamedType('notBefore',204 Time().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),205 namedtype.OptionalNamedType('notAfter',206 Time().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))207 )208 209 210class CertTemplate(univ.Sequence):211 componentType = namedtype.NamedTypes(212 namedtype.OptionalNamedType('version', Version().subtype(213 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),214 namedtype.OptionalNamedType('serialNumber', univ.Integer().subtype(215 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),216 namedtype.OptionalNamedType('signingAlg', AlgorithmIdentifier().subtype(217 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),218 namedtype.OptionalNamedType('issuer', Name().subtype(219 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))),220 namedtype.OptionalNamedType('validity', OptionalValidity().subtype(221 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),222 namedtype.OptionalNamedType('subject', Name().subtype(223 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))),224 namedtype.OptionalNamedType('publicKey', SubjectPublicKeyInfo().subtype(225 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))),226 namedtype.OptionalNamedType('issuerUID', UniqueIdentifier().subtype(227 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))),228 namedtype.OptionalNamedType('subjectUID', UniqueIdentifier().subtype(229 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))),230 namedtype.OptionalNamedType('extensions', Extensions().subtype(231 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9)))232 )233 234 235class CertRequest(univ.Sequence):236 componentType = namedtype.NamedTypes(237 namedtype.NamedType('certReqId', univ.Integer()),238 namedtype.NamedType('certTemplate', CertTemplate()),239 namedtype.OptionalNamedType('controls', Controls())240 )241 242 243class CertReq(CertRequest):244 pass245 246 247class CertReqMsg(univ.Sequence):248 componentType = namedtype.NamedTypes(249 namedtype.NamedType('certReq', CertRequest()),250 namedtype.OptionalNamedType('pop', ProofOfPossession()),251 namedtype.OptionalNamedType('regInfo', univ.SequenceOf(componentType=AttributeTypeAndValue()).subtype(252 sizeSpec=constraint.ValueSizeConstraint(1, MAX)))253 )254 255 256class CertReqMessages(univ.SequenceOf):257 componentType = CertReqMsg()258 sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)259 