
    )h2	                        S SK Jr  S SKrS SKrS SKJr  S SKJrJrJ	r	  S SK
Jr  S SKJr  S SKJr  \R"                  S-  r " S	 S
\5      rg)    )annotationsN)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm)openssl)constant_time)KeyDerivationFunction   c                  N    \ rS rSr S           SS jjrS	S jrS
S jrSrg)Scrypt   Nc                D   SSK Jn  UR                  5       (       d  [        S5      eX l        [
        R                  " SU5        US:  d  X3S-
  -  S:w  a  [        S5      eUS:  a  [        S5      eUS:  a  [        S	5      eS
U l        Xl	        X0l
        X@l        XPl        g )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__Scrypt.__init__   s    	
 $$&&&A  64(q5Qa%[Q&LMMq5DEEq5DEE

    c           	     ,   U R                   (       a  [        S5      eSU l         [        R                  " SU5        [        R
                  R                  UU R                  U R                  U R                  U R                  [        U R                  5      $ )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#   deriveScrypt.derive<   sn    ::"#LMM
~|<--JJGGGGGGLL
 	
r&   c                r    U R                  U5      n[        R                  " X25      (       d  [        S5      eg )NzKeys do not match.)r.   r	   bytes_eqr   )r   r(   expected_keyderived_keys       r#   verifyScrypt.verifyM   s3    kk,/%%k@@122 Ar&   )r   r   r   r   r   r   )N)r   bytesr   intr   r7   r    r7   r!   r7   r   z
typing.Any)r(   r6   returnr6   )r(   r6   r2   r6   r8   None)__name__
__module____qualname____firstlineno__r$   r.   r4   __static_attributes__ 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   r?   r&   r#   <module>rI      sF   
 # 
   
 G 8 D [[A
73" 73r&   