U
    EZh                     @   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                   @   sJ   e Zd ZdeeeeeejdddZeedddZeedd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 sF||d @ dkrNtd|dk r^td|dk rnt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   p/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/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   Z_check_bytesliker   r   Zderive_scryptr   r   r   r   r   )r   r   r   r   r   r   derive:   s         zScrypt.derive)r   expected_keyr    c                 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   verifyF   s    
zScrypt.verify)N)
__name__
__module____qualname__bytesinttypingAnyr   r!   r#   r   r   r   r   r	      s    "r	   )sysr)   Zcryptographyr   Zcryptography.exceptionsr   r   r   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr   maxsizeZ
_MEM_LIMITr	   r   r   r   r   <module>   s   
