o
    ä›eÜ  ã                   @  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d |j¡tjƒ‚d| _|| _	|| _
t d|¡ || _|| _d S )Nr   )r   z/{} is not supported for PBKDF2 by this backend.Fr   )Ú,cryptography.hazmat.backends.openssl.backendr   Úpbkdf2_hmac_supportedr   ÚformatÚnamer   ÚUNSUPPORTED_HASHÚ_usedÚ
_algorithmÚ_lengthr   Ú_check_bytesÚ_saltÚ_iterations)Úselfr   r   r   r   r   Ú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_opensslÚkdfÚderive_pbkdf2_hmacr   r   r    r   )r!   r&   r#   r#   r$   Úderive0   s   ûzPBKDF2HMAC.deriveÚexpected_keyÚNonec                 C  s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r+   r	   Úbytes_eqr   )r!   r&   r,   Ú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+   r0   r#   r#   r#   r$   r      s
    ú
r   )Ú
__future__r   ÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   r   r   Ú"cryptography.hazmat.bindings._rustr   r(   Úcryptography.hazmat.primitivesr	   r
   Ú"cryptography.hazmat.primitives.kdfr   r   r#   r#   r#   r$   Ú<module>   s   