U
    EZh                     @   sL   d dl Z d dlmZmZ d dlmZ e jr6d dlmZ G dd dej	Z
dS )    N)UnsupportedAlgorithm_Reasons)hashes)Backendc                   @   sp   e Zd ZddejddddZeejdd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 )_HashContextNr   )backend	algorithmreturnc                 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)selfr   r   ctxZevp_mdres r   r/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/hashes.py__init__   s.       z_HashContext.__init__)r	   c                 C   s   | j S )N)r
   )r   r   r   r   r   *   s    z_HashContext.algorithmc                 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   update7   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   finalize>   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!   N   s       z_HashContext._finalize_xof)N)__name__
__module____qualname__r   ZHashAlgorithmr   propertyr   r   bytesr   r&   r!   r   r   r   r   r      s     	r   )typingZcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   ZHashContextr   r   r   r   r   <module>   s
   