JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-39.opt-1.pyc

a

[��f��@s�ddlZddlmZmZmZmZmZddlmZm	Z	m
Z
ddlmZer`ddlm
Z
ddlmZdZgd�ZGd	d
�d
�ZGdd�de�ZdS)
�N)�
TYPE_CHECKING�BinaryIO�Dict�Iterator�List)�HashMismatch�HashMissing�InstallationError)�read_chunks)�_Hash)�NoReturn�sha256)r
Zsha384Zsha512c@s�eZdZdZd#eeeefdd�dd�Zddd�dd�Ze	e
d	�d
d��Zeeed�d
d�Z
eedd�dd�Zeedfdd�dd�Zedd�dd�Zedd�dd�Zed	�dd�Zeed�dd �Ze
d	�d!d"�ZdS)$�HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    N)�hashes�returncCs4i}|dur*|��D]\}}t|�||<q||_dS)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)�items�sorted�_allowed)�selfr�allowed�alg�keys�r�>/usr/lib/python3.9/site-packages/pip/_internal/utils/hashes.py�__init__s
zHashes.__init__)�otherrcsbt|t�stS|s�S�s|Si}|j��D],\�}��jvr@q,��fdd�|D�|�<q,t|�S)Ncsg|]}|�j�vr|�qSr)r)�.0�v�rrrr�
<listcomp>;�z"Hashes.__and__.<locals>.<listcomp>)�
isinstancer�NotImplementedrr)rr�new�valuesrrr�__and__+s

zHashes.__and__�rcCstdd�|j��D��S)Ncss|]}t|�VqdS�N)�len)rZdigestsrrr�	<genexpr>@r z&Hashes.digest_count.<locals>.<genexpr>)�sumrr$�rrrr�digest_count>szHashes.digest_count)�	hash_name�
hex_digestrcCs||j�|g�vS)z/Return whether the given hex digest is allowed.)r�get)rr-r.rrr�is_hash_allowedBszHashes.is_hash_allowed)�chunksrc
Cs�i}|j��D]<}zt�|�||<WqttfyHtd|����Yq0q|D]}|��D]}|�|�q\qP|�	�D] \}}|�
�|j|vrvdSqv|�|�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	r$�updater�	hexdigest�_raise)rr1�gotsr-�chunk�hashZgotrrr�check_against_chunksFszHashes.check_against_chunksrr�r8rcCst|j|��dSr')rr�rr8rrrr7]sz
Hashes._raise)�filercCs|�t|��S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r;r
)rr>rrr�check_against_file`szHashes.check_against_file)�pathrcCs8t|d��}|�|�Wd�S1s*0YdS)N�rb)�openr?)rr@r>rrr�check_against_pathhszHashes.check_against_pathcCs
t|j�S)z,Return whether I know any known-good hashes.)�boolrr+rrr�__bool__lszHashes.__bool__cCst|t�stS|j|jkSr')r!rr"r)rrrrr�__eq__ps
z
Hashes.__eq__cCs"td�tdd�|j��D����S)N�,css*|]"\}}|D]}d�||f�VqqdS)�:N)�join)rrZdigest_listZdigestrrrr)xs�z"Hashes.__hash__.<locals>.<genexpr>)r:rIrrrr+rrr�__hash__us���zHashes.__hash__)N)�__name__�
__module__�__qualname__�__doc__r�strrrr%�property�intr,rDr0r�bytesr;r7rr?rCrE�objectrFrJrrrrrsrcs>eZdZdZdd��fdd�Zeedfdd�d	d
�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.

    Nr&cst�jtgid�dS)z!Don't offer the ``hashes`` kwarg.)rN)�superr�
FAVORITE_HASHr+��	__class__rrr�szMissingHashes.__init__rrr<cCst|t����dSr')rrVr6r=rrrr7�szMissingHashes._raise)	rKrLrMrNrrrOr7�
__classcell__rrrWrrT�srT)r2�typingrrrrrZpip._internal.exceptionsrrr	Zpip._internal.utils.miscr
rrrVZ
STRONG_HASHESrrTrrrr�<module>sh
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg