ó
    T=Œj°  ã                  ó´   • S SK Jr  S SKrS SKJr  S SKJrJrJr  S SK	J
r
JrJr  S SKJr  \(       a  S SKJr  S SKJr  S	r/ S
Qr " S S5      r " S S\5      rg)é    )ÚannotationsN)ÚIterable)ÚTYPE_CHECKINGÚBinaryIOÚNoReturn)ÚHashMismatchÚHashMissingÚInstallationError)Úread_chunks)ÚMapping)Ú_HashÚsha256)r   Úsha384Úsha512c                  óž   • \ rS rSrSrSSS jjrSS jr\SS j5       rSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSrg)ÚHashesé   zYA wrapper that builds multiple hashes at once and checks them against
known-good values

Nc                ó¬   • 0 nUbD  UR                  5        H0  u  p4[        U5       Vs/ s H  oUR                  5       PM     snX#'   M2     X l        gs  snf )zW
:param hashes: A dict of algorithm names pointing to lists of allowed
    hex digests
N)ÚitemsÚsortedÚlowerÚ_allowed)ÚselfÚhashesÚallowedÚalgÚkeysÚks         Ú^/Users/stevendouglas/BidBrain/.venv/lib/python3.13/site-packages/pip/_internal/utils/hashes.pyÚ__init__ÚHashes.__init__   sL   € ð
 ˆØÑØ#Ÿ\™\ž^‘	�ä39¸$´<Ó@²<¨a§¡¦	±<Ñ@�“ñ ,ð  �ùò  As   ¨Ac                ó:  • [        U[        5      (       d  [        $ U(       d  U $ U (       d  U$ 0 nUR                  R	                  5        H?  u  p4X0R                  ;  a  M  U Vs/ s H  oUU R                  U   ;   d  M  UPM     snX#'   MA     [        U5      $ s  snf ©N)Ú
isinstancer   ÚNotImplementedr   r   )r   ÚotherÚnewr   ÚvaluesÚvs         r   Ú__and__ÚHashes.__and__*   sŠ   € Ü˜%¤×(Ñ(Ü!Ð!ö ØˆKÞØˆLð ˆØ Ÿ>™>×/Ñ/Ö1‰KˆCØŸ-™-Ó'ÙÙ#)ÓE¢6˜a°$·-±-ÀÑ2DÑ-DŸ¡6ÑEˆC‹Hñ 2ô �c‹{Ðùò Fs   Á$BÁ>Bc                óV   • [        S U R                  R                  5        5       5      $ )Nc              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr#   )Úlen)Ú.0Údigestss     r   Ú	<genexpr>Ú&Hashes.digest_count.<locals>.<genexpr>?   s   é € ÐFÒ/E G”3�w—<�<Ò/Eùs   ‚)Úsumr   r(   ©r   s    r   Údigest_countÚHashes.digest_count=   s    € äÑF¨t¯}©}×/CÑ/CÔ/EÓFÓFÐFó    c                ó>   • X R                   R                  U/ 5      ;   $ )z/Return whether the given hex digest is allowed.)r   Úget)r   Ú	hash_nameÚ
hex_digests      r   Úis_hash_allowedÚHashes.is_hash_allowedA   s   € àŸ]™]×.Ñ.¨y¸"Ó=Ñ=Ð=r7   c                ó¼  • 0 nU R                   R                  5        H  n [        R                  " U5      X#'   M     U H+  nUR                  5        H  nUR                  U5        M     M-     UR                  5        H(  u  p6UR                  5       U R                   U   ;   d  M(    g   U R                  U5        g! [        [
        4 a    [        SU 35      ef = f)zjCheck good hashes against ones built from iterable of chunks of
data.

Raise HashMismatch if none match.

zUnknown hash name: N)r   r   Úhashlibr'   Ú
ValueErrorÚ	TypeErrorr
   r(   Úupdater   Ú	hexdigestÚ_raise)r   ÚchunksÚgotsr:   ÚchunkÚhashÚgots          r   Úcheck_against_chunksÚHashes.check_against_chunksE   sÅ   € ð ˆØŸ™×+Ñ+Ö-ˆIðKÜ")§+¢+¨iÓ"8�“ñ .ó ˆEØŸ™ž�Ø—‘˜EÖ"ó &ñ ð #Ÿj™jžl‰NˆIØ�}‰}‹ $§-¡-°	Ñ":Õ:Ùñ +ð 	�‰�DÕøô ¤	Ð*ó KÜ'Ð*=¸i¸[Ð(IÓJÐJðKús   ¡B<Â<Cc                ó.   • [        U R                  U5      er#   )r   r   ©r   rF   s     r   rD   ÚHashes._raise\   s   € Ü˜4Ÿ=™=¨$Ó/Ð/r7   c                ó6   • U R                  [        U5      5      $ )zQCheck good hashes against a file-like object

