o )%au @sFddlmZddlmZmZmZddlmZmZGdddej Z dS))utils)InvalidSignatureUnsupportedAlgorithm_Reasons) constant_timehashesc@sjeZdZ ddedejfddZedZ ddd Z d eddfd d Z defd dZ deddfddZ dS) _HMACContextNkey algorithmcCs||_||_|dur\|jj}|j||jjjk|jj||jjj}|j |}||jjjkr=t 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_free_evp_md_from_algorithmrformatnamerUNSUPPORTED_HASH from_buffer HMAC_Init_exlen_ctx_key)selfbackendr r ctxevp_mdkey_ptrresr#K/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/hmac.py__init__s*   z_HMACContext.__init__r returncCsp|jj}|j||jjjk|jj||jjj}|jj||j }|j|dkt |j|j |j |dS)Nr)r) r r rrrrrr HMAC_CTX_copyrrrr )r copied_ctxr"r#r#r$copy-s  z_HMACContext.copydatacCs:|jj|}|jj|j|t|}|j|dkdS)Nr)r rrr HMAC_Updaterrr)rr*data_ptrr"r#r#r$update9sz_HMACContext.updatecCsz|jjd|jjj}|jjd}|jj|j||}|j|dk|j|d|jj k|jj |d|dS)Nzunsigned char[]zunsigned int *r) r rnewr EVP_MAX_MD_SIZE HMAC_Finalrrr digest_sizebuffer)rbufoutlenr"r#r#r$finalize>s z_HMACContext.finalize signaturecCs |}t||stddS)NzSignature did not match digest.)r5rbytes_eqr)rr6digestr#r#r$verifyHs z_HMACContext.verify)N)r&r)__name__ __module__ __qualname__bytesr HashAlgorithmr%rread_only_propertyr r)r-r5r9r#r#r#r$rs    rN) cryptographyrcryptography.exceptionsrrrcryptography.hazmat.primitivesrr HashContextrr#r#r#r$s