o
    ÿÑÐb,	  ã                   @   s†   d dl 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 d dlmZ e jd ZG d	d
„ d
eƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚBackendÚScryptBackend)Úconstant_time)ÚKeyDerivationFunctioné   c                   @   s`   e Zd Z	ddedededededeje fdd	„Zd
edefdd„Z	d
ededdfdd„Z
dS )ÚScryptNÚsaltÚlengthÚnÚrÚpÚbackendc                 C   s˜   t |ƒ}t|tƒstdtjƒ‚|| _t d|¡ |dk s$||d @ dkr(t	dƒ‚|dk r0t	dƒ‚|dk r8t	dƒ‚d	| _
|| _|| _|| _|| _|| _d S )
Nz0Backend object does not implement ScryptBackend.r   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)r   Ú
isinstancer	   r   r   ZBACKEND_MISSING_INTERFACEÚ_lengthr   Ú_check_bytesÚ
ValueErrorÚ_usedÚ_saltÚ_nÚ_rÚ_pÚ_backend)Úselfr   r   r   r   r   r   © r    úh/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__   s(   	
þ
zScrypt.__init__Úkey_materialÚreturnc                 C   s@   | j rtdƒ‚d| _ t d|¡ | j || j| j| j| j	| j
¡S )Nz'Scrypt instances can only be used once.Tr#   )r   r   r   Z_check_bytesliker   Zderive_scryptr   r   r   r   r   )r   r#   r    r    r!   Úderive>   s   ÿzScrypt.deriveÚexpected_keyc                 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!   ÚverifyH   s   
ÿzScrypt.verify)N)Ú__name__Ú
__module__Ú__qualname__ÚbytesÚintÚtypingÚOptionalr   r"   r%   r'   r    r    r    r!   r      s"    ùþýüûú
ù"
r   )Úsysr-   Zcryptographyr   Zcryptography.exceptionsr   r   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   r	   Zcryptography.hazmat.primitivesr
   Z"cryptography.hazmat.primitives.kdfr   ÚmaxsizeZ
_MEM_LIMITr   r    r    r    r!   Ú<module>   s   
