o
    ÖèFh2	  ã                   @  s~   d dl mZ d dlZd dlZd dlmZ d dl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G d	d
„ d
eƒZdS )é    )ÚannotationsN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithm)Úopenssl)Úconstant_time)ÚKeyDerivationFunctioné   c                   @  s.   e Zd Z	dddd„Zddd„Zddd„ZdS )ÚScryptNÚsaltÚbytesÚlengthÚintÚnÚrÚpÚbackendú
typing.Anyc                 C  s�   ddl m} | ¡ stdƒ‚|| _t d|¡ |dk s#||d @ dkr'tdƒ‚|dk r/tdƒ‚|dk r7td	ƒ‚d
| _|| _	|| _
|| _|| _d S )Nr   )r   z/This version of OpenSSL does not support scryptr   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)Ú,cryptography.hazmat.backends.openssl.backendr   Úscrypt_supportedr   Ú_lengthr   Ú_check_bytesÚ
ValueErrorÚ_usedÚ_saltÚ_nÚ_rÚ_p)Úselfr   r   r   r   r   r   Úossl© r"   úb/var/www/html/loop/nvenv/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__   s$   	ÿ
zScrypt.__init__Úkey_materialÚreturnc              	   C  sB   | j rtdƒ‚d| _ t d|¡ tj || j| j| j	| j
t| j¡S )Nz'Scrypt instances can only be used once.Tr%   )r   r   r   Ú_check_byteslikeÚrust_opensslÚkdfÚderive_scryptr   r   r   r   Ú
_MEM_LIMITr   )r    r%   r"   r"   r#   Úderive<   s   ùzScrypt.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#   ÚverifyM   s   
ÿzScrypt.verify)N)r   r   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,   r1   r"   r"   r"   r#   r      s
    ù
"r   )Ú
__future__r   ÚsysÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   r   Ú"cryptography.hazmat.bindings._rustr   r(   Úcryptography.hazmat.primitivesr   Ú"cryptography.hazmat.primitives.kdfr	   Úmaxsizer+   r   r"   r"   r"   r#   Ú<module>   s   
