pgddlZddlmZddlmZejrddlmZdddefdZ d ed ej eej fdej eej ffd Z dS) N)hashes) Prehashed)Backendbackendrreturnc|j||jj}|||jjk|j||jj}|j|}||dk|j||j }||dk|j d}|j ||jj|}||dk||ddk|j d|d}|j |||}|dkr$| }td||j||dddS)Nzsize_t *rzunsigned char[]zError computing shared key.)_libEVP_PKEY_CTX_new_ffiNULLopenssl_assertgcEVP_PKEY_CTX_freeEVP_PKEY_derive_initEVP_PKEY_derive_set_peer _evp_pkeynewEVP_PKEY_derive_consume_errors_with_text ValueErrorbuffer)revp_pkeypeer_public_keyctxreskeylenbuferrors_with_texts L/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/utils.py_evp_pkey_deriver!s , ' '',2C D DC 3',"33444 ,//#w|= > >C , + +C 0 0C 3!8$$$ , / /_5N O OC 3!8$$$ \  j ) )F , & &sGL,=v F FC 3!8$$$ 6!9q=))) ,  ,fQi 8 8C , & &sC 8 8C axx"<<>>68HIII <  sF1I . .qqq 11data algorithmc t|ts>tj|}|||}n|j}t||jkrtd||fS)NzNThe provided data must be the same length as the hash algorithm's digest size.) isinstancerrHashupdatefinalize _algorithmlen digest_sizer)r#r$hash_ctxs r _calculate_digest_and_algorithmr.#s i + +);y))  ""(  4yyI))) '   ) r")typingcryptography.hazmat.primitivesr/cryptography.hazmat.primitives.asymmetric.utilsr TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendrbytesr!Union HashAlgorithmTupler.r"r r9s  111111EEEEEE EDDDDDD2i2u2222* |Iv';;< \%--.r"