o
    ™¨ÊhL  ã                   @   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mZ d dlm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)Úconstant_timeÚhmac)ÚKeyDerivationFunctionc                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚHKDFc                 C   sl   t |tƒstdtjƒ‚|| _|d u st |tƒstdƒ‚|d u r%d| jj }|| _	|| _
t| j|||ƒ| _d S )Nú.Backend object does not implement HMACBackend.zsalt must be bytes.ó    )Ú
isinstancer
   r   r	   ÚBACKEND_MISSING_INTERFACEÚ
_algorithmÚbytesÚ	TypeErrorÚdigest_sizeÚ_saltÚ_backendÚ
HKDFExpandÚ_hkdf_expand)ÚselfÚ	algorithmÚlengthÚsaltÚinfoÚbackend© r"   úY/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/hkdf.pyÚ__init__   s   
þzHKDF.__init__c                 C   s(   t j| j| j| jd�}| |¡ | ¡ S )N©r!   )r   ÚHMACr   r   r   ÚupdateÚfinalize)r   Úkey_materialÚhr"   r"   r#   Ú_extract)   s   
zHKDF._extractc                 C   s$   t |tƒs	tdƒ‚| j |  |¡¡S )Núkey_material must be bytes.)r   r   r   r   Úderiver+   ©r   r)   r"   r"   r#   r-   .   s   
zHKDF.derivec                 C   ó   t  |  |¡|¡st‚d S ©N©r   Úbytes_eqr-   r   ©r   r)   Úexpected_keyr"   r"   r#   Úverify4   ó   ÿzHKDF.verifyN)Ú__name__Ú
__module__Ú__qualname__r$   r+   r-   r5   r"   r"   r"   r#   r      s
    r   c                   @   r   )
r   c                 C   s~   t |tƒstdtjƒ‚|| _|| _d|j }||kr!td 	|¡ƒ‚|| _
|d u s1t |tƒs1tdƒ‚|d u r7d}|| _d| _d S )Nr   éÿ   z+Can not derive keys larger than {0} octets.zinfo must be bytes.ó    F)r   r
   r   r	   r   r   r   r   Ú
ValueErrorÚformatÚ_lengthr   r   Ú_infoÚ_used)r   r   r   r    r!   Ú
max_lengthr"   r"   r#   r$   ;   s*   
þ
ÿÿ
zHKDFExpand.__init__c                 C   s¦   dg}d}| j jt|ƒd  | jk rItj|| j | jd�}| |d ¡ | | j¡ | t	 
|¡¡ | | ¡ ¡ |d7 }| j jt|ƒd  | jk sd |¡d | j… S )Nr;   é   r%   éÿÿÿÿ)r   r   Úlenr>   r   r&   r   r'   r?   ÚsixÚint2byteÚappendr(   Újoin)r   r)   ÚoutputÚcounterr*   r"   r"   r#   Ú_expandZ   s   úzHKDFExpand._expandc                 C   s,   t |tƒs	tdƒ‚| jrt‚d| _|  |¡S )Nr,   T)r   r   r   r@   r   rK   r.   r"   r"   r#   r-   h   s   

zHKDFExpand.derivec                 C   r/   r0   r1   r3   r"   r"   r#   r5   r   r6   zHKDFExpand.verifyN)r7   r8   r9   r$   rK   r-   r5   r"   r"   r"   r#   r   9   s
    
r   )Ú
__future__r   r   r   rE   Úcryptographyr   Úcryptography.exceptionsr   r   r   r	   Ú'cryptography.hazmat.backends.interfacesr
   Úcryptography.hazmat.primitivesr   r   Ú"cryptography.hazmat.primitives.kdfr   Úregister_interfaceÚobjectr   r   r"   r"   r"   r#   Ú<module>   s   &