3
ãdeð  ã               @   s\   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	m
Z
 d dlmZ G dd„ deƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc               @   sJ   e Zd Zdejeeeejdœdd„Z	eedœdd„Z
eeddœd	d
„ZdS )Ú
PBKDF2HMACN)Ú	algorithmÚlengthÚsaltÚ
iterationsÚbackendc             C   sX   ddl m} |j|ƒs*tdj|jƒtjƒ‚d| _|| _	|| _
tjd|ƒ || _|| _d S )Nr   )r   z/{} is not supported for PBKDF2 by this backend.Fr   )Ú,cryptography.hazmat.backends.openssl.backendr   Zpbkdf2_hmac_supportedr   ÚformatÚnamer   ZUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterations)Úselfr   r   r   r   r   Zossl© r   ú`/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.pyÚ__init__   s    
zPBKDF2HMAC.__init__)Úkey_materialÚreturnc             C   sF   | j rtdƒ‚d| _ tjd|ƒ ddlm} |j| j| j| j	| j
|ƒS )Nz'PBKDF2 instances can only be used once.Tr   r   )r   )r   r   r   Z_check_bytesliker   r   Zderive_pbkdf2_hmacr   r   r   r   )r   r   r   r   r   r   Úderive.   s    zPBKDF2HMAC.derive)r   Úexpected_keyr   c             C   s"   | j |ƒ}tj||ƒ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ÚbytesÚtypingÚAnyr   r   r!   r   r   r   r   r
      s   r
   )r'   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr	   r
   r   r   r   r   Ú<module>   s
   