o
    c                     @   sf   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 e jd ZG dd deZdS )	    N)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm)constant_time)KeyDerivationFunction   c                   @   s\   e Zd Z	ddedededededej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   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   Zscrypt_supportedr   _lengthr   _check_bytes
ValueError_used_salt_n_r_p)selfr
   r   r   r   r   r   Zossl r   Musr/lib/python3.10/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py__init__   s$   	
zScrypt.__init__key_materialreturnc                 C   sJ   | j rtdd| _ td| ddlm} ||| j| j| j	| j
| jS )Nz'Scrypt instances can only be used once.Tr   r   r   )r   r   r   _check_bytesliker   r   Zderive_scryptr   r   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   verifyG   s   
zScrypt.verify)N)
__name__
__module____qualname__bytesinttypingAnyr   r"   r$   r   r   r   r   r	      s"    
"r	   )sysr*   cryptographyr   Zcryptography.exceptionsr   r   r   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr   maxsizeZ
_MEM_LIMITr	   r   r   r   r   <module>   s   
