U
    öƒcS  ã                   @   sN   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ G dd„ dej	ƒZ
dS )é    N)Úutils)ÚAlreadyFinalized)Ú_HMACContext)Úhashesc                   @   s„   e Zd ZU eje ed< deej	ej
dœdd„Zeej	dœdd„ƒZedd	œd
d„Zd dœdd„Zedœdd„Zeddœdd„ZdS )ÚHMACÚ_ctxN)ÚkeyÚ	algorithmÚbackendc                 C   sP   t |tjƒstdƒ‚|| _|| _|d krFddlm} | || j	¡| _
n|| _
d S )Nz*Expected instance of hashes.HashAlgorithm.r   )r
   )Ú
isinstancer   ÚHashAlgorithmÚ	TypeErrorÚ
_algorithmÚ_keyZ,cryptography.hazmat.backends.openssl.backendr
   Zcreate_hmac_ctxr	   r   )Úselfr   r	   r
   ÚctxZossl© r   úBlib/python3.8/site-packages/cryptography/hazmat/primitives/hmac.pyÚ__init__   s    zHMAC.__init__)Úreturnc                 C   s   | j S )N)r   ©r   r   r   r   r	   (   s    zHMAC.algorithm)Údatar   c                 C   s.   | j d krtdƒ‚t d|¡ | j  |¡ d S )NúContext was already finalized.r   )r   r   r   Z_check_byteslikeÚupdate)r   r   r   r   r   r   ,   s    
zHMAC.updatec                 C   s*   | j d krtdƒ‚t| j| j| j  ¡ dS )Nr   )r   )r   r   r   r   r	   Úcopyr   r   r   r   r   2   s    
ýz	HMAC.copyc                 C   s&   | j d krtdƒ‚| j  ¡ }d | _ |S )Nr   )r   r   Úfinalize)r   Zdigestr   r   r   r   ;   s
    

zHMAC.finalize)Ú	signaturer   c                 C   s:   t  d|¡ | jd krtdƒ‚| jd  }| _| |¡ d S )Nr   r   )r   Ú_check_bytesr   r   Úverify)r   r   r   r   r   r   r   B   s
    
zHMAC.verify)NN)Ú__name__Ú
__module__Ú__qualname__ÚtypingZOptionalr   Ú__annotations__Úbytesr   r   ZAnyr   Úpropertyr	   r   r   r   r   r   r   r   r   r      s   
  ûü	r   )r"   Zcryptographyr   Zcryptography.exceptionsr   Z)cryptography.hazmat.backends.openssl.hmacr   Zcryptography.hazmat.primitivesr   ZHashContextr   r   r   r   r   Ú<module>   s
   