o )%a @s>ddlmZddlmZmZddlmZGdddejZdS))utils)UnsupportedAlgorithm_Reasons)hashesc@s`eZdZddejfddZedZdddZ d e ddfd d Z de fd d Z de fddZ dS) _HashContextN algorithmcCs||_||_|durF|jj}|jj||jjj}|j|}||jjjkr2t 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_free_evp_md_from_algorithmNULLrformatnamerUNSUPPORTED_HASHEVP_DigestInit_exopenssl_assert_ctx)selfbackendrctxevp_mdresrM/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/hashes.py__init__ s(     z_HashContext.__init__rreturncCsV|jj}|jj||jjj}|jj||j}|j|dkt |j|j |dS)Nr)r) r r r r r rEVP_MD_CTX_copy_exrrrr)r copied_ctxrrrrcopy's  z_HashContext.copydatacCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r r from_bufferr EVP_DigestUpdaterlenr)rr#data_ptrrrrrupdate0s  z_HashContext.updatecCst|jtjr |S|jjd|jjj }|jjd}|jj |j ||}|j |dk|j |d|jj k|jj|d|dS)Nunsigned char[]zunsigned int *r) isinstancerrExtendableOutputFunction _finalize_xofr r newr EVP_MAX_MD_SIZEEVP_DigestFinal_exrr digest_sizebuffer)rbufoutlenrrrrfinalize7s z_HashContext.finalizecCsV|jjd|jj}|jj|j||jj}|j|dk|jj |d|jjS)Nr)r) r r r-rr0r EVP_DigestFinalXOFrrr1)rr2rrrrr,Gs z_HashContext._finalize_xof)N)rr)__name__ __module__ __qualname__r HashAlgorithmrrread_only_propertyrr"bytesr(r4r,rrrrr s   rN) cryptographyrcryptography.exceptionsrrcryptography.hazmat.primitivesr HashContextrrrrrs