a DOg@s6dZddlZz ddlZWn.eyFejdkr:ednedYn0ddlZddlZ ddl m Z ddl mZe je jdZe ZGd d d ed d Zd&dd d dZd'ddZgZdd ddZeddddedddddD](Zeddeddeedd rqqedd d!d"ed#dd$d%[[dS)(zEWrapper to the POSIX crypt library call and associated functionality.Nwin32z,The crypt module is not supported on Windowsz;The required _crypt module was not built as part of CPython) SystemRandom) namedtuplez./c@seZdZdZddZdS)_MethodziClass representing a salt method per the Modular Crypt Format or the legacy 2-character crypt method.cCs d|jS)Nz)formatname)selfr /usr/lib64/python3.9/crypt.py__repr__sz_Method.__repr__N)__name__ __module__ __qualname____doc__r r r r r rsrz name ident salt_chars total_sizeroundscCsB|durtd}|dur4t|ts4t|jjd|js@d}nd|jd}|jr|jddkr|durpd}n@t|d}|d|>krtd d |krd ksntd ||d d7}n^|jdvr|dur d|krdksntd|d|d7}n|dur t|d|d ddt |j D7}|S)zsGenerate a salt for the specified method. If not specified, the strongest available method will be used. 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).0charr r r Bzmksalt..) methods isinstanceint TypeError __class__r ident bit_length ValueErrorjoinrangeZ salt_chars)methodrsZ log_roundsr r r mksalt s2    r.cCs&|dust|trt|}t||S)aRReturn a string representing the one-way hash of a password, with a salt prepended. If ``salt`` is not specified or is ``None``, the strongest available method will be selected and a salt generated. Otherwise, ``salt`` may be one of the ``crypt.METHOD_*`` values, or a string as returned by ``crypt.mksalt()``. N)r#rr._cryptcrypt)Zwordsaltr r r r0Fs r0c Gst|g|R}|td|<t||d}d}ztd|}Wn@ty|}z(|jtjkrfWYd}~dSWYd}~n d}~00|rt||jkrt |dSdS)NZMETHOD_rrFT) rglobalsr.r0OSErrorerrnoEINVALlenZ total_sizer"append)rrargsr,r1resulter r r _add_methodXs   r;SHA512rjSHA256r?)byarZBLOWFISHr;MD51"ZCRYPT )N)N)rsys_sysr/ModuleNotFoundErrorplatform ImportErrorr4string_stringrandomrZ _SystemRandom collectionsrZ _namedtuple ascii_lettersdigitsrrrr.r0r"r;Z_vr6r r r r s4       &