Raise HashMismatch if none match.

)rJ   r   )r   Úfiles     r   Úcheck_against_fileÚHashes.check_against_file_   s   € ð ×(Ñ(¬°TÓ):Ó;Ð;r7   c                ór   • [        US5       nU R                  U5      sS S S 5        $ ! , (       d  f       g = f)NÚrb)ÚopenrQ   )r   ÚpathrP   s      r   Úcheck_against_pathÚHashes.check_against_pathg   s(   € Ü�$˜Ô Ø×*Ñ*¨4Ó0÷ ××ús   �(¨
6c                óf   • UR                  5        H  u  p#U R                  X#5      (       d  M    g   g)z3Return whether any of the given hashes are allowed.TF)r   r<   )r   r   r:   r;   s       r   Ú
has_one_ofÚHashes.has_one_ofk   s.   € à%+§\¡\¦^Ñ!ˆIØ×#Ñ# I×:Ó:Ùñ &4ð r7   c                ó,   • [        U R                  5      $ )z,Return whether I know any known-good hashes.)Úboolr   r4   s    r   Ú__bool__ÚHashes.__bool__r   s   € ä�D—M‘MÓ"Ð"r7   c                ój   • [        U[        5      (       d  [        $ U R                  UR                  :H  $ r#   )r$   r   r%   r   )r   r&   s     r   Ú__eq__ÚHashes.__eq__v   s(   € Ü˜%¤×(Ñ(Ü!Ð!Ø�}‰} §¡Ñ.Ð.r7   c           	     ó†   • [        SR                  [        S U R                  R	                  5        5       5      5      5      $ )NÚ,c              3  ó^   #   • U  H#  u  pU  H  nS R                  X45      v •  M     M%     g7f)Ú:N)Újoin)r/   r   Údigest_listÚdigests       r   r1   Ú"Hashes.__hash__.<locals>.<genexpr>~   s5   é € ð â,AÑ(˜Ü"-˜ð —H‘H˜c˜]×+Ð+á"-ñ ,Ú,Aùs   ‚+-)rH   rg   r   r   r   r4   s    r   Ú__hash__ÚHashes.__hash__{   s=   € ÜØ�H‰HÜñ à,0¯M©M×,?Ñ,?Ô,Aóó óó
ð 	
r7   )r   r#   )r   zdict[str, list[str]] | NoneÚreturnÚNone)r&   r   rm   r   )rm   Úint)r:   Ústrr;   rp   rm   r]   )rE   zIterable[bytes]rm   rn   ©rF   zdict[str, _Hash]rm   r   )rP   r   rm   rn   )rV   rp   rm   rn   )r   zMapping[str, str]rm   r]   )rm   r]   )r&   Úobjectrm   r]   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r    r*   Úpropertyr5   r<   rJ   rD   rQ   rW   rZ   r^   ra   rk   Ú__static_attributes__© r7   r   r   r      sT   † ñö

 ôð& óGó ðGô>ôô.0ô<ô1ôô#ô/÷
	
r7   r   c                  ó:   ^ • \ rS rSrSrSU 4S jjrSS jrSrU =r$ )ÚMissingHashesé‡   z´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.

c                ó,   >• [         TU ]  [        / 0S9  g)z!Don't offer the ``hashes`` kwarg.)r   N)Úsuperr    ÚFAVORITE_HASH)r   Ú	__class__s    €r   r    ÚMissingHashes.__init__�   s   ø€ ô 	‰Ñ¤°Ð 3ÐÒ4r7   c                óB   • [        U[           R                  5       5      er#   )r	   r€   rC   rM   s     r   rD   ÚMissingHashes._raise•   s   € Ü˜$œ}Ñ-×7Ñ7Ó9Ó:Ð:r7   rz   )rm   rn   rq   )	rs   rt   ru   rv   rw   r    rD   ry   Ú__classcell__)r�   s   @r   r|   r|   ‡   s   ø† ñ÷5÷;ò ;r7   r|   )Ú
__future__r   r?   Úcollections.abcr   Útypingr   r   r   Úpip._internal.exceptionsr   r	   r
   Úpip._internal.utils.miscr   r   r   r€   ÚSTRONG_HASHESr   r|   rz   r7   r   Ú<module>rŒ      sM   ðÝ "ã Ý $ß 4Ñ 4ç QÑ QÝ 0æÝ'Ýð €ò
 /€÷l
ñ l
ô^;�Fõ ;r7   