a
    ϏPff                     @  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	d
dZdddddddZddddd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intbytes)nreturnc                 C  s   | j dddS )N   big)length	byteorder)to_bytes)r    r   m/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32be   s    r   hashes.HashAlgorithmbytes | NoneNone)	algorithmr   	otherinfor   c                 C  s:   | j d }||kr"td| d|d ur6td| 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   z'typing.Callable[[], hashes.HashContext])key_materialr   auxfnr   r   c                 C  s   t d|  dg}d}d}||krr| }|t| ||  || ||  |t|d 7 }|d7 }q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                   @  sR   e Zd ZddddddddZd	d
ddZdddddZddddddZdS )ConcatKDFHashNr   r
   r   
typing.Any)r   r   r   backendc                 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__zhashes.Hashr   c                 C  s   t | jS N)r   ZHashr1   r5   r   r   r   _hashE   s    zConcatKDFHash._hashr   r    r   c                 C  s$   | j r
td| _ t|| j| j| jS NT)r4   r   r-   r2   r:   r3   r5   r    r   r   r   deriveH   s    zConcatKDFHash.deriver   r    expected_keyr   c                 C  s   t | ||std S r8   r   Zbytes_eqr>   r   r5   r    r@   r   r   r   verifyP   s    zConcatKDFHash.verify)N)__name__
__module____qualname__r6   r:   r>   rC   r   r   r   r   r.   6   s
    r.   c                   @  sT   e Zd ZdddddddddZd	d
ddZdddddZddddddZdS )ConcatKDFHMACNr   r
   r   r/   )r   r   saltr   r0   c                 C  st   t ||| || _|| _|d ur$|nd| _|jd u rDt|j d|d u rXd|j }ntd| || _	d| _
d S )Nr"   z is unsupported for ConcatKDF    rH   F)r   r1   r2   r3   
block_size	TypeErrornamer   r   _saltr4   )r5   r   r   rH   r   r0   r   r   r   r6   V   s    
zConcatKDFHMAC.__init__z	hmac.HMACr7   c                 C  s   t | j| jS r8   )r   HMACrM   r1   r9   r   r   r   _hmaco   s    zConcatKDFHMAC._hmacr   r;   c                 C  s$   | j r
td| _ t|| j| j| jS r<   )r4   r   r-   r2   rO   r3   r=   r   r   r   r>   r   s    zConcatKDFHMAC.deriver   r?   c                 C  s   t | ||std S r8   rA   rB   r   r   r   rC   z   s    zConcatKDFHMAC.verify)N)rD   rE   rF   r6   rO   r>   rC   r   r   r   r   rG   U   s
    rG   )
__future__r   typingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr	   r   r   r-   r.   rG   r   r   r   r   <module>   s   