+
    i                        ^ RI Ht ^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t
HtHt ^ RIHt ]'       d   ^ RIHt Rt. ROt ! R	 R
4      t ! R R]4      tR# )    )annotationsN)Iterable)TYPE_CHECKINGBinaryIONoReturn)HashMismatchHashMissingInstallationError)read_chunks)_Hashsha256c                      ] tR t^tRtRR R lltR R lt]R R l4       tR	 R
 lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltRtR# )HasheszYA wrapper that builds multiple hashes at once and checks them against
known-good values

Nc                    V ^8  d   QhRRRR/# )   hasheszdict[str, list[str]] | NonereturnNone )formats   "`/Users/ahmad/.openclaw/workspace/venv/lib/python3.14/site-packages/pip/_internal/utils/hashes.py__annotate__Hashes.__annotate__   s     
  
 : 
 d 
     c                    / pVeD   VP                  4        F/  w  r4\        V4       Uu. uF  qUP                  4       NK  	  upW#&   K1  	  W n        R# u upi )zW
:param hashes: A dict of algorithm names pointing to lists of allowed
    hex digests
N)itemssortedlower_allowed)selfr   allowedalgkeysks   &&    r   __init__Hashes.__init__   sL    
 #\\^	39$<@<a	<@ ,    As   Ac                    V ^8  d   QhRRRR/# )r   otherr   r   r   )r   s   "r   r   r   *   s      V  r   c                	J   \        V\        4      '       g   \        # V'       g   V # V '       g   V# / pVP                  P	                  4        FD  w  r4W0P                  9  d   K  V Uu. uF  qUV P                  V,          9   g   K  VNK   	  upW#&   KF  	  \        V4      # u upi N)
isinstancer   NotImplementedr   r   )r    r(   newr"   valuesvs   &&    r   __and__Hashes.__and__*   s    %((!! KL  >>//1KC--'#)E6a$--2D-D6ECH 2 c{ Fs   (B B c                   V ^8  d   QhRR/# r   r   intr   )r   s   "r   r   r   >   s     G Gc Gr   c                	V    \        R  V P                  P                  4        4       4      # )c              3  8   "   T F  p\        V4      x  K  	  R # 5ir*   )len).0digestss   & r   	<genexpr>&Hashes.digest_count.<locals>.<genexpr>?   s     F/EG3w<</Es   )sumr   r.   r    s   &r   digest_countHashes.digest_count=   s     Ft}}/C/C/EFFFr   c               $    V ^8  d   QhRRRRRR/# )r   	hash_namestr
hex_digestr   boolr   )r   s   "r   r   r   A   s!     > > ># >$ >r   c                >    W P                   P                  V. 4      9   # )z/Return whether the given hex digest is allowed.)r   get)r    rA   rC   s   &&&r   is_hash_allowedHashes.is_hash_allowedA   s    ]]..y"===r   c                    V ^8  d   QhRRRR/# )r   chunkszIterable[bytes]r   r   r   )r   s   "r   r   r   E   s      ? t r   c                   / pV P                   P                  4        F  p \        P                  ! V4      W#&   K  	  V F+  pVP                  4        F  pVP                  V4       K  	  K-  	  VP                  4        F.  w  r6VP                  4       V P                   V,          9   g   K-   R# 	  V P                  V4       R#   \        \
        3 d    \        RT 24      hi ; i)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    rJ   gotsrA   chunkhashgots   &&     r   check_against_chunksHashes.check_against_chunksE   s     ++-IK")++i"8 . EE" &  #jjlNI}}$--	":: + 	D 	* K'*=i[(IJJKs   C C#c                    V ^8  d   QhRRRR/# r   rR   zdict[str, _Hash]r   r   r   )r   s   "r   r   r   \   s     0 0+ 0 0r   c                	.    \        V P                  V4      hr*   )r   r   r    rR   s   &&r   rQ   Hashes._raise\   s    4==$//r   c                    V ^8  d   QhRRRR/# )r   filer   r   r   r   )r   s   "r   r   r   _   s     < <x <D <r   c                6    V P                  \        V4      4      # )zQCheck good hashes against a file-like object

