U
    EZh                     @   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   q/home/aprabhat/apps/x.techxrdev.in/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   sR   |j d }||kr"td| d|d k	r6td| || _|| _|| _d| _d S )Nl    zCannot derive keys larger than z bits.r   F)digest_size
ValueErrorr   _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   )r3   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r2   r5   r   r   r   r   r   r   <module>   s   