File: //home/arjun/projects/env/lib/python3.10/site-packages/Crypto/Hash/__pycache__/HMAC.cpython-310.pyc
o
wep � @ sr d dl mZmZ d dlmZ d dlmZ d dlmZ d dlm Z d dl
mZ ddgZG d d� de
�Zd
dd�ZdS )� )�bord�tobytes)� unhexlify)�MD5)�BLAKE2s)�strxor)�get_random_bytes�new�HMACc @ sR e Zd ZdZddd�Zdd� Zdd � Zd
d� Zdd
� Zdd� Z dd� Z
dd� ZdS )r
z�An HMAC hash object.
Do not instantiate directly. Use the :func:`new` function.
:ivar digest_size: the size in bytes of the resulting MAC tag
:vartype digest_size: integer
� Nc C s� |d u rt }|d u rd}|j| _|| _t|t�r|�� }z't|�|jkr0|d|jt|� }n|�|�� � }|d|jt|� }W n t
yN td��w t|dt|� �}|�|�| _
| j
�|� t|dt|� �}|�|�| _d S )Nr � zHash type incompatible to HMAC� 6� \)r �digest_size�
_digestmod�
isinstance�
memoryviewr �len�
block_sizer �digest�AttributeError�
ValueErrorr �_inner�update�_outer)�self�key�msg� digestmod�key_0�hash_k�
key_0_ipad�
key_0_opad� r# �I/home/arjun/projects/env/lib/python3.10/site-packages/Crypto/Hash/HMAC.py�__init__6 s,
��z
HMAC.__init__c C s | j �|� | S )z�Authenticate the next chunk of message.
Args:
data (byte string/byte array/memoryview): The next chunk of data
)r r )r r r# r# r$ r _ s zHMAC.updatec C s | j �| j| j||�}|S )z2Carry out the expensive inner loop for PBKDF2-HMAC)r �_pbkdf2_hmac_assistr r )r �first_digest�
iterations�resultr# r# r$ r&