
    iJ                         d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 	 ej                  j                  d      r e       dZd dlmZ  G d	 d
e      Zy#  dZY xY w)    )print_functionunicode_literalsN   )unicodePRTY_NO_ARGON2T)
exceptionsFc                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	PWHashc                 `   || _         |j                  j                  d      }|D cg c]  }|j                          }}|d   }|dk(  rd}|| _        |dd  | _        |sd| _        t        | _        y d| _        |j                  j                  d      | _        i | _        t        j                         | _        | j                   | _        |d	k(  r| j"                  | _        y |d
k(  r| j&                  | _        y |dk(  r| j(                  | _        y d}t+        |j-                  |            c c}w )N,r   none r   FTutf-8sha2scryptargon2zZunsupported password hashing algorithm [{}], must be one of these: argon2 scrypt sha2 none)argsah_algsplitstripalgaconr   hashah_saltencodesaltcache	threadingLockmutex_cache_hash	_gen_sha2_hash_gen_scrypt_gen_argon2	Exceptionformat)selfr   zslxr   ts         C/home/ubuntu/myenv/lib/python3.12/site-packages/copyparty/pwhash.py__init__zPWHash.__init__   s	   	kk$"%&Qqwwy&&!f&=Cab'DGDILL''0	
^^%
$$	&=DJH_))DJH_))DJlAAHHSM**5 's   D+c                 R   | j                   5  	 | j                  |   cd d d        S #  Y nxY w|s
	 d d d        yt        |      dkD  rt        d      t        | j                        dkD  ri | _        | j	                  |      }|| j                  |<   |cd d d        S # 1 sw Y   y xY w)Nr      zpassword too longi(#  )r!   r   lenr'   r$   )r)   plainrets      r-   r"   zPWHash._cache_hash8   s    ZZ 	zz%(	 		 	 5zC 3444::%
**U#C #DJJu#	 	 	s   B'+BABB&c                 N   | j                   rt        | j                   d         nd}|j                  d      }d}t        |      D ]5  }t	        j
                  | j                  |z   |z         j                         }7 dt        j                  |d d       j                  d      z   S )Nr   i2y r      
+   )r   intr   rangehashlibsha512r   digestbase64urlsafe_b64encodedecode)r)   r2   itsbplainr3   _s         r-   r#   zPWHash._gen_sha2L   s    !%c$''!*ofg&s 	DA..V!3c!9:AACC	D V--c#2h7>>wGGG    c                    d}d}d}d}d}	 dt        | j                  d         z  }t        | j                  d         }t        | j                  d         }t        | j                  d         }t        | j                  d         dz  dz  }| j                  |||d	d
}|r||d<   |j                  d      }t	        |      D ]  }	t        j                  |fi |} dt        j                  |      j                  d      z   S #  Y {xY w)Ni @           r   r         r7   )r   nrpdklenmaxmemr   r6   )
r8   r   r   r   r9   r:   r   r=   r>   r?   )
r)   r2   costr@   blkszpararamcapcfgr3   rB   s
             r-   r%   zPWHash._gen_scryptU   s   	DGGAJ'Ddggaj/C
OEtwwqz?D_t+d2F yyt%dRP"CMll7#s 	-A..,,C	- V--c299'BBB	s   BD Dc           
         ddl m} ddl m} d}d}d}d}	 t        | j                  d         }t        | j                  d         }t        | j                  d	         }t        | j                  d         }|j                  d
      } ||| j                  ||dz  |d|j                  |      }	|	j                  d      d   j                  d
      }
d|
j                  dd      j                  dd      z   S #  Y xY w)Nr   )Type)hash_secretrH      rG      r   rE   r   rI   r7   )secretr   	time_costmemory_costparallelismhash_lentypeversion   $r6   /rB   -)argon2.low_levelrU   rV   r8   r   r   r   IDr   r?   replace)r)   r2   	ArgonTyperV   rZ   mem_costr\   r_   rA   bretr3   s              r-   r&   zPWHash._gen_argon2n   s    60		DGGAJI4771:Hdggaj/K$''!*oG g& 4#	
 jjr"))'2S[[c*223<<<!	s   A C6 6C:c                     	 t         j                  j                         j                         }|sy t	        | j                  |             J)N)sysstdinreadliner   printr   )r)   lns     r-   rl   zPWHash.stdin   s;    ##%++-B$))B- 	 rC   c                 F   dd l }| j                  j                  rd}t        |       	 	 |j                  d      }|j                  d      }|r!||k7  rt        dt
        j                         Gt        | j                  |             t                k# t        $ r Y y w xY w)Nr   zDsince you have enabled --usernames, please provide username:passwordz
password> zagain or just hit ENTER> z&[31minputs don't match; try again[0m)file)getpassr   	usernamesrn   EOFErrorrk   stderrr   )r)   rr   r,   p1p2s        r-   cliz
PWHash.cli   s    99VA!H__\2__%@A bBhD3::V$))B- G   s   "B 	B B N)
__name__
__module____qualname__r.   r"   r#   r%   r&   rl   rx    rC   r-   r
   r
      s(    +@(HC2=>!rC   r
   )
__future__r   r   argparser=   r:   osrk   r   r.   r   environgetr'   HAVE_ARGON2r   r   argon2exobjectr
   r|   rC   r-   <module>r      s]    7    	 
  	zz~~&'kK-
OV O	Ks   *A A$