File: //lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__pycache__/hmac.cpython-38.pyc
U
�e�]� � @ sd d dl mZmZmZ d dlmZ d dlmZmZm Z d dl
mZmZ e�
ej�G dd� de��ZdS )� )�absolute_import�division�print_function)�utils)�InvalidSignature�UnsupportedAlgorithm�_Reasons)�
constant_time�hashesc @ s@ e Zd Zd
dd�Ze�d�Zdd� Zdd� Zd d
� Z dd� Z
dS )�_HMACContextNc C s� || _ || _|d kr�| jj�� }| j�|| jjjk� | jj�|| jjj�}| j� |�}|| jjjkrzt
d�|j�t
j��| jj�|�}| jj�||t|�|| jjj�}| j�|dk� || _|| _d S )Nz*{} is not a supported hash on this backendr )�
_algorithm�_backend�_lib�Cryptography_HMAC_CTX_new�openssl_assert�_ffi�NULL�gc�Cryptography_HMAC_CTX_freeZ_evp_md_from_algorithmr �format�namer ZUNSUPPORTED_HASH�from_bufferZHMAC_Init_ex�len�_ctx�_key)�selfZbackend�key� algorithm�ctxZevp_mdZkey_ptr�res� r �K/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/hmac.py�__init__ s8 ��� �z_HMACContext.__init__r c C sp | j j�� }| j �|| j jjk� | j j�|| j jj�}| j j�|| j �}| j �|dk� t
| j | j| j|d�S )Nr )r )
r
r r r r r r r Z
HMAC_CTX_copyr r r r )r Z
copied_ctxr r r r! �copy- s � �z_HMACContext.copyc C s: | j j�|�}| j j�| j|t|��}| j �|dk� d S )Nr )r
r r r ZHMAC_Updater r r )r �dataZdata_ptrr r r r! �update9 s z_HMACContext.updatec C sz | j j�d| j jj�}| j j�d�}| j j�| j||�}| j �|dk� | j �|d | jj k� | j j�
|�d |d � S )Nzunsigned char[]zunsigned int *r )r
r �newr ZEVP_MAX_MD_SIZEZ
HMAC_Finalr r r Zdigest_size�buffer)r ZbufZoutlenr r r r! �finalize>