
    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         k/root/GenerationalWealth/GenerationalWealth/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  >>//1KC--'#)E6a$--2D-D6ECH 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/EG3w<</Es   )sumr   r(   r   s    r   digest_countHashes.digest_count=   s     Ft}}/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" &  #jjlNI}}$--	":: + 	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    DMM""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("- HHc]++"- ,,As   +-)rH   rg   r   r   r   r4   s    r   __hash__Hashes.__hash__{   s=    HH ,0MM,?,?,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   zA 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   