o
    ™¨Êh©	  ã                   @   s\   d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 e e
j¡G dd„ deƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)Úhashesc                   @   s8   e Zd Zddd„Ze d¡Zdd„ Zdd„ Zd	d
„ Z	dS )Ú_HashContextNc                 C   s–   || _ || _|d u rF| jj ¡ }| jj || jjj¡}| j |¡}|| jjjkr2t	d 
|j¡tjƒ‚| jj ||| jjj¡}| j |dk¡ || _d S )Nz,{0} is not a supported hash on this backend.r   )Ú
_algorithmÚ_backendÚ_libÚCryptography_EVP_MD_CTX_newÚ_ffiÚgcÚCryptography_EVP_MD_CTX_freeÚ_evp_md_from_algorithmÚNULLr   ÚformatÚnamer   ÚUNSUPPORTED_HASHÚEVP_DigestInit_exÚopenssl_assertÚ_ctx)ÚselfÚbackendÚ	algorithmÚctxÚevp_mdÚres© r   ú]/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/hashes.pyÚ__init__   s(   
ÿÿýÿ
z_HashContext.__init__r
   c                 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   ÚEVP_MD_CTX_copy_exr   r   r	   r   )r   Ú
copied_ctxr   r   r   r    Úcopy(   s   
ÿz_HashContext.copyc                 C   s,   | j j | j|t|ƒ¡}| j  |dk¡ d S )Nr   )r   r   ÚEVP_DigestUpdater   Úlenr   )r   Údatar   r   r   r    Úupdate1   s   z_HashContext.updatec                 C   sz   | 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 )Nzunsigned char[]zunsigned int *r   )r   r   Únewr   ÚEVP_MAX_MD_SIZEÚEVP_DigestFinal_exr   r   r   Údigest_sizeÚbuffer)r   ÚbufÚoutlenr   r   r   r    Úfinalize5   s   
ÿz_HashContext.finalize)N)
Ú__name__Ú
__module__Ú__qualname__r!   r   Úread_only_propertyr   r$   r(   r0   r   r   r   r    r	      s    

	r	   N)Ú
__future__r   r   r   Úcryptographyr   Úcryptography.exceptionsr   r   Úcryptography.hazmat.primitivesr   Úregister_interfaceÚHashContextÚobjectr	   r   r   r   r    Ú<module>   s   
