Skip to content

Commit 2d94946

Browse files
itamarstpythonspeedalex
authored
Expose X509_V_* constants (#1202)
* Expose X509_V_* constants. * Switch to strategy where cryptography 40.0.2 exposes the constants. * Fix bad merge. * Fix flake. * Link to PR. * Check availability, rather than versions. * Add namespacing. * Add success code to namespace. * Fix lint. * Remove unnecessary conditional. * Update CHANGELOG.rst Co-authored-by: Alex Gaynor <[email protected]> --------- Co-authored-by: Itamar Turner-Trauring <[email protected]> Co-authored-by: Alex Gaynor <[email protected]>
1 parent dd90c04 commit 2d94946

File tree

3 files changed

+112
-1
lines changed

3 files changed

+112
-1
lines changed

CHANGELOG.rst

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Changes:
2020
^^^^^^^^
2121

2222
- Invalid versions are now rejected in ``OpenSSL.crypto.X509Req.set_version``.
23+
- Added ``X509VerificationCodes`` to ``OpenSSL.SSL``.
24+
`#1202 <https://github.com/pyca/pyopenssl/pull/1202>`_.
2325

2426
23.1.1 (2023-03-28)
2527
-------------------

setup.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ def find_meta(meta):
9898
package_dir={"": "src"},
9999
install_requires=[
100100
# Fix cryptographyMinimum in tox.ini when changing this!
101-
"cryptography>=38.0.0,<41",
101+
# 40.0.0 and .1 are missing X509_V_* constants that we re-export.
102+
"cryptography>=38.0.0,<41,!=40.0.0,!=40.0.1",
102103
],
103104
extras_require={
104105
"test": ["flaky", "pretend", "pytest>=3.0.1"],

src/OpenSSL/SSL.py

+108
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@
123123
"Session",
124124
"Context",
125125
"Connection",
126+
"X509VerificationCodes",
126127
]
127128

128129

@@ -250,6 +251,113 @@
250251
SSL_CB_HANDSHAKE_START = _lib.SSL_CB_HANDSHAKE_START
251252
SSL_CB_HANDSHAKE_DONE = _lib.SSL_CB_HANDSHAKE_DONE
252253

254+
255+
class X509VerificationCodes:
256+
"""
257+
Success and error codes for X509 verification, as returned by the
258+
underlying ``X509_STORE_CTX_get_error()`` function and passed by pyOpenSSL
259+
to verification callback functions.
260+
261+
See `OpenSSL Verification Errors
262+
<https://www.openssl.org/docs/manmaster/man3/X509_verify_cert_error_string.html#ERROR-CODES>`_
263+
for details.
264+
"""
265+
266+
OK = _lib.X509_V_OK
267+
ERR_UNABLE_TO_GET_ISSUER_CERT = _lib.X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
268+
ERR_UNABLE_TO_GET_CRL = _lib.X509_V_ERR_UNABLE_TO_GET_CRL
269+
ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = (
270+
_lib.X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
271+
)
272+
ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = (
273+
_lib.X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
274+
)
275+
ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = (
276+
_lib.X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
277+
)
278+
ERR_CERT_SIGNATURE_FAILURE = _lib.X509_V_ERR_CERT_SIGNATURE_FAILURE
279+
ERR_CRL_SIGNATURE_FAILURE = _lib.X509_V_ERR_CRL_SIGNATURE_FAILURE
280+
ERR_CERT_NOT_YET_VALID = _lib.X509_V_ERR_CERT_NOT_YET_VALID
281+
ERR_CERT_HAS_EXPIRED = _lib.X509_V_ERR_CERT_HAS_EXPIRED
282+
ERR_CRL_NOT_YET_VALID = _lib.X509_V_ERR_CRL_NOT_YET_VALID
283+
ERR_CRL_HAS_EXPIRED = _lib.X509_V_ERR_CRL_HAS_EXPIRED
284+
ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = (
285+
_lib.X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
286+
)
287+
ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = (
288+
_lib.X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
289+
)
290+
ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = (
291+
_lib.X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
292+
)
293+
ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = (
294+
_lib.X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
295+
)
296+
ERR_OUT_OF_MEM = _lib.X509_V_ERR_OUT_OF_MEM
297+
ERR_DEPTH_ZERO_SELF_SIGNED_CERT = (
298+
_lib.X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
299+
)
300+
ERR_SELF_SIGNED_CERT_IN_CHAIN = _lib.X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
301+
ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = (
302+
_lib.X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
303+
)
304+
ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = (
305+
_lib.X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
306+
)
307+
ERR_CERT_CHAIN_TOO_LONG = _lib.X509_V_ERR_CERT_CHAIN_TOO_LONG
308+
ERR_CERT_REVOKED = _lib.X509_V_ERR_CERT_REVOKED
309+
ERR_INVALID_CA = _lib.X509_V_ERR_INVALID_CA
310+
ERR_PATH_LENGTH_EXCEEDED = _lib.X509_V_ERR_PATH_LENGTH_EXCEEDED
311+
ERR_INVALID_PURPOSE = _lib.X509_V_ERR_INVALID_PURPOSE
312+
ERR_CERT_UNTRUSTED = _lib.X509_V_ERR_CERT_UNTRUSTED
313+
ERR_CERT_REJECTED = _lib.X509_V_ERR_CERT_REJECTED
314+
ERR_SUBJECT_ISSUER_MISMATCH = _lib.X509_V_ERR_SUBJECT_ISSUER_MISMATCH
315+
ERR_AKID_SKID_MISMATCH = _lib.X509_V_ERR_AKID_SKID_MISMATCH
316+
ERR_AKID_ISSUER_SERIAL_MISMATCH = (
317+
_lib.X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
318+
)
319+
ERR_KEYUSAGE_NO_CERTSIGN = _lib.X509_V_ERR_KEYUSAGE_NO_CERTSIGN
320+
ERR_UNABLE_TO_GET_CRL_ISSUER = _lib.X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
321+
ERR_UNHANDLED_CRITICAL_EXTENSION = (
322+
_lib.X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
323+
)
324+
ERR_KEYUSAGE_NO_CRL_SIGN = _lib.X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
325+
ERR_UNHANDLED_CRITICAL_CRL_EXTENSION = (
326+
_lib.X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
327+
)
328+
ERR_INVALID_NON_CA = _lib.X509_V_ERR_INVALID_NON_CA
329+
ERR_PROXY_PATH_LENGTH_EXCEEDED = _lib.X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
330+
ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE = (
331+
_lib.X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
332+
)
333+
ERR_PROXY_CERTIFICATES_NOT_ALLOWED = (
334+
_lib.X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
335+
)
336+
ERR_INVALID_EXTENSION = _lib.X509_V_ERR_INVALID_EXTENSION
337+
ERR_INVALID_POLICY_EXTENSION = _lib.X509_V_ERR_INVALID_POLICY_EXTENSION
338+
ERR_NO_EXPLICIT_POLICY = _lib.X509_V_ERR_NO_EXPLICIT_POLICY
339+
ERR_DIFFERENT_CRL_SCOPE = _lib.X509_V_ERR_DIFFERENT_CRL_SCOPE
340+
ERR_UNSUPPORTED_EXTENSION_FEATURE = (
341+
_lib.X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
342+
)
343+
ERR_UNNESTED_RESOURCE = _lib.X509_V_ERR_UNNESTED_RESOURCE
344+
ERR_PERMITTED_VIOLATION = _lib.X509_V_ERR_PERMITTED_VIOLATION
345+
ERR_EXCLUDED_VIOLATION = _lib.X509_V_ERR_EXCLUDED_VIOLATION
346+
ERR_SUBTREE_MINMAX = _lib.X509_V_ERR_SUBTREE_MINMAX
347+
ERR_UNSUPPORTED_CONSTRAINT_TYPE = (
348+
_lib.X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
349+
)
350+
ERR_UNSUPPORTED_CONSTRAINT_SYNTAX = (
351+
_lib.X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
352+
)
353+
ERR_UNSUPPORTED_NAME_SYNTAX = _lib.X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
354+
ERR_CRL_PATH_VALIDATION_ERROR = _lib.X509_V_ERR_CRL_PATH_VALIDATION_ERROR
355+
ERR_HOSTNAME_MISMATCH = _lib.X509_V_ERR_HOSTNAME_MISMATCH
356+
ERR_EMAIL_MISMATCH = _lib.X509_V_ERR_EMAIL_MISMATCH
357+
ERR_IP_ADDRESS_MISMATCH = _lib.X509_V_ERR_IP_ADDRESS_MISMATCH
358+
ERR_APPLICATION_VERIFICATION = _lib.X509_V_ERR_APPLICATION_VERIFICATION
359+
360+
253361
# Taken from https://golang.org/src/crypto/x509/root_linux.go
254362
_CERTIFICATE_FILE_LOCATIONS = [
255363
"/etc/ssl/certs/ca-certificates.crt", # Debian/Ubuntu/Gentoo etc.

0 commit comments

Comments
 (0)