3 L] @sdddlmZmZmZddlmZddlmZmZm Z ddl m Z m Z ej e jGdddeZdS))absolute_importdivisionprint_function)utils)InvalidSignatureUnsupportedAlgorithm_Reasons) constant_timehashesc@s@eZdZd ddZejdZddZddZd d Z d d Z dS) _HMACContextNcCs||_||_|dkr|jjj}|jj||jjjk|jjj||jjj}|jj |}||jjjkrzt dj |j t j|jjj|}|jjj||t|||jjj}|jj|dk||_||_dS)Nz*{} is not a supported hash on this backendr) _algorithm_backend_libCryptography_HMAC_CTX_newopenssl_assert_ffiNULLgcCryptography_HMAC_CTX_freeZ_evp_md_from_algorithmrformatnamerZUNSUPPORTED_HASH from_bufferZ HMAC_Init_exlen_ctx_key)selfbackendkey algorithmctxZevp_mdZkey_ptrresr!S/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/backends/openssl/hmac.py__init__s&  z_HMACContext.__init__r cCsp|jjj}|jj||jjjk|jjj||jjj}|jjj||j }|jj|dkt |j|j |j |dS)Nr)r) r rrrrrrrZ HMAC_CTX_copyrr rr)rZ copied_ctxr r!r!r"copy-s z_HMACContext.copycCs:|jjj|}|jjj|j|t|}|jj|dkdS)Nr)r rrrZ HMAC_Updaterrr)rdataZdata_ptrr r!r!r"update9sz_HMACContext.updatecCsz|jjjd|jjj}|jjjd}|jjj|j||}|jj|dk|jj|d|jj k|jjj |d|dS)Nzunsigned char[]zunsigned int *r) r rnewrZEVP_MAX_MD_SIZEZ HMAC_Finalrrr digest_sizebuffer)rbufZoutlenr r!r!r"finalize>s  z_HMACContext.finalizecCs |j}tj||stddS)NzSignature did not match digest.)r+r Zbytes_eqr)r signaturedigestr!r!r"verifyGs z_HMACContext.verify)N) __name__ __module__ __qualname__r#rZread_only_propertyrr$r&r+r.r!r!r!r"r s     r N) __future__rrrZ cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.primitivesr r Zregister_interfaceZ HashContextobjectr r!r!r!r"s