U
    *”}f¬  ã                   @   s†   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 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)Ú_get_backend)ÚPBKDF2HMACBackend)Úconstant_time)ÚKeyDerivationFunctionc                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	Ú
PBKDF2HMACNc                 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.FÚsalt)r
   Ú
isinstancer   r   r	   ZBACKEND_MISSING_INTERFACEZpbkdf2_hmac_supportedÚformatÚnameZUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterationsÚ_backend)ÚselfÚ	algorithmÚlengthr   Z
iterationsÚbackend© r   úM/tmp/pip-unpacked-wheel-x36vw73o/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   Úverify;   s    
zPBKDF2HMAC.verify)N)Ú__name__Ú
__module__Ú__qualname__r    r"   r#   r   r   r   r   r      s   
r   N)Ú
__future__r   r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   r	   Zcryptography.hazmat.backendsr
   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr   Zregister_interfaceÚobjectr   r   r   r   r   Ú<module>   s   