a b @sTddlZddlmZmZmZddlmZmZejr>ddl m Z Gdddej Z dS)N)InvalidSignatureUnsupportedAlgorithm_Reasons) constant_timehashes)Backendc@sreZdZddeejdddZeejdddZddd d Z edd d d Z edddZ eddddZ dS) _HMACContextNr)backendkey algorithmcCs||_||_|dur|jj}|j||jjjk|jj||jjj}|j |}||jjjkrzt d |j t j|jj|}|jj||t|||jjj}|j|dk||_||_dS)Nz*{} is not a supported hash on this backendr) _algorithm_backend_lib HMAC_CTX_newopenssl_assert_ffiNULLgc HMAC_CTX_freeZ_evp_md_from_algorithmrformatnamerZUNSUPPORTED_HASH from_bufferZ HMAC_Init_exlen_ctx_key)selfr r r ctxZevp_mdZkey_ptrresrP/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/backends/openssl/hmac.py__init__s*  z_HMACContext.__init__)returncCs|jS)N)r )rrrrr 3sz_HMACContext.algorithmcCsp|jj}|j||jjjk|jj||jjj}|jj||j }|j|dkt |j|j |j |dS)Nr)r) r rrrrrrrZ HMAC_CTX_copyrrrr )rZ copied_ctxrrrrcopy7s  z_HMACContext.copy)datar!cCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r rrrZ HMAC_Updaterrr)rr#Zdata_ptrrrrrupdateCsz_HMACContext.updatecCsz|jjd|jjj}|jjd}|jj|j||}|j|dk|j|d|jj k|jj |d|dS)Nzunsigned char[]zunsigned int *r) r rnewrZEVP_MAX_MD_SIZEZ HMAC_Finalrrr digest_sizebuffer)rbufZoutlenrrrrfinalizeHs z_HMACContext.finalize) signaturer!cCs |}t||stddS)NzSignature did not match digest.)r)rZbytes_eqr)rr*digestrrrverifyRs z_HMACContext.verify)N) __name__ __module__ __qualname__bytesrZ HashAlgorithmr propertyr r"r$r)r,rrrrrs   r) typingZcryptography.exceptionsrrrZcryptography.hazmat.primitivesrr TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendrZ HashContextrrrrrs