o
    �)%aë  ã                   @   sP   d dl Z d dlmZ d dlmZ d dlmZ dd„ Zdd„ Zd	d
„ Z	dd„ Z
dS )é    N)Úutils)Úhashes)Ú	Prehashedc                 C   sú   | j  || jj¡}|  || jjk¡ | j || j j¡}| j  |¡}|  |dk¡ | j  ||j	¡}|  |dk¡ | j 
d¡}| j  || jj|¡}|  |dk¡ |  |d dk¡ | j 
d|d ¡}| j  |||¡}|dkrptdƒ‚| j ||d ¡d d … S )Né   zsize_t *r   zunsigned char[]z1Null shared key derived from public/private pair.)Ú_libÚEVP_PKEY_CTX_newÚ_ffiÚNULLÚopenssl_assertÚgcÚEVP_PKEY_CTX_freeÚEVP_PKEY_derive_initÚEVP_PKEY_derive_set_peerÚ	_evp_pkeyÚnewÚEVP_PKEY_deriveÚ
ValueErrorÚbuffer)ÚbackendÚevp_pkeyÚpeer_public_keyÚctxÚresÚkeylenÚbuf© r   úL/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/utils.pyÚ_evp_pkey_derive   s    r   c                 C   sN   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   ÚdataÚ	algorithmÚhash_ctxr   r   r   Ú_calculate_digest_and_algorithm!   s   


ÿr(   c                 C   s   t | tƒr	tdƒ‚d S )NzƒPrehashed is only supported in the sign and verify methods. It cannot be used with signer, verifier or recover_data_from_signature.)r   r   Ú	TypeError)Úsignature_algorithmr   r   r   Ú_check_not_prehashed2   s
   
ÿÿr+   c                   C   s   t jdtjdd� d S )NzMsigner and verifier have been deprecated. Please use sign and verify instead.é   )Ú
stacklevel)ÚwarningsÚwarnr   ÚPersistentlyDeprecated2017r   r   r   r   Ú_warn_sign_verify_deprecated;   s
   
ür1   )r.   Úcryptographyr   Úcryptography.hazmat.primitivesr   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   r   r(   r+   r1   r   r   r   r   Ú<module>   s   	