U
    EZh                     @   sP   d dl Z d dlmZ d dlmZ d dlmZ e jr>d dlm	Z	 G dd dZ
dS )    N)utils)AlreadyFinalized)ciphers)_CMACContextc                   @   s   e Zd ZU ejd ed< ejed< dejejejd ddddZ	e
ddd	d
Ze
dddZe
ddddZd dddZdS )CMACr   _ctx
_algorithmN)	algorithmbackendctxreturnc                 C   sH   t |tjstd|| _|d kr>ddlm} || j| _n|| _d S )Nz*Expected instance of BlockCipherAlgorithm.r   )r
   )	
isinstancer   BlockCipherAlgorithm	TypeErrorr   Z,cryptography.hazmat.backends.openssl.backendr
   Zcreate_cmac_ctxr   )selfr	   r
   r   Zossl r   j/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/cmac.py__init__   s    zCMAC.__init__)datar   c                 C   s.   | j d krtdtd| | j | d S )NContext was already finalized.r   )r   r   r   _check_bytesupdate)r   r   r   r   r   r   '   s    
zCMAC.update)r   c                 C   s&   | j d krtd| j  }d | _ |S )Nr   )r   r   finalize)r   digestr   r   r   r   .   s
    

zCMAC.finalize)	signaturer   c                 C   s:   t d| | jd krtd| jd  }| _|| d S )Nr   r   )r   r   r   r   verify)r   r   r   r   r   r   r   5   s
    
zCMAC.verifyc                 C   s&   | j d krtdt| j| j  dS )Nr   )r   )r   r   r   r   copy)r   r   r   r   r   =   s    
z	CMAC.copy)NN)__name__
__module____qualname__typingOptional__annotations__r   r   Anyr   bytesr   r   r   r   r   r   r   r   r      s   

  r   )r    Zcryptographyr   Zcryptography.exceptionsr   Zcryptography.hazmat.primitivesr   TYPE_CHECKINGZ)cryptography.hazmat.backends.openssl.cmacr   r   r   r   r   r   <module>   s   