o
    ÿÑÐb		  ã                   @   sx   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	 d dl
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)Ú_get_backend)ÚBackendÚPBKDF2HMACBackend)Úconstant_timeÚhashes)ÚKeyDerivationFunctionc                   @   s^   e Zd Z	ddejdedededej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Ú
iterationsÚbackendc                 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   r   © r   úh/var/www/secure340b-portal/env/lib/python3.10/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   Úderive4   s   ûzPBKDF2HMAC.deriveÚexpected_keyc                 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   ÚverifyB   s   
ÿzPBKDF2HMAC.verify)N)Ú__name__Ú
__module__Ú__qualname__r   ZHashAlgorithmÚintÚbytesÚtypingÚOptionalr   r    r#   r%   r   r   r   r   r      s    úþýüû
úr   )r+   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   r	   Zcryptography.hazmat.primitivesr
   r   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   Ú<module>   s   