Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pyasn1_modules/rfc2511.py: 100%

71 statements  

« prev     ^ index     » next       coverage.py v7.2.2, created at 2023-03-26 06:04 +0000

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.html 

6# 

7# X.509 certificate Request Message Format (CRMF) syntax 

8# 

9# ASN.1 source from: 

10# http://tools.ietf.org/html/rfc2511 

11# 

12# Sample captures could be obtained with OpenSSL 

13# 

14from pyasn1_modules import rfc2315 

15from 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 module 

34 

35class GeneralName(univ.OctetString): 

36 pass 

37 

38 

39# end of PKIX Certificate Extensions module 

40 

41class UTF8Pairs(char.UTF8String): 

42 pass 

43 

44 

45class ProtocolEncrKey(SubjectPublicKeyInfo): 

46 pass 

47 

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 pass 

58 

59 

60class KeyGenParameters(univ.OctetString): 

61 pass 

62 

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 pass 

118 

119 

120class RegToken(char.UTF8String): 

121 pass 

122 

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 pass 

245 

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)