o
    h                     @  st   d dl mZ 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 G dd	 d	eZdS )
    )annotationsN)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm_Reasons)openssl)constant_timehashes)KeyDerivationFunctionc                   @  s.   e Zd Z	ddddZdddZdddZdS )
PBKDF2HMACN	algorithmhashes.HashAlgorithmlengthintsaltbytes
iterationsbackend
typing.Anyc                 C  sX   ddl m} ||st|j dtjd| _|| _|| _	t
d| || _|| _d S )Nr   )r   z is not supported for PBKDF2.Fr   )Z,cryptography.hazmat.backends.openssl.backendr   Zpbkdf2_hmac_supportedr   namer   ZUNSUPPORTED_HASH_used
_algorithm_lengthr   _check_bytes_salt_iterations)selfr   r   r   r   r   Zossl r   \/var/www/html/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py__init__   s   


zPBKDF2HMAC.__init__key_materialreturnc                 C  s0   | j rtdd| _ tj|| j| j| j| jS )Nz'PBKDF2 instances can only be used once.T)	r   r   rust_opensslZkdfZderive_pbkdf2_hmacr   r   r   r   )r   r!   r   r   r   derive.   s   zPBKDF2HMAC.deriveexpected_keyNonec                 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)
r   r   r   r   r   r   r   r   r   r   )r!   r   r"   r   )r!   r   r%   r   r"   r&   )__name__
__module____qualname__r    r$   r'   r   r   r   r   r      s
    
r   )
__future__r   typingZcryptographyr   Zcryptography.exceptionsr   r   r   r   Z"cryptography.hazmat.bindings._rustr   r#   Zcryptography.hazmat.primitivesr	   r
   Z"cryptography.hazmat.primitives.kdfr   r   r   r   r   r   <module>   s   