o
    ™¨Êh  ã                   @   sÈ   d dl mZmZm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mZmZ d dlmZ d	d
„ Zdd„ Zdd„ Ze e¡G dd„ deƒƒZe e¡G dd„ deƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚHMACBackend)ÚHashBackend)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                 C   s   t  d| ¡S )Nz>I)ÚstructÚpack)Ún© r   ú^/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.pyÚ_int_to_u32be   s   r   c                 C   sB   | j d }||krtd |¡ƒ‚|d u st|tƒstdƒ‚d S d S )Nl   ÿÿ z)Can not derive keys larger than {0} bits.zotherinfo must be bytes.)Údigest_sizeÚ
ValueErrorÚformatÚ
isinstanceÚbytesÚ	TypeError)Ú	algorithmÚlengthÚ	otherinfoÚ
max_lengthr   r   r   Ú_common_args_checks   s   
ÿÿÿr    c                 C   s�   t | tƒs	tdƒ‚dg}d}d}||kr?|ƒ }| t|ƒ¡ | | ¡ | |¡ | | ¡ ¡ |t|d ƒ7 }|d7 }||ksd |¡d |… S )Nzkey_material must be bytes.ó    r   é   éÿÿÿÿ)	r   r   r   Úupdater   ÚappendÚfinalizeÚlenÚjoin)Úkey_materialr   Úauxfnr   ÚoutputÚoutlenÚcounterÚhr   r   r   Ú_concatkdf_derive"   s   


ù	r/   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚConcatKDFHashc                 C   sT   t |||ƒ || _|| _|| _| jd u rd| _t|tƒs"tdtjƒ‚|| _	d| _
d S )Nr!   z.Backend object does not implement HashBackend.F)r    Ú
_algorithmÚ_lengthÚ
_otherinfor   r   r   r	   ÚBACKEND_MISSING_INTERFACEÚ_backendÚ_used)Úselfr   r   r   Úbackendr   r   r   Ú__init__8   s   

þ
zConcatKDFHash.__init__c                 C   s   t  | j| j¡S ©N)r   ÚHashr2   r6   ©r8   r   r   r   Ú_hashI   s   zConcatKDFHash._hashc                 C   ó$   | j rt‚d| _ t|| j| j| jƒS ©NT)r7   r   r/   r3   r>   r4   ©r8   r)   r   r   r   ÚderiveL   ó   ÿzConcatKDFHash.derivec                 C   ó   t  |  |¡|¡st‚d S r;   ©r   Úbytes_eqrB   r   ©r8   r)   Úexpected_keyr   r   r   ÚverifyS   ó   ÿzConcatKDFHash.verifyN)Ú__name__Ú
__module__Ú__qualname__r:   r>   rB   rI   r   r   r   r   r1   6   s
    r1   c                   @   r0   )
ÚConcatKDFHMACc                 C   s†   t |||ƒ || _|| _|| _| jd u rd| _|d u s$t|tƒs$tdƒ‚|d u r-d|j }|| _t|t	ƒs;t
dtjƒ‚|| _d| _d S )Nr!   zsalt must be bytes.ó    z.Backend object does not implement HMACBackend.F)r    r2   r3   r4   r   r   r   Ú
block_sizeÚ_saltr
   r   r	   r5   r6   r7   )r8   r   r   Úsaltr   r9   r   r   r   r:   Z   s$   


þ
zConcatKDFHMAC.__init__c                 C   s   t  | j| j| j¡S r;   )r   ÚHMACrQ   r2   r6   r=   r   r   r   Ú_hmacq   s   zConcatKDFHMAC._hmacc                 C   r?   r@   )r7   r   r/   r3   rT   r4   rA   r   r   r   rB   t   rC   zConcatKDFHMAC.derivec                 C   rD   r;   rE   rG   r   r   r   rI   {   rJ   zConcatKDFHMAC.verifyN)rK   rL   rM   r:   rT   rB   rI   r   r   r   r   rN   X   s
    rN   )Ú
__future__r   r   r   r   Úcryptographyr   Úcryptography.exceptionsr   r   r   r	   Ú'cryptography.hazmat.backends.interfacesr
   r   Úcryptography.hazmat.primitivesr   r   r   Ú"cryptography.hazmat.primitives.kdfr   r   r    r/   Úregister_interfaceÚobjectr1   rN   r   r   r   r   Ú<module>   s   !