o
    ™¨ÊhÌ  ã                   @   sŒ   d dl mZmZ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 d dlmZ ejd Ze e¡G d	d
„ d
eƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)ÚScryptBackend)Úconstant_time)ÚKeyDerivationFunctioné   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚScryptc                 C   s–   t |tƒstdtjƒ‚|| _t |tƒstdƒ‚|dk s#||d @ dkr'tdƒ‚|dk r/tdƒ‚|dk r7tdƒ‚d	| _	|| _
|| _|| _|| _|| _d S )
Nz0Backend object does not implement ScryptBackend.zsalt must be bytes.r   é   r   z-n must be greater than 1 and be a power of 2.z%r must be greater than or equal to 1.z%p must be greater than or equal to 1.F)Ú
isinstancer
   r   r	   ÚBACKEND_MISSING_INTERFACEÚ_lengthÚbytesÚ	TypeErrorÚ
ValueErrorÚ_usedÚ_saltÚ_nÚ_rÚ_pÚ_backend)ÚselfÚsaltÚlengthÚnÚrÚpÚbackend© r#   ú[/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__   s(   
þ

zScrypt.__init__c                 C   sF   | j rtdƒ‚d| _ t|tƒstdƒ‚| j || j| j| j	| j
| j¡S )Nz'Scrypt instances can only be used once.Tzkey_material must be bytes.)r   r   r   r   r   r   Úderive_scryptr   r   r   r   r   )r   Úkey_materialr#   r#   r$   Úderive4   s   
ÿzScrypt.derivec                 C   s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r(   r   Úbytes_eqr   )r   r'   Úexpected_keyÚderived_keyr#   r#   r$   Úverify?   s   
ÿzScrypt.verifyN)Ú__name__Ú
__module__Ú__qualname__r%   r(   r,   r#   r#   r#   r$   r      s    r   )Ú
__future__r   r   r   ÚsysÚcryptographyr   Úcryptography.exceptionsr   r   r   r	   Ú'cryptography.hazmat.backends.interfacesr
   Úcryptography.hazmat.primitivesr   Ú"cryptography.hazmat.primitives.kdfr   ÚmaxsizeÚ
_MEM_LIMITÚregister_interfaceÚobjectr   r#   r#   r#   r$   Ú<module>   s   
