o ge @sddlZddlZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z e dgdZGdd d eZd d Zd d ZddZdddZddZGdddeZddZeejedS)N)utils) InternalError)ffilib)CONDITIONAL_NAMES_OpenSSLErrorWithText)coderreason reason_textc@s:eZdZddZddZedZedZedZ dS) _OpenSSLErrorcCs||_||_||_dSN)_code_lib_reason)selfrrr rN/usr/lib/python3/dist-packages/cryptography/hazmat/bindings/openssl/binding.py__init__s z_OpenSSLError.__init__cCs||jko ||jkSr )rr )rrr rrr_lib_reason_matchsz_OpenSSLError._lib_reason_matchr rrN) __name__ __module__ __qualname__rrrread_only_propertyrrr rrrrr s   r cCsDg} |}|dkr |S||}||}|t|||q)NTr) ERR_get_error ERR_GET_LIBERR_GET_REASONappendr )rerrorsrerr_lib err_reasonrrr_consume_errors$s r cCsVg}|D]$}tdd}t|j|t|t|}|t|j|j|j |q|S)Nzchar[]) rnewrERR_error_string_nrlenstringrrr )rerrors_with_texterrbuferr_text_reasonrrr_errors_with_text3s  r*cCs tt|Sr )r*r )rrrr_consume_errors_with_textC r+cCs0|s|dur t|}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}))r r*rformat)rokrr&rrr_openssl_assertGsr/cCsjtd}||_t}|D]\}}t||s||qt|D]}||vr2t||t||q#|S)Nr) types ModuleType _original_libsetitemsgetattrupdatedirsetattr)rconditional_namesconditional_libexcluded_names conditionnames_cbattrrrrbuild_conditional_libraryYs    r?c@sxeZdZUdZdZejed<eZdZ e Z dZ ejed<dZejed<ddZed d Zed d Zed dZdS)Bindingz OpenSSL API wrapper. NrF_legacy_provider_default_providercC |dSr _ensure_ffi_initialized)rrrrrtr,zBinding.__init__cCs4|j|jjr|j}t|j|dvdSdS)N))rERR_clear_error"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINE Cryptography_add_osrandom_enginer/)clsresultrrr_register_osrandom_enginews  z!Binding._register_osrandom_enginecCs|ja|jsTttt|_d|_|j|j||jjr\|j |j j d|_ t |j|j |j j k|j |j j d|_t |j|j|j j kWddSWddSWddS1sgwYdS)NTslegacysdefault) _init_lock _lib_loadedr?rrSSL_library_initOpenSSL_add_all_algorithmsrM#CRYPTOGRAPHY_OPENSSL_300_OR_GREATEROSSL_PROVIDER_loadrNULLrAr/rBrKrrrrEs2   "zBinding._ensure_ffi_initializedcCrCr rDrUrrrinit_static_lockss zBinding.init_static_locks)rrr__doc__rtypingClassVar__annotations__rrO threadingLockrNrAAnyrBr classmethodrMrErVrrrrr@hs   r@cCs.ttj}|d|krtd||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%rCRYPTOGRAPHY_PACKAGE_VERSIONencode ImportErrorr-)versionso_package_versionrrr_verify_package_versions rer ) collectionsr[r0rX cryptographyrcryptography.exceptionsr%cryptography.hazmat.bindings._opensslrr1cryptography.hazmat.bindings.openssl._conditionalr namedtuplerobjectr r r*r+r/r?r@re __version__rVrrrrs,    >