File: //lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-38.pyc
U
�e�]' � @ s` d dl mZmZmZ d dlmZ d dlmZmZm Z d dl
mZ d dlm
Z
G dd� de�ZdS ) � )�absolute_import�division�print_function)�utils)�InvalidSignature�UnsupportedAlgorithm�_Reasons)�
constant_time)�CBCc @ s@ e Zd Zd
dd�Ze�d�Zdd� Zdd� Zd d
� Z dd� Z
dS )�_CMACContextNc C s� |� |�stdtj��|| _|j| _|| _|jd | _ |d kr�| jj
}|t|�tf }|| j|t�}| jj
�� }| j�|| jjjk� | jj�|| jj
j�}| jj�| j�}| jj
�||t| j�|| jjj�}| j�|dk� || _d S )Nz#This backend does not support CMAC.� � )Zcmac_algorithm_supportedr r ZUNSUPPORTED_CIPHER�_backend�keyZ_key�
_algorithmZ
block_size�_output_lengthZ_cipher_registry�typer
�_lib�CMAC_CTX_new�openssl_assert�_ffiZNULL�gc�
CMAC_CTX_freeZfrom_bufferZ CMAC_Init�len�_ctx) �selfZbackend� algorithm�ctx�registryZadapterZ
evp_cipherZkey_ptr�res� r �K/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/cmac.py�__init__ s2
� �z_CMACContext.__init__r c C s, | j j�| j|t|��}| j �|dk� d S )Nr
)r r ZCMAC_Updater r r )r �datar r r r! �update1 s z_CMACContext.updatec C sd | j j�d| j�}| j j�d| j�}| j j�| j||�}| j �|dk� d | _| j j�|�d d � S )Nzunsigned char[]zsize_t *r
) r r �newr r Z
CMAC_Finalr r �buffer)r ZbufZlengthr r r r! �finalize5 s �z_CMACContext.finalizec C sV | j j�� }| j j�|| j jj�}| j j�|| j�}| j �|dk� t | j | j
|d�S )Nr
)r )r r r r r r Z
CMAC_CTX_copyr r r r )r Z
copied_ctxr r r r! �copyA s � � �z_CMACContext.copyc C s | � � }t�||�std��d S )NzSignature did not match digest.)r'