U
    ÒZjâ  ã                   @   sd   d dl Z d dlmZ d dlmZmZ d dlmZmZ d dl	m
Z
 eedœdd„ZG d	d
„ d
e
ƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashes)ÚKeyDerivationFunction)ÚnÚreturnc                 C   s   | j ddd�S )Né   Úbig)ÚlengthÚ	byteorder)Úto_bytes)r   © r   úm/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyÚ_int_to_u32be   s    r   c                   @   sN   e Zd Zdejeeje ej	dœdd„Z
eedœdd„Zeeddœd	d
„ZdS )ÚX963KDFN)Ú	algorithmr   Ú
sharedinfoÚbackendc                 C   sP   |j d }||kr td |¡ƒ‚|d k	r4t d|¡ || _|| _|| _d| _d S )Nl   ÿÿ z'Cannot derive keys larger than {} bits.r   F)	Údigest_sizeÚ
ValueErrorÚformatr   Ú_check_bytesÚ
_algorithmÚ_lengthÚ_sharedinfoÚ_used)Úselfr   r   r   r   Úmax_lenr   r   r   Ú__init__   s    
ÿzX963KDF.__init__)Úkey_materialr	   c                 C   sª   | j r
t‚d| _ t d|¡ dg}d}d}| j|kr–t | j¡}| |¡ | t	|ƒ¡ | j
d k	rn| | j
¡ | | ¡ ¡ |t|d ƒ7 }|d7 }q*d |¡d | j… S )NTr!   ó    r   é   éÿÿÿÿ)r   r   r   Z_check_bytesliker   r   ZHashr   Úupdater   r   ÚappendÚfinalizeÚlenÚjoin)r   r!   ÚoutputZoutlenÚcounterÚhr   r   r   Úderive*   s"    



zX963KDF.derive)r!   Úexpected_keyr	   c                 C   s   t  |  |¡|¡st‚d S )N)r   Zbytes_eqr-   r   )r   r!   r.   r   r   r   Úverify?   s    zX963KDF.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ZHashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr    r-   r/   r   r   r   r   r      s    ûûr   )r4   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r3   r6   r   r   r   r   r   r   Ú<module>   s   