U
    *}f 	                     @   sd   d dl mZmZmZ 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 )    )absolute_importdivisionprint_functionN)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rtd| j||d d d  S )N   zsize_t *r   zunsigned char[]z1Null shared key derived from public/private pair.)Z_libZEVP_PKEY_CTX_newZ_ffiZNULLZopenssl_assertgcZEVP_PKEY_CTX_freeZEVP_PKEY_derive_initZEVP_PKEY_derive_set_peerZ	_evp_pkeynewZEVP_PKEY_derive
ValueErrorbuffer)backendZevp_pkeyZpeer_public_keyctxresZkeylenbuf r   N/tmp/pip-unpacked-wheel-x36vw73o/cryptography/hazmat/backends/openssl/utils.py_evp_pkey_derive   s     r   c                 C   sN   t |ts*t|| }|| | }n|j}t||jkrFt	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   data	algorithmZhash_ctxr   r   r   _calculate_digest_and_algorithm"   s    


r   c                 C   s   t | trtdd S )NzfPrehashed is only supported in the sign and verify methods. It cannot be used with signer or verifier.)r   r   	TypeError)Zsignature_algorithmr   r   r   _check_not_prehashed3   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   ZPersistentlyDeprecated2017r   r   r   r   _warn_sign_verify_deprecated;   s
    r#   )
__future__r   r   r   r!   Zcryptographyr   Zcryptography.hazmat.primitivesr   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   r   r   r#   r   r   r   r   <module>   s   