U q`u @sFddlmZddlmZmZmZddlmZmZGdddej Z dS))utils)InvalidSignatureUnsupportedAlgorithm_Reasons) constant_timehashesc@sfeZdZdeejdddZedZ ddddZ edd d d Z edd d Z eddddZ dS) _HMACContextN)key algorithmcCs||_||_|dkr|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)selfbackendr r ctxZevp_mdZkey_ptrresrP/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/backends/openssl/hmac.py__init__s2  z_HMACContext.__init__r )returncCsp|jj}|j||jjjk|jj||jjj}|jj||j }|j|dkt |j|j |j |dS)Nr)r) r r rrrrrrZ HMAC_CTX_copyrrrr )rZ copied_ctxrrrrcopy-s z_HMACContext.copy)datar!cCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r rrr Z HMAC_Updaterrr)rr#Zdata_ptrrrrrupdate9sz_HMACContext.updatecCsz|jjd|jjj}|jjd}|jj|j||}|j|dk|j|d|jj k|jj |d|dS)Nzunsigned char[]zunsigned int *r) r rnewr ZEVP_MAX_MD_SIZEZ HMAC_Finalrrr digest_sizebuffer)rbufZoutlenrrrrfinalize>sz_HMACContext.finalize) signaturer!cCs |}t||stddS)NzSignature did not match digest.)r)rZbytes_eqr)rr*digestrrrverifyHs z_HMACContext.verify)N)__name__ __module__ __qualname__bytesrZ HashAlgorithmr rZread_only_propertyr r"r$r)r,rrrrrs    rN) Z cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.primitivesrrZ HashContextrrrrrs