a bS@sNddlZddlmZddlmZddlmZddlmZGdddej Z dS)N)utils)AlreadyFinalized) _HMACContext)hashesc@seZdZUejeed<deej ej dddZ e ej dddZ edd d d Zddd d ZedddZeddddZdS)HMAC_ctxN)key algorithmbackendcCsPt|tjstd||_||_|durFddlm}|||j |_ n||_ dS)Nz*Expected instance of hashes.HashAlgorithm.r)r ) isinstancer HashAlgorithm TypeError _algorithm_keyZ,cryptography.hazmat.backends.openssl.backendr Zcreate_hmac_ctxr r)selfrr r ctxZosslrJ/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/hmac.py__init__s  z HMAC.__init__)returncCs|jS)N)rrrrrr (szHMAC.algorithm)datarcCs.|jdurtdtd||j|dS)NContext was already finalized.r)rrrZ_check_byteslikeupdate)rrrrrr,s  z HMAC.updatecCs*|jdurtdt|j|j|jdS)Nr)r)rrrrr copyrrrrr2s z HMAC.copycCs&|jdurtd|j}d|_|S)Nr)rrfinalize)rdigestrrrr;s   z HMAC.finalize) signaturercCs:td||jdurtd|jd}|_||dS)Nrr)r _check_bytesrrverify)rrrrrrrBs   z HMAC.verify)NN)__name__ __module__ __qualname__typingOptionalr__annotations__bytesrr Anyrpropertyr rrrrrrrrrs   r) r#Z cryptographyrZcryptography.exceptionsrZ)cryptography.hazmat.backends.openssl.hmacrZcryptography.hazmat.primitivesrZ HashContextrrrrrs