U
    çe¨](  ã                   @   sz   d dl mZmZm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 e e¡G dd„ deƒƒZd	S )
é    )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚPBKDF2HMACBackend)Úconstant_time)ÚKeyDerivationFunctionc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
PBKDF2HMACc                 C   sh   t |tƒstdtjƒ‚| |¡s4td |j¡tjƒ‚d| _	|| _
|| _t d|¡ || _|| _|| _d S )Nz4Backend object does not implement PBKDF2HMACBackend.z/{} is not supported for PBKDF2 by this backend.FÚsalt)Ú
isinstancer
   r   r	   ZBACKEND_MISSING_INTERFACEZpbkdf2_hmac_supportedÚformatÚnameZUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterationsÚ_backend)ÚselfÚ	algorithmZlengthr   Z
iterationsZbackend© r   úK/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/pbkdf2.pyÚ__init__   s&    
þ
ÿýzPBKDF2HMAC.__init__c                 C   s<   | j rtdƒ‚d| _ t d|¡ | j | j| j| j| j	|¡S )Nz'PBKDF2 instances can only be used once.TÚkey_material)
r   r   r   Z_check_bytesliker   Zderive_pbkdf2_hmacr   r   r   r   )r   r   r   r   r   Úderive'   s    ûzPBKDF2HMAC.derivec                 C   s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r   r   Zbytes_eqr   )r   r   Zexpected_keyZderived_keyr   r   r   Úverify5   s    
zPBKDF2HMAC.verifyN)Ú__name__Ú
__module__Ú__qualname__r   r   r    r   r   r   r   r      s   r   N)Z
__future__r   r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   r	   Z'cryptography.hazmat.backends.interfacesr
   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr   Zregister_interfaceÚobjectr   r   r   r   r   Ú<module>   s   