Raise HashMismatch if none match.

)rV   r   )r    r^   s   &&r   check_against_fileHashes.check_against_file_   s     ((T):;;r   c                    V ^8  d   QhRRRR/# )r   pathrB   r   r   r   )r   s   "r   r   r   g   s     1 1s 1t 1r   c                	    \        VR 4      ;_uu_ 4       pV P                  V4      uuRRR4       #   + '       g   i     R# ; i)rbN)openr`   )r    rc   r^   s   && r   check_against_pathHashes.check_against_pathg   s.    $**40 s	   1A	c                    V ^8  d   QhRRRR/# )r   r   zdict[str, str]r   rD   r   )r   s   "r   r   r   k   s       D r   c                l    VP                  4        F  w  r#V P                  W#4      '       g   K   R# 	  R# )z3Return whether any of the given hashes are allowed.TF)r   rG   )r    r   rA   rC   s   &&  r   
has_one_ofHashes.has_one_ofk   s.    %+\\^!I##I:: &4 r   c                   V ^8  d   QhRR/# )r   r   rD   r   )r   s   "r   r   r   r   s     # #$ #r   c                ,    \        V P                  4      # )z,Return whether I know any known-good hashes.)rD   r   r=   s   &r   __bool__Hashes.__bool__r   s    DMM""r   c                    V ^8  d   QhRRRR/# )r   r(   objectr   rD   r   )r   s   "r   r   r   v   s     / /F /t /r   c                	l    \        V\        4      '       g   \        # V P                  VP                  8H  # r*   )r+   r   r,   r   )r    r(   s   &&r   __eq__Hashes.__eq__v   s(    %((!!}}..r   c                   V ^8  d   QhRR/# r3   r   )r   s   "r   r   r   {   s     	
 	
# 	
r   c           	     	    \        R P                  \        R V P                  P	                  4        4       4      4      4      # ),c              3  \   "   T F"  w  rV F  pR P                  W34      x  K  	  K$  	  R# 5i):N)join)r8   r"   digest_listdigests   &   r   r:   "Hashes.__hash__.<locals>.<genexpr>~   s5      ,A("- HHc]++"- ,,As   *,)rT   r{   r   r   r   r=   s   &r   __hash__Hashes.__hash__{   s=    HH ,0MM,?,?,A 
 	
r   )r   r*   )__name__
__module____qualname____firstlineno____doc__r%   r0   propertyr>   rG   rV   rQ   r`   rg   rk   ro   rt   r   __static_attributes__r   r   r   r   r      sY    

 & G G>.0<1#/
	
 	
r   r   c                  >   a  ] tR t^tRtR V 3R lltR R ltRtV ;t# )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.

c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   MissingHashes.__annotate__   s     5 5$ 5r   c                4   < \         SV `  \        . /R7       R# )z!Don't offer the ``hashes`` kwarg.)r   N)superr%   FAVORITE_HASH)r    	__class__s   &r   r%   MissingHashes.__init__   s     	 34r   c                    V ^8  d   QhRRRR/# rY   r   )r   s   "r   r   r      s     ; ;+ ; ;r   c                	J    \        V\        ,          P                  4       4      hr*   )r	   r   rP   r[   s   &&r   rQ   MissingHashes._raise   s    $}-779::r   r   )	r   r   r   r   r   r%   rQ   r   __classcell__)r   s   @r   r   r      s    5 5; ;r   r   )r   sha384sha512)
__future__r   rL   collections.abcr   typingr   r   r   pip._internal.exceptionsr   r	   r
   pip._internal.utils.miscr   r   r   STRONG_HASHESr   r   r   r   r   <module>r      sJ    "  $ 4 4 Q Q 0
 
 /l
 l
^;F ;r   