o
    C©ZhÜ  ã                   @  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   )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   ú`/var/www/html/lang_env/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    Úderive0   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   