U
    *”}fÜ  ã                   @   s˜   d dl mZmZm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 d dlmZ d dlmZ ejd	 Ze e¡G d
d„ deƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚScryptBackend)Úconstant_time)ÚKeyDerivationFunctioné   c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚScryptNc                 C   s˜   t |ƒ}t|tƒstdtjƒ‚|| _t d|¡ |dk sH||d @ dkrPt	dƒ‚|dk r`t	dƒ‚|dk rpt	dƒ‚d	| _
|| _|| _|| _|| _|| _d S )
Nz0Backend object does not implement ScryptBackend.Úsaltr   é   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   ÚlengthÚnÚrÚpÚbackend© r"   úM/tmp/pip-unpacked-wheel-x36vw73o/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__   s(    
þzScrypt.__init__c                 C   s@   | j rtdƒ‚d| _ t d|¡ | j || j| j| j| j	| j
¡S )Nz'Scrypt instances can only be used once.TÚkey_material)r   r   r   Z_check_bytesliker   Zderive_scryptr   r   r   r   r   )r   r%   r"   r"   r#   Úderive7   s         ÿzScrypt.derivec                 C   s"   |   |¡}t ||¡stdƒ‚d S )NzKeys do not match.)r&   r   Zbytes_eqr   )r   r%   Zexpected_keyZderived_keyr"   r"   r#   ÚverifyA   s    
zScrypt.verify)N)Ú__name__Ú
__module__Ú__qualname__r$   r&   r'   r"   r"   r"   r#   r      s   

r   )Ú
__future__r   r   r   ÚsysZcryptographyr   Zcryptography.exceptionsr   r   r   r	   Zcryptography.hazmat.backendsr
   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr   ÚmaxsizeZ
_MEM_LIMITZregister_interfaceÚobjectr   r"   r"   r"   r#   Ú<module>   s   
