U
    ςd                     @  sd   d dl mZ d dlZd dlmZ d dlmZ ejr>d dlm	Z	 dddd	d
Z
ddddddZdS )    )annotationsN)hashes)	Prehashed)Backendr   bytes)backendreturnc                 C  s"  | j || jj}| || jjk | j|| j j}| j |}| |dk | j jrl| j 	||j
d}n| j ||j
}| |dk | jd}| j || jj|}| |dk | |d dk | jd|d }| j |||}|dkr|  }td|| j||d d d  S )N   r   zsize_t *zunsigned char[]zError computing shared key.)Z_libZEVP_PKEY_CTX_newZ_ffiZNULLZopenssl_assertgcZEVP_PKEY_CTX_freeZEVP_PKEY_derive_initZ%Cryptography_HAS_EVP_PKEY_SET_PEER_EXZEVP_PKEY_derive_set_peer_exZ	_evp_pkeyZEVP_PKEY_derive_set_peernewZEVP_PKEY_deriveZ_consume_errors
ValueErrorbuffer)r   Zevp_pkeyZpeer_public_keyctxresZkeylenbuferrors r   g/var/www/html/myproject/myenv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/utils.py_evp_pkey_derive   s4       

r   z-typing.Union[Prehashed, hashes.HashAlgorithm]z)typing.Tuple[bytes, hashes.HashAlgorithm])data	algorithmr   c                 C  sL   t |ts(t|}||  | } n|j}t| |jkrDt	d| |fS )NzNThe provided data must be the same length as the hash algorithm's digest size.)

isinstancer   r   ZHashupdatefinalize
_algorithmlendigest_sizer   )r   r   Zhash_ctxr   r   r   _calculate_digest_and_algorithm.   s    



r   )
__future__r   typingZcryptography.hazmat.primitivesr   Z/cryptography.hazmat.primitives.asymmetric.utilsr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r   r   r   <module>   s   