o
    IAf                     @   s,  	 d dl Zzd dlZW n ey   ejdkrededw d dlZd dlZd dl	m
Z d dlmZ ejej d Ze ZG dd	 d	ed	d
Zd%ddddZd%ddZg ZddddZedddd edddd dD ]Zedde ddee ddr nqpeddd d! ed"dd#d$ [[dS )&    Nwin32z,The crypt module is not supported on Windowsz;The required _crypt module was not built as part of CPython)SystemRandom)
namedtuplez./c                   @   s   e Zd Z	 dd ZdS )_Methodc                 C   s   d | jS )Nz<crypt.METHOD_{}>)formatname)self r	   /usr/lib/python3.10/crypt.py__repr__   s   z_Method.__repr__N)__name__
__module____qualname__r   r	   r	   r	   r
   r      s    r   z name ident salt_chars total_sizeroundsc                C   sJ  	 | d u r	t d } |d urt|tst|jj d| js!d}nd| j d}| jre| jd dkre|d u r9d}n#t|d }|d|> krJtdd	|  krWd
ks\td td||dd7 }n/| jdv r|d urd|  kr{dkstd td|d| d7 }n|d urt|  d|d	dd t
| jD 7 }|S )Nr   z+ object cannot be interpreted as an integer $2      zrounds must be a power of 2      z%rounds out of the range 2**4 to 2**31Z02d)56i  iɚ;z+rounds out of the range 1000 to 999_999_999zrounds=z$ doesn't support the rounds argumentc                 s   s    | ]}t tV  qd S N)_srchoice
_saltchars).0charr	   r	   r
   	<genexpr>B   s    zmksalt.<locals>.<genexpr>)methods
isinstanceint	TypeError	__class__r   ident
bit_length
ValueErrorjoinrangeZ
salt_chars)methodr   sZ
log_roundsr	   r	   r
   mksalt    s>   
r-   c                 C   s(   	 |d u s
t |trt|}t| |S r   )r"   r   r-   _cryptcrypt)Zwordsaltr	   r	   r
   r/   F   s   	r/   c             
   G   s   t | g|R  }|t d|  < t||d}d }ztd|}W n ty= } z|jtjtjtjhv r8W Y d }~dS  d }~ww |rNt	||j
krNt| dS dS )NZMETHOD_r   r   FT)r   globalsr-   r/   OSErrorerrnoEINVALEPERMZENOSYSlenZ
total_sizer!   append)r   r   argsr+   r0   resulter	   r	   r
   _add_methodX   s    
r;   ZSHA512r      j   ZSHA256r   ?   )byar   ZBLOWFISHr      ;   ZMD51   "   ZCRYPT      r   )sys_sysr.   ModuleNotFoundErrorplatformImportErrorr3   string_stringrandomr   Z_SystemRandomcollectionsr   Z_namedtupleascii_lettersdigitsr   r   r   r-   r/   r!   r;   Z_vr6   r	   r	   r	   r
   <module>   s:    
	
&