+
    <jl                         ^ RI t ^ RIHtHtHtHt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# )    N)TYPE_CHECKINGBinaryIODictIterableListNoReturnOptional)HashMismatchHashMissingInstallationError)read_chunks)_Hashsha256c                   
  a  ] tR t^t o RtRV 3R lR lltV 3R lR lt]V 3R lR l4       tV 3R	 lR
 lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )HasheszYA wrapper that builds multiple hashes at once and checks them against
known-good values

Nc                Z   < V ^8  d   QhRS[ S[S[S[S[,          3,          ,          RR/# )   hashesreturnN)r	   r   strr   )format__classdict__s   "O/opt/headortail/venv/lib/python3.14/site-packages/pip/_internal/utils/hashes.py__annotate__Hashes.__annotate__   s-     
  
 xS$s)^(<= 
  
     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      X ( 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S[ /# r   r   int)r   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!   r1   r"   s   &r   digest_countHashes.digest_count:   s     Ft}}/C/C/EFFFr   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )r   	hash_name
hex_digestr   )r   bool)r   r   s   "r   r   r   >   s"     > > ># >$ >r   c                >    W P                   P                  V. 4      9   # )z/Return whether the given hex digest is allowed.)r!   get)r"   rE   rF   s   &&&r   is_hash_allowedHashes.is_hash_allowed>   s    ]]..y"===r   c                4   < V ^8  d   QhRS[ S[,          RR/# )r   chunksr   N)r   bytes)r   r   s   "r   r   r   B   s      8E? 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%   hashlibr0   
ValueError	TypeErrorr   r1   updater   	hexdigest_raise)r"   rM   gotsrE   chunkhashgots   &&     r   check_against_chunksHashes.check_against_chunksB   s     ++-IK")++i"8 . EE" &  #jjlNI}}$--	":: + 	D 	* K'*=i[(IJJKs   C C#c                8   < V ^8  d   QhRS[ S[R3,          RR/# r   rV   r   r   r   r   r   )r   r   s   "r   r   r   Y   s$     0 04W- 0* 0r   c                .    \        V P                  V4      hr-   )r
   r!   r"   rV   s   &&r   rU   Hashes._raiseY   s    4==$//r   c                $   < V ^8  d   QhRS[ RR/# )r   filer   N)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.

)rZ   r   )r"   rc   s   &&r   check_against_fileHashes.check_against_file\   s     ((T):;;r   c                $   < V ^8  d   QhRS[ RR/# )r   pathr   N)r   )r   r   s   "r   r   r   d   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)openre   )r"   rh   rc   s   && r   check_against_pathHashes.check_against_pathd   s.    $**40 s	   1A	c                <   < V ^8  d   QhRS[ S[S[3,          RS[/# )r   r   r   )r   r   rG   )r   r   s   "r   r   r   h   s#      c3h 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   rJ   )r"   r   rE   rF   s   &&  r   
has_one_ofHashes.has_one_ofh   s.    %+\\^!I##I:: &4 r   c                    < V ^8  d   QhRS[ /# r6   )rG   )r   r   s   "r   r   r   o   s     # #$ #r   c                ,    \        V P                  4      # )z,Return whether I know any known-good hashes.)rG   r!   rA   s   &r   __bool__Hashes.__bool__o   s    DMM""r   c                &   < V ^8  d   QhRS[ RS[/# )r   r*   r   )objectrG   )r   r   s   "r   r   r   s   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__s   s(    %((!!}}..r   c                    < V ^8  d   QhRS[ /# r6   r7   )r   r   s   "r   r   r   x   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)r<   r$   digest_listdigests   &   r   r>   "Hashes.__hash__.<locals>.<genexpr>{   s5      ,A("- HHc]++"- ,,As   *,)rX   r   r   r!   r   rA   s   &r   __hash__Hashes.__hash__x   s=    HH ,0MM,?,?,A 
 	
r   )r!   r-   )__name__
__module____qualname____firstlineno____doc__r'   r3   propertyrB   rJ   rZ   rU   re   rl   rp   rt   ry   r   __static_attributes____classdictcell__)r   s   @r   r   r      s     

  
  & G G> > .0 0< <1 1 # #/ /
	
 	
r   r   c                   T   a a ] tR t^t oRtV3R lV 3R lltV3R lR ltRtV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   Nr+   )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                8   < V ^8  d   QhRS[ S[R3,          RR/# r]   r^   )r   r   s   "r   r   r      s$     ; ;4W- ;* ;r   c                J    \        V\        ,          P                  4       4      hr-   )r   r   rT   r`   s   &&r   rU   MissingHashes._raise   s    $}-779::r   r+   )
r   r   r   r   r   r'   rU   r   r   __classcell__)r   r   s   @@r   r   r      s#     5 5; ; ;r   r   )r   sha384sha512)rP   typingr   r   r   r   r   r   r	   pip._internal.exceptionsr
   r   r   pip._internal.utils.miscr   r   r   STRONG_HASHESr   r   r+   r   r   <module>r      sG     T T T Q Q 0
 
 /l
 l
^;F ;r   