o
    c                     @   sf   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
 dedef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   Nusr/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py_int_to_u32be   s   r   c                	   @   s\   e Zd Z	ddejdedeje dej	fddZ
ded	efd
dZdeded	dfddZdS )X963KDFN	algorithmr   
sharedinfobackendc                 C   sP   |j d }||krtd||d urt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   Z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rOt| j}|| |t	| | j
d ur7|| j
 ||  |t|d 7 }|d7 }| j|ksd|d | j S )NTr        r      )r   r   r   _check_bytesliker   r   ZHashr   updater   r   appendfinalizelenjoin)r   r    outputZoutlencounterhr   r   r   derive*   s$   




zX963KDF.deriveexpected_keyc                 C   s   t | ||std S N)r   Zbytes_eqr-   r   )r   r    r.   r   r   r   verify?   s   zX963KDF.verifyr/   )__name__
__module____qualname__r   ZHashAlgorithminttypingOptionalbytesAnyr   r-   r0   r   r   r   r   r      s    
r   )r5   cryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r4   r7   r   r   r   r   r   r   <module>   s   