3 l�_��@s�ddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddlmZddlmZddlmZejd Zeje�Gd d �d e��ZdS) �)�absolute_import�division�print_functionN)�utils)�AlreadyFinalized� InvalidKey�UnsupportedAlgorithm�_Reasons)� _get_backend)� ScryptBackend)� constant_time)�KeyDerivationFunction�c@s&eZdZddd�Zdd�Zdd�ZdS) �ScryptNcCs�t|�}t|t�stdtj��||_tjd|�|dksH||d@dkrPt d��|dkr`t d��|dkrpt d��d |_ ||_ ||_ ||_ ||_||_dS) Nz0Backend object does not implement ScryptBackend.�saltr�rz-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 rr ZBACKEND_MISSING_INTERFACE�_lengthr� _check_bytes� ValueError�_used�_salt�_n�_r�_p�_backend)�selfrZlength�n�r�pZbackend�r �/usr/lib64/python3.6/scrypt.py�__init__s&  zScrypt.__init__cCs@|jrtd��d|_tjd|�|jj||j|j|j|j |j �S)Nz'Scrypt instances can only be used once.T� key_material) rrrZ_check_byteslikerZ derive_scryptrrrrr)rr#r r r!�derive7s  z Scrypt.derivecCs"|j|�}tj||�std��dS)NzKeys do not match.)r$r Zbytes_eqr)rr#Z expected_keyZ derived_keyr r r!�verifyAs  z Scrypt.verify)N)�__name__� __module__� __qualname__r"r$r%r r r r!rs  r)Z __future__rrr�sysZ cryptographyrZcryptography.exceptionsrrrr Zcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesr Z"cryptography.hazmat.primitives.kdfr �maxsizeZ _MEM_LIMITZregister_interface�objectrr r r r!�s