a ¹aðã@sÔddlZddlZddlZddlZddlZddlmZddlmZddlm Z m Z ddl m Z e  dgd¢¡ZGdd „d eƒZd d „Zd d „Zdd„Zddd„Zdd„ZGdd„deƒZdd„Zeejƒe ¡dS)éN)Úutils)Ú InternalError)ÚffiÚlib)ÚCONDITIONAL_NAMESÚ_OpenSSLErrorWithText)ÚcoderÚreasonZ reason_textc@s:eZdZdd„Zdd„Ze d¡Ze d¡Ze d¡Z dS) Ú _OpenSSLErrorcCs||_||_||_dS©N)Ú_codeÚ_libÚ_reason)Úselfrrr ©rúR/usr/lib64/python3.9/site-packages/cryptography/hazmat/bindings/openssl/binding.pyÚ__init__sz_OpenSSLError.__init__cCs||jko||jkSr )rr )rrr rrrÚ_lib_reason_matchsz_OpenSSLError._lib_reason_matchr r rN) Ú__name__Ú __module__Ú __qualname__rrrZread_only_propertyrrr rrrrr s   r cCsBg}| ¡}|dkrq>| |¡}| |¡}| t|||ƒ¡q|S)Nr)Z ERR_get_errorZ ERR_GET_LIBZERR_GET_REASONÚappendr )rÚerrorsrZerr_libZ err_reasonrrrÚ_consume_errors$s  rcCsVg}|D]H}t dd¡}t |j|t|ƒ¡t |¡}| t|j|j|j |ƒ¡q|S)Nzchar[]é) rÚnewrZERR_error_string_nrÚlenÚstringrrr )rÚerrors_with_textÚerrÚbufZerr_text_reasonrrrÚ_errors_with_text3s  ÿÿr!cCs tt|ƒƒSr )r!r)rrrrÚ_consume_errors_with_textCsr"cCs0|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!rÚformat)rÚokrrrrrÚ_openssl_assertGsúør%cCsjt d¡}||_tƒ}| ¡D]\}}t||ƒs| |ƒ¡qt|ƒD]}||vrFt||t||ƒƒqF|S)Nr) ÚtypesÚ ModuleTypeZ _original_libÚsetÚitemsÚgetattrÚupdateÚdirÚsetattr)rZconditional_namesZconditional_libZexcluded_namesZ conditionZnames_cbÚattrrrrÚbuild_conditional_libraryYs   r/c@s€eZdZUdZdZejed<eZdZ e   ¡Z dZ ejed<dZejed<dd„Zd d „Zed d „ƒZed d„ƒZedd„ƒZdS)ÚBindingz OpenSSL API wrapper. NrFÚ_legacy_providerÚ_default_providercCs | ¡dSr ©Ú_ensure_ffi_initialized)rrrrrtszBinding.__init__cCsŽt|j|jjƒ|j |jjd¡|_t|j|j|jjkƒ|j |jjd¡|j_t|j|jj|jjkƒ|j |jjd¡}t|j|dkƒdS)Nsbasesfipsé) r%rÚ#CRYPTOGRAPHY_OPENSSL_300_OR_GREATERÚOSSL_PROVIDER_loadrÚNULLZ_base_providerZ_fips_providerZ"EVP_default_properties_enable_fips)rÚresrrrÚ _enable_fipswsÿÿzBinding._enable_fipscCs0|j ¡|jjr,|j ¡}t|j|dvƒdS)N)r5é)rZERR_clear_errorZ"CRYPTOGRAPHY_NEEDS_OSRANDOM_ENGINEZ Cryptography_add_osrandom_enginer%)ÚclsÚresultrrrÚ_register_osrandom_engine‡s  z!Binding._register_osrandom_enginecCsº|j |js˜tttƒ|_d|_|j ¡|j ¡| ¡|jjr˜|j  |j j d¡|_ t |j|j |j j kƒ|j  |j j d¡|_t |j|j|j j kƒWdƒn1s¬0YdS)NTslegacysdefault)Ú _init_lockÚ _lib_loadedr/rrZSSL_library_initZOpenSSL_add_all_algorithmsr>r6r7rr8r1r%r2©r<rrrr4“s(   ÿÿÿÿzBinding._ensure_ffi_initializedcCs | ¡dSr r3rArrrÚinit_static_locks±szBinding.init_static_locks)rrrÚ__doc__rÚtypingÚClassVarÚ__annotations__rr@Ú threadingÚLockr?r1ÚAnyr2rr:Ú classmethodr>r4rBrrrrr0hs   r0cCs.t tj¡}| d¡|kr*td ||¡ƒ‚dS)NÚasciiaThe 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: {})rrrZCRYPTOGRAPHY_PACKAGE_VERSIONÚencodeÚ ImportErrorr#)ÚversionZso_package_versionrrrÚ_verify_package_version¶s ûÿrO)N)Ú collectionsrGr&rDZ cryptographyrZcryptography.exceptionsrZ%cryptography.hazmat.bindings._opensslrrZ1cryptography.hazmat.bindings.openssl._conditionalrÚ namedtuplerÚobjectr rr!r"r%r/r0rOÚ __version__rBrrrrÚs*   ÿ N