ó
    ¢'Ôi†  ã                  ó¨   • 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r/ S	Qr " S
 S5      r " S S\5      rg)é    )ÚannotationsN)ÚIterable)ÚTYPE_CHECKINGÚBinaryIOÚNoReturn)ÚHashMismatchÚHashMissingÚInstallationError)Úread_chunks)Ú_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         ÚY/var/www/surfInsights/venv3-11/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¸"Ó=Ñ=Ð=r6   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Úgotsr9   Ú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   rE   s     r   rC   ÚHashes._raise\   s   € Ü˜4Ÿ=™=¨$Ó/Ð/r6   c                ó6   • U R                  [        U5      5      $ )zQCheck good hashes against a file-like object

Raise HashMismatch if none match.

)rI   r   )r   Úfiles     r   Úcheck_against_fileÚHashes.check_against_file_   s   € ð ×(Ñ(¬°TÓ):Ó;Ð;r6   c                ór   • [        US5       nU R                  U5      sS S S 5        $ ! , (       d  f       g = f)NÚrb)ÚopenrP   )r   ÚpathrO   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   r9   r:   s       r   Ú
has_one_ofÚHashes.has_one_ofk   s.   € à%+§\¡\¦^Ñ!ˆIØ×#Ñ# I×:Ó:Ùñ &4ð r6   c                ó,   • [        U R                  5      $ )z,Return whether I know any known-good hashes.)Úboolr   r3   s    r   Ú__bool__ÚHashes.__bool__r   s   € ä�D—M‘MÓ"Ð"r6   c                ój   • [        U[        5      (       d  [        $ U R                  UR                  :H  $ r"   )r#   r   r$   r   )r   r%   s     r   Ú__eq__ÚHashes.__eq__v   s(   € Ü˜%¤×(Ñ(Ü!Ð!Ø�}‰} §¡Ñ.Ð.r6   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   r0   Ú"Hashes.__hash__.<locals>.<genexpr>~   s5   é € ð â,AÑ(˜Ü"-˜ð —H‘H˜c˜]×+Ð+á"-ñ ,Ú,Aùs   ‚+-)rG   rf   r   r   r   r3   s    r   Ú__hash__ÚHashes.__hash__{   s=   € ÜØ�H‰HÜñ à,0¯M©M×,?Ñ,?Ô,Aóó óó
ð 	
r6   )r   r"   )r   zdict[str, list[str]] | NoneÚreturnÚNone)r%   r   rl   r   )rl   Úint)r9   Ústrr:   ro   rl   r\   )rD   zIterable[bytes]rl   rm   ©rE   zdict[str, _Hash]rl   r   )rO   r   rl   rm   )rU   ro   rl   rm   )r   zdict[str, str]rl   r\   )rl   r\   )r%   Úobjectrl   r\   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r)   Úpropertyr4   r;   rI   rC   rP   rV   rY   r]   r`   rj   Ú__static_attributes__© r6   r   r   r      sT   † ñö

 ôð& óGó ðGô>ôô.0ô<ô1ôô#ô/÷
	
r6   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ÐÒ4r6   c                óB   • [        U[           R                  5       5      er"   )r	   r   rB   rL   s     r   rC   ÚMissingHashes._raise•   s   € Ü˜$œ}Ñ-×7Ñ7Ó9Ó:Ð:r6   ry   )rl   rm   rp   )	rr   rs   rt   ru   rv   r   rC   rx   Ú__classcell__)r€   s   @r   r{   r{   ‡   s   ø† ñ÷5÷;ò ;r6   r{   )Ú
__future__r   r>   Úcollections.abcr   Útypingr   r   r   Úpip._internal.exceptionsr   r	   r
   Úpip._internal.utils.miscr   r   r   ÚSTRONG_HASHESr   r{   ry   r6   r   Ú<module>r‹      sJ   ðÝ "ã Ý $ß 4Ñ 4ç QÑ QÝ 0æÝð
 €ò
 /€÷l
ñ l
ô^;�Fõ ;r6   