3 ”ReFã@sÐddlmZddlZddlmZmZmZddlmZm Z m Z ddl m Z ddl mZeržddlmZmZmZmZmZddlmZer’dd lmZn dd lmZd Zd d d gZGdd„deƒZGdd„deƒZdS)é)Úabsolute_importN)Ú iteritemsÚiterkeysÚ itervalues)Ú HashMismatchÚ HashMissingÚInstallationError)Ú read_chunks)ÚMYPY_CHECK_RUNNING)ÚDictÚListÚBinaryIOÚNoReturnÚIterator)ÚPY3)Ú_Hash)Ú_hashÚsha256Úsha384Úsha512c@sfeZdZdZddd„Zdd„Zedd„ƒZd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„ZdS)Ú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ú‰/builddir/build/BUILDROOT/alt-python36-pip-20.2.4-5.el8.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_internal/utils/hashes.pyÚ__init__)szHashes.__init__csft|tƒstS|sˆSˆs|Si}x:t|jƒD],\‰}ˆˆjkrBq.‡‡fdd„|Dƒ|ˆ<q.Wt|ƒS)Ncsg|]}|ˆjˆkr|‘qSr)r)Ú.0Úv)Úalgrrrú Bsz"Hashes.__and__..)Ú isinstancerÚNotImplementedrr)rÚotherÚnewÚvaluesr)rrrÚ__and__1s  zHashes.__and__cCstdd„|jjƒDƒƒS)Ncss|]}t|ƒVqdS)N)Úlen)rÚdigestsrrrú Hsz&Hashes.digest_count..)Úsumrr%)rrrrÚ digest_countEszHashes.digest_countcCs||jj|gƒkS)z/Return whether the given hex digest is allowed.)rÚget)rÚ hash_nameÚ hex_digestrrrÚis_hash_allowedJszHashes.is_hash_allowedc Cs¶i}xLt|jƒD]>}ytj|ƒ||<Wqttfk rLtdj|ƒƒ‚YqXqWx(|D] }xt|ƒD]}|j |ƒqfWqXWx*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: {}N) rrÚhashlibr$Ú ValueErrorÚ TypeErrorrÚformatrÚupdaterÚ hexdigestÚ_raise)rÚchunksÚgotsr-ÚchunkÚhashÚgotrrrÚcheck_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 )rÚfilerrrÚcheck_against_fileqszHashes.check_against_filec Cs t|dƒ� }|j|ƒSQRXdS)NÚrb)Úopenr>)rÚpathr=rrrÚcheck_against_pathzs zHashes.check_against_pathcCs t|jƒS)z,Return whether I know any known-good hashes.)Úboolr)rrrrÚ __nonzero__szHashes.__nonzero__cCs|jƒS)N)rD)rrrrÚ__bool__„szHashes.__bool__)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr&Úpropertyr+r/r<r6r>rBrDrErrrrr$s    rcs(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)ÚsuperrKrÚ FAVORITE_HASH)r)Ú __class__rrr�szMissingHashes.__init__cCst|tjƒƒ‚dS)N)rrMr5)rr8rrrr6—szMissingHashes._raise)rFrGrHrIrr6Ú __classcell__rr)rNrrK‰s rK)Ú __future__rr0Zpip._vendor.sixrrrÚpip._internal.exceptionsrrrÚpip._internal.utils.miscr Úpip._internal.utils.typingr Útypingr r r rrrrrrMÚ STRONG_HASHESÚobjectrrKrrrrÚs      e