py2docfx 0.1.9.dev1927679__py3-none-any.whl → 0.1.9.dev1929227__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.
- py2docfx/__main__.py +16 -1
- py2docfx/convert_prepare/git.py +8 -5
- py2docfx/docfx_yaml/logger.py +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__about__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/__init__.py +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/fernet.py +8 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/_oid.py +2 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/backends/openssl/backend.py +8 -14
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +10 -7
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +12 -6
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/argon2.py +13 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py +3 -64
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/padding.py +3 -24
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py +33 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py +9 -1
- py2docfx/venv/venv1/Lib/site-packages/cryptography/hazmat/primitives/twofactor/totp.py +5 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/__init__.py +8 -0
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/base.py +4 -415
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/certificate_transparency.py +1 -63
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/extensions.py +286 -5
- py2docfx/venv/venv1/Lib/site-packages/cryptography/x509/ocsp.py +4 -338
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/__init__.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any.py +39 -0
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/any_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/api_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/compiler/plugin_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/descriptor_pb2.py +108 -108
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration.py +100 -0
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/duration_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/empty_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/field_mask_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/python_message.py +7 -4
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/internal/well_known_types.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/pyext/cpp_message.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/runtime_version.py +16 -9
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/service.py +4 -4
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/source_context_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/struct_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/text_format.py +1 -1
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp.py +112 -0
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/timestamp_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/type_pb2.py +3 -3
- py2docfx/venv/venv1/Lib/site-packages/google/protobuf/wrappers_pb2.py +3 -3
- {py2docfx-0.1.9.dev1927679.dist-info → py2docfx-0.1.9.dev1929227.dist-info}/METADATA +1 -1
- {py2docfx-0.1.9.dev1927679.dist-info → py2docfx-0.1.9.dev1929227.dist-info}/RECORD +47 -43
- {py2docfx-0.1.9.dev1927679.dist-info → py2docfx-0.1.9.dev1929227.dist-info}/WHEEL +0 -0
- {py2docfx-0.1.9.dev1927679.dist-info → py2docfx-0.1.9.dev1929227.dist-info}/top_level.txt +0 -0
@@ -892,9 +892,7 @@ class PolicyInformation:
|
|
892
892
|
|
893
893
|
def __hash__(self) -> int:
|
894
894
|
if self.policy_qualifiers is not None:
|
895
|
-
pq
|
896
|
-
self.policy_qualifiers
|
897
|
-
)
|
895
|
+
pq = tuple(self.policy_qualifiers)
|
898
896
|
else:
|
899
897
|
pq = None
|
900
898
|
|
@@ -1988,10 +1986,12 @@ class IssuingDistributionPoint(ExtensionType):
|
|
1988
1986
|
"must all be boolean."
|
1989
1987
|
)
|
1990
1988
|
|
1989
|
+
# Per RFC5280 Section 5.2.5, the Issuing Distribution Point extension
|
1990
|
+
# in a CRL can have only one of onlyContainsUserCerts,
|
1991
|
+
# onlyContainsCACerts, onlyContainsAttributeCerts set to TRUE.
|
1991
1992
|
crl_constraints = [
|
1992
1993
|
only_contains_user_certs,
|
1993
1994
|
only_contains_ca_certs,
|
1994
|
-
indirect_crl,
|
1995
1995
|
only_contains_attribute_certs,
|
1996
1996
|
]
|
1997
1997
|
|
@@ -1999,7 +1999,7 @@ class IssuingDistributionPoint(ExtensionType):
|
|
1999
1999
|
raise ValueError(
|
2000
2000
|
"Only one of the following can be set to True: "
|
2001
2001
|
"only_contains_user_certs, only_contains_ca_certs, "
|
2002
|
-
"
|
2002
|
+
"only_contains_attribute_certs"
|
2003
2003
|
)
|
2004
2004
|
|
2005
2005
|
if not any(
|
@@ -2162,6 +2162,287 @@ class MSCertificateTemplate(ExtensionType):
|
|
2162
2162
|
return rust_x509.encode_extension_value(self)
|
2163
2163
|
|
2164
2164
|
|
2165
|
+
class NamingAuthority:
|
2166
|
+
def __init__(
|
2167
|
+
self,
|
2168
|
+
id: ObjectIdentifier | None,
|
2169
|
+
url: str | None,
|
2170
|
+
text: str | None,
|
2171
|
+
) -> None:
|
2172
|
+
if id is not None and not isinstance(id, ObjectIdentifier):
|
2173
|
+
raise TypeError("id must be an ObjectIdentifier")
|
2174
|
+
|
2175
|
+
if url is not None and not isinstance(url, str):
|
2176
|
+
raise TypeError("url must be a str")
|
2177
|
+
|
2178
|
+
if text is not None and not isinstance(text, str):
|
2179
|
+
raise TypeError("text must be a str")
|
2180
|
+
|
2181
|
+
self._id = id
|
2182
|
+
self._url = url
|
2183
|
+
self._text = text
|
2184
|
+
|
2185
|
+
@property
|
2186
|
+
def id(self) -> ObjectIdentifier | None:
|
2187
|
+
return self._id
|
2188
|
+
|
2189
|
+
@property
|
2190
|
+
def url(self) -> str | None:
|
2191
|
+
return self._url
|
2192
|
+
|
2193
|
+
@property
|
2194
|
+
def text(self) -> str | None:
|
2195
|
+
return self._text
|
2196
|
+
|
2197
|
+
def __repr__(self) -> str:
|
2198
|
+
return (
|
2199
|
+
f"<NamingAuthority("
|
2200
|
+
f"id={self.id}, url={self.url}, text={self.text})>"
|
2201
|
+
)
|
2202
|
+
|
2203
|
+
def __eq__(self, other: object) -> bool:
|
2204
|
+
if not isinstance(other, NamingAuthority):
|
2205
|
+
return NotImplemented
|
2206
|
+
|
2207
|
+
return (
|
2208
|
+
self.id == other.id
|
2209
|
+
and self.url == other.url
|
2210
|
+
and self.text == other.text
|
2211
|
+
)
|
2212
|
+
|
2213
|
+
def __hash__(self) -> int:
|
2214
|
+
return hash(
|
2215
|
+
(
|
2216
|
+
self.id,
|
2217
|
+
self.url,
|
2218
|
+
self.text,
|
2219
|
+
)
|
2220
|
+
)
|
2221
|
+
|
2222
|
+
|
2223
|
+
class ProfessionInfo:
|
2224
|
+
def __init__(
|
2225
|
+
self,
|
2226
|
+
naming_authority: NamingAuthority | None,
|
2227
|
+
profession_items: typing.Iterable[str],
|
2228
|
+
profession_oids: typing.Iterable[ObjectIdentifier] | None,
|
2229
|
+
registration_number: str | None,
|
2230
|
+
add_profession_info: bytes | None,
|
2231
|
+
) -> None:
|
2232
|
+
if naming_authority is not None and not isinstance(
|
2233
|
+
naming_authority, NamingAuthority
|
2234
|
+
):
|
2235
|
+
raise TypeError("naming_authority must be a NamingAuthority")
|
2236
|
+
|
2237
|
+
profession_items = list(profession_items)
|
2238
|
+
if not all(isinstance(item, str) for item in profession_items):
|
2239
|
+
raise TypeError(
|
2240
|
+
"Every item in the profession_items list must be a str"
|
2241
|
+
)
|
2242
|
+
|
2243
|
+
if profession_oids is not None:
|
2244
|
+
profession_oids = list(profession_oids)
|
2245
|
+
if not all(
|
2246
|
+
isinstance(oid, ObjectIdentifier) for oid in profession_oids
|
2247
|
+
):
|
2248
|
+
raise TypeError(
|
2249
|
+
"Every item in the profession_oids list must be an "
|
2250
|
+
"ObjectIdentifier"
|
2251
|
+
)
|
2252
|
+
|
2253
|
+
if registration_number is not None and not isinstance(
|
2254
|
+
registration_number, str
|
2255
|
+
):
|
2256
|
+
raise TypeError("registration_number must be a str")
|
2257
|
+
|
2258
|
+
if add_profession_info is not None and not isinstance(
|
2259
|
+
add_profession_info, bytes
|
2260
|
+
):
|
2261
|
+
raise TypeError("add_profession_info must be bytes")
|
2262
|
+
|
2263
|
+
self._naming_authority = naming_authority
|
2264
|
+
self._profession_items = profession_items
|
2265
|
+
self._profession_oids = profession_oids
|
2266
|
+
self._registration_number = registration_number
|
2267
|
+
self._add_profession_info = add_profession_info
|
2268
|
+
|
2269
|
+
@property
|
2270
|
+
def naming_authority(self) -> NamingAuthority | None:
|
2271
|
+
return self._naming_authority
|
2272
|
+
|
2273
|
+
@property
|
2274
|
+
def profession_items(self) -> list[str]:
|
2275
|
+
return self._profession_items
|
2276
|
+
|
2277
|
+
@property
|
2278
|
+
def profession_oids(self) -> list[ObjectIdentifier] | None:
|
2279
|
+
return self._profession_oids
|
2280
|
+
|
2281
|
+
@property
|
2282
|
+
def registration_number(self) -> str | None:
|
2283
|
+
return self._registration_number
|
2284
|
+
|
2285
|
+
@property
|
2286
|
+
def add_profession_info(self) -> bytes | None:
|
2287
|
+
return self._add_profession_info
|
2288
|
+
|
2289
|
+
def __repr__(self) -> str:
|
2290
|
+
return (
|
2291
|
+
f"<ProfessionInfo(naming_authority={self.naming_authority}, "
|
2292
|
+
f"profession_items={self.profession_items}, "
|
2293
|
+
f"profession_oids={self.profession_oids}, "
|
2294
|
+
f"registration_number={self.registration_number}, "
|
2295
|
+
f"add_profession_info={self.add_profession_info!r})>"
|
2296
|
+
)
|
2297
|
+
|
2298
|
+
def __eq__(self, other: object) -> bool:
|
2299
|
+
if not isinstance(other, ProfessionInfo):
|
2300
|
+
return NotImplemented
|
2301
|
+
|
2302
|
+
return (
|
2303
|
+
self.naming_authority == other.naming_authority
|
2304
|
+
and self.profession_items == other.profession_items
|
2305
|
+
and self.profession_oids == other.profession_oids
|
2306
|
+
and self.registration_number == other.registration_number
|
2307
|
+
and self.add_profession_info == other.add_profession_info
|
2308
|
+
)
|
2309
|
+
|
2310
|
+
def __hash__(self) -> int:
|
2311
|
+
if self.profession_oids is not None:
|
2312
|
+
profession_oids = tuple(self.profession_oids)
|
2313
|
+
else:
|
2314
|
+
profession_oids = None
|
2315
|
+
return hash(
|
2316
|
+
(
|
2317
|
+
self.naming_authority,
|
2318
|
+
tuple(self.profession_items),
|
2319
|
+
profession_oids,
|
2320
|
+
self.registration_number,
|
2321
|
+
self.add_profession_info,
|
2322
|
+
)
|
2323
|
+
)
|
2324
|
+
|
2325
|
+
|
2326
|
+
class Admission:
|
2327
|
+
def __init__(
|
2328
|
+
self,
|
2329
|
+
admission_authority: GeneralName | None,
|
2330
|
+
naming_authority: NamingAuthority | None,
|
2331
|
+
profession_infos: typing.Iterable[ProfessionInfo],
|
2332
|
+
) -> None:
|
2333
|
+
if admission_authority is not None and not isinstance(
|
2334
|
+
admission_authority, GeneralName
|
2335
|
+
):
|
2336
|
+
raise TypeError("admission_authority must be a GeneralName")
|
2337
|
+
|
2338
|
+
if naming_authority is not None and not isinstance(
|
2339
|
+
naming_authority, NamingAuthority
|
2340
|
+
):
|
2341
|
+
raise TypeError("naming_authority must be a NamingAuthority")
|
2342
|
+
|
2343
|
+
profession_infos = list(profession_infos)
|
2344
|
+
if not all(
|
2345
|
+
isinstance(info, ProfessionInfo) for info in profession_infos
|
2346
|
+
):
|
2347
|
+
raise TypeError(
|
2348
|
+
"Every item in the profession_infos list must be a "
|
2349
|
+
"ProfessionInfo"
|
2350
|
+
)
|
2351
|
+
|
2352
|
+
self._admission_authority = admission_authority
|
2353
|
+
self._naming_authority = naming_authority
|
2354
|
+
self._profession_infos = profession_infos
|
2355
|
+
|
2356
|
+
@property
|
2357
|
+
def admission_authority(self) -> GeneralName | None:
|
2358
|
+
return self._admission_authority
|
2359
|
+
|
2360
|
+
@property
|
2361
|
+
def naming_authority(self) -> NamingAuthority | None:
|
2362
|
+
return self._naming_authority
|
2363
|
+
|
2364
|
+
@property
|
2365
|
+
def profession_infos(self) -> list[ProfessionInfo]:
|
2366
|
+
return self._profession_infos
|
2367
|
+
|
2368
|
+
def __repr__(self) -> str:
|
2369
|
+
return (
|
2370
|
+
f"<Admission(admission_authority={self.admission_authority}, "
|
2371
|
+
f"naming_authority={self.naming_authority}, "
|
2372
|
+
f"profession_infos={self.profession_infos})>"
|
2373
|
+
)
|
2374
|
+
|
2375
|
+
def __eq__(self, other: object) -> bool:
|
2376
|
+
if not isinstance(other, Admission):
|
2377
|
+
return NotImplemented
|
2378
|
+
|
2379
|
+
return (
|
2380
|
+
self.admission_authority == other.admission_authority
|
2381
|
+
and self.naming_authority == other.naming_authority
|
2382
|
+
and self.profession_infos == other.profession_infos
|
2383
|
+
)
|
2384
|
+
|
2385
|
+
def __hash__(self) -> int:
|
2386
|
+
return hash(
|
2387
|
+
(
|
2388
|
+
self.admission_authority,
|
2389
|
+
self.naming_authority,
|
2390
|
+
tuple(self.profession_infos),
|
2391
|
+
)
|
2392
|
+
)
|
2393
|
+
|
2394
|
+
|
2395
|
+
class Admissions(ExtensionType):
|
2396
|
+
oid = ExtensionOID.ADMISSIONS
|
2397
|
+
|
2398
|
+
def __init__(
|
2399
|
+
self,
|
2400
|
+
authority: GeneralName | None,
|
2401
|
+
admissions: typing.Iterable[Admission],
|
2402
|
+
) -> None:
|
2403
|
+
if authority is not None and not isinstance(authority, GeneralName):
|
2404
|
+
raise TypeError("authority must be a GeneralName")
|
2405
|
+
|
2406
|
+
admissions = list(admissions)
|
2407
|
+
if not all(
|
2408
|
+
isinstance(admission, Admission) for admission in admissions
|
2409
|
+
):
|
2410
|
+
raise TypeError(
|
2411
|
+
"Every item in the contents_of_admissions list must be an "
|
2412
|
+
"Admission"
|
2413
|
+
)
|
2414
|
+
|
2415
|
+
self._authority = authority
|
2416
|
+
self._admissions = admissions
|
2417
|
+
|
2418
|
+
__len__, __iter__, __getitem__ = _make_sequence_methods("_admissions")
|
2419
|
+
|
2420
|
+
@property
|
2421
|
+
def authority(self) -> GeneralName | None:
|
2422
|
+
return self._authority
|
2423
|
+
|
2424
|
+
def __repr__(self) -> str:
|
2425
|
+
return (
|
2426
|
+
f"<Admissions(authority={self._authority}, "
|
2427
|
+
f"admissions={self._admissions})>"
|
2428
|
+
)
|
2429
|
+
|
2430
|
+
def __eq__(self, other: object) -> bool:
|
2431
|
+
if not isinstance(other, Admissions):
|
2432
|
+
return NotImplemented
|
2433
|
+
|
2434
|
+
return (
|
2435
|
+
self.authority == other.authority
|
2436
|
+
and self._admissions == other._admissions
|
2437
|
+
)
|
2438
|
+
|
2439
|
+
def __hash__(self) -> int:
|
2440
|
+
return hash((self.authority, tuple(self._admissions)))
|
2441
|
+
|
2442
|
+
def public_bytes(self) -> bytes:
|
2443
|
+
return rust_x509.encode_extension_value(self)
|
2444
|
+
|
2445
|
+
|
2165
2446
|
class UnrecognizedExtension(ExtensionType):
|
2166
2447
|
def __init__(self, oid: ObjectIdentifier, value: bytes) -> None:
|
2167
2448
|
if not isinstance(oid, ObjectIdentifier):
|
@@ -4,13 +4,12 @@
|
|
4
4
|
|
5
5
|
from __future__ import annotations
|
6
6
|
|
7
|
-
import abc
|
8
7
|
import datetime
|
9
8
|
import typing
|
10
9
|
|
11
10
|
from cryptography import utils, x509
|
12
11
|
from cryptography.hazmat.bindings._rust import ocsp
|
13
|
-
from cryptography.hazmat.primitives import hashes
|
12
|
+
from cryptography.hazmat.primitives import hashes
|
14
13
|
from cryptography.hazmat.primitives.asymmetric.types import (
|
15
14
|
CertificateIssuerPrivateKeyTypes,
|
16
15
|
)
|
@@ -127,342 +126,9 @@ class _SingleResponse:
|
|
127
126
|
self._revocation_reason = revocation_reason
|
128
127
|
|
129
128
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
def issuer_key_hash(self) -> bytes:
|
134
|
-
"""
|
135
|
-
The hash of the issuer public key
|
136
|
-
"""
|
137
|
-
|
138
|
-
@property
|
139
|
-
@abc.abstractmethod
|
140
|
-
def issuer_name_hash(self) -> bytes:
|
141
|
-
"""
|
142
|
-
The hash of the issuer name
|
143
|
-
"""
|
144
|
-
|
145
|
-
@property
|
146
|
-
@abc.abstractmethod
|
147
|
-
def hash_algorithm(self) -> hashes.HashAlgorithm:
|
148
|
-
"""
|
149
|
-
The hash algorithm used in the issuer name and key hashes
|
150
|
-
"""
|
151
|
-
|
152
|
-
@property
|
153
|
-
@abc.abstractmethod
|
154
|
-
def serial_number(self) -> int:
|
155
|
-
"""
|
156
|
-
The serial number of the cert whose status is being checked
|
157
|
-
"""
|
158
|
-
|
159
|
-
@abc.abstractmethod
|
160
|
-
def public_bytes(self, encoding: serialization.Encoding) -> bytes:
|
161
|
-
"""
|
162
|
-
Serializes the request to DER
|
163
|
-
"""
|
164
|
-
|
165
|
-
@property
|
166
|
-
@abc.abstractmethod
|
167
|
-
def extensions(self) -> x509.Extensions:
|
168
|
-
"""
|
169
|
-
The list of request extensions. Not single request extensions.
|
170
|
-
"""
|
171
|
-
|
172
|
-
|
173
|
-
class OCSPSingleResponse(metaclass=abc.ABCMeta):
|
174
|
-
@property
|
175
|
-
@abc.abstractmethod
|
176
|
-
def certificate_status(self) -> OCSPCertStatus:
|
177
|
-
"""
|
178
|
-
The status of the certificate (an element from the OCSPCertStatus enum)
|
179
|
-
"""
|
180
|
-
|
181
|
-
@property
|
182
|
-
@abc.abstractmethod
|
183
|
-
def revocation_time(self) -> datetime.datetime | None:
|
184
|
-
"""
|
185
|
-
The date of when the certificate was revoked or None if not
|
186
|
-
revoked.
|
187
|
-
"""
|
188
|
-
|
189
|
-
@property
|
190
|
-
@abc.abstractmethod
|
191
|
-
def revocation_time_utc(self) -> datetime.datetime | None:
|
192
|
-
"""
|
193
|
-
The date of when the certificate was revoked or None if not
|
194
|
-
revoked. Represented as a non-naive UTC datetime.
|
195
|
-
"""
|
196
|
-
|
197
|
-
@property
|
198
|
-
@abc.abstractmethod
|
199
|
-
def revocation_reason(self) -> x509.ReasonFlags | None:
|
200
|
-
"""
|
201
|
-
The reason the certificate was revoked or None if not specified or
|
202
|
-
not revoked.
|
203
|
-
"""
|
204
|
-
|
205
|
-
@property
|
206
|
-
@abc.abstractmethod
|
207
|
-
def this_update(self) -> datetime.datetime:
|
208
|
-
"""
|
209
|
-
The most recent time at which the status being indicated is known by
|
210
|
-
the responder to have been correct
|
211
|
-
"""
|
212
|
-
|
213
|
-
@property
|
214
|
-
@abc.abstractmethod
|
215
|
-
def this_update_utc(self) -> datetime.datetime:
|
216
|
-
"""
|
217
|
-
The most recent time at which the status being indicated is known by
|
218
|
-
the responder to have been correct. Represented as a non-naive UTC
|
219
|
-
datetime.
|
220
|
-
"""
|
221
|
-
|
222
|
-
@property
|
223
|
-
@abc.abstractmethod
|
224
|
-
def next_update(self) -> datetime.datetime | None:
|
225
|
-
"""
|
226
|
-
The time when newer information will be available
|
227
|
-
"""
|
228
|
-
|
229
|
-
@property
|
230
|
-
@abc.abstractmethod
|
231
|
-
def next_update_utc(self) -> datetime.datetime | None:
|
232
|
-
"""
|
233
|
-
The time when newer information will be available. Represented as a
|
234
|
-
non-naive UTC datetime.
|
235
|
-
"""
|
236
|
-
|
237
|
-
@property
|
238
|
-
@abc.abstractmethod
|
239
|
-
def issuer_key_hash(self) -> bytes:
|
240
|
-
"""
|
241
|
-
The hash of the issuer public key
|
242
|
-
"""
|
243
|
-
|
244
|
-
@property
|
245
|
-
@abc.abstractmethod
|
246
|
-
def issuer_name_hash(self) -> bytes:
|
247
|
-
"""
|
248
|
-
The hash of the issuer name
|
249
|
-
"""
|
250
|
-
|
251
|
-
@property
|
252
|
-
@abc.abstractmethod
|
253
|
-
def hash_algorithm(self) -> hashes.HashAlgorithm:
|
254
|
-
"""
|
255
|
-
The hash algorithm used in the issuer name and key hashes
|
256
|
-
"""
|
257
|
-
|
258
|
-
@property
|
259
|
-
@abc.abstractmethod
|
260
|
-
def serial_number(self) -> int:
|
261
|
-
"""
|
262
|
-
The serial number of the cert whose status is being checked
|
263
|
-
"""
|
264
|
-
|
265
|
-
|
266
|
-
class OCSPResponse(metaclass=abc.ABCMeta):
|
267
|
-
@property
|
268
|
-
@abc.abstractmethod
|
269
|
-
def responses(self) -> typing.Iterator[OCSPSingleResponse]:
|
270
|
-
"""
|
271
|
-
An iterator over the individual SINGLERESP structures in the
|
272
|
-
response
|
273
|
-
"""
|
274
|
-
|
275
|
-
@property
|
276
|
-
@abc.abstractmethod
|
277
|
-
def response_status(self) -> OCSPResponseStatus:
|
278
|
-
"""
|
279
|
-
The status of the response. This is a value from the OCSPResponseStatus
|
280
|
-
enumeration
|
281
|
-
"""
|
282
|
-
|
283
|
-
@property
|
284
|
-
@abc.abstractmethod
|
285
|
-
def signature_algorithm_oid(self) -> x509.ObjectIdentifier:
|
286
|
-
"""
|
287
|
-
The ObjectIdentifier of the signature algorithm
|
288
|
-
"""
|
289
|
-
|
290
|
-
@property
|
291
|
-
@abc.abstractmethod
|
292
|
-
def signature_hash_algorithm(
|
293
|
-
self,
|
294
|
-
) -> hashes.HashAlgorithm | None:
|
295
|
-
"""
|
296
|
-
Returns a HashAlgorithm corresponding to the type of the digest signed
|
297
|
-
"""
|
298
|
-
|
299
|
-
@property
|
300
|
-
@abc.abstractmethod
|
301
|
-
def signature(self) -> bytes:
|
302
|
-
"""
|
303
|
-
The signature bytes
|
304
|
-
"""
|
305
|
-
|
306
|
-
@property
|
307
|
-
@abc.abstractmethod
|
308
|
-
def tbs_response_bytes(self) -> bytes:
|
309
|
-
"""
|
310
|
-
The tbsResponseData bytes
|
311
|
-
"""
|
312
|
-
|
313
|
-
@property
|
314
|
-
@abc.abstractmethod
|
315
|
-
def certificates(self) -> list[x509.Certificate]:
|
316
|
-
"""
|
317
|
-
A list of certificates used to help build a chain to verify the OCSP
|
318
|
-
response. This situation occurs when the OCSP responder uses a delegate
|
319
|
-
certificate.
|
320
|
-
"""
|
321
|
-
|
322
|
-
@property
|
323
|
-
@abc.abstractmethod
|
324
|
-
def responder_key_hash(self) -> bytes | None:
|
325
|
-
"""
|
326
|
-
The responder's key hash or None
|
327
|
-
"""
|
328
|
-
|
329
|
-
@property
|
330
|
-
@abc.abstractmethod
|
331
|
-
def responder_name(self) -> x509.Name | None:
|
332
|
-
"""
|
333
|
-
The responder's Name or None
|
334
|
-
"""
|
335
|
-
|
336
|
-
@property
|
337
|
-
@abc.abstractmethod
|
338
|
-
def produced_at(self) -> datetime.datetime:
|
339
|
-
"""
|
340
|
-
The time the response was produced
|
341
|
-
"""
|
342
|
-
|
343
|
-
@property
|
344
|
-
@abc.abstractmethod
|
345
|
-
def produced_at_utc(self) -> datetime.datetime:
|
346
|
-
"""
|
347
|
-
The time the response was produced. Represented as a non-naive UTC
|
348
|
-
datetime.
|
349
|
-
"""
|
350
|
-
|
351
|
-
@property
|
352
|
-
@abc.abstractmethod
|
353
|
-
def certificate_status(self) -> OCSPCertStatus:
|
354
|
-
"""
|
355
|
-
The status of the certificate (an element from the OCSPCertStatus enum)
|
356
|
-
"""
|
357
|
-
|
358
|
-
@property
|
359
|
-
@abc.abstractmethod
|
360
|
-
def revocation_time(self) -> datetime.datetime | None:
|
361
|
-
"""
|
362
|
-
The date of when the certificate was revoked or None if not
|
363
|
-
revoked.
|
364
|
-
"""
|
365
|
-
|
366
|
-
@property
|
367
|
-
@abc.abstractmethod
|
368
|
-
def revocation_time_utc(self) -> datetime.datetime | None:
|
369
|
-
"""
|
370
|
-
The date of when the certificate was revoked or None if not
|
371
|
-
revoked. Represented as a non-naive UTC datetime.
|
372
|
-
"""
|
373
|
-
|
374
|
-
@property
|
375
|
-
@abc.abstractmethod
|
376
|
-
def revocation_reason(self) -> x509.ReasonFlags | None:
|
377
|
-
"""
|
378
|
-
The reason the certificate was revoked or None if not specified or
|
379
|
-
not revoked.
|
380
|
-
"""
|
381
|
-
|
382
|
-
@property
|
383
|
-
@abc.abstractmethod
|
384
|
-
def this_update(self) -> datetime.datetime:
|
385
|
-
"""
|
386
|
-
The most recent time at which the status being indicated is known by
|
387
|
-
the responder to have been correct
|
388
|
-
"""
|
389
|
-
|
390
|
-
@property
|
391
|
-
@abc.abstractmethod
|
392
|
-
def this_update_utc(self) -> datetime.datetime:
|
393
|
-
"""
|
394
|
-
The most recent time at which the status being indicated is known by
|
395
|
-
the responder to have been correct. Represented as a non-naive UTC
|
396
|
-
datetime.
|
397
|
-
"""
|
398
|
-
|
399
|
-
@property
|
400
|
-
@abc.abstractmethod
|
401
|
-
def next_update(self) -> datetime.datetime | None:
|
402
|
-
"""
|
403
|
-
The time when newer information will be available
|
404
|
-
"""
|
405
|
-
|
406
|
-
@property
|
407
|
-
@abc.abstractmethod
|
408
|
-
def next_update_utc(self) -> datetime.datetime | None:
|
409
|
-
"""
|
410
|
-
The time when newer information will be available. Represented as a
|
411
|
-
non-naive UTC datetime.
|
412
|
-
"""
|
413
|
-
|
414
|
-
@property
|
415
|
-
@abc.abstractmethod
|
416
|
-
def issuer_key_hash(self) -> bytes:
|
417
|
-
"""
|
418
|
-
The hash of the issuer public key
|
419
|
-
"""
|
420
|
-
|
421
|
-
@property
|
422
|
-
@abc.abstractmethod
|
423
|
-
def issuer_name_hash(self) -> bytes:
|
424
|
-
"""
|
425
|
-
The hash of the issuer name
|
426
|
-
"""
|
427
|
-
|
428
|
-
@property
|
429
|
-
@abc.abstractmethod
|
430
|
-
def hash_algorithm(self) -> hashes.HashAlgorithm:
|
431
|
-
"""
|
432
|
-
The hash algorithm used in the issuer name and key hashes
|
433
|
-
"""
|
434
|
-
|
435
|
-
@property
|
436
|
-
@abc.abstractmethod
|
437
|
-
def serial_number(self) -> int:
|
438
|
-
"""
|
439
|
-
The serial number of the cert whose status is being checked
|
440
|
-
"""
|
441
|
-
|
442
|
-
@property
|
443
|
-
@abc.abstractmethod
|
444
|
-
def extensions(self) -> x509.Extensions:
|
445
|
-
"""
|
446
|
-
The list of response extensions. Not single response extensions.
|
447
|
-
"""
|
448
|
-
|
449
|
-
@property
|
450
|
-
@abc.abstractmethod
|
451
|
-
def single_extensions(self) -> x509.Extensions:
|
452
|
-
"""
|
453
|
-
The list of single response extensions. Not response extensions.
|
454
|
-
"""
|
455
|
-
|
456
|
-
@abc.abstractmethod
|
457
|
-
def public_bytes(self, encoding: serialization.Encoding) -> bytes:
|
458
|
-
"""
|
459
|
-
Serializes the response to DER
|
460
|
-
"""
|
461
|
-
|
462
|
-
|
463
|
-
OCSPRequest.register(ocsp.OCSPRequest)
|
464
|
-
OCSPResponse.register(ocsp.OCSPResponse)
|
465
|
-
OCSPSingleResponse.register(ocsp.OCSPSingleResponse)
|
129
|
+
OCSPRequest = ocsp.OCSPRequest
|
130
|
+
OCSPResponse = ocsp.OCSPResponse
|
131
|
+
OCSPSingleResponse = ocsp.OCSPSingleResponse
|
466
132
|
|
467
133
|
|
468
134
|
class OCSPRequestBuilder:
|