B
    ó±ô`È  ã               @   sz   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G d	d
„ d
eƒZdS )é    N)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚScryptBackend)Úconstant_time)ÚKeyDerivationFunctioné   c               @   sF   e Zd Zdeeeeedœdd„Zeedœdd„Zeeddœd	d
„ZdS )ÚScryptN)ÚsaltÚlengthÚnÚrÚpc             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.r   r   é   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   r   r   r   r   Úbackend© r   úX/home/dcms/DCMS/lib/python3.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__   s&    
zScrypt.__init__)Úkey_materialÚreturnc             C   s@   | j rtdƒ‚d| _ t d|¡ | j || j| j| j| j	| j
¡S )Nz'Scrypt instances can only be used once.Tr"   )r   r   r   Z_check_bytesliker   Zderive_scryptr   r   r   r   r   )r   r"   r   r   r    Úderive7   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    ÚverifyA   s    
zScrypt.verify)N)Ú__name__Ú
__module__Ú__qualname__ÚbytesÚintr!   r$   r&   r   r   r   r    r      s   
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_LIMITr   r   r   r   r    Ú<module>   s   
