o
    ™¨Êh¡  ã                   @   sº   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ G d	d
„ d
eƒZG dd„ deƒZe	 e¡G dd„ deƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_function)ÚEnum)Úrange)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚHMACBackend)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                   @   s   e Zd ZdZdS )ÚModeÚctrN)Ú__name__Ú
__module__Ú__qualname__ÚCounterMode© r   r   úZ/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr      s    r   c                   @   s   e Zd ZdZdZdS )ÚCounterLocationÚbefore_fixedÚafter_fixedN)r   r   r   ÚBeforeFixedÚ
AfterFixedr   r   r   r   r      s    r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	KBKDFHMACc                 C   sB  t |
tƒstdtjƒ‚t |tjƒstdtjƒ‚|
 |¡s"tdtjƒ‚t |t	ƒs+t
dƒ‚t |tƒs4t
dƒ‚|s8|r>|	r>tdƒ‚|d u sG|  |¡sKtdƒ‚|d u rW|	d u rWtdƒ‚|d urdt |tƒsdt
d	ƒ‚|d u rjd
}|d u rpd
}t |tƒrzt |tƒs~t
dƒ‚|| _|| _|| _|| _|| _|| _|| _|| _|
| _d| _|	| _d S )Nz.Backend object does not implement HMACBackend.z5Algorithm supplied is not a supported hash algorithm.z5Algorithm supplied is not a supported hmac algorithm.zmode must be of type Modez(location must be of type CounterLocationz9When supplying fixed data, label and context are ignored.zrlen must be between 1 and 4zPlease specify an llenzllen must be an integeró    z'label and context must be of type bytesF)Ú
isinstancer   r
   r   ÚBACKEND_MISSING_INTERFACEr   ÚHashAlgorithmÚUNSUPPORTED_HASHÚhmac_supportedr   Ú	TypeErrorr   Ú
ValueErrorÚ_valid_byte_lengthÚintÚbytesÚ
_algorithmÚ_modeÚ_lengthÚ_rlenÚ_llenÚ	_locationÚ_labelÚ_contextÚ_backendÚ_usedÚ_fixed_data)ÚselfÚ	algorithmÚmodeÚlengthÚrlenÚllenÚlocationÚlabelÚcontextÚfixedÚbackendr   r   r   Ú__init__   s\   
þþ
þ


ÿ
zKBKDFHMAC.__init__c                 C   sB   t |tƒs	tdƒ‚t d|¡}dt|ƒ  krdksdS  dS dS )Nzvalue must be of type inté   é   FT)r    r(   r%   r   Úint_to_bytesÚlen)r5   ÚvalueÚ	value_binr   r   r   r'   \   s   
ÿzKBKDFHMAC._valid_byte_lengthc                 C   sü   | j rt‚t|tƒstdƒ‚d| _ | j | jj  }dg}t 	d| j
¡}|tdt|ƒd ƒd kr5tdƒ‚td|d ƒD ]7}tj|| j| jd�}t 	|| j
¡}| jtjkrZ| |¡ | |  ¡ ¡ | jtjkrl| |¡ | | ¡ ¡ q<d |¡d | j… S )	Nzkey_material must be bytesTr   rA   é   é   zThere are too many iterations.)r?   )r3   r   r    r)   r%   r,   r*   Údigest_sizer   rC   r-   ÚpowrD   r&   r   r   ÚHMACr2   r/   r   r   ÚupdateÚ_generate_fixed_inputr   ÚappendÚfinalizeÚjoin)r5   Úkey_materialÚroundsÚoutputÚr_binÚiÚhÚcounterr   r   r   Úderivee   s(   


zKBKDFHMAC.derivec                 C   sB   | j rt| j tƒr| j S t | jd | j¡}d | jd| j	|g¡S )NrH   r   ó    )
r4   r    r)   r   rC   r,   r.   rP   r0   r1   )r5   Úl_valr   r   r   rM   Š   s   zKBKDFHMAC._generate_fixed_inputc                 C   s   t  |  |¡|¡st‚d S )N)r   Úbytes_eqrX   r	   )r5   rQ   Úexpected_keyr   r   r   Úverify’   s   ÿzKBKDFHMAC.verifyN)r   r   r   r@   r'   rX   rM   r]   r   r   r   r   r      s    =	%r   N)Ú
__future__r   r   r   Úenumr   Ú	six.movesr   Úcryptographyr   Úcryptography.exceptionsr   r	   r
   r   Ú'cryptography.hazmat.backends.interfacesr   Úcryptography.hazmat.primitivesr   r   r   Ú"cryptography.hazmat.primitives.kdfr   r   r   Úregister_interfaceÚobjectr   r   r   r   r   Ú<module>   s   