eaiovnaovbqoebvqoeavibavo B YI~d @sddlZddlZddlmZddlmZej ej dZ eZ GdddeddZ d"ddd d Zd#d d ZgZddd dZeddddeddddx,dD]$ZeddeddeeddrPqWeddddeddd d![[dS)$N) SystemRandom) namedtuplez./c@seZdZddZdS)_MethodcCs d|jS)Nz)formatname)selfr*/opt/alt/python37/lib64/python3.7/crypt.py__repr__sz_Method.__repr__N)__name__ __module__ __qualname__r rrrr r srz name ident salt_chars total_size)roundscCsB|dkrtd}|dk r4t|ts4t|jjd|js@d}nd|jd}|jr|jddkr|dkrpd}n@t|d}|d|>krtdd |krd ksntd ||d d7}n^|jd kr|dk r d|krdksntd|d|d7}n|dk r t|d|d ddt |j D7}|S)Nrz+ object cannot be interpreted as an integer$2 zrounds must be a power of 2z%rounds out of the range 2**4 to 2**31Z02d)56iiɚ;z+rounds out of the range 1000 to 999_999_999zrounds=z$ doesn't support the rounds argumentcss|]}ttVqdS)N)_srchoice _saltchars).0charrrr 8szmksalt..) methods isinstanceint TypeError __class__r Zident bit_length ValueErrorjoinrangeZ salt_chars)methodrsZ log_roundsrrr mksalts2    r)cCs&|dkst|trt|}t||S)N)rrr)_cryptcrypt)Zwordsaltrrr r+<s r+cGsVt|f|}|td|<t||d}td|}|rRt||jkrRt|dSdS)NZMETHOD_)rrTF)rglobalsr)r+lenZ total_sizerappend)rrargsr'r,resultrrr _add_methodNs   r2ZSHA512rjZSHA256r?)byarZBLOWFISHr;ZMD51"ZCRYPT )N)N)r*stringZ_stringZrandomrZ _SystemRandom collectionsrZ _namedtupleZ ascii_lettersdigitsrrrr)r+rr2Z_vr.rrrr s$   &