o
    ™¨Êh#	  ã                   @   s|   d dl mZmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ e ej¡e ej¡G dd„ deƒƒƒZdS )	é    )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚAlreadyFinalizedÚUnsupportedAlgorithmÚ_Reasons)ÚHMACBackend)ÚhashesÚmacc                   @   s@   e Zd Zddd„Ze d¡Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dS )ÚHMACNc                 C   sd   t |tƒstdtjƒ‚t |tjƒstdƒ‚|| _|| _	|| _
|d u r-| j	 || j¡| _d S || _d S )Nz.Backend object does not implement HMACBackend.z*Expected instance of hashes.HashAlgorithm.)Ú
isinstancer	   r   r   ÚBACKEND_MISSING_INTERFACEr
   ÚHashAlgorithmÚ	TypeErrorÚ
_algorithmÚ_backendÚ_keyÚcreate_hmac_ctxÚ	algorithmÚ_ctx)ÚselfÚkeyr   ÚbackendÚctx© r   úU/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/hmac.pyÚ__init__   s   
þ
zHMAC.__init__r   c                 C   s4   | j d u r	tdƒ‚t|tƒstdƒ‚| j  |¡ d S )NúContext was already finalized.zdata must be bytes.)r   r   r   Úbytesr   Úupdate)r   Údatar   r   r   r    &   s
   

zHMAC.updatec                 C   s.   | j d u r	tdƒ‚t| j| j| j| j  ¡ d�S )Nr   )r   r   )r   r   r   r   r   r   Úcopy)r   r   r   r   r"   -   s   
üz	HMAC.copyc                 C   s&   | j d u r	tdƒ‚| j  ¡ }d | _ |S )Nr   )r   r   Úfinalize)r   Údigestr   r   r   r#   7   s
   

zHMAC.finalizec                 C   s@   t |tƒs	tdƒ‚| jd u rtdƒ‚| jd }| _| |¡ d S )Nzsignature must be bytes.r   )r   r   r   r   r   Úverify)r   Ú	signaturer   r   r   r   r%   >   s   

zHMAC.verify)N)Ú__name__Ú
__module__Ú__qualname__r   r   Úread_only_propertyr   r    r"   r#   r%   r   r   r   r   r      s    


r   N)Ú
__future__r   r   r   Úcryptographyr   Úcryptography.exceptionsr   r   r   Ú'cryptography.hazmat.backends.interfacesr	   Úcryptography.hazmat.primitivesr
   r   Úregister_interfaceÚ
MACContextÚHashContextÚobjectr   r   r   r   r   Ú<module>   s   

