U
    EZhk                     @   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   s/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32be   s    r   )	algorithmr   	otherinfor
   c                 C   s:   | j d }||kr"td| d|d k	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   )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__6   s
    zConcatKDFHash.__init__r
   c                 C   s   t | jS N)r   Hashr*   r.   r   r   r   _hashD   s    zConcatKDFHash._hashr   r
   c                 C   s$   | j r
td| _ t|| j| j| jS NT)r-   r   r'   r+   r4   r,   r.   r   r   r   r   deriveG   s       zConcatKDFHash.deriver   expected_keyr
   c                 C   s   t | ||std S r1   r   Zbytes_eqr8   r   r.   r   r:   r   r   r   verifyO   s    zConcatKDFHash.verify)N)__name__
__module____qualname__r   HashAlgorithminttypingOptionalbytesAnyr/   r2   r4   r8   r=   r   r   r   r   r(   5   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|j d|d krXd|j }ntd| || _	d| _
d S )Nr   z is unsupported for ConcatKDF    rH   F)r   r*   r+   r,   
block_size	TypeErrornamer   r   _saltr-   )r.   r   r   rH   r   r)   r   r   r   r/   U   s    
zConcatKDFHMAC.__init__r0   c                 C   s   t | j| jS r1   )r   HMACrM   r*   r3   r   r   r   _hmacn   s    zConcatKDFHMAC._hmacr5   c                 C   s$   | j r
td| _ t|| j| j| jS r6   )r-   r   r'   r+   rO   r,   r7   r   r   r   r8   q   s       zConcatKDFHMAC.deriver9   c                 C   s   t | ||std S r1   r;   r<   r   r   r   r=   y   s    zConcatKDFHMAC.verify)N)r>   r?   r@   r   rA   rB   rC   rD   rE   rF   r/   r   rN   rO   r8   r=   r   r   r   r   rG   T   s    rG   )rC   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   rB   rE   r   rA   rD   r   CallableZHashContextr'   r(   rG   r   r   r   r   <module>   s$   