a a @s2ddlmZmZddlmZGdddejZdS))UnsupportedAlgorithm_Reasons)hashesc@sleZdZdejdddZeejdddZdddd Ze dd d d Z e dd dZ e dddZ dS) _HashContextN) algorithmcCs||_||_|dur|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)selfZbackendrctxZevp_mdresrQ/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/hashes.py__init__ s(    z_HashContext.__init__)returncCs|jS)N)r)rrrrr$sz_HashContext.algorithmcCsV|jj}|jj||jjj}|jj||j}|j|dkt |j|j |dS)Nr)r) rr r r r r ZEVP_MD_CTX_copy_exrrrr)rZ copied_ctxrrrrcopy(s  z_HashContext.copy)datarcCs:|jj|}|jj|j|t|}|j|dkdS)Nr)rr Z from_bufferr ZEVP_DigestUpdaterlenr)rrZdata_ptrrrrrupdate1s  z_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_xofrr newr ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exrr digest_sizebuffer)rbufZoutlenrrrrfinalize8s z_HashContext.finalizecCsV|jjd|jj}|jj|j||jj}|j|dk|jj |d|jjS)Nrr) rr r rr!r ZEVP_DigestFinalXOFrrr")rr#rrrrrHs z_HashContext._finalize_xof)N) __name__ __module__ __qualname__rZ HashAlgorithmrpropertyrrbytesrr$rrrrrr s rN)Zcryptography.exceptionsrrZcryptography.hazmat.primitivesrZ HashContextrrrrrs