3 ReF@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-python36-pip-20.2.4-5.el9.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_internal/utils/hashes.py__init__)szHashes.__init__csft|tstS|sSs|Si}x:t|jD],\}jkrBq.fdd|D|<q.Wt|S)Ncsg|]}|jkr|qSr)r).0v)algrrr Bsz"Hashes.__and__..) isinstancerNotImplementedrr)rothernewvaluesr)rrr__and__1s  zHashes.__and__cCstdd|jjDS)Ncss|]}t|VqdS)N)len)rdigestsrrr Hsz&Hashes.digest_count..)sumrr%)rrrr digest_countEszHashes.digest_countcCs||jj|gkS)z/Return whether the given hex digest is allowed.)rget)r hash_name hex_digestrrris_hash_allowedJszHashes.is_hash_allowedc Csi}xLt|jD]>}ytj|||<Wqttfk rLtdj|YqXqWx(|D] }xt|D]}|j |qfWqXWx*t |D]\}}|j |j|krdSqW|j |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)rchunksgotsr-chunkhashgotrrrcheck_against_chunksSs zHashes.check_against_chunkscCst|j|dS)N)rr)rr8rrrr6msz Hashes._raisecCs|jt|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 }|j|SQRXdS)Nrb)openr>)rpathr=rrrcheck_against_pathzs zHashes.check_against_pathcCs t|jS)z,Return whether I know any known-good hashes.)boolr)rrrr __nonzero__szHashes.__nonzero__cCs|jS)N)rD)rrrr__bool__szHashes.__bool__)N)__name__ __module__ __qualname____doc__rr&propertyr+r/r<r6r>rBrDrErrrrr$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)superrKr FAVORITE_HASH)r) __class__rrrszMissingHashes.__init__cCst|tjdS)N)rrMr5)rr8rrrr6szMissingHashes._raise)rFrGrHrIrr6 __classcell__rr)rNrrKs rK) __future__rr0Zpip._vendor.sixrrrpip._internal.exceptionsrrrpip._internal.utils.miscr pip._internal.utils.typingr typingr r r rrrrrrM STRONG_HASHESobjectrrKrrrrs      e