o
    ä›eŽ  ã                   @  sV   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„Z
ddd„ZdS )é    )ÚannotationsN)Úhashes)Ú	Prehashed)ÚBackendÚbackendr   ÚreturnÚbytesc                 C  s   | j  || jj¡}|  || jjk¡ | j || j j¡}| j  |¡}|  |dk¡ | j jr6| 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.)Ú_libÚEVP_PKEY_CTX_newÚ_ffiÚNULLÚopenssl_assertÚgcÚEVP_PKEY_CTX_freeÚEVP_PKEY_derive_initÚ%Cryptography_HAS_EVP_PKEY_SET_PEER_EXÚEVP_PKEY_derive_set_peer_exÚ	_evp_pkeyÚEVP_PKEY_derive_set_peerÚnewÚEVP_PKEY_deriveÚ_consume_errorsÚ
ValueErrorÚbuffer)r   Úevp_pkeyÚpeer_public_keyÚctxÚresÚkeylenÚbufÚerrors© r"   ú]/var/www/html/venv/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/utils.pyÚ_evp_pkey_derive   s.   ÿÿ
r$   ÚdataÚ	algorithmú-typing.Union[Prehashed, hashes.HashAlgorithm]ú)typing.Tuple[bytes, hashes.HashAlgorithm]c                 C  sL   t |tƒst |¡}| | ¡ | ¡ } n|j}t| ƒ|jkr"t	dƒ‚| |fS )NzNThe provided data must be the same length as the hash algorithm's digest size.)
Ú
isinstancer   r   ÚHashÚupdateÚfinalizeÚ
_algorithmÚlenÚdigest_sizer   )r%   r&   Úhash_ctxr"   r"   r#   Ú_calculate_digest_and_algorithm.   s   



ÿr1   )r   r   r   r   )r%   r   r&   r'   r   r(   )Ú
__future__r   ÚtypingÚcryptography.hazmat.primitivesr   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   ÚTYPE_CHECKINGÚ,cryptography.hazmat.backends.openssl.backendr   r$   r1   r"   r"   r"   r#   Ú<module>   s   
