aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl')
-rw-r--r--.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py3
-rw-r--r--.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py183
-rw-r--r--.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py121
3 files changed, 307 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py b/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py
new file mode 100644
index 00000000..b5093362
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/__init__.py
@@ -0,0 +1,3 @@
+# This file is dual licensed under the terms of the Apache License, Version
+# 2.0, and the BSD License. See the LICENSE file in the root of this repository
+# for complete details.
diff --git a/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py b/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py
new file mode 100644
index 00000000..73c06f7d
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py
@@ -0,0 +1,183 @@
+# This file is dual licensed under the terms of the Apache License, Version
+# 2.0, and the BSD License. See the LICENSE file in the root of this repository
+# for complete details.
+
+from __future__ import annotations
+
+
+def cryptography_has_set_cert_cb() -> list[str]:
+ return [
+ "SSL_CTX_set_cert_cb",
+ "SSL_set_cert_cb",
+ ]
+
+
+def cryptography_has_ssl_st() -> list[str]:
+ return [
+ "SSL_ST_BEFORE",
+ "SSL_ST_OK",
+ "SSL_ST_INIT",
+ "SSL_ST_RENEGOTIATE",
+ ]
+
+
+def cryptography_has_tls_st() -> list[str]:
+ return [
+ "TLS_ST_BEFORE",
+ "TLS_ST_OK",
+ ]
+
+
+def cryptography_has_ssl_sigalgs() -> list[str]:
+ return [
+ "SSL_CTX_set1_sigalgs_list",
+ ]
+
+
+def cryptography_has_psk() -> list[str]:
+ return [
+ "SSL_CTX_use_psk_identity_hint",
+ "SSL_CTX_set_psk_server_callback",
+ "SSL_CTX_set_psk_client_callback",
+ ]
+
+
+def cryptography_has_psk_tlsv13() -> list[str]:
+ return [
+ "SSL_CTX_set_psk_find_session_callback",
+ "SSL_CTX_set_psk_use_session_callback",
+ "Cryptography_SSL_SESSION_new",
+ "SSL_CIPHER_find",
+ "SSL_SESSION_set1_master_key",
+ "SSL_SESSION_set_cipher",
+ "SSL_SESSION_set_protocol_version",
+ ]
+
+
+def cryptography_has_custom_ext() -> list[str]:
+ return [
+ "SSL_CTX_add_client_custom_ext",
+ "SSL_CTX_add_server_custom_ext",
+ "SSL_extension_supported",
+ ]
+
+
+def cryptography_has_tlsv13_functions() -> list[str]:
+ return [
+ "SSL_VERIFY_POST_HANDSHAKE",
+ "SSL_CTX_set_ciphersuites",
+ "SSL_verify_client_post_handshake",
+ "SSL_CTX_set_post_handshake_auth",
+ "SSL_set_post_handshake_auth",
+ "SSL_SESSION_get_max_early_data",
+ "SSL_write_early_data",
+ "SSL_read_early_data",
+ "SSL_CTX_set_max_early_data",
+ ]
+
+
+def cryptography_has_engine() -> list[str]:
+ return [
+ "ENGINE_by_id",
+ "ENGINE_init",
+ "ENGINE_finish",
+ "ENGINE_get_default_RAND",
+ "ENGINE_set_default_RAND",
+ "ENGINE_unregister_RAND",
+ "ENGINE_ctrl_cmd",
+ "ENGINE_free",
+ "ENGINE_get_name",
+ "ENGINE_ctrl_cmd_string",
+ "ENGINE_load_builtin_engines",
+ "ENGINE_load_private_key",
+ "ENGINE_load_public_key",
+ "SSL_CTX_set_client_cert_engine",
+ ]
+
+
+def cryptography_has_verified_chain() -> list[str]:
+ return [
+ "SSL_get0_verified_chain",
+ ]
+
+
+def cryptography_has_srtp() -> list[str]:
+ return [
+ "SSL_CTX_set_tlsext_use_srtp",
+ "SSL_set_tlsext_use_srtp",
+ "SSL_get_selected_srtp_profile",
+ ]
+
+
+def cryptography_has_op_no_renegotiation() -> list[str]:
+ return [
+ "SSL_OP_NO_RENEGOTIATION",
+ ]
+
+
+def cryptography_has_dtls_get_data_mtu() -> list[str]:
+ return [
+ "DTLS_get_data_mtu",
+ ]
+
+
+def cryptography_has_ssl_cookie() -> list[str]:
+ return [
+ "SSL_OP_COOKIE_EXCHANGE",
+ "DTLSv1_listen",
+ "SSL_CTX_set_cookie_generate_cb",
+ "SSL_CTX_set_cookie_verify_cb",
+ ]
+
+
+def cryptography_has_prime_checks() -> list[str]:
+ return [
+ "BN_prime_checks_for_size",
+ ]
+
+
+def cryptography_has_unexpected_eof_while_reading() -> list[str]:
+ return ["SSL_R_UNEXPECTED_EOF_WHILE_READING"]
+
+
+def cryptography_has_ssl_op_ignore_unexpected_eof() -> list[str]:
+ return [
+ "SSL_OP_IGNORE_UNEXPECTED_EOF",
+ ]
+
+
+def cryptography_has_get_extms_support() -> list[str]:
+ return ["SSL_get_extms_support"]
+
+
+# This is a mapping of
+# {condition: function-returning-names-dependent-on-that-condition} so we can
+# loop over them and delete unsupported names at runtime. It will be removed
+# when cffi supports #if in cdef. We use functions instead of just a dict of
+# lists so we can use coverage to measure which are used.
+CONDITIONAL_NAMES = {
+ "Cryptography_HAS_SET_CERT_CB": cryptography_has_set_cert_cb,
+ "Cryptography_HAS_SSL_ST": cryptography_has_ssl_st,
+ "Cryptography_HAS_TLS_ST": cryptography_has_tls_st,
+ "Cryptography_HAS_SIGALGS": cryptography_has_ssl_sigalgs,
+ "Cryptography_HAS_PSK": cryptography_has_psk,
+ "Cryptography_HAS_PSK_TLSv1_3": cryptography_has_psk_tlsv13,
+ "Cryptography_HAS_CUSTOM_EXT": cryptography_has_custom_ext,
+ "Cryptography_HAS_TLSv1_3_FUNCTIONS": cryptography_has_tlsv13_functions,
+ "Cryptography_HAS_ENGINE": cryptography_has_engine,
+ "Cryptography_HAS_VERIFIED_CHAIN": cryptography_has_verified_chain,
+ "Cryptography_HAS_SRTP": cryptography_has_srtp,
+ "Cryptography_HAS_OP_NO_RENEGOTIATION": (
+ cryptography_has_op_no_renegotiation
+ ),
+ "Cryptography_HAS_DTLS_GET_DATA_MTU": cryptography_has_dtls_get_data_mtu,
+ "Cryptography_HAS_SSL_COOKIE": cryptography_has_ssl_cookie,
+ "Cryptography_HAS_PRIME_CHECKS": cryptography_has_prime_checks,
+ "Cryptography_HAS_UNEXPECTED_EOF_WHILE_READING": (
+ cryptography_has_unexpected_eof_while_reading
+ ),
+ "Cryptography_HAS_SSL_OP_IGNORE_UNEXPECTED_EOF": (
+ cryptography_has_ssl_op_ignore_unexpected_eof
+ ),
+ "Cryptography_HAS_GET_EXTMS_SUPPORT": cryptography_has_get_extms_support,
+}
diff --git a/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py b/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py
new file mode 100644
index 00000000..d4dfeef4
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl/binding.py
@@ -0,0 +1,121 @@
+# This file is dual licensed under the terms of the Apache License, Version
+# 2.0, and the BSD License. See the LICENSE file in the root of this repository
+# for complete details.
+
+from __future__ import annotations
+
+import os
+import sys
+import threading
+import types
+import typing
+import warnings
+
+import cryptography
+from cryptography.exceptions import InternalError
+from cryptography.hazmat.bindings._rust import _openssl, openssl
+from cryptography.hazmat.bindings.openssl._conditional import CONDITIONAL_NAMES
+
+
+def _openssl_assert(ok: bool) -> None:
+ if not ok:
+ errors = openssl.capture_error_stack()
+
+ raise InternalError(
+ "Unknown OpenSSL error. This error is commonly encountered when "
+ "another library is not cleaning up the OpenSSL error stack. If "
+ "you are using cryptography with another library that uses "
+ "OpenSSL try disabling it before reporting a bug. Otherwise "
+ "please file an issue at https://github.com/pyca/cryptography/"
+ "issues with information on how to reproduce "
+ f"this. ({errors!r})",
+ errors,
+ )
+
+
+def build_conditional_library(
+ lib: typing.Any,
+ conditional_names: dict[str, typing.Callable[[], list[str]]],
+) -> typing.Any:
+ conditional_lib = types.ModuleType("lib")
+ conditional_lib._original_lib = lib # type: ignore[attr-defined]
+ excluded_names = set()
+ for condition, names_cb in conditional_names.items():
+ if not getattr(lib, condition):
+ excluded_names.update(names_cb())
+
+ for attr in dir(lib):
+ if attr not in excluded_names:
+ setattr(conditional_lib, attr, getattr(lib, attr))
+
+ return conditional_lib
+
+
+class Binding:
+ """
+ OpenSSL API wrapper.
+ """
+
+ lib: typing.ClassVar = None
+ ffi = _openssl.ffi
+ _lib_loaded = False
+ _init_lock = threading.Lock()
+
+ def __init__(self) -> None:
+ self._ensure_ffi_initialized()
+
+ @classmethod
+ def _ensure_ffi_initialized(cls) -> None:
+ with cls._init_lock:
+ if not cls._lib_loaded:
+ cls.lib = build_conditional_library(
+ _openssl.lib, CONDITIONAL_NAMES
+ )
+ cls._lib_loaded = True
+
+ @classmethod
+ def init_static_locks(cls) -> None:
+ cls._ensure_ffi_initialized()
+
+
+def _verify_package_version(version: str) -> None:
+ # Occasionally we run into situations where the version of the Python
+ # package does not match the version of the shared object that is loaded.
+ # This may occur in environments where multiple versions of cryptography
+ # are installed and available in the python path. To avoid errors cropping
+ # up later this code checks that the currently imported package and the
+ # shared object that were loaded have the same version and raise an
+ # ImportError if they do not
+ so_package_version = _openssl.ffi.string(
+ _openssl.lib.CRYPTOGRAPHY_PACKAGE_VERSION
+ )
+ if version.encode("ascii") != so_package_version:
+ raise ImportError(
+ "The version of cryptography does not match the loaded "
+ "shared object. This can happen if you have multiple copies of "
+ "cryptography installed in your Python path. Please try creating "
+ "a new virtual environment to resolve this issue. "
+ f"Loaded python version: {version}, "
+ f"shared object version: {so_package_version}"
+ )
+
+ _openssl_assert(
+ _openssl.lib.OpenSSL_version_num() == openssl.openssl_version(),
+ )
+
+
+_verify_package_version(cryptography.__version__)
+
+Binding.init_static_locks()
+
+if (
+ sys.platform == "win32"
+ and os.environ.get("PROCESSOR_ARCHITEW6432") is not None
+):
+ warnings.warn(
+ "You are using cryptography on a 32-bit Python on a 64-bit Windows "
+ "Operating System. Cryptography will be significantly faster if you "
+ "switch to using a 64-bit Python.",
+ UserWarning,
+ stacklevel=2,
+ )