U
    cc                     @   s   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 eedddZejee je dd	d
dZeee jg ejf eedddZG dd deZG dd deZdS )    N)utils)AlreadyFinalized
InvalidKey)constant_timehasheshmac)KeyDerivationFunction)nreturnc                 C   s   | j dddS )N   big)length	byteorder)to_bytes)r	    r   f/var/www/html/project/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32be   s    r   )	algorithmr   	otherinfor
   c                 C   s8   | j d }||kr td||d k	r4td| d S )Nl    z'Cannot derive keys larger than {} bits.r   )digest_size
ValueErrorformatr   _check_bytes)r   r   r   
max_lengthr   r   r   _common_args_checks   s    
r   )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                   @   s^   e Zd Zdejeeje ej	dddZ
ejdddZeedd	d
ZeeddddZdS )ConcatKDFHashN)r   r   r   backendc                 C   s4   t ||| || _|| _|d k	r$|nd| _d| _d S )Nr   F)r   
_algorithm_length
_otherinfo_used)selfr   r   r   r*   r   r   r   __init__;   s
    zConcatKDFHash.__init__r
   c                 C   s   t | jS N)r   Hashr+   r/   r   r   r   _hashI   s    zConcatKDFHash._hashr   r
   c                 C   s$   | j r
td| _ t|| j| j| jS NT)r.   r   r(   r,   r5   r-   r/   r   r   r   r   deriveL   s       zConcatKDFHash.deriver   expected_keyr
   c                 C   s   t | ||std S r2   r   Zbytes_eqr9   r   r/   r   r;   r   r   r   verifyT   s    zConcatKDFHash.verify)N)__name__
__module____qualname__r   HashAlgorithminttypingOptionalbytesAnyr0   r3   r5   r9   r>   r   r   r   r   r)   :   s    r)   c                   @   sf   e Zd Zdejeeje eje ej	dddZ
ejdddZeedd	d
ZeeddddZdS )ConcatKDFHMACN)r   r   saltr   r*   c                 C   st   t ||| || _|| _|d k	r$|nd| _|jd krDtd|j|d krXd|j }nt	d| || _
d| _d S )Nr   z{} is unsupported for ConcatKDF    rI   F)r   r+   r,   r-   
block_size	TypeErrorr   namer   r   _saltr.   )r/   r   r   rI   r   r*   r   r   r   r0   Z   s    

zConcatKDFHMAC.__init__r1   c                 C   s   t | j| jS r2   )r   HMACrN   r+   r4   r   r   r   _hmacu   s    zConcatKDFHMAC._hmacr6   c                 C   s$   | j r
td| _ t|| j| j| jS r7   )r.   r   r(   r,   rP   r-   r8   r   r   r   r9   x   s       zConcatKDFHMAC.deriver:   c                 C   s   t | ||std S r2   r<   r=   r   r   r   r>      s    zConcatKDFHMAC.verify)N)r?   r@   rA   r   rB   rC   rD   rE   rF   rG   r0   r   rO   rP   r9   r>   r   r   r   r   rH   Y   s    rH   )rD   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   rC   rF   r   rB   rE   r   CallableZHashContextr(   r)   rH   r   r   r   r   <module>   s$   