U q` @sZddlmZddlmZmZmZddlmZddlm Z ddl m Z Gddde j Z dS) )utils)AlreadyFinalizedUnsupportedAlgorithm_Reasons) _get_backend) HMACBackend)hashesc@sfeZdZdeejdddZedZ eddddZ dd d d Z ed d d Z eddddZ dS)HMACN)key algorithmcCsjt|}t|tstdtjt|tjs2td||_ ||_ ||_ |dkr`|j ||j |_n||_dS)Nz.Backend object does not implement HMACBackend.z*Expected instance of hashes.HashAlgorithm.)r isinstancerrrZBACKEND_MISSING_INTERFACEr HashAlgorithm TypeError _algorithm_backend_keyZcreate_hmac_ctxr _ctx)selfr r backendctxrJ/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/primitives/hmac.py__init__s  z HMAC.__init__r)datareturncCs.|jdkrtdtd||j|dS)NContext was already finalized.r)rrrZ_check_byteslikeupdate)rrrrrr-s  z HMAC.update)rcCs.|jdkrtdt|j|j|j|jdS)Nr)rr)rrr rr rcopy)rrrrr3s z HMAC.copycCs&|jdkrtd|j}d|_|S)Nr)rrfinalize)rdigestrrrr=s   z HMAC.finalize) signaturercCs:td||jdkrtd|jd}|_||dS)Nr r)r _check_bytesrrverify)rr rrrrr"Ds   z HMAC.verify)NN)__name__ __module__ __qualname__bytesrr rrZread_only_propertyr rrrr"rrrrr s   r N)Z cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.backendsrZ'cryptography.hazmat.backends.interfacesrZcryptography.hazmat.primitivesrZ HashContextr rrrrs