U
    [e                     @   s>   d dl mZ d dlmZmZ d dlmZ G dd dejZdS )    )utils)UnsupportedAlgorithm_Reasons)hashesc                   @   sb   e Zd ZdejdddZedZd dddZ	e
dd	d
dZe
dddZe
dddZdS )_HashContextN)	algorithmc                 C   s   || _ || _|d kr| jj }| jj|| jjj}| j|}|| jjjkrdt	d
|jtj| jj||| jjj}| j|dk || _d S )Nz+{} is not a supported hash on this backend.r   )
_algorithm_backend_libEVP_MD_CTX_new_ffigcEVP_MD_CTX_freeZ_evp_md_from_algorithmZNULLr   formatnamer   ZUNSUPPORTED_HASHZEVP_DigestInit_exopenssl_assert_ctx)selfbackendr   ctxZevp_mdres r   m/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/hashes.py__init__   s.       z_HashContext.__init__r   )returnc                 C   sV   | j j }| j j|| j jj}| j j|| j}| j |dk t	| j | j
|dS )Nr   )r   )r	   r
   r   r   r   r   ZEVP_MD_CTX_copy_exr   r   r   r   )r   Z
copied_ctxr   r   r   r   copy'   s     z_HashContext.copy)datar   c                 C   s:   | j j|}| j j| j|t|}| j |dk d S )Nr   )r	   r   Zfrom_bufferr
   ZEVP_DigestUpdater   lenr   )r   r   Zdata_ptrr   r   r   r   update0   s      z_HashContext.updatec                 C   s   t | jtjr|  S | jjd| jjj	}| jjd}| jj
| j||}| j|dk | j|d | jjk | jj|d |d  S d S )Nunsigned char[]zunsigned int *r   )
isinstancer   r   ZExtendableOutputFunction_finalize_xofr	   r   newr
   ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exr   r   digest_sizebuffer)r   bufZoutlenr   r   r   r   finalize7   s     z_HashContext.finalizec                 C   sV   | j jd| jj}| j j| j|| jj}| j |dk | j j	|d | jj S )Nr   r   )
r	   r   r"   r   r#   r
   ZEVP_DigestFinalXOFr   r   r$   )r   r%   r   r   r   r   r!   G   s       z_HashContext._finalize_xof)N)__name__
__module____qualname__r   ZHashAlgorithmr   r   Zread_only_propertyr   r   bytesr   r&   r!   r   r   r   r   r      s   
	r   N)	Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   ZHashContextr   r   r   r   r   <module>   s   