3

Q'íc2ã@szddlmZddlZddlmZmZmZddlmZddl	m
Z
mZmZdZ
dddgZGd	d
„d
eƒZGdd„deƒZdS)
é)Úabsolute_importN)ÚHashMismatchÚHashMissingÚInstallationError)Úread_chunks)Ú	iteritemsÚiterkeysÚ
itervaluesÚsha256Úsha384Úsha512c@sJeZdZdZddd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dd„Z
dS)ÚHasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    NcCs|dkrin||_dS)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)Ú_allowed)ÚselfÚhashes©rú//tmp/pip-build-l_bcah40/pip/pip/utils/hashes.pyÚ__init__szHashes.__init__c
Cs´i}xJt|jƒD]<}ytj|ƒ||<Wqttfk
rJtd|ƒ‚YqXqWx(|D] }xt|ƒD]}|j|ƒqdWqVWx*t	|ƒD]\}}|j
ƒ|j|kr„dSq„W|j|ƒdS)z‚Check good hashes against ones built from iterable of chunks of
        data.

        Raise HashMismatch if none match.

        zUnknown hash name: %sN)rrÚhashlibÚnewÚ
ValueErrorÚ	TypeErrorrr	ÚupdaterÚ	hexdigestÚ_raise)rÚchunksÚgotsÚ	hash_nameÚchunkÚhashÚgotrrrÚcheck_against_chunks s
zHashes.check_against_chunkscCst|j|ƒ‚dS)N)rr)rrrrrr7sz
Hashes._raisecCs|jt|ƒƒS)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r!r)rÚfilerrrÚcheck_against_file:szHashes.check_against_filec	Cs t|dƒ}|j|ƒSQRXdS)NÚrb)Úopenr#)rÚpathr"rrrÚcheck_against_pathBszHashes.check_against_pathcCs
t|jƒS)z,Return whether I know any known-good hashes.)Úboolr)rrrrÚ__nonzero__FszHashes.__nonzero__cCs|jƒS)N)r))rrrrÚ__bool__JszHashes.__bool__)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rr!rr#r'r)r*rrrrr
s
r
cs(eZdZdZ‡fdd„Zdd„Z‡ZS)Ú
MissingHasheszÀ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.

    cstt|ƒjtgiddS)z!Don't offer the ``hashes`` kwarg.)rN)Úsuperr/rÚ
FAVORITE_HASH)r)Ú	__class__rrrUszMissingHashes.__init__cCst|tjƒƒ‚dS)N)rr1r)rrrrrr[szMissingHashes._raise)r+r,r-r.rrÚ
__classcell__rr)r2rr/Nsr/)Ú
__future__rrÚpip.exceptionsrrrÚ	pip.utilsrZpip._vendor.sixrrr	r1Ú
STRONG_HASHESÚobjectr
r/rrrrÚ<module>s
: