a b @sLddlZddlmZmZddlmZejr6ddlmZGdddej Z dS)N)UnsupportedAlgorithm_Reasons)hashes)Backendc@speZdZddejddddZeejdddZddd d Ze dd d d Z e dddZ e dddZ dS) _HashContextNr)backend algorithmreturncCs||_||_|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)selfrrctxZevp_mdresrR/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/backends/openssl/hashes.py__init__s(    z_HashContext.__init__)r cCs|jS)N)r )rrrrr+sz_HashContext.algorithmcCsV|jj}|jj||jjj}|jj||j}|j|dkt |j|j |dS)Nr)r) r r r rrrZEVP_MD_CTX_copy_exrrrr)rZ copied_ctxrrrrcopy/s  z_HashContext.copy)datar cCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r r from_bufferr ZEVP_DigestUpdaterlenr)rrZdata_ptrrrrrupdate8s  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_xofr rnewr ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exrr digest_sizebuffer)rbufZoutlenrrrrfinalize?s z_HashContext.finalizecCsV|jjd|jj}|jj|j||jj}|j|dk|jj |d|jjS)Nr r) r rr#rr$r ZEVP_DigestFinalXOFrrr%)rr&rrrrr"Os z_HashContext._finalize_xof)N) __name__ __module__ __qualname__rZ HashAlgorithmrpropertyrrbytesrr'r"rrrrrs  r) typingZcryptography.exceptionsrrZcryptography.hazmat.primitivesr TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendrZ HashContextrrrrrs