o
    
c                     @   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                   @   s\   e Zd Z	ddedededededejfdd	Zd
edefddZd
ededdf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 s#||d @ dkr'td|dk r/td|dk r7t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   scrypt_supportedr   _lengthr   _check_bytes
ValueError_used_salt_n_r_p)selfr
   r   r   r   r   r   ossl r   V/opt/certbot/lib/python3.10/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   _check_bytesliker   r   derive_scryptr   r   r   r   r   )r   r!   r   r   r   r   derive:   s   zScrypt.deriveexpected_keyc                 C   s"   |  |}t||stdd S )NzKeys do not match.)r%   r   bytes_eqr   )r   r!   r&   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/   cryptographyr   cryptography.exceptionsr   r   r   cryptography.hazmat.primitivesr   "cryptography.hazmat.primitives.kdfr   maxsize
_MEM_LIMITr	   r   r   r   r   <module>   s   
