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   