U
    §òcc×  ã                   @   sh   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 G dd„ deƒZG dd	„ d	eƒZdS )
é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKey)Úconstant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc                   @   sf   e Zd Zdejeeje eje ej	dœdd„Z
eedœdd„Zeedœdd	„Zeedd
œdd„ZdS )ÚHKDFN)Ú	algorithmÚlengthÚsaltÚinfoÚbackendc                 C   sB   || _ |d krd| j j }nt d|¡ || _t| j ||ƒ| _d S )Nó    r   )Ú
_algorithmÚdigest_sizer   Ú_check_bytesÚ_saltÚ
HKDFExpandÚ_hkdf_expand)Úselfr
   r   r   r   r   © r   úa/var/www/html/project/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/hkdf.pyÚ__init__   s    zHKDF.__init__©Úkey_materialÚreturnc                 C   s"   t  | j| j¡}| |¡ | ¡ S ©N)r   ÚHMACr   r   ÚupdateÚfinalize)r   r   Úhr   r   r   Ú_extract%   s    
zHKDF._extractc                 C   s   t  d|¡ | j |  |¡¡S )Nr   )r   Ú_check_bytesliker   Úderiver"   ©r   r   r   r   r   r$   *   s    zHKDF.derive©r   Úexpected_keyr   c                 C   s   t  |  |¡|¡st‚d S r   ©r   Zbytes_eqr$   r   ©r   r   r'   r   r   r   Úverify.   s    zHKDF.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ÚHashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr   r"   r$   r*   r   r   r   r   r	      s    úúr	   c                   @   s^   e Zd Zdejeeje ej	dœdd„Z
eedœdd„Zeedœdd	„Zeedd
œdd„ZdS )r   N)r
   r   r   r   c                 C   sV   || _ d|j }||kr&td |¡ƒ‚|| _|d kr:d}nt d|¡ || _d| _d S )Néÿ   z)Cannot derive keys larger than {} octets.ó    r   F)	r   r   Ú
ValueErrorÚformatÚ_lengthr   r   Ú_infoÚ_used)r   r
   r   r   r   Ú
max_lengthr   r   r   r   4   s    
ÿzHKDFExpand.__init__r   c                 C   sˆ   dg}d}| j jt|ƒd  | jk rtt || j ¡}| |d ¡ | | j¡ | t|gƒ¡ | 	| 
¡ ¡ |d7 }q
d |¡d | j… S )Nr5   é   éÿÿÿÿ)r   r   Úlenr8   r   r   r   r9   r2   Úappendr    Újoin)r   r   ÚoutputÚcounterr!   r   r   r   Ú_expandO   s    
zHKDFExpand._expandc                 C   s&   t  d|¡ | jrt‚d| _|  |¡S )Nr   T)r   r#   r:   r   rC   r%   r   r   r   r$   ]   s
    zHKDFExpand.deriver&   c                 C   s   t  |  |¡|¡st‚d S r   r(   r)   r   r   r   r*   e   s    zHKDFExpand.verify)N)r+   r,   r-   r   r.   r/   r0   r1   r2   r3   r   rC   r$   r*   r   r   r   r   r   3   s    ûûr   )r0   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   r   r   Z"cryptography.hazmat.primitives.kdfr   r	   r   r   r   r   r   Ú<module>   s   "