U
    7Ó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   úl/var/www/html/alexa-login-pro/venv/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   