Ë
    ýQµi2	  ã                  ó˜   — 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  Z G d	„ d
e«      Zy)é    )ÚannotationsN)Úutils)ÚAlreadyFinalizedÚ
InvalidKeyÚUnsupportedAlgorithm)Úopenssl)Úconstant_time)ÚKeyDerivationFunctioné   c                  ó>   — e Zd Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)	ÚScryptNc                ó<  — ddl m} |j                  «       st        d«      ‚|| _        t        j                  d|«       |dk  s||dz
  z  dk7  rt        d«      ‚|dk  rt        d«      ‚|dk  rt        d	«      ‚d
| _        || _	        || _
        || _        || _        y )Nr   )Úbackendz/This version of OpenSSL does not support scryptÚsaltr   é   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   ÚlengthÚnÚrÚpr   Úossls           úK/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/scrypt.pyÚ__init__zScrypt.__init__   s©   € õ	
ð ×$Ñ$Ô&Ü&ØAóð ð ˆŒÜ×Ñ˜6 4Ô(ØˆqŠ5�Q˜!˜a™%‘[ QÒ&ÜÐLÓMÐMàˆqŠ5ÜÐDÓEÐEàˆqŠ5ÜÐDÓEÐEàˆŒ
ØˆŒ
ØˆŒØˆŒØˆ�ó    c           	     ó   — | j                   rt        d«      ‚d| _         t        j                  d|«       t        j
                  j                  || j                  | j                  | j                  | j                  t        | j                  «      S )Nz'Scrypt instances can only be used once.TÚkey_material)r   r   r   Ú_check_byteslikeÚrust_opensslÚkdfÚderive_scryptr   r   r   r   Ú
_MEM_LIMITr   )r   r&   s     r"   ÚderivezScrypt.derive<   sn   € Ø�:Š:Ü"Ð#LÓMÐMØˆŒ
ä×Ñ˜~¨|Ô<ä×Ñ×-Ñ-ØØ�J‰JØ�G‰GØ�G‰GØ�G‰GÜØ�L‰Ló
ð 	
r$   c                óh   — | j                  |«      }t        j                  ||«      st        d«      ‚y )NzKeys do not match.)r,   r	   Úbytes_eqr   )r   r&   Úexpected_keyÚderived_keys       r"   ÚverifyzScrypt.verifyM   s2   € Ø—k‘k ,Ó/ˆÜ×%Ñ% k°<Ô@ÜÐ1Ó2Ð2ð Ar$   )N)r   Úbytesr   Úintr   r3   r   r3   r    r3   r   z
typing.Any)r&   r2   Úreturnr2   )r&   r2   r/   r2   r4   ÚNone)Ú__name__Ú
__module__Ú__qualname__r#   r,   r1   © r$   r"   r   r      sQ   „ ð #ð àð ð ð ð ð	 ð
 ð ð ð ð ó óD
ô"3r$   r   )Ú
__future__r   ÚsysÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   r   Ú"cryptography.hazmat.bindings._rustr   r(   Úcryptography.hazmat.primitivesr	   Ú"cryptography.hazmat.primitives.kdfr
   Úmaxsizer+   r   r9   r$   r"   ú<module>rC      sF   ðõ
 #ã 
Û å ÷ñ õ
 GÝ 8Ý Dð �[‰[˜AÑ€
ô73Ð"õ 73r$   