U
    ÒZj¼  ã                   @   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   úo/var/www/html/TRUCKING_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$   üû