Viewing File: /opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyo

ó
“tÆ_c@@s#ddlmZddlZddlmZmZmZddlmZm	Z	m
Z
ddlmZddl
mZerÞddlmZmZmZmZmZddlmZerËdd	lmZqÞdd
lmZndZddd
gZdefd„ƒYZdefd„ƒYZdS(i(tabsolute_importN(t	iteritemstiterkeyst
itervalues(tHashMismatchtHashMissingtInstallationError(tread_chunks(tMYPY_CHECK_RUNNING(tDicttListtBinaryIOtNoReturntIterator(tPY3(t_Hash(t_hashtsha256tsha384tsha512tHashescB@sqeZdZdd„Zd„Zed„ƒZd„Zd„Z	d„Z
d„Zd„Zd	„Z
d
„ZRS(saA wrapper that builds multiple hashes at once and checks them against
    known-good values

    cC@s|dkrin||_dS(so
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N(tNonet_allowed(tselfthashes((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyt__init__)scC@sœt|tƒstS|s|S|s'|Si}xbt|jƒD]Q\}}||jkr^q=ng|D]}||j|kre|^qe||<q=Wt|ƒS(N(t
isinstanceRtNotImplementedRR(Rtothertnewtalgtvaluestv((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyt__and__1s4cC@std„|jjƒDƒƒS(Ncs@s|]}t|ƒVqdS(N(tlen(t.0tdigests((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pys	<genexpr>Hs(tsumRR(R((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pytdigest_countEscC@s||jj|gƒkS(s/Return whether the given hex digest is allowed.(Rtget(Rt	hash_namet
hex_digest((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pytis_hash_allowedJscC@sæi}x]t|jƒD]L}ytj|ƒ||<Wqttfk
ratdj|ƒƒ‚qXqWx2|D]*}x!t|ƒD]}|j	|ƒq€WqmWx7t
|ƒD])\}}|jƒ|j|kr¨dSq¨W|j|ƒdS(s‚Check good hashes against ones built from iterable of chunks of
        data.

        Raise HashMismatch if none match.

        sUnknown hash name: {}N(
RRthashlibRt
ValueErrort	TypeErrorRtformatRtupdateRt	hexdigestt_raise(RtchunkstgotsR(tchunkthashtgot((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pytcheck_against_chunksSs
cC@st|j|ƒ‚dS(N(RR(RR3((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyR1mscC@s|jt|ƒƒS(saCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        (R7R(Rtfile((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pytcheck_against_fileqscC@s)t|dƒ}|j|ƒSWdQXdS(Ntrb(topenR9(RtpathR8((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pytcheck_against_pathzscC@s
t|jƒS(s,Return whether I know any known-good hashes.(tboolR(R((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyt__nonzero__scC@s
|jƒS(N(R?(R((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyt__bool__„sN(t__name__t
__module__t__doc__RRR!tpropertyR&R*R7R1R9R=R?R@(((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyR$s									t
MissingHashescB@s eZdZd„Zd„ZRS(sÀA workalike for Hashes used when we're missing a hash for a requirement

    It computes the actual hash of the requirement and raises a HashMissing
    exception showing it to the user.

    cC@s$tt|ƒjdigt6ƒdS(s!Don't offer the ``hashes`` kwarg.RN(tsuperRERt
FAVORITE_HASH(R((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyRscC@st|tjƒƒ‚dS(N(RRGR0(RR3((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyR1—s(RARBRCRR1(((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyRE‰s	(t
__future__RR+tpip._vendor.sixRRRtpip._internal.exceptionsRRRtpip._internal.utils.miscRtpip._internal.utils.typingRttypingR	R
RRR
RRRRGt
STRONG_HASHEStobjectRRE(((sK/opt/alt/python35/lib/python3.5/site-packages/pip/_internal/utils/hashes.pyt<module>s(e
Back to Directory File Manager