U
e5d � @ s, d dl Zzd dlZW n0 ek
rD ejdkr8ed��ned��Y nX d dlZd dlm Z
d dlmZ
ejej d Ze
� ZG dd � d e
d d
��Zd%dd�dd
�Zd&dd�Zg Zdd�dd�Zedddd� edddd� dD ](Zedde ddee� dd�r� �qq�eddd d!� ed"dd#d$� [[dS )'� NZwin32z,The crypt module is not supported on Windowsz;The required _crypt module was not built as part of CPython)�SystemRandom)�
namedtuplez./c @ s e Zd Zdd� ZdS )�_Methodc C s d� | j�S )Nz)�format�name)�self� r �/usr/lib64/python3.8/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 sB | d krt d } |d k r4t|t�s4t|jj� d���| js@d}nd| j� d�}| jr�| jd dkr�|d krpd}n@t�|d �}|d|> kr�td��d | kr�d
ks�n td��||d�d�7 }n^| jd
k�r|d k �r d| kr�dks�n td��|d|� d�7 }n|d k �r t| � d���|d� dd� t
| j�D ��7 }|S )Nr z+ object cannot be interpreted as an integer� �$�2� � zrounds must be a power of 2� � z%rounds out of the range 2**4 to 2**31Z02d)�5�6i� i�ɚ;z+rounds out of the range 1000 to 999_999_999zrounds=z$ doesn't support the rounds argumentc s s | ]}t �t�V qd S �N)�_srZchoice�
_saltchars)�.0�charr r r � A s zmksalt..)�methods�
isinstance�int� TypeError� __class__r Zident�
bit_length�
ValueError�join�rangeZ
salt_chars)�methodr �sZ
log_roundsr r r �mksalt s2
r* c C s&