pyasn1-alt-modules 0.4.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyasn1-alt-modules might be problematic. Click here for more details.
- pyasn1_alt_modules/__init__.py +2 -0
- pyasn1_alt_modules/opentypemap.py +19 -0
- pyasn1_alt_modules/pem.py +66 -0
- pyasn1_alt_modules/rfc1155.py +97 -0
- pyasn1_alt_modules/rfc1157.py +127 -0
- pyasn1_alt_modules/rfc1901.py +23 -0
- pyasn1_alt_modules/rfc1902.py +130 -0
- pyasn1_alt_modules/rfc1905.py +136 -0
- pyasn1_alt_modules/rfc2040.py +50 -0
- pyasn1_alt_modules/rfc2251.py +564 -0
- pyasn1_alt_modules/rfc2314.py +68 -0
- pyasn1_alt_modules/rfc2315.py +325 -0
- pyasn1_alt_modules/rfc2437.py +70 -0
- pyasn1_alt_modules/rfc2459.py +1340 -0
- pyasn1_alt_modules/rfc2511.py +303 -0
- pyasn1_alt_modules/rfc2528.py +34 -0
- pyasn1_alt_modules/rfc2560.py +226 -0
- pyasn1_alt_modules/rfc2631.py +37 -0
- pyasn1_alt_modules/rfc2634.py +342 -0
- pyasn1_alt_modules/rfc2743.py +60 -0
- pyasn1_alt_modules/rfc2876.py +61 -0
- pyasn1_alt_modules/rfc2898.py +72 -0
- pyasn1_alt_modules/rfc2985.py +593 -0
- pyasn1_alt_modules/rfc2986.py +76 -0
- pyasn1_alt_modules/rfc3058.py +48 -0
- pyasn1_alt_modules/rfc3114.py +80 -0
- pyasn1_alt_modules/rfc3125.py +469 -0
- pyasn1_alt_modules/rfc3161.py +142 -0
- pyasn1_alt_modules/rfc3217.py +42 -0
- pyasn1_alt_modules/rfc3274.py +62 -0
- pyasn1_alt_modules/rfc3279.py +264 -0
- pyasn1_alt_modules/rfc3280.py +1544 -0
- pyasn1_alt_modules/rfc3281.py +332 -0
- pyasn1_alt_modules/rfc3370.py +142 -0
- pyasn1_alt_modules/rfc3412.py +54 -0
- pyasn1_alt_modules/rfc3414.py +29 -0
- pyasn1_alt_modules/rfc3447.py +46 -0
- pyasn1_alt_modules/rfc3537.py +44 -0
- pyasn1_alt_modules/rfc3546.py +23 -0
- pyasn1_alt_modules/rfc3560.py +74 -0
- pyasn1_alt_modules/rfc3565.py +59 -0
- pyasn1_alt_modules/rfc3657.py +69 -0
- pyasn1_alt_modules/rfc3709.py +230 -0
- pyasn1_alt_modules/rfc3739.py +207 -0
- pyasn1_alt_modules/rfc3770.py +77 -0
- pyasn1_alt_modules/rfc3779.py +139 -0
- pyasn1_alt_modules/rfc3820.py +66 -0
- pyasn1_alt_modules/rfc3852.py +707 -0
- pyasn1_alt_modules/rfc3874.py +29 -0
- pyasn1_alt_modules/rfc4010.py +58 -0
- pyasn1_alt_modules/rfc4043.py +45 -0
- pyasn1_alt_modules/rfc4055.py +285 -0
- pyasn1_alt_modules/rfc4056.py +56 -0
- pyasn1_alt_modules/rfc4059.py +101 -0
- pyasn1_alt_modules/rfc4073.py +62 -0
- pyasn1_alt_modules/rfc4108.py +355 -0
- pyasn1_alt_modules/rfc4210.py +807 -0
- pyasn1_alt_modules/rfc4211.py +420 -0
- pyasn1_alt_modules/rfc4231.py +38 -0
- pyasn1_alt_modules/rfc4262.py +37 -0
- pyasn1_alt_modules/rfc4334.py +78 -0
- pyasn1_alt_modules/rfc4357.py +485 -0
- pyasn1_alt_modules/rfc4366.py +23 -0
- pyasn1_alt_modules/rfc4387.py +23 -0
- pyasn1_alt_modules/rfc4476.py +99 -0
- pyasn1_alt_modules/rfc4490.py +119 -0
- pyasn1_alt_modules/rfc4491.py +44 -0
- pyasn1_alt_modules/rfc4683.py +76 -0
- pyasn1_alt_modules/rfc4985.py +52 -0
- pyasn1_alt_modules/rfc4998.py +125 -0
- pyasn1_alt_modules/rfc5035.py +206 -0
- pyasn1_alt_modules/rfc5055.py +763 -0
- pyasn1_alt_modules/rfc5083.py +55 -0
- pyasn1_alt_modules/rfc5084.py +94 -0
- pyasn1_alt_modules/rfc5126.py +578 -0
- pyasn1_alt_modules/rfc5208.py +73 -0
- pyasn1_alt_modules/rfc5275.py +404 -0
- pyasn1_alt_modules/rfc5276.py +82 -0
- pyasn1_alt_modules/rfc5280.py +1666 -0
- pyasn1_alt_modules/rfc5480.py +190 -0
- pyasn1_alt_modules/rfc5544.py +127 -0
- pyasn1_alt_modules/rfc5636.py +117 -0
- pyasn1_alt_modules/rfc5639.py +49 -0
- pyasn1_alt_modules/rfc5649.py +33 -0
- pyasn1_alt_modules/rfc5652.py +763 -0
- pyasn1_alt_modules/rfc5697.py +64 -0
- pyasn1_alt_modules/rfc5698.py +159 -0
- pyasn1_alt_modules/rfc5751.py +127 -0
- pyasn1_alt_modules/rfc5752.py +52 -0
- pyasn1_alt_modules/rfc5753.py +163 -0
- pyasn1_alt_modules/rfc5755.py +400 -0
- pyasn1_alt_modules/rfc5913.py +46 -0
- pyasn1_alt_modules/rfc5914.py +119 -0
- pyasn1_alt_modules/rfc5915.py +32 -0
- pyasn1_alt_modules/rfc5916.py +39 -0
- pyasn1_alt_modules/rfc5917.py +59 -0
- pyasn1_alt_modules/rfc5924.py +19 -0
- pyasn1_alt_modules/rfc5934.py +786 -0
- pyasn1_alt_modules/rfc5940.py +62 -0
- pyasn1_alt_modules/rfc5958.py +100 -0
- pyasn1_alt_modules/rfc5990.py +238 -0
- pyasn1_alt_modules/rfc6010.py +92 -0
- pyasn1_alt_modules/rfc6019.py +46 -0
- pyasn1_alt_modules/rfc6031.py +469 -0
- pyasn1_alt_modules/rfc6032.py +71 -0
- pyasn1_alt_modules/rfc6066.py +25 -0
- pyasn1_alt_modules/rfc6120.py +46 -0
- pyasn1_alt_modules/rfc6170.py +17 -0
- pyasn1_alt_modules/rfc6187.py +22 -0
- pyasn1_alt_modules/rfc6210.py +45 -0
- pyasn1_alt_modules/rfc6211.py +75 -0
- pyasn1_alt_modules/rfc6402.py +643 -0
- pyasn1_alt_modules/rfc6482.py +77 -0
- pyasn1_alt_modules/rfc6484.py +17 -0
- pyasn1_alt_modules/rfc6486.py +70 -0
- pyasn1_alt_modules/rfc6487.py +22 -0
- pyasn1_alt_modules/rfc6492.py +41 -0
- pyasn1_alt_modules/rfc6493.py +24 -0
- pyasn1_alt_modules/rfc6494.py +23 -0
- pyasn1_alt_modules/rfc6664.py +151 -0
- pyasn1_alt_modules/rfc6955.py +112 -0
- pyasn1_alt_modules/rfc6960.py +234 -0
- pyasn1_alt_modules/rfc6962.py +52 -0
- pyasn1_alt_modules/rfc7030.py +70 -0
- pyasn1_alt_modules/rfc7191.py +267 -0
- pyasn1_alt_modules/rfc7229.py +29 -0
- pyasn1_alt_modules/rfc7292.py +359 -0
- pyasn1_alt_modules/rfc7296.py +32 -0
- pyasn1_alt_modules/rfc7508.py +92 -0
- pyasn1_alt_modules/rfc7585.py +53 -0
- pyasn1_alt_modules/rfc7633.py +40 -0
- pyasn1_alt_modules/rfc7693.py +66 -0
- pyasn1_alt_modules/rfc7773.py +54 -0
- pyasn1_alt_modules/rfc7836.py +65 -0
- pyasn1_alt_modules/rfc7894.py +100 -0
- pyasn1_alt_modules/rfc7906.py +739 -0
- pyasn1_alt_modules/rfc7914.py +55 -0
- pyasn1_alt_modules/rfc8017.py +159 -0
- pyasn1_alt_modules/rfc8018.py +269 -0
- pyasn1_alt_modules/rfc8103.py +36 -0
- pyasn1_alt_modules/rfc8209.py +20 -0
- pyasn1_alt_modules/rfc8226.py +151 -0
- pyasn1_alt_modules/rfc8358.py +54 -0
- pyasn1_alt_modules/rfc8360.py +46 -0
- pyasn1_alt_modules/rfc8398.py +55 -0
- pyasn1_alt_modules/rfc8410.py +43 -0
- pyasn1_alt_modules/rfc8418.py +36 -0
- pyasn1_alt_modules/rfc8419.py +70 -0
- pyasn1_alt_modules/rfc8479.py +48 -0
- pyasn1_alt_modules/rfc8494.py +80 -0
- pyasn1_alt_modules/rfc8520.py +66 -0
- pyasn1_alt_modules/rfc8619.py +45 -0
- pyasn1_alt_modules/rfc8649.py +42 -0
- pyasn1_alt_modules/rfc8692.py +79 -0
- pyasn1_alt_modules/rfc8696.py +108 -0
- pyasn1_alt_modules/rfc8702.py +109 -0
- pyasn1_alt_modules/rfc8708.py +43 -0
- pyasn1_alt_modules/rfc8737.py +36 -0
- pyasn1_alt_modules/rfc8769.py +21 -0
- pyasn1_alt_modules/rfc8894.py +52 -0
- pyasn1_alt_modules/rfc8951.py +42 -0
- pyasn1_alt_modules/rfc8954.py +238 -0
- pyasn1_alt_modules/rfc8994.py +52 -0
- pyasn1_alt_modules/rfc8995.py +39 -0
- pyasn1_alt_modules/rfc9044.py +80 -0
- pyasn1_alt_modules/rfc9092.py +35 -0
- pyasn1_alt_modules/rfc9118.py +82 -0
- pyasn1_alt_modules/rfc9174.py +55 -0
- pyasn1_alt_modules/rfc9189.py +74 -0
- pyasn1_alt_modules/rfc9215.py +228 -0
- pyasn1_alt_modules/rfc9286.py +78 -0
- pyasn1_alt_modules/rfc9289.py +22 -0
- pyasn1_alt_modules/rfc9310.py +46 -0
- pyasn1_alt_modules/rfc9323.py +129 -0
- pyasn1_alt_modules/rfc9336.py +20 -0
- pyasn1_alt_modules/rfc9337.py +74 -0
- pyasn1_alt_modules/rfc9345.py +36 -0
- pyasn1_alt_modules/rfc9385.py +22 -0
- pyasn1_alt_modules/rfc9399.py +59 -0
- pyasn1_alt_modules/rfc9480.py +731 -0
- pyasn1_alt_modules/rfc9481.py +224 -0
- pyasn1_alt_modules/rfc9509.py +24 -0
- pyasn1_alt_modules/rfc9548.py +23 -0
- pyasn1_alt_modules/rfc9579.py +89 -0
- pyasn1_alt_modules/rfc9582.py +107 -0
- pyasn1_alt_modules/rfc9598.py +52 -0
- pyasn1_alt_modules/rfc9608.py +35 -0
- pyasn1_alt_modules/rfc9629.py +100 -0
- pyasn1_alt_modules/rfc9654.py +241 -0
- pyasn1_alt_modules-0.4.5.dist-info/LICENSE.txt +25 -0
- pyasn1_alt_modules-0.4.5.dist-info/METADATA +34 -0
- pyasn1_alt_modules-0.4.5.dist-info/RECORD +195 -0
- pyasn1_alt_modules-0.4.5.dist-info/WHEEL +5 -0
- pyasn1_alt_modules-0.4.5.dist-info/top_level.txt +1 -0
- pyasn1_alt_modules-0.4.5.dist-info/zip-safe +1 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file is part of pyasn1-alt-modules software.
|
|
3
|
+
#
|
|
4
|
+
# Modified by Russ Housley to import from RFC 5280 and RFC 5652
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
|
|
7
|
+
# Copyright (c) 2021-2024, Vigil Security, LLC
|
|
8
|
+
# License: http://vigilsec.com/pyasn1-alt-modules-license.txt
|
|
9
|
+
#
|
|
10
|
+
# X.509 certificate Request Message Format (CRMF) syntax
|
|
11
|
+
#
|
|
12
|
+
# ASN.1 source from:
|
|
13
|
+
# http://tools.ietf.org/html/rfc2511
|
|
14
|
+
#
|
|
15
|
+
# Sample captures could be obtained with OpenSSL
|
|
16
|
+
#
|
|
17
|
+
from pyasn1.type import char
|
|
18
|
+
from pyasn1.type import constraint
|
|
19
|
+
from pyasn1.type import namedtype
|
|
20
|
+
from pyasn1.type import namedval
|
|
21
|
+
from pyasn1.type import tag
|
|
22
|
+
from pyasn1.type import univ
|
|
23
|
+
|
|
24
|
+
from pyasn1_alt_modules import rfc5652
|
|
25
|
+
from pyasn1_alt_modules import rfc5280
|
|
26
|
+
|
|
27
|
+
MAX = float('inf')
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Imports from RFC 5280
|
|
31
|
+
|
|
32
|
+
AlgorithmIdentifier = rfc5280.AlgorithmIdentifier
|
|
33
|
+
|
|
34
|
+
AttributeTypeAndValue = rfc5280.AttributeTypeAndValue
|
|
35
|
+
|
|
36
|
+
Extensions = rfc5280.Extensions
|
|
37
|
+
|
|
38
|
+
GeneralName = rfc5280.GeneralName
|
|
39
|
+
|
|
40
|
+
Name = rfc5280.Name
|
|
41
|
+
|
|
42
|
+
SubjectPublicKeyInfo = rfc5280.SubjectPublicKeyInfo
|
|
43
|
+
|
|
44
|
+
Time = rfc5280.Time
|
|
45
|
+
|
|
46
|
+
UniqueIdentifier = rfc5280.UniqueIdentifier
|
|
47
|
+
|
|
48
|
+
Version = rfc5280.Version
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# Imports from RFC 5652
|
|
52
|
+
|
|
53
|
+
EnvelopedData = rfc5652.EnvelopedData
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# Object Identifiers
|
|
57
|
+
|
|
58
|
+
id_pkix = univ.ObjectIdentifier('1.3.6.1.5.5.7')
|
|
59
|
+
id_pkip = univ.ObjectIdentifier('1.3.6.1.5.5.7.5')
|
|
60
|
+
id_regCtrl = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1')
|
|
61
|
+
id_regCtrl_regToken = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.1')
|
|
62
|
+
id_regCtrl_authenticator = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.2')
|
|
63
|
+
id_regCtrl_pkiPublicationInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.3')
|
|
64
|
+
id_regCtrl_pkiArchiveOptions = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.4')
|
|
65
|
+
id_regCtrl_oldCertID = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.5')
|
|
66
|
+
id_regCtrl_protocolEncrKey = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.1.6')
|
|
67
|
+
id_regInfo = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2')
|
|
68
|
+
id_regInfo_utf8Pairs = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.1')
|
|
69
|
+
id_regInfo_certReq = univ.ObjectIdentifier('1.3.6.1.5.5.7.5.2.2')
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# This should be in PKIX Certificate Extensions module
|
|
73
|
+
#
|
|
74
|
+
# class GeneralName(univ.OctetString):
|
|
75
|
+
# pass
|
|
76
|
+
#
|
|
77
|
+
# end of PKIX Certificate Extensions module
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class UTF8Pairs(char.UTF8String):
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class ProtocolEncrKey(SubjectPublicKeyInfo):
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class CertId(univ.Sequence):
|
|
89
|
+
componentType = namedtype.NamedTypes(
|
|
90
|
+
namedtype.NamedType('issuer', GeneralName()),
|
|
91
|
+
namedtype.NamedType('serialNumber', univ.Integer())
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class OldCertId(CertId):
|
|
96
|
+
pass
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class KeyGenParameters(univ.OctetString):
|
|
100
|
+
pass
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class EncryptedValue(univ.Sequence):
|
|
104
|
+
componentType = namedtype.NamedTypes(
|
|
105
|
+
namedtype.OptionalNamedType('intendedAlg', AlgorithmIdentifier().subtype(
|
|
106
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
|
|
107
|
+
namedtype.OptionalNamedType('symmAlg', AlgorithmIdentifier().subtype(
|
|
108
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
|
|
109
|
+
namedtype.OptionalNamedType('encSymmKey', univ.BitString().subtype(
|
|
110
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
|
|
111
|
+
namedtype.OptionalNamedType('keyAlg', AlgorithmIdentifier().subtype(
|
|
112
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))),
|
|
113
|
+
namedtype.OptionalNamedType('valueHint', univ.OctetString().subtype(
|
|
114
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),
|
|
115
|
+
namedtype.NamedType('encValue', univ.BitString())
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class EncryptedKey(univ.Choice):
|
|
120
|
+
componentType = namedtype.NamedTypes(
|
|
121
|
+
namedtype.NamedType('encryptedValue', EncryptedValue()),
|
|
122
|
+
namedtype.NamedType('envelopedData', EnvelopedData().subtype(
|
|
123
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0)))
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class PKIArchiveOptions(univ.Choice):
|
|
128
|
+
componentType = namedtype.NamedTypes(
|
|
129
|
+
namedtype.NamedType('encryptedPrivKey', EncryptedKey().subtype(
|
|
130
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
|
|
131
|
+
namedtype.NamedType('keyGenParameters', KeyGenParameters().subtype(
|
|
132
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
|
|
133
|
+
namedtype.NamedType('archiveRemGenPrivKey',
|
|
134
|
+
univ.Boolean().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class SinglePubInfo(univ.Sequence):
|
|
139
|
+
componentType = namedtype.NamedTypes(
|
|
140
|
+
namedtype.NamedType('pubMethod', univ.Integer(
|
|
141
|
+
namedValues=namedval.NamedValues(
|
|
142
|
+
('dontCare', 0),
|
|
143
|
+
('x500', 1),
|
|
144
|
+
('web', 2),
|
|
145
|
+
('ldap', 3)))),
|
|
146
|
+
namedtype.OptionalNamedType('pubLocation', GeneralName())
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class PKIPublicationInfo(univ.Sequence):
|
|
151
|
+
componentType = namedtype.NamedTypes(
|
|
152
|
+
namedtype.NamedType('action',
|
|
153
|
+
univ.Integer(namedValues=namedval.NamedValues(
|
|
154
|
+
('dontPublish', 0),
|
|
155
|
+
('pleasePublish', 1)))),
|
|
156
|
+
namedtype.OptionalNamedType('pubInfos', univ.SequenceOf(componentType=SinglePubInfo()).subtype(
|
|
157
|
+
sizeSpec=constraint.ValueSizeConstraint(1, MAX)))
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class Authenticator(char.UTF8String):
|
|
162
|
+
pass
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class RegToken(char.UTF8String):
|
|
166
|
+
pass
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class SubsequentMessage(univ.Integer):
|
|
170
|
+
namedValues = namedval.NamedValues(
|
|
171
|
+
('encrCert', 0),
|
|
172
|
+
('challengeResp', 1)
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class POPOPrivKey(univ.Choice):
|
|
177
|
+
componentType = namedtype.NamedTypes(
|
|
178
|
+
namedtype.NamedType('thisMessage',
|
|
179
|
+
univ.BitString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
180
|
+
namedtype.NamedType('subsequentMessage', SubsequentMessage().subtype(
|
|
181
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
|
|
182
|
+
namedtype.NamedType('dhMAC',
|
|
183
|
+
univ.BitString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class PBMParameter(univ.Sequence):
|
|
188
|
+
componentType = namedtype.NamedTypes(
|
|
189
|
+
namedtype.NamedType('salt', univ.OctetString()),
|
|
190
|
+
namedtype.NamedType('owf', AlgorithmIdentifier()),
|
|
191
|
+
namedtype.NamedType('iterationCount', univ.Integer()),
|
|
192
|
+
namedtype.NamedType('mac', AlgorithmIdentifier())
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class PKMACValue(univ.Sequence):
|
|
197
|
+
componentType = namedtype.NamedTypes(
|
|
198
|
+
namedtype.NamedType('algId', AlgorithmIdentifier()),
|
|
199
|
+
namedtype.NamedType('value', univ.BitString())
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class POPOSigningKeyInput(univ.Sequence):
|
|
204
|
+
componentType = namedtype.NamedTypes(
|
|
205
|
+
namedtype.NamedType(
|
|
206
|
+
'authInfo', univ.Choice(
|
|
207
|
+
componentType=namedtype.NamedTypes(
|
|
208
|
+
namedtype.NamedType('sender',
|
|
209
|
+
GeneralName().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))
|
|
210
|
+
),
|
|
211
|
+
namedtype.NamedType('publicKeyMAC', PKMACValue())
|
|
212
|
+
)
|
|
213
|
+
)
|
|
214
|
+
),
|
|
215
|
+
namedtype.NamedType('publicKey', SubjectPublicKeyInfo())
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class POPOSigningKey(univ.Sequence):
|
|
220
|
+
componentType = namedtype.NamedTypes(
|
|
221
|
+
namedtype.OptionalNamedType('poposkInput', POPOSigningKeyInput().subtype(
|
|
222
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),
|
|
223
|
+
namedtype.NamedType('algorithmIdentifier', AlgorithmIdentifier()),
|
|
224
|
+
namedtype.NamedType('signature', univ.BitString())
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class ProofOfPossession(univ.Choice):
|
|
229
|
+
componentType = namedtype.NamedTypes(
|
|
230
|
+
namedtype.NamedType('raVerified',
|
|
231
|
+
univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
232
|
+
namedtype.NamedType('signature', POPOSigningKey().subtype(
|
|
233
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),
|
|
234
|
+
namedtype.NamedType('keyEncipherment', POPOPrivKey().subtype(
|
|
235
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
|
|
236
|
+
namedtype.NamedType('keyAgreement', POPOPrivKey().subtype(
|
|
237
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3)))
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
class Controls(univ.SequenceOf):
|
|
242
|
+
componentType = AttributeTypeAndValue()
|
|
243
|
+
sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
class OptionalValidity(univ.Sequence):
|
|
247
|
+
componentType = namedtype.NamedTypes(
|
|
248
|
+
namedtype.OptionalNamedType('notBefore',
|
|
249
|
+
Time().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
250
|
+
namedtype.OptionalNamedType('notAfter',
|
|
251
|
+
Time().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
class CertTemplate(univ.Sequence):
|
|
256
|
+
componentType = namedtype.NamedTypes(
|
|
257
|
+
namedtype.OptionalNamedType('version', Version().subtype(
|
|
258
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
259
|
+
namedtype.OptionalNamedType('serialNumber', univ.Integer().subtype(
|
|
260
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
|
|
261
|
+
namedtype.OptionalNamedType('signingAlg', AlgorithmIdentifier().subtype(
|
|
262
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))),
|
|
263
|
+
namedtype.OptionalNamedType('issuer', Name().subtype(
|
|
264
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))),
|
|
265
|
+
namedtype.OptionalNamedType('validity', OptionalValidity().subtype(
|
|
266
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))),
|
|
267
|
+
namedtype.OptionalNamedType('subject', Name().subtype(
|
|
268
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))),
|
|
269
|
+
namedtype.OptionalNamedType('publicKey', SubjectPublicKeyInfo().subtype(
|
|
270
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))),
|
|
271
|
+
namedtype.OptionalNamedType('issuerUID', UniqueIdentifier().subtype(
|
|
272
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))),
|
|
273
|
+
namedtype.OptionalNamedType('subjectUID', UniqueIdentifier().subtype(
|
|
274
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 8))),
|
|
275
|
+
namedtype.OptionalNamedType('extensions', Extensions().subtype(
|
|
276
|
+
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9)))
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
class CertRequest(univ.Sequence):
|
|
281
|
+
componentType = namedtype.NamedTypes(
|
|
282
|
+
namedtype.NamedType('certReqId', univ.Integer()),
|
|
283
|
+
namedtype.NamedType('certTemplate', CertTemplate()),
|
|
284
|
+
namedtype.OptionalNamedType('controls', Controls())
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
class CertReq(CertRequest):
|
|
289
|
+
pass
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
class CertReqMsg(univ.Sequence):
|
|
293
|
+
componentType = namedtype.NamedTypes(
|
|
294
|
+
namedtype.NamedType('certReq', CertRequest()),
|
|
295
|
+
namedtype.OptionalNamedType('pop', ProofOfPossession()),
|
|
296
|
+
namedtype.OptionalNamedType('regInfo', univ.SequenceOf(componentType=AttributeTypeAndValue()).subtype(
|
|
297
|
+
sizeSpec=constraint.ValueSizeConstraint(1, MAX)))
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
class CertReqMessages(univ.SequenceOf):
|
|
302
|
+
componentType = CertReqMsg()
|
|
303
|
+
sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file is part of pyasn1-modules.
|
|
3
|
+
#
|
|
4
|
+
# Created by Russ Housley.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2021-2024, Vigil Security, LLC
|
|
7
|
+
# License: http://vigilsec.com/pyasn1-alt-modules-license.txt
|
|
8
|
+
#
|
|
9
|
+
# Identifiers for the Key Exchange Algorithm (KEA)
|
|
10
|
+
#
|
|
11
|
+
# ASN.1 source from:
|
|
12
|
+
# https://www.rfc-editor.org/rfc/rfc2528.txt
|
|
13
|
+
# https://www.rfc-editor.org/rfc/rfc3279.txt
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
from pyasn1_alt_modules import rfc3279
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# The KEA object identifier is defined in RFC 3279
|
|
20
|
+
|
|
21
|
+
id_keyExchangeAlgorithm = rfc3279.id_keyExchangeAlgorithm
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# The KEA parameters structure is defined in RFC 3279
|
|
25
|
+
|
|
26
|
+
KEA_Parms_Id = rfc3279.KEA_Parms_Id
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# The Algorithm Identifier map is updated by importing rfc3279.
|
|
30
|
+
# To save looking it up, the map is updated with this entry:
|
|
31
|
+
#
|
|
32
|
+
# _algorithmIdentifierMapUpdate = {
|
|
33
|
+
# id_keyExchangeAlgorithm: KEA_Parms_Id(),
|
|
34
|
+
# }
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file is part of pyasn1-alt-modules software.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
|
|
5
|
+
# Copyright (c) 2021-2024, Vigil Security, LLC
|
|
6
|
+
# License: http://vigilsec.com/pyasn1-alt-modules-license.txt
|
|
7
|
+
#
|
|
8
|
+
# OCSP request/response syntax
|
|
9
|
+
#
|
|
10
|
+
# Derived from a minimal OCSP library (RFC2560) code written by
|
|
11
|
+
# Bud P. Bruegger <bud@ancitel.it>
|
|
12
|
+
# Copyright: Ancitel, S.p.a, Rome, Italy
|
|
13
|
+
# License: BSD
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# current limitations:
|
|
18
|
+
# * request and response works only for a single certificate
|
|
19
|
+
# * only some values are parsed out of the response
|
|
20
|
+
# * the request does't set a nonce nor signature
|
|
21
|
+
# * there is no signature validation of the response
|
|
22
|
+
# * dates are left as strings in GeneralizedTime format -- datetime.datetime
|
|
23
|
+
# would be nicer
|
|
24
|
+
#
|
|
25
|
+
from pyasn1.type import namedtype
|
|
26
|
+
from pyasn1.type import namedval
|
|
27
|
+
from pyasn1.type import tag
|
|
28
|
+
from pyasn1.type import univ
|
|
29
|
+
from pyasn1.type import useful
|
|
30
|
+
|
|
31
|
+
from pyasn1_alt_modules import rfc2459
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Start of OCSP module definitions
|
|
35
|
+
|
|
36
|
+
# This should be in directory Authentication Framework (X.509) module
|
|
37
|
+
|
|
38
|
+
class CRLReason(univ.Enumerated):
|
|
39
|
+
namedValues = namedval.NamedValues(
|
|
40
|
+
('unspecified', 0),
|
|
41
|
+
('keyCompromise', 1),
|
|
42
|
+
('cACompromise', 2),
|
|
43
|
+
('affiliationChanged', 3),
|
|
44
|
+
('superseded', 4),
|
|
45
|
+
('cessationOfOperation', 5),
|
|
46
|
+
('certificateHold', 6),
|
|
47
|
+
('removeFromCRL', 8),
|
|
48
|
+
('privilegeWithdrawn', 9),
|
|
49
|
+
('aACompromise', 10)
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# end of directory Authentication Framework (X.509) module
|
|
54
|
+
|
|
55
|
+
# This should be in PKIX Certificate Extensions module
|
|
56
|
+
|
|
57
|
+
class GeneralName(univ.OctetString):
|
|
58
|
+
pass
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# end of PKIX Certificate Extensions module
|
|
62
|
+
|
|
63
|
+
id_kp_OCSPSigning = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 3, 9))
|
|
64
|
+
id_pkix_ocsp = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1))
|
|
65
|
+
id_pkix_ocsp_basic = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 1))
|
|
66
|
+
id_pkix_ocsp_nonce = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 2))
|
|
67
|
+
id_pkix_ocsp_crl = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 3))
|
|
68
|
+
id_pkix_ocsp_response = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 4))
|
|
69
|
+
id_pkix_ocsp_nocheck = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 5))
|
|
70
|
+
id_pkix_ocsp_archive_cutoff = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 6))
|
|
71
|
+
id_pkix_ocsp_service_locator = univ.ObjectIdentifier((1, 3, 6, 1, 5, 5, 7, 48, 1, 7))
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class AcceptableResponses(univ.SequenceOf):
|
|
75
|
+
componentType = univ.ObjectIdentifier()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class ArchiveCutoff(useful.GeneralizedTime):
|
|
79
|
+
pass
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class UnknownInfo(univ.Null):
|
|
83
|
+
pass
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class RevokedInfo(univ.Sequence):
|
|
87
|
+
componentType = namedtype.NamedTypes(
|
|
88
|
+
namedtype.NamedType('revocationTime', useful.GeneralizedTime()),
|
|
89
|
+
namedtype.OptionalNamedType('revocationReason', CRLReason().subtype(
|
|
90
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class CertID(univ.Sequence):
|
|
95
|
+
componentType = namedtype.NamedTypes(
|
|
96
|
+
namedtype.NamedType('hashAlgorithm', rfc2459.AlgorithmIdentifier()),
|
|
97
|
+
namedtype.NamedType('issuerNameHash', univ.OctetString()),
|
|
98
|
+
namedtype.NamedType('issuerKeyHash', univ.OctetString()),
|
|
99
|
+
namedtype.NamedType('serialNumber', rfc2459.CertificateSerialNumber())
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class CertStatus(univ.Choice):
|
|
104
|
+
componentType = namedtype.NamedTypes(
|
|
105
|
+
namedtype.NamedType('good',
|
|
106
|
+
univ.Null().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
107
|
+
namedtype.NamedType('revoked',
|
|
108
|
+
RevokedInfo().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
|
|
109
|
+
namedtype.NamedType('unknown',
|
|
110
|
+
UnknownInfo().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class SingleResponse(univ.Sequence):
|
|
115
|
+
componentType = namedtype.NamedTypes(
|
|
116
|
+
namedtype.NamedType('certID', CertID()),
|
|
117
|
+
namedtype.NamedType('certStatus', CertStatus()),
|
|
118
|
+
namedtype.NamedType('thisUpdate', useful.GeneralizedTime()),
|
|
119
|
+
namedtype.OptionalNamedType('nextUpdate', useful.GeneralizedTime().subtype(
|
|
120
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
121
|
+
namedtype.OptionalNamedType('singleExtensions', rfc2459.Extensions().subtype(
|
|
122
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class KeyHash(univ.OctetString):
|
|
127
|
+
pass
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class ResponderID(univ.Choice):
|
|
131
|
+
componentType = namedtype.NamedTypes(
|
|
132
|
+
namedtype.NamedType('byName',
|
|
133
|
+
rfc2459.Name().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
|
|
134
|
+
namedtype.NamedType('byKey',
|
|
135
|
+
KeyHash().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class Version(univ.Integer):
|
|
140
|
+
namedValues = namedval.NamedValues(('v1', 0))
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class ResponseData(univ.Sequence):
|
|
144
|
+
componentType = namedtype.NamedTypes(
|
|
145
|
+
namedtype.DefaultedNamedType('version', Version('v1').subtype(
|
|
146
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
147
|
+
namedtype.NamedType('responderID', ResponderID()),
|
|
148
|
+
namedtype.NamedType('producedAt', useful.GeneralizedTime()),
|
|
149
|
+
namedtype.NamedType('responses', univ.SequenceOf(componentType=SingleResponse())),
|
|
150
|
+
namedtype.OptionalNamedType('responseExtensions', rfc2459.Extensions().subtype(
|
|
151
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class BasicOCSPResponse(univ.Sequence):
|
|
156
|
+
componentType = namedtype.NamedTypes(
|
|
157
|
+
namedtype.NamedType('tbsResponseData', ResponseData()),
|
|
158
|
+
namedtype.NamedType('signatureAlgorithm', rfc2459.AlgorithmIdentifier()),
|
|
159
|
+
namedtype.NamedType('signature', univ.BitString()),
|
|
160
|
+
namedtype.OptionalNamedType('certs', univ.SequenceOf(componentType=rfc2459.Certificate()).subtype(
|
|
161
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
class ResponseBytes(univ.Sequence):
|
|
166
|
+
componentType = namedtype.NamedTypes(
|
|
167
|
+
namedtype.NamedType('responseType', univ.ObjectIdentifier()),
|
|
168
|
+
namedtype.NamedType('response', univ.OctetString())
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class OCSPResponseStatus(univ.Enumerated):
|
|
173
|
+
namedValues = namedval.NamedValues(
|
|
174
|
+
('successful', 0),
|
|
175
|
+
('malformedRequest', 1),
|
|
176
|
+
('internalError', 2),
|
|
177
|
+
('tryLater', 3),
|
|
178
|
+
('undefinedStatus', 4), # should never occur
|
|
179
|
+
('sigRequired', 5),
|
|
180
|
+
('unauthorized', 6)
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class OCSPResponse(univ.Sequence):
|
|
185
|
+
componentType = namedtype.NamedTypes(
|
|
186
|
+
namedtype.NamedType('responseStatus', OCSPResponseStatus()),
|
|
187
|
+
namedtype.OptionalNamedType('responseBytes', ResponseBytes().subtype(
|
|
188
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class Request(univ.Sequence):
|
|
193
|
+
componentType = namedtype.NamedTypes(
|
|
194
|
+
namedtype.NamedType('reqCert', CertID()),
|
|
195
|
+
namedtype.OptionalNamedType('singleRequestExtensions', rfc2459.Extensions().subtype(
|
|
196
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class Signature(univ.Sequence):
|
|
201
|
+
componentType = namedtype.NamedTypes(
|
|
202
|
+
namedtype.NamedType('signatureAlgorithm', rfc2459.AlgorithmIdentifier()),
|
|
203
|
+
namedtype.NamedType('signature', univ.BitString()),
|
|
204
|
+
namedtype.OptionalNamedType('certs', univ.SequenceOf(componentType=rfc2459.Certificate()).subtype(
|
|
205
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class TBSRequest(univ.Sequence):
|
|
210
|
+
componentType = namedtype.NamedTypes(
|
|
211
|
+
namedtype.DefaultedNamedType('version', Version('v1').subtype(
|
|
212
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
213
|
+
namedtype.OptionalNamedType('requestorName', GeneralName().subtype(
|
|
214
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))),
|
|
215
|
+
namedtype.NamedType('requestList', univ.SequenceOf(componentType=Request())),
|
|
216
|
+
namedtype.OptionalNamedType('requestExtensions', rfc2459.Extensions().subtype(
|
|
217
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class OCSPRequest(univ.Sequence):
|
|
222
|
+
componentType = namedtype.NamedTypes(
|
|
223
|
+
namedtype.NamedType('tbsRequest', TBSRequest()),
|
|
224
|
+
namedtype.OptionalNamedType('optionalSignature', Signature().subtype(
|
|
225
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
|
|
226
|
+
)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file is part of pyasn1-alt-modules software.
|
|
3
|
+
#
|
|
4
|
+
# Created by Russ Housley with assistance from asn1ate v.0.6.0.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2019-2024, Vigil Security, LLC
|
|
7
|
+
# License: http://vigilsec.com/pyasn1-alt-modules-license.txt
|
|
8
|
+
#
|
|
9
|
+
# Diffie-Hellman Key Agreement
|
|
10
|
+
#
|
|
11
|
+
# ASN.1 source from:
|
|
12
|
+
# https://www.rfc-editor.org/rfc/rfc2631.txt
|
|
13
|
+
# https://www.rfc-editor.org/errata/eid5897
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
from pyasn1.type import constraint
|
|
17
|
+
from pyasn1.type import namedtype
|
|
18
|
+
from pyasn1.type import tag
|
|
19
|
+
from pyasn1.type import univ
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class KeySpecificInfo(univ.Sequence):
|
|
23
|
+
componentType = namedtype.NamedTypes(
|
|
24
|
+
namedtype.NamedType('algorithm', univ.ObjectIdentifier()),
|
|
25
|
+
namedtype.NamedType('counter', univ.OctetString().subtype(
|
|
26
|
+
subtypeSpec=constraint.ValueSizeConstraint(4, 4)))
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class OtherInfo(univ.Sequence):
|
|
31
|
+
componentType = namedtype.NamedTypes(
|
|
32
|
+
namedtype.NamedType('keyInfo', KeySpecificInfo()),
|
|
33
|
+
namedtype.OptionalNamedType('partyAInfo', univ.OctetString().subtype(
|
|
34
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),
|
|
35
|
+
namedtype.NamedType('suppPubInfo', univ.OctetString().subtype(
|
|
36
|
+
explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)))
|
|
37
|
+
)
|