a bl@s,ddlZddlZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z e ddefdefd efd efgZGd d d Zejed ddZejeejedddZddZd eejejeddddZddZGdddZddZddZeejeeej dS)!N)utils) InternalError)ffilib)CONDITIONAL_NAMES_OpenSSLErrorWithTextcoderreasonZ reason_textc@sfeZdZeeedddZeeedddZeeddd Zeedd d Z eedd d Z dS) _OpenSSLError)rrr cCs||_||_||_dSN)_code_lib_reason)selfrrr rS/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/bindings/openssl/binding.py__init__sz_OpenSSLError.__init__)rr returncCs||jko||jkSr )rr )rrr rrr_lib_reason_matchsz_OpenSSLError._lib_reason_matchrcCs|jSr )r rrrrr sz_OpenSSLError.codecCs|jSr )r rrrrr$sz_OpenSSLError.libcCs|jSr )rrrrrr (sz_OpenSSLError.reasonN) __name__ __module__ __qualname__intrboolrpropertyrrr rrrrr sr rcCsBg}|}|dkrq>||}||}|t|||q|S)Nr)Z ERR_get_errorZ ERR_GET_LIBZERR_GET_REASONappendr )rerrorsrZerr_libZ err_reasonrrr_consume_errors-s  r)rrcCsVg}|D]H}tdd}t|j|t|t|}|t|j|j|j |q|S)Nzchar[]) rnewrZERR_error_string_nrlenstringrrr )rerrors_with_texterrbufZerr_text_reasonrrr_errors_with_text<s  r'cCs tt|Sr )r'rrrrr_consume_errors_with_textNsr))okrrcCs0|s,|durt|}t|}td||dS)NaiUnknown 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 this. ({0!r}))rr'rformat)rr*rr$rrr_openssl_assertRsr,cCsjtd}||_t}|D]\}}t||s||qt|D]}||vrFt||t||qF|S)Nr) types ModuleTypeZ _original_libsetitemsgetattrupdatedirsetattr)rZconditional_namesZconditional_libZexcluded_names conditionZnames_cbattrrrrbuild_conditional_libraryfs   r7c@seZdZUdZdZejed<eZdZ e Z dZ ejed<dZejed<ddZdd d d Zed d ZeddZeddZdS)Bindingz OpenSSL API wrapper. NrF_legacy_provider_default_providercCs |dSr _ensure_ffi_initializedrrrrrszBinding.__init__rcCst|j|jj|j|jjd|_t|j|j|jjk|j|jjd|j_t|j|jj|jjk|j|jjd}t|j|dkdS)Nsbasesfips) r,r#CRYPTOGRAPHY_OPENSSL_300_OR_GREATEROSSL_PROVIDER_loadrNULLZ_base_providerZ_fips_providerZ"EVP_default_properties_enable_fips)rresrrr _enable_fipsszBinding._enable_fipscCs0|j|jjr,|j}t|j|dvdS)N)r=)rZERR_clear_errorZ"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINEZ Cryptography_add_osrandom_enginer,)clsresultrrr_register_osrandom_engines  z!Binding._register_osrandom_enginecCs|j|jsttt|_d|_||jjr|j|jj d|_ t |j|j |jj k|j|jj d|_ t |j|j |jj kWdn1s0YdS)NTslegacysdefault) _init_lock _lib_loadedr7rrrFr>r?rr@r9r,r:rDrrrr<s$ zBinding._ensure_ffi_initializedcCs |dSr r;rIrrrinit_static_locksszBinding.init_static_locks)rrr__doc__rtypingClassVar__annotations__rrH threadingLockrGr9Anyr:rrB classmethodrFr<rJrrrrr8us   r8cCs$|jr |js |js tdtjdS)NzOpenSSL version 1.1.0 is no longer supported by the OpenSSL project, please upgrade. The next release of cryptography will be the last to support compiling with OpenSSL 1.1.0.)Z"CRYPTOGRAPHY_OPENSSL_LESS_THAN_111ZCRYPTOGRAPHY_IS_LIBRESSLZCRYPTOGRAPHY_IS_BORINGSSLwarningswarnrZDeprecatedIn37r(rrr_verify_openssl_versionsrUcCs.ttj}|d|kr*td||dS)NasciiaThe 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. Loaded python version: {}, shared object version: {})rr#rZCRYPTOGRAPHY_PACKAGE_VERSIONencode ImportErrorr+)versionZso_package_versionrrr_verify_package_versions rZ)N)rOr-rLrSZ cryptographyrZcryptography.exceptionsrZ%cryptography.hazmat.bindings._opensslrrZ1cryptography.hazmat.bindings.openssl._conditionalr NamedTuplerbytesrr Listrr'r)rOptionalr,r7r8rUrZ __version__rJrrrrs<     J