o
    �)%aÕ  ã                   @   sl   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 d dlmZ G dd„ deƒZd	S )
é    )Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚPBKDF2HMACBackend)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                	   @   sT   e Zd Z	ddejdededefdd„Zded	efd
d„Zdeded	dfdd„Z	dS )Ú
PBKDF2HMACNÚ	algorithmÚlengthÚsaltÚ
iterationsc                 C   sp   t |ƒ}t|tƒstdtjƒ‚| |¡std |j¡tj	ƒ‚d| _
|| _|| _t d|¡ || _|| _|| _d S )Nz4Backend object does not implement PBKDF2HMACBackend.z/{} is not supported for PBKDF2 by this backend.Fr   )r   Ú
isinstancer   r   r   ÚBACKEND_MISSING_INTERFACEÚpbkdf2_hmac_supportedÚformatÚnameÚUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterationsÚ_backend)Úselfr   r   r   r   Úbackend© r    úK/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/pbkdf2.pyÚ__init__   s(   
þ
ÿü
zPBKDF2HMAC.__init__Úkey_materialÚreturnc                 C   s<   | j rtdƒ‚d| _ t d|¡ | j | j| j| j| j	|¡S )Nz'PBKDF2 instances can only be used once.Tr#   )
r   r   r   Ú_check_bytesliker   Úderive_pbkdf2_hmacr   r   r   r   )r   r#   r    r    r!   Úderive2   s   ûzPBKDF2HMAC.deriveÚexpected_keyc                 C   s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r'   r	   Úbytes_eqr   )r   r#   r(   Úderived_keyr    r    r!   Úverify@   s   
ÿzPBKDF2HMAC.verify)N)
Ú__name__Ú
__module__Ú__qualname__r
   ÚHashAlgorithmÚintÚbytesr"   r'   r+   r    r    r    r!   r      s    úþýü
ûr   N)Úcryptographyr   Úcryptography.exceptionsr   r   r   r   Úcryptography.hazmat.backendsr   Ú'cryptography.hazmat.backends.interfacesr   Úcryptography.hazmat.primitivesr	   r
   Ú"cryptography.hazmat.primitives.kdfr   r   r    r    r    r!   Ú<module>   s   