U
    öEZhð  ã                   @   s\   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	m
Z
 d dlmZ G dd„ deƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                   @   sJ   e Zd Zdejeeeejdœdd„Z	eedœdd„Z
eeddœd	d
„ZdS )Ú
PBKDF2HMACN)Ú	algorithmÚlengthÚsaltÚ
iterationsÚbackendc                 C   sX   ddl m} | |¡s*td |j¡tjƒ‚d| _|| _	|| _
t d|¡ || _|| _d S )Nr   ©r   z/{} is not supported for PBKDF2 by this backend.Fr   )Ú,cryptography.hazmat.backends.openssl.backendr   Zpbkdf2_hmac_supportedr   ÚformatÚnamer   ZUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterations)Úselfr   r   r   r   r   Zossl© r   úp/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.pyÚ__init__   s    
ÿüzPBKDF2HMAC.__init__)Úkey_materialÚreturnc                 C   sF   | j rtdƒ‚d| _ t d|¡ ddlm} | | j| j| j	| j
|¡S )Nz'PBKDF2 instances can only be used once.Tr   r   r   )r   r   r   Z_check_bytesliker   r   Zderive_pbkdf2_hmacr   r   r   r   )r   r   r   r   r   r   Úderive.   s    ûzPBKDF2HMAC.derive)r   Úexpected_keyr   c                 C   s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r    r   Zbytes_eqr   )r   r   r!   Zderived_keyr   r   r   Úverify>   s    
zPBKDF2HMAC.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ZHashAlgorithmÚintÚbytesÚtypingÚAnyr   r    r"   r   r   r   r   r
      s    úúr
   )r(   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr	   r
   r   r   r   r   Ú<module>   s
   