o
    CZh                     @  sj   d dl mZ 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ddZG dd deZdS )    )annotationsN)utils)AlreadyFinalized
InvalidKey)constant_timehashes)KeyDerivationFunctionnintreturnbytesc                 C  s   | j dddS )N   big)length	byteorder)to_bytes)r	    r   a/var/www/html/lang_env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py_int_to_u32be   s   r   c                   @  s.   e Zd Z	ddd
dZdddZdddZdS )X963KDFN	algorithmhashes.HashAlgorithmr   r
   
sharedinfobytes | Nonebackend
typing.Anyc                 C  sR   |j d }||krtd| d|d urt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   r   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   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expected_keyNonec                 C  s   t | ||std S N)r   Zbytes_eqr2   r   )r#   r&   r3   r   r   r   verify;   s   zX963KDF.verifyr5   )r   r   r   r
   r   r   r   r   )r&   r   r   r   )r&   r   r3   r   r   r4   )__name__
__module____qualname__r%   r2   r6   r   r   r   r   r      s
    
r   )r	   r
   r   r   )
__future__r   typingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   r   <module>   s   
