o
    Vh                     @  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   ~/var/www/html/construction_image-detection-poc/venv/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   _check_bytesliker    r   Hashr   updater   r!   appendfinalizelenjoin)r#   r&   outputoutlencounterhr   r   r   derive&   s$   




zX963KDF.deriveexpected_keyNonec                 C  s   t | ||std S N)r   bytes_eqr5   r   )r#   r&   r6   r   r   r   verify;   s   zX963KDF.verifyr8   )r   r   r   r
   r   r   r   r   )r&   r   r   r   )r&   r   r6   r   r   r7   )__name__
__module____qualname__r%   r5   r:   r   r   r   r   r      s
    
r   )r	   r
   r   r   )
__future__r   typingcryptographyr   cryptography.exceptionsr   r   cryptography.hazmat.primitivesr   r   "cryptography.hazmat.primitives.kdfr   r   r   r   r   r   r   <module>   s   
