ó õ^‚Rc@sWdZddlZddlZddlmZddlmZ ej ej dZ eƒZ de ddƒfd„ƒYZdd „Zdd „Zed dd d ƒZeddddƒZeddddƒZeddddƒZgZxQeeefD]@ZedeƒZerüeeƒejkrüejeƒqüqüWejeƒ[[dS(s»Wrapper to the POSIX crypt library call and associated functionality. Note that the ``methods`` and ``METHOD_*`` attributes are non-standard extensions to Python 2.7, backported from 3.3iÿÿÿÿN(t SystemRandom(t namedtuples./t_Methods name ident salt_chars total_sizecBseZdZd„ZRS(siClass representing a salt method per the Modular Crypt Format or the legacy 2-character crypt method.cCs d|jS(Ns(tname(tself((s/usr/lib/python2.7/crypt.pyt__repr__s(t__name__t __module__t__doc__R(((s/usr/lib/python2.7/crypt.pyRscCs[|dkrtd}n|jr/d|jnd}|djtjt|jƒƒ7}|S(s»Generate a salt for the specified method. If not specified, the strongest available method will be used. This is a non-standard extension to Python 2.7, backported from 3.3 is$%s$tN(tNonetmethodstidenttjoint_srtsamplet _saltcharst salt_chars(tmethodts((s/usr/lib/python2.7/crypt.pytmksalts   "cCs:|dkst|tƒr*t|ƒ}ntj||ƒS(sNReturn 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()``. Note that these are non-standard extensions to Python 2.7's crypt.crypt() entrypoint, backported from 3.3: the standard Python 2.7 crypt.crypt() entrypoint requires two strings as the parameters, and does not support keyword arguments. N(R t isinstanceRRt_crypttcrypt(twordtsalt((s/usr/lib/python2.7/crypt.pyR'stCRYPTii tMD5t1ii"tSHA256t5ii?tSHA512t6ijR (RRtstringt_stringtrandomRt _SystemRandomt collectionsRt _namedtuplet ascii_letterstdigitsRRRR RRt METHOD_CRYPTt METHOD_MD5t METHOD_SHA256t METHOD_SHA512R t_methodt_resulttlent total_sizetappend(((s/usr/lib/python2.7/crypt.pyts(