OLD | NEW |
(Empty) | |
| 1 # |
| 2 # X.509 certificate Request Message Format (CRMF) syntax |
| 3 # |
| 4 # ASN.1 source from: |
| 5 # http://tools.ietf.org/html/rfc2511 |
| 6 # |
| 7 # Sample captures could be obtained with OpenSSL |
| 8 # |
| 9 from pyasn1.type import tag, namedtype, namedval, univ, constraint, char,useful |
| 10 from pyasn1_modules.rfc2459 import * |
| 11 from pyasn1_modules import rfc2315 |
| 12 |
| 13 MAX=16 |
| 14 |
| 15 id_pkix = univ.ObjectIdentifier('1.3.6.1.5.5.7') |
| 16 id_pkip = univ.ObjectIdentifier('1.3.6.1.5.5.7.5') |
| 17 id_regCtrl = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1') |
| 18 id_regCtrl_regToken = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.1') |
| 19 id_regCtrl_authenticator = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.2') |
| 20 id_regCtrl_pkiPublicationInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.3') |
| 21 id_regCtrl_pkiArchiveOptions = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.4') |
| 22 id_regCtrl_oldCertID = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.5') |
| 23 id_regCtrl_protocolEncrKey = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.6') |
| 24 id_regInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2') |
| 25 id_regInfo_utf8Pairs = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.1') |
| 26 id_regInfo_certReq = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.2') |
| 27 |
| 28 # This should be in PKIX Certificate Extensions module |
| 29 |
| 30 class GeneralName(univ.OctetString): pass |
| 31 |
| 32 # end of PKIX Certificate Extensions module |
| 33 |
| 34 class UTF8Pairs(char.UTF8String): pass |
| 35 |
| 36 class ProtocolEncrKey(SubjectPublicKeyInfo): pass |
| 37 |
| 38 class CertId(univ.Sequence): |
| 39 componentType = namedtype.NamedTypes( |
| 40 namedtype.NamedType('issuer', GeneralName()), |
| 41 namedtype.NamedType('serialNumber', univ.Integer()) |
| 42 ) |
| 43 |
| 44 class OldCertId(CertId): pass |
| 45 |
| 46 class KeyGenParameters(univ.OctetString): pass |
| 47 |
| 48 class EncryptedValue(univ.Sequence): |
| 49 componentType = namedtype.NamedTypes( |
| 50 namedtype.OptionalNamedType('intendedAlg', AlgorithmIdentifier().subtype
(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| 51 namedtype.OptionalNamedType('symmAlg', AlgorithmIdentifier().subtype(imp
licitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))), |
| 52 namedtype.OptionalNamedType('encSymmKey', univ.BitString().subtype(impli
citTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))), |
| 53 namedtype.OptionalNamedType('keyAlg', AlgorithmIdentifier().subtype(impl
icitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), |
| 54 namedtype.OptionalNamedType('valueHint', univ.OctetString().subtype(impl
icitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))), |
| 55 namedtype.NamedType('encValue', univ.BitString()) |
| 56 ) |
| 57 |
| 58 class EncryptedKey(univ.Choice): |
| 59 componentType = namedtype.NamedTypes( |
| 60 namedtype.NamedType('encryptedValue', EncryptedValue()), |
| 61 namedtype.NamedType('envelopedData', rfc2315.EnvelopedData().subtype(imp
licitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))) |
| 62 ) |
| 63 |
| 64 class PKIArchiveOptions(univ.Choice): |
| 65 componentType = namedtype.NamedTypes( |
| 66 namedtype.NamedType('encryptedPrivKey', EncryptedKey().subtype(implicitT
ag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| 67 namedtype.NamedType('keyGenParameters', KeyGenParameters().subtype(impli
citTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), |
| 68 namedtype.NamedType('archiveRemGenPrivKey', univ.Boolean().subtype(impli
citTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))) |
| 69 ) |
| 70 |
| 71 class SinglePubInfo(univ.Sequence): |
| 72 componentType = namedtype.NamedTypes( |
| 73 namedtype.NamedType('pubMethod', univ.Integer(namedValues=namedval.Named
Values(('dontCare', 0), ('x500', 1), ('web', 2), ('ldap', 3)))), |
| 74 namedtype.OptionalNamedType('pubLocation', GeneralName()) |
| 75 ) |
| 76 |
| 77 class PKIPublicationInfo(univ.Sequence): |
| 78 componentType = namedtype.NamedTypes( |
| 79 namedtype.NamedType('action', univ.Integer(namedValues=namedval.NamedVal
ues(('dontPublish', 0), ('pleasePublish', 1)))), |
| 80 namedtype.OptionalNamedType('pubInfos', univ.SequenceOf(componentType=Si
nglePubInfo()).subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))) |
| 81 ) |
| 82 |
| 83 class Authenticator(char.UTF8String): pass |
| 84 class RegToken(char.UTF8String): pass |
| 85 |
| 86 class SubsequentMessage(univ.Integer): |
| 87 namedValues = namedval.NamedValues( |
| 88 ('encrCert', 0), |
| 89 ('challengeResp', 1) |
| 90 ) |
| 91 |
| 92 class POPOPrivKey(univ.Choice): |
| 93 componentType = namedtype.NamedTypes( |
| 94 namedtype.NamedType('thisMessage', univ.BitString().subtype(implicitTag=
tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), |
| 95 namedtype.NamedType('subsequentMessage', SubsequentMessage().subtype(imp
licitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), |
| 96 namedtype.NamedType('dhMAC', univ.BitString().subtype(implicitTag=tag.Ta
g(tag.tagClassContext, tag.tagFormatSimple, 2))) |
| 97 ) |
| 98 |
| 99 class PBMParameter(univ.Sequence): |
| 100 componentType = namedtype.NamedTypes( |
| 101 namedtype.NamedType('salt', univ.OctetString()), |
| 102 namedtype.NamedType('owf', AlgorithmIdentifier()), |
| 103 namedtype.NamedType('iterationCount', univ.Integer()), |
| 104 namedtype.NamedType('mac', AlgorithmIdentifier()) |
| 105 ) |
| 106 |
| 107 class PKMACValue(univ.Sequence): |
| 108 componentType = namedtype.NamedTypes( |
| 109 namedtype.NamedType('algId', AlgorithmIdentifier()), |
| 110 namedtype.NamedType('value', univ.BitString()) |
| 111 ) |
| 112 |
| 113 class POPOSigningKeyInput(univ.Sequence): |
| 114 componentType = namedtype.NamedTypes( |
| 115 namedtype.NamedType('authInfo', univ.Choice(componentType=namedtype.Name
dTypes(namedtype.NamedType('sender', GeneralName().subtype(implicitTag=tag.Tag(t
ag.tagClassContext, tag.tagFormatSimple, 0))), namedtype.NamedType('publicKeyMAC
', PKMACValue())))), |
| 116 namedtype.NamedType('publicKey', SubjectPublicKeyInfo()) |
| 117 ) |
| 118 |
| 119 class POPOSigningKey(univ.Sequence): |
| 120 componentType = namedtype.NamedTypes( |
| 121 namedtype.OptionalNamedType('poposkInput', POPOSigningKeyInput().subtype
(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), |
| 122 namedtype.NamedType('algorithmIdentifier', AlgorithmIdentifier()), |
| 123 namedtype.NamedType('signature', univ.BitString()) |
| 124 ) |
| 125 |
| 126 class ProofOfPossession(univ.Choice): |
| 127 componentType = namedtype.NamedTypes( |
| 128 namedtype.NamedType('raVerified', univ.Null().subtype(implicitTag=tag.Ta
g(tag.tagClassContext, tag.tagFormatSimple, 0))), |
| 129 namedtype.NamedType('signature', POPOSigningKey().subtype(implicitTag=ta
g.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))), |
| 130 namedtype.NamedType('keyEncipherment', POPOPrivKey().subtype(implicitTag
=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))), |
| 131 namedtype.NamedType('keyAgreement', POPOPrivKey().subtype(implicitTag=ta
g.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))) |
| 132 ) |
| 133 |
| 134 class Controls(univ.SequenceOf): |
| 135 componentType = AttributeTypeAndValue() |
| 136 subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1
, MAX) |
| 137 |
| 138 class OptionalValidity(univ.Sequence): |
| 139 componentType = namedtype.NamedTypes( |
| 140 namedtype.OptionalNamedType('notBefore', Time().subtype(implicitTag=tag.
Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), |
| 141 namedtype.OptionalNamedType('notAfter', Time().subtype(implicitTag=tag.T
ag(tag.tagClassContext, tag.tagFormatSimple, 1))) |
| 142 ) |
| 143 |
| 144 class CertTemplate(univ.Sequence): |
| 145 componentType = namedtype.NamedTypes( |
| 146 namedtype.OptionalNamedType('version', Version().subtype(implicitTag=tag
.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), |
| 147 namedtype.OptionalNamedType('serialNumber', univ.Integer().subtype(impli
citTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), |
| 148 namedtype.OptionalNamedType('signingAlg', AlgorithmIdentifier().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))), |
| 149 namedtype.OptionalNamedType('issuer', Name().subtype(implicitTag=tag.Tag
(tag.tagClassContext, tag.tagFormatConstructed, 3))), |
| 150 namedtype.OptionalNamedType('validity', OptionalValidity().subtype(impli
citTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))), |
| 151 namedtype.OptionalNamedType('subject', Name().subtype(implicitTag=tag.Ta
g(tag.tagClassContext, tag.tagFormatConstructed, 5))), |
| 152 namedtype.OptionalNamedType('publicKey', SubjectPublicKeyInfo().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))), |
| 153 namedtype.OptionalNamedType('issuerUID', UniqueIdentifier().subtype(impl
icitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))), |
| 154 namedtype.OptionalNamedType('subjectUID', UniqueIdentifier().subtype(imp
licitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))), |
| 155 namedtype.OptionalNamedType('extensions', Extensions().subtype(implicitT
ag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9))) |
| 156 ) |
| 157 |
| 158 class CertRequest(univ.Sequence): |
| 159 componentType = namedtype.NamedTypes( |
| 160 namedtype.NamedType('certReqId', univ.Integer()), |
| 161 namedtype.NamedType('certTemplate', CertTemplate()), |
| 162 namedtype.OptionalNamedType('controls', Controls()) |
| 163 ) |
| 164 |
| 165 class CertReq(CertRequest): pass |
| 166 |
| 167 class CertReqMsg(univ.Sequence): |
| 168 componentType = namedtype.NamedTypes( |
| 169 namedtype.NamedType('certReq', CertRequest()), |
| 170 namedtype.OptionalNamedType('pop', ProofOfPossession()), |
| 171 namedtype.OptionalNamedType('regInfo', univ.SequenceOf(componentType=Att
ributeTypeAndValue).subtype(subtypeSpec=constraint.ValueSizeConstraint(1, MAX))) |
| 172 ) |
| 173 |
| 174 class CertReqMessages(univ.SequenceOf): |
| 175 componentType = CertReqMsg() |
| 176 subtypeSpec = univ.SequenceOf.subtypeSpec + constraint.ValueSizeConstraint(1
, MAX) |
OLD | NEW |