a
    ݌xdl                     @   sp   d dl Z d dlmZ d dlmZ e jr2d dlmZ dedddZ	ee j
eejf e jeejf d	d
dZdS )    N)hashes)	Prehashed)Backendr   )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   b/var/www/html/Ranjet/env/lib/python3.9/site-packages/cryptography/hazmat/backends/openssl/utils.py_evp_pkey_derive   s.    

r   )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   )typingZcryptography.hazmat.primitivesr   Z/cryptography.hazmat.primitives.asymmetric.utilsr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   bytesr   UnionZHashAlgorithmTupler   r   r   r   r   <module>   s   