
    h#                         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   }|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+                  |            )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algaconr   hashah_saltencodesaltcache	threadingLockmutex_cache_hash	_gen_sha2_hash_gen_scrypt_gen_argon2	Exceptionformat)selfr   zslr   ts        E/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/pwhash.py__init__zPWHash.__init__   s    	kk$!f&=Cab'DGDILL''0	
^^%
$$	&=DJH_))DJH_))DJlAAHHSM**    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_hash7   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(   r1   itsbplainr2   _s         r+   r"   zPWHash._gen_sha2K   s    !%c$''!*ofg&s 	DA..V!3c!9:AACC	D V--c#2h7>>wGGGr-   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         r6   )r   nrpdklenmaxmemr   r5   )
r7   r   r   r   r8   r9   r   r<   r=   r>   )
r(   r1   costr?   blkszpararamcapcfgr2   rA   s
             r+   r$   zPWHash._gen_scryptT   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_secretrF      rE      r   rC   r   rG   r6   )secretr   	time_costmemory_costparallelismhash_lentypeversion   $r5   /rA   -)argon2.low_levelrS   rT   r7   r   r   r   IDr   r>   replace)r(   r1   	ArgonTyperT   rX   mem_costrZ   r]   r@   bretr2   s              r+   r%   zPWHash._gen_argon2m   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readlinestripprintr   )r(   lns     r+   rj   zPWHash.stdin   s;    ##%++-B$))B- 	 r-   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   	usernamesrm   EOFErrorri   stderrr   )r(   rq   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%   rj   rw    r-   r+   r
   r
      s'    +>(HC2=>!r-   r
   )
__future__r   r   argparser<   r9   osri   r   r,   r   environgetr&   HAVE_ARGON2r   r   argon2exobjectr
   r{   r-   r+   <module>r      s]    7    	 
  	zz~~&'kK-
NV N	Ks   *A A$