3 ꅭh��@s|ddlmZmZmZddlmZddlmZmZm Z ddl m Z ddl m Z ddlmZmZejej�Gdd�de��Zd S) �)�absolute_import�division�print_function)�utils)�AlreadyFinalized�UnsupportedAlgorithm�_Reasons)� _get_backend)� CMACBackend)�ciphers�macc@s6eZdZd dd�Zdd�Zdd�Zdd �Zd d �ZdS) �CMACNcCsbt|�}t|t�stdtj��t|tj�s2td��||_ ||_ |dkrX|j j |j �|_ n||_ dS)Nz.Backend object does not implement CMACBackend.z*Expected instance of BlockCipherAlgorithm.) r � isinstancer rrZBACKEND_MISSING_INTERFACEr ZBlockCipherAlgorithm� TypeError� _algorithm�_backendZcreate_cmac_ctx�_ctx)�self� algorithm�backend�ctx�r�/usr/lib64/python3.6/cmac.py�__init__s  z CMAC.__init__cCs.|jdkrtd��tjd|�|jj|�dS)NzContext was already finalized.�data)rrr� _check_bytes�update)rrrrrr&s  z CMAC.updatecCs&|jdkrtd��|jj�}d|_|S)NzContext was already finalized.)rr�finalize)rZdigestrrrr-s   z CMAC.finalizecCs:tjd|�|jdkrtd��|jd}|_|j|�dS)N� signaturezContext was already finalized.)rrrr�verify)rrrrrrr4s   z CMAC.verifycCs*|jdkrtd��t|j|j|jj�d�S)NzContext was already finalized.)rr)rrr rr�copy)rrrrr <s z CMAC.copy)NN)�__name__� __module__� __qualname__rrrrr rrrrr s  r N)Z __future__rrrZ cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesr r Zregister_interfaceZ MACContext�objectr rrrr�s