a
    còf2	  ã                   @  s~   d dl mZ 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 d dlmZ ejd ZG d	d
„ d
eƒZdS )é    )ÚannotationsN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithm)Úopenssl)Úconstant_time)ÚKeyDerivationFunctioné   c                   @  sH   e Zd Zddddddddœdd„Zdddœd	d
„Zddddœdd„ZdS )ÚScryptNÚbytesÚintz
typing.Any)Ú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)Z,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   úf/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__   s$    	ÿzScrypt.__init__)Úkey_materialÚreturnc              	   C  sB   | j rtdƒ‚d| _ t d|¡ tj || j| j| j	| j
t| j¡S )Nz'Scrypt instances can only be used once.Tr!   )r   r   r   Z_check_byteslikeÚrust_opensslZkdfZderive_scryptr   r   r   r   Ú
_MEM_LIMITr   )r   r!   r   r   r   Úderive<   s    ùzScrypt.deriveÚNone)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   ÚverifyM   s    
zScrypt.verify)N)Ú__name__Ú
__module__Ú__qualname__r    r%   r(   r   r   r   r   r      s    ù"r   )Ú
__future__r   ÚsysÚtypingZcryptographyr   Zcryptography.exceptionsr   r   r   Z"cryptography.hazmat.bindings._rustr   r#   Zcryptography.hazmat.primitivesr   Z"cryptography.hazmat.primitives.kdfr	   Úmaxsizer$   r   r   r   r   r   Ú<module>   s   
