B
    .¸h(  ã               @   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	   ÚBACKEND_MISSING_INTERFACEÚpbkdf2_hmac_supportedÚformatÚnameÚUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterationsÚ_backend)ÚselfÚ	algorithmÚlengthr   Ú
iterationsÚbackend© r!   úfC:\Users\sanjo\AppData\Local\Qlobot\Launcher\ext_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   Ú_check_bytesliker   Ú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$   Ú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)Ú
__future__r   r   r   Úcryptographyr   Úcryptography.exceptionsr   r   r   r	   Ú'cryptography.hazmat.backends.interfacesr
   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr   Úregister_interfaceÚobjectr   r!   r!   r!   r"   Ú<module>   s   