
    Uj                         U d dl Z 	 d dlZd dlmZ n# e$ rZddlmZ  ed          edZ[ww xY wddlm	Z	m
Z
mZ  e j        d          Ze j        ed	<    G d
 de	          ZdS )    N)PasswordHasher   )HasherNotAvailableargon2   )HasherProtocol
ensure_strvalidate_str_or_bytesz^\$(?P<variant>argon2(id|i|d))\$(?:v=(?P<version>\d+)\$)?m=(?P<memory_cost>\d+),t=(?P<time_cost>\d+),p=(?P<parallelism>\d+)(?:\$(?P<salt>[^$]+)(?:\$(?P<digest>.+?))?)?$ARGON2_ENCODED_HASH_REGEXc                      e Zd Zej        ej        ej        ej        ej        ej	        j
        fdedededededej	        ddfd	Zed
eez  defd            Zdddeez  dedz  defdZdeez  d
eez  defdZd
eez  defdZdS )Argon2Hasher	time_costmemory_costparallelismhash_lensalt_lentypereturnNc           	      :    t          |||||d|          | _        dS )ah  

        Args:
            time_cost: Defines the amount of computation realized and
                therefore the execution time, given in number of iterations.
            memory_cost: Defines the memory usage, given in kibibytes.
            parallelism: Defines the number of parallel threads (*changes*
                the resulting hash value).
            hash_len: Length of the hash in bytes.
            salt_len: Length of random salt to be generated for each
                password.
            type: Argon2 type to use.  Only change for interoperability
                with legacy systems.

        zutf-8N)r   _hasher)selfr   r   r   r   r   r   s          Y/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pwdlib/hashers/argon2.py__init__zArgon2Hasher.__init__   s(    0 &{K8Wd
 
    hashc                     t          |d           	 t          |          }n# t          $ r Y dS w xY wt                              |          }|dS |                    d          }|dv S )Nr   Fvariant>   argon2dargon2iargon2id)r
   r	   UnicodeDecodeErrorr   	fullmatchgroup)clsr   hash_strmatchr   s        r   identifyzArgon2Hasher.identify5   s    dF+++	!$''HH! 	 	 	55	)33H===5{{9--<<<s   " 
00saltpasswordr)   c                Z    t          |d           | j                            ||          S )Nr*   r(   )r
   r   r   )r   r*   r)   s      r   r   zArgon2Hasher.hashB   s-    h
333|   555r   c                     t          |d           t          |d           	 | j                            ||          S # t          j        j        t          j        j        f$ r Y dS w xY w)Nr*   r   F)r
   r   verifyr   
exceptionsVerificationErrorInvalidHashError)r   r*   r   s      r   r-   zArgon2Hasher.verifyF   sw    h
333dF+++	<&&tX666/.
 	 	 	 55		s   = %A&%A&c                 p    t          |d           | j                            t          |                    S )Nr   )r
   r   check_needs_rehashr	   )r   r   s     r   r2   zArgon2Hasher.check_needs_rehashQ   s0    dF+++|..z$/?/?@@@r   )__name__
__module____qualname__r   DEFAULT_TIME_COSTDEFAULT_MEMORY_COSTDEFAULT_PARALLELISMDEFAULT_HASH_LENGTHDEFAULT_RANDOM_SALT_LENGTHTypeIDintr   classmethodstrbytesboolr'   r   r-   r2    r   r   r   r      sm         1!5!529"KN
 

 
 	

 
 
 k
 

 
 
 
8 
=C%K 
=D 
= 
= 
= [
= CG 6 6 6S5[ 654< 63 6 6 6 6	sU{ 	#+ 	$ 	 	 	 	AsU{ At A A A A A Ar   r   )reargon2.exceptionsr   r   ImportErrorer.   r   baser   r	   r
   compiler   Pattern__annotations__r   rB   r   r   <module>rK      s   					.%%%%%%% . . .//////

X
&
&A-.
 D C C C C C C C C C )3
5) ) 2:   ;A ;A ;A ;A ;A> ;A ;A ;A ;A ;As   
 .).