Edit file File name : hmac.cpython-38.pyc Content :U �;rc� � @ s� d Z ddlZddlmZ zddlZW n ek r@ dZdZ Y nX e ej�Z ddlZe dd� ed�D ��Ze dd� ed�D ��ZdZG dd � d �Zddd�Zd d� ZdS )zqHMAC (Keyed-Hashing for Message Authentication) module. Implements the HMAC algorithm as described by RFC 2104. � N)�_compare_digestc c s | ]}|d A V qdS )�\ N� ��.0�xr r �/usr/lib/python3.8/hmac.py� <genexpr> s r � c c s | ]}|d A V qdS )�6 Nr r r r r r s c @ sR e Zd ZdZdZddd�Zedd� �Zd d � Zdd� Z d d� Z dd� Zdd� ZdS )�HMACz~RFC 2104 HMAC class. Also complies with RFC 4231. This supports the API for Cryptographic Hash Functions (PEP 247). �@ N� c sF t |ttf�s tdt|�j ��� s,td��t� �r<� | _n,t � t�rXd� fdd� | _nd� fdd� | _| �� | _ | �� | _ | j j| _t| j d�r�| j j }|dk r�t�d || jf td � | j}nt�d| j td � | j}|| _ t|�|k� r�| �|��� }|�|d�}| j �|�t�� | j �|�t�� |d k �rB| �|� d S )a? Create a new HMAC object. key: bytes or buffer, key for the keyed hash object. msg: bytes or buffer, Initial input for the hash or None. digestmod: A hash name suitable for hashlib.new(). *OR* A hashlib constructor returning a new hash object. *OR* A module supporting PEP 247. Required as of 3.8, despite its position after the optional msg argument. Passing it as a keyword argument is recommended, though not required for legacy API reasons. z,key: expected bytes or bytearray, but got %rz'Missing required parameter 'digestmod'.� c s t �� | �S �N��_hashlib�new��d�� digestmodr r �<lambda>8 r zHMAC.__init__.<locals>.<lambda>c s � � | �S r �r r r r r r : r � block_size� z:block_size of %d seems too small; using our default of %d.� z<No block_size attribute on given digest object; Assuming %d.� N)r )r )� isinstance�bytes� bytearray� TypeError�type�__name__�callable�digest_cons�str�outer�inner�digest_size�hasattrr � _warnings�warn� blocksize�RuntimeWarning�len�digest�ljust�update� translate�trans_5C�trans_36)�self�key�msgr r- r r r �__init__! sJ � �� � z HMAC.__init__c C s d| j j S )Nzhmac-)r( �name)r6 r r r r: Z s z HMAC.namec C s | j �|� dS )z,Feed data from msg into this hashing object.N)r( r2 )r6 r8 r r r r2 ^ s zHMAC.updatec C s: | j �| j �}| j|_| j|_| j�� |_| j�� |_|S )zyReturn a separate copy of this hashing object. An update to this copy won't affect the original object. )� __class__�__new__r% r) r( �copyr'