3 l�_ �@sdddlmZmZmZddlZddlmZddlmZddl m Z dd�Z dd �Z d d �Z d d �ZdS)�)�absolute_import�division�print_functionN)�utils)�hashes)� PrehashedcCs�|jj||jj�}|j||jjk�|jj||jj�}|jj|�}|j|dk�|jj||j �}|j|dk�|jj d�}|jj ||jj|�}|j|dk�|j|ddk�|jj d|d�}|jj |||�}|dkr�t d��|jj ||d�dd�S)N�zsize_t *rzunsigned char[]z1Null shared key derived from public/private pair.)Z_libZEVP_PKEY_CTX_newZ_ffiZNULLZopenssl_assert�gcZEVP_PKEY_CTX_freeZEVP_PKEY_derive_initZEVP_PKEY_derive_set_peerZ _evp_pkey�newZEVP_PKEY_derive� ValueError�buffer)�backendZevp_pkeyZpeer_public_keyZctx�resZkeylenZbuf�r�/usr/lib64/python3.6/utils.py�_evp_pkey_derives   rcCsNt|t�s*tj||�}|j|�|j�}n|j}t|�|jkrFt d��||fS)NzNThe provided data must be the same length as the hash algorithm's digest size.) � isinstancerrZHash�update�finalizeZ _algorithm�lenZ digest_sizer )r �data� algorithmZhash_ctxrrr�_calculate_digest_and_algorithm"s    rcCst|t�rtd��dS)NzfPrehashed is only supported in the sign and verify methods. It cannot be used with signer or verifier.)rr� TypeError)Zsignature_algorithmrrr�_check_not_prehashed3s rcCstjdtjdd�dS)NzMsigner and verifier have been deprecated. Please use sign and verify instead.�)� stacklevel)�warnings�warnrZPersistentlyDeprecated2017rrrr�_warn_sign_verify_deprecated;sr)Z __future__rrrrZ cryptographyrZcryptography.hazmat.primitivesrZ/cryptography.hazmat.primitives.asymmetric.utilsrrrrrrrrr�s