U q` @s>ddlmZddlmZmZddlmZGdddejZdS))utils)UnsupportedAlgorithm_Reasons)hashesc@sbeZdZdejdddZedZddddZ e dd d d Z e dd d Z e dddZ dS) _HashContextN) algorithmcCs||_||_|dkr|jj}|jj||jjj}|j|}||jjjkrdt d |j t j |jj|||jjj}|j|dk||_dS)Nz+{} is not a supported hash on this backend.r) _algorithm_backend_libEVP_MD_CTX_new_ffigcEVP_MD_CTX_freeZ_evp_md_from_algorithmZNULLrformatnamerZUNSUPPORTED_HASHZEVP_DigestInit_exopenssl_assert_ctx)selfbackendrctxZevp_mdresrR/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/backends/openssl/hashes.py__init__ s.  z_HashContext.__init__r)returncCsV|jj}|jj||jjj}|jj||j}|j|dkt |j|j |dS)Nr)r) r r r r r rZEVP_MD_CTX_copy_exrrrr)rZ copied_ctxrrrrcopy's z_HashContext.copy)datarcCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r r from_bufferr ZEVP_DigestUpdaterlenr)rrZdata_ptrrrrrupdate0sz_HashContext.updatecCst|jtjr|S|jjd|jjj }|jjd}|jj |j ||}|j |dk|j |d|jj k|jj|d|dSdS)Nunsigned char[]zunsigned int *r) isinstancerrZExtendableOutputFunction _finalize_xofr r newr ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exrr digest_sizebuffer)rbufZoutlenrrrrfinalize7sz_HashContext.finalizecCsV|jjd|jj}|jj|j||jj}|j|dk|jj |d|jjS)Nr r) r r r#rr$r ZEVP_DigestFinalXOFrrr%)rr&rrrrr"Gsz_HashContext._finalize_xof)N)__name__ __module__ __qualname__rZ HashAlgorithmrrZread_only_propertyrrbytesrr'r"rrrrr s   rN) Z cryptographyrZcryptography.exceptionsrrZcryptography.hazmat.primitivesrZ HashContextrrrrrs