o
    CZhf                     @  s   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
mZ d dlmZ dddZdddZd ddZG dd deZG dd deZdS )!    )annotationsN)utils)AlreadyFinalized
InvalidKey)constant_timehasheshmac)KeyDerivationFunctionnintreturnbytesc                 C  s   | j dddS )N   big)length	byteorder)to_bytes)r
    r   c/var/www/html/lang_env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32be   s   r   	algorithmhashes.HashAlgorithmr   	otherinfobytes | NoneNonec                 C  s>   | j d }||krtd| d|d urtd| d S d S )Nl    zCannot derive keys larger than z bits.r   )digest_size
ValueErrorr   _check_bytes)r   r   r   
max_lengthr   r   r   _common_args_checks   s   
r   key_materialauxfn'typing.Callable[[], hashes.HashContext]c                 C  s   t d|  dg}d}d}||kr<| }|t| ||  || ||  |t|d 7 }|d7 }||ksd|d | S )Nr        r      )r   Z_check_byteslikeupdater   appendfinalizelenjoin)r    r   r!   r   outputZoutlencounterhr   r   r   _concatkdf_derive   s   

	r.   c                   @  s8   e Zd Z	ddd
dZdddZdddZdddZdS )ConcatKDFHashNr   r   r   r   r   r   backend
typing.Anyc                 C  s4   t ||| || _|| _|d ur|nd| _d| _d S )Nr#   F)r   
_algorithm_length
_otherinfo_used)selfr   r   r   r0   r   r   r   __init__7   s
   
zConcatKDFHash.__init__r   hashes.Hashc                 C  s   t | jS N)r   ZHashr2   r6   r   r   r   _hashE   s   zConcatKDFHash._hashr    r   c                 C  $   | j rtd| _ t|| j| j| jS NT)r5   r   r.   r3   r;   r4   r6   r    r   r   r   deriveH      zConcatKDFHash.deriveexpected_keyr   c                 C     t | ||std S r9   r   Zbytes_eqr?   r   r6   r    rA   r   r   r   verifyP      zConcatKDFHash.verifyr9   )r   r   r   r   r   r   r0   r1   )r   r8   r    r   r   r   r    r   rA   r   r   r   )__name__
__module____qualname__r7   r;   r?   rE   r   r   r   r   r/   6   s    

r/   c                   @  s8   e Zd Z	ddddZdddZdddZdddZdS )ConcatKDFHMACNr   r   r   r   saltr   r   r0   r1   c                 C  st   t ||| || _|| _|d ur|nd| _|jd u r"t|j d|d u r,d|j }ntd| || _	d| _
d S )Nr#   z is unsupported for ConcatKDF    rM   F)r   r2   r3   r4   
block_size	TypeErrornamer   r   _saltr5   )r6   r   r   rM   r   r0   r   r   r   r7   V   s   

zConcatKDFHMAC.__init__r   	hmac.HMACc                 C  s   t | j| jS r9   )r   HMACrR   r2   r:   r   r   r   _hmaco   s   zConcatKDFHMAC._hmacr    r   c                 C  r<   r=   )r5   r   r.   r3   rU   r4   r>   r   r   r   r?   r   r@   zConcatKDFHMAC.deriverA   r   c                 C  rB   r9   rC   rD   r   r   r   rE   z   rF   zConcatKDFHMAC.verifyr9   )
r   r   r   r   rM   r   r   r   r0   r1   )r   rS   rG   rH   )rI   rJ   rK   r7   rU   r?   rE   r   r   r   r   rL   U   s    

rL   )r
   r   r   r   )r   r   r   r   r   r   r   r   )
r    r   r   r   r!   r"   r   r   r   r   )
__future__r   typingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr	   r   r   r.   r/   rL   r   r   r   r   <module>   s   


