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   W/opt/certbot/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   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   Hashr   updater   r   appendfinalizelenjoin)r   r!   outputoutlencounterhr   r   r   derive'   s$   




zX963KDF.deriveexpected_keyc                 C   s   t | ||std S N)r   bytes_eqr0   r   )r   r!   r1   r   r   r   verify<   s   zX963KDF.verifyr2   )__name__
__module____qualname__r   HashAlgorithminttypingOptionalbytesAnyr    r0   r4   r   r   r   r   r      s    
r   )r:   cryptographyr   cryptography.exceptionsr   r   cryptography.hazmat.primitivesr   r   "cryptography.hazmat.primitives.kdfr   r9   r<   r   r   r   r   r   r   <module>   s   