U
    ¶[Öeà  ã                   @   sè   d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dl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„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ÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚHMACBackend)ÚHashBackend)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunction)ÚnÚreturnc                 C   s   t  d| ¡S )Nz>I)ÚstructÚpack)r   © r   ún/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.pyÚ_int_to_u32be   s    r   ©Ú	algorithmÚlengthÚ	otherinfoc                 C   s8   | j d }||kr td |¡ƒ‚|d k	r4t d|¡ d S )Nl   ÿÿ z(Can not 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                   @   sZ   e Zd Zdejeeje 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 )ÚConcatKDFHashNr   c                 C   sX   t |ƒ}t|||ƒ || _|| _|d k	r,|nd| _t|tƒsHtdtj	ƒ‚|| _
d| _d S )Nr!   z.Backend object does not implement HashBackend.F)r   r   Ú
_algorithmÚ_lengthÚ
_otherinfoÚ
isinstancer	   r   r   ÚBACKEND_MISSING_INTERFACEÚ_backendÚ_used)Úselfr   r   r   Úbackendr   r   r   Ú__init__A   s    
þzConcatKDFHash.__init__©r   c                 C   s   t  | j| j¡S ©N)r   ÚHashr.   r3   ©r5   r   r   r   Ú_hashW   s    zConcatKDFHash._hash©r   r   c                 C   s$   | j r
t‚d| _ t|| j| j| jƒS ©NT)r4   r   r,   r/   r<   r0   ©r5   r   r   r   r   ÚderiveZ   s       ÿzConcatKDFHash.derive©r   Úexpected_keyr   c                 C   s   t  |  |¡|¡st‚d S r9   ©r
   Zbytes_eqr@   r   ©r5   r   rB   r   r   r   Úverifyb   s    zConcatKDFHash.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ÚHashAlgorithmÚintÚtypingÚOptionalÚbytesr7   r:   r<   r@   rE   r   r   r   r   r-   @   s    ûür-   c                   @   sb   e Zd Zdejeeje eje 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   c                 C   s˜   t |ƒ}t|||ƒ || _|| _|d k	r,|nd| _|jd krLtd |j¡ƒ‚|d kr`d|j }nt	 
d|¡ || _t|tƒsˆtdtjƒ‚|| _d| _d S )Nr!   z{} is unsupported for ConcatKDFó    rO   z.Backend object does not implement HMACBackend.F)r   r   r.   r/   r0   Ú
block_sizeÚ	TypeErrorr   Únamer   r   Ú_saltr1   r   r   r   r2   r3   r4   )r5   r   r   rO   r   r6   r   r   r   r7   h   s(    

ÿ
þzConcatKDFHMAC.__init__r8   c                 C   s   t  | j| j| j¡S r9   )r   ÚHMACrT   r.   r3   r;   r   r   r   Ú_hmac‹   s    zConcatKDFHMAC._hmacr=   c                 C   s$   | j r
t‚d| _ t|| j| j| jƒS r>   )r4   r   r,   r/   rV   r0   r?   r   r   r   r@   Ž   s       ÿzConcatKDFHMAC.deriverA   c                 C   s   t  |  |¡|¡st‚d S r9   rC   rD   r   r   r   rE   –   s    zConcatKDFHMAC.verify)N)rF   rG   rH   r   rI   rJ   rK   rL   rM   r7   r   rU   rV   r@   rE   r   r   r   r   rN   g   s    úû#rN   )r   rK   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   r	   Zcryptography.hazmat.primitivesr
   r   r   Z"cryptography.hazmat.primitives.kdfr   rJ   rM   r   rI   rL   r   ÚCallableZHashContextr,   r-   rN   r   r   r   r   Ú<module>   s*   ýû'