U
    ςd                     @  s\   d dl mZ d dlZd dlmZ d dlmZ d dlmZ ej	rJd dl
mZ G dd dZdS )	    )annotationsN)utils)AlreadyFinalized)ciphers)_CMACContextc                   @  sp   e Zd ZU ded< ded< ddddddd	d
ZdddddZddddZdddddZd dddZdS )CMACztyping.Optional[_CMACContext]_ctxzciphers.BlockCipherAlgorithm
_algorithmNz
typing.AnyNone)	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   ZBlockCipherAlgorithm	TypeErrorr	   Z,cryptography.hazmat.backends.openssl.backendr   Zcreate_cmac_ctxr   )selfr   r   r   Zossl r   `/var/www/html/myproject/myenv/lib/python3.8/site-packages/cryptography/hazmat/primitives/cmac.py__init__   s    zCMAC.__init__bytes)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   6   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____annotations__r   r   r   r   r   r   r   r   r   r      s   
  r   )
__future__r   typingZcryptographyr   Zcryptography.exceptionsr   Zcryptography.hazmat.primitivesr   TYPE_CHECKINGZ)cryptography.hazmat.backends.openssl.cmacr   r   r   r   r   r   <module>   s   