B
    ó±ô`Õ  ã               @   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               @   sF   e Zd Zdejeeedœdd„Zeedœdd„Zeeddœ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   ZBACKEND_MISSING_INTERFACEZpbkdf2_hmac_supportedÚformatÚnameZUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterationsÚ_backend)Úselfr   r   r   r   Úbackend© r   úX/home/dcms/DCMS/lib/python3.7/site-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   Z_check_bytesliker   Zderive_pbkdf2_hmacr   r   r   r   )r   r    r   r   r   Úderive2   s    zPBKDF2HMAC.derive)r    Úexpected_keyr!   c             C   s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r"   r	   Zbytes_eqr   )r   r    r#   Zderived_keyr   r   r   Úverify@   s    
zPBKDF2HMAC.verify)N)
Ú__name__Ú
__module__Ú__qualname__r
   ZHashAlgorithmÚintÚbytesr   r"   r$   r   r   r   r   r      s   r   N)Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr	   r
   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   Ú<module>   s   