U
    cc                     @   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   d/var/www/html/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rt| 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   