a a} @s:ddlmZmZmZddlmZmZGdddejZdS))InvalidSignatureUnsupportedAlgorithm_Reasons) constant_timehashesc@speZdZdeejdddZeejdddZdddd Z edd d d Z edd dZ eddddZ dS) _HMACContextN)key 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)selfZbackendrr ctxZevp_mdZkey_ptrresrO/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/hmac.py__init__s*  z_HMACContext.__init__)returncCs|jS)N)r )rrrrr *sz_HMACContext.algorithmcCsp|jj}|j||jjjk|jj||jjj}|jj||j }|j|dkt |j|j |j |dS)Nr)r) r r r rrrrrZ HMAC_CTX_copyrrrr )rZ copied_ctxrrrrcopy.s  z_HMACContext.copy)datarcCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r rrr Z HMAC_Updaterrr)rr!Zdata_ptrrrrrupdate:sz_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 Z digest_sizebuffer)rbufZoutlenrrrrfinalize?s z_HMACContext.finalize) signaturercCs |}t||stddS)NzSignature did not match digest.)r&rZbytes_eqr)rr'ZdigestrrrverifyIs z_HMACContext.verify)N) __name__ __module__ __qualname__bytesrZ HashAlgorithmrpropertyr r r"r&r(rrrrrs   rN) Zcryptography.exceptionsrrrZcryptography.hazmat.primitivesrrZ HashContextrrrrrs