a °…b¹ã@spddlZddlmZddlmZejr2ddlmZdedœdd„Z eej eej fej eej fd œd d „Z dS) éN)Úhashes)Ú Prehashed)ÚBackendr)ÚbackendÚreturncCs|j ||jj¡}| ||jjk¡|j ||jj¡}|j |¡}| |dk¡|j ||j ¡}| |dk¡|j  d¡}|j  ||jj|¡}| |dk¡| |ddk¡|j  d|d¡}|j  |||¡}|dkrê|  ¡}t d|ƒ‚|j ||d¡dd…S)Nézsize_t *rzunsigned char[]zError computing shared key.)Z_libZEVP_PKEY_CTX_newZ_ffiZNULLZopenssl_assertÚgcZEVP_PKEY_CTX_freeZEVP_PKEY_derive_initZEVP_PKEY_derive_set_peerZ _evp_pkeyÚnewZEVP_PKEY_deriveZ_consume_errors_with_textÚ ValueErrorÚbuffer)rZevp_pkeyZpeer_public_keyÚctxÚresZkeylenÚbufZerrors_with_text©rúQ/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/backends/openssl/utils.pyÚ_evp_pkey_derives"   r)ÚdataÚ algorithmrcCsLt|tƒs(t |¡}| |¡| ¡}n|j}t|ƒ|jkrDt dƒ‚||fS)NzNThe provided data must be the same length as the hash algorithm's digest size.) Ú isinstancerrZHashÚupdateÚfinalizeÚ _algorithmÚlenÚ digest_sizer )rrZhash_ctxrrrÚ_calculate_digest_and_algorithm#s    ÿr)ÚtypingZcryptography.hazmat.primitivesrZ/cryptography.hazmat.primitives.asymmetric.utilsrÚ TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendrÚbytesrÚUnionZ HashAlgorithmÚTuplerrrrrÚs   ý