U v_F@sddlmZddlZddlmZmZmZddlmZm Z m Z ddl m Z ddl mZerddlmZmZmZmZmZddlmZerdd lmZn dd lmZd Zd d d gZGdddeZGdddeZdS))absolute_importN) iteritemsiterkeys itervalues) HashMismatch HashMissingInstallationError) read_chunks)MYPY_CHECK_RUNNING)DictListBinaryIONoReturnIterator)PY3)_Hash)_hashsha256sha384sha512c@sfeZdZdZdddZddZeddZd d Zd d Z d dZ ddZ ddZ ddZ ddZdS)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)selfhashesr/builddir/build/BUILDROOT/alt-python38-pip-20.2.4-1.el7.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/utils/hashes.py__init__)szHashes.__init__csbt|tstS|sSs|Si}t|jD],\}jkr@q,fdd|D|<q,t|S)Ncsg|]}|jkr|qSrr).0valgrrr Bsz"Hashes.__and__..) isinstancerNotImplementedrr)rothernewvaluesrr r__and__1s  zHashes.__and__cCstdd|jDS)Ncss|]}t|VqdSN)len)rdigestsrrr Hsz&Hashes.digest_count..)sumrr'rrrr digest_countEszHashes.digest_countcCs||j|gkS)z/Return whether the given hex digest is allowed.)rget)r hash_name hex_digestrrris_hash_allowedJszHashes.is_hash_allowedc Csi}t|jD]>}zt|||<Wqttfk rJtd|YqXq|D]}t|D]}| |q^qRt |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 TypeErrorrformatrupdater hexdigest_raise)rchunksgotsr1chunkhashgotrrrcheck_against_chunksSs  zHashes.check_against_chunkscCst|j|dSr))rrrr<rrrr:msz Hashes._raisecCs|t|S)zaCheck good hashes against a file-like object Raise HashMismatch if none match. )r@r )rfilerrrcheck_against_fileqszHashes.check_against_filec Cs,t|d}||W5QRSQRXdS)Nrb)openrC)rpathrBrrrcheck_against_pathzs zHashes.check_against_pathcCs t|jS)z,Return whether I know any known-good hashes.)boolrr.rrr __nonzero__szHashes.__nonzero__cCs|Sr))rIr.rrr__bool__szHashes.__bool__)N)__name__ __module__ __qualname____doc__rr(propertyr/r3r@r:rCrGrIrJrrrrr$s    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. cstt|jtgiddS)z!Don't offer the ``hashes`` kwarg.)rN)superrPr FAVORITE_HASHr. __class__rrrszMissingHashes.__init__cCst|tdSr))rrRr9rArrrr:szMissingHashes._raise)rKrLrMrNrr: __classcell__rrrSrrPs rP) __future__rr4Zpip._vendor.sixrrrpip._internal.exceptionsrrrpip._internal.utils.miscr pip._internal.utils.typingr typingr r r rrrrrrR STRONG_HASHESobjectrrPrrrrs      e