a
a @ s2 d dl mZmZ d dlmZ G dd dejZdS ) )UnsupportedAlgorithm_Reasons)hashesc @ sl e Zd ZdejdddZeejdddZd ddd Ze dd
ddZ
e dd
dZe dddZdS )_HashContextN) algorithmc C s || _ || _|d u r| jj }| jj|| jjj}| j|}|| jjjkrdt d
|jtj
| jj||| jjj}| j|dk || _d S )Nz+{} is not a supported hash on this backend.r )
_algorithm_backend_libEVP_MD_CTX_new_ffigcEVP_MD_CTX_freeZ_evp_md_from_algorithmZNULLr formatnamer ZUNSUPPORTED_HASHZEVP_DigestInit_exopenssl_assert_ctx)selfZbackendr ctxZevp_mdres r Q/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/hashes.py__init__ s(
z_HashContext.__init__)returnc C s | j S )N)r )r r r r r $ s z_HashContext.algorithmc C sV | j j }| j j|| j jj}| j j|| j}| j |dk t | j | j
|dS )Nr )r )r r r
r r r
ZEVP_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 |dk d S )Nr )r r Zfrom_bufferr ZEVP_DigestUpdater lenr )r r Zdata_ptrr r r r update1 s
z_HashContext.updatec C s t | jtjr| S | jjd| jjj }| jjd}| jj
| j||}| j|dk | j|d | jj
k | jj|d |d S d S )Nunsigned char[]zunsigned int *r )
isinstancer r ZExtendableOutputFunction
_finalize_xofr r newr ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exr r digest_sizebuffer)r bufZoutlenr r r r finalize8 s
z_HashContext.finalizec C sV | j jd| jj}| j j| j|| jj}| j |dk | j j |d | jj S )Nr r )
r r r r r! r ZEVP_DigestFinalXOFr r r" )r r# r r r r r H s z_HashContext._finalize_xof)N)
__name__
__module____qualname__r Z
HashAlgorithmr propertyr r bytesr r$ r r r r r r
s r N)Zcryptography.exceptionsr r Zcryptography.hazmat.primitivesr ZHashContextr r r r r