a
    ϏPf                     @  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                   @  sF   e Zd ZdddddddddZddd	d
dZddddddZdS )
PBKDF2HMACNzhashes.HashAlgorithmintbytesz
typing.Any)	algorithmlengthsalt
iterationsbackendc                 C  sX   ddl m} ||s*td|jtjd| _|| _	|| _
td| || _|| _d S )Nr   )r   z/{} is not supported for PBKDF2 by this backend.Fr   )Z,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   j/var/www/html/python-backend/venv/lib/python3.9/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   derive0   s    zPBKDF2HMAC.deriveNone)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   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   