U ja@sddlZddlmZmZmZmZmZddlmZm Z m Z ddl m Z er`ddlm Z ddlmZdZddd gZGd d d ZGd d d eZdS)N) TYPE_CHECKINGBinaryIODictIteratorList) HashMismatch HashMissingInstallationError) read_chunks)_Hash)NoReturnsha256sha384sha512c@sveZdZdZdddZddZeddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZdS)HasheszaA wrapper that builds multiple hashes at once and checks them against known-good values NcCs4i}|dk r*|D]\}}t|||<q||_dS)zo :param hashes: A dict of algorithm names pointing to lists of allowed hex digests N)itemssorted_allowed)selfhashesallowedalgkeysrr/private/var/folders/k6/_7fsz4ts3b78x3b3xwrxjh_c8s8xv7/T/pip-unpacked-wheel-bug3gbve/pip/_internal/utils/hashes.py__init__s zHashes.__init__csbt|tstS|sSs|Si}|jD],\}jkr@q,fdd|D|<q,t|S)Ncsg|]}|jkr|qSr)r).0vrrrr =sz"Hashes.__and__..) isinstancerNotImplementedrr)rothernewvaluesrrr__and__,s  zHashes.__and__cCstdd|jDS)Ncss|]}t|VqdSN)len)rdigestsrrr Csz&Hashes.digest_count..)sumrr$rrrr digest_count@szHashes.digest_countcCs||j|gkS)z/Return whether the given hex digest is allowed.)rget)r hash_name hex_digestrrris_hash_allowedEszHashes.is_hash_allowedc Csi}|jD]>}zt|||<Wqttfk rJtd|YqXq|D]}|D]}||q^qR| D] \}}| |j|krxdSqx| |dS)zCheck good hashes against ones built from iterable of chunks of data. Raise HashMismatch if none match. zUnknown hash name: N) rrhashlibr# ValueError TypeErrorr r$updater hexdigest_raise)rchunksgotsr.chunkhashgotrrrcheck_against_chunksNs zHashes.check_against_chunkscCst|j|dSr&)rrrr8rrrr6fsz Hashes._raisecCs|t|S)zaCheck good hashes against a file-like object Raise HashMismatch if none match. )r<r )rfilerrrcheck_against_filejszHashes.check_against_filec Cs,t|d}||W5QRSQRXdS)Nrb)openr?)rpathr>rrrcheck_against_pathss zHashes.check_against_pathcCs t|jS)z,Return whether I know any known-good hashes.)boolrr+rrr __nonzero__xszHashes.__nonzero__cCs|Sr&)rEr+rrr__bool__}szHashes.__bool__cCst|tstS|j|jkSr&)r rr!r)rr"rrr__eq__s z Hashes.__eq__cCs"tdtdd|jDS)N,css*|]"\}}|D]}d||fVqqdS):N)join)rrZ digest_listdigestrrrr)sz"Hashes.__hash__..)r:rJrrrr+rrr__hash__szHashes.__hash__)N)__name__ __module__ __qualname____doc__rr%propertyr,r0r<r6r?rCrErFrGrLrrrrrs    rcs(eZdZdZfddZddZZS) MissingHasheszA 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. cstjtgiddS)z!Don't offer the ``hashes`` kwarg.)rN)superr FAVORITE_HASHr+ __class__rrrszMissingHashes.__init__cCst|tdSr&)rrTr5r=rrrr6szMissingHashes._raise)rMrNrOrPrr6 __classcell__rrrUrrRs rR)r1typingrrrrrpip._internal.exceptionsrrr pip._internal.utils.miscr r r rT STRONG_HASHESrrRrrrrs    {