mirror of
				https://gitlab.sectorq.eu/jaydee/omv_backup.git
				synced 2025-10-31 02:21:10 +01:00 
			
		
		
		
	added v3
This commit is contained in:
		| @@ -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. | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -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, | ||||
| } | ||||
| @@ -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, | ||||
|     ) | ||||
		Reference in New Issue
	
	Block a user