
    dh                        d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZmZ d dlmZ erd dlmZ dZg d	Z G d
 d      Z G d de      Zy)    )annotationsN)Iterable)TYPE_CHECKINGBinaryIONoReturn)HashMismatchHashMissingInstallationError)read_chunks)_Hashsha256)r   sha384sha512c                  |    e Zd ZdZdddZddZedd       ZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZy)HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    Nc                    i }|B|j                         D ]/  \  }}t        |      D cg c]  }|j                          c}||<   1 || _        yc c}w )zo
        :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         \/var/www/html/vivango/api/ia/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py__init__zHashes.__init__   sW    
 #\\^ A	T39$<@a	@A    As   Ac                   t        |t              st        S |s| S | s|S i }|j                  j	                         D ]9  \  }}|| j                  vr|D cg c]  }|| j                  |   v s| c}||<   ; t        |      S c c}w N)
isinstancer   NotImplementedr   r   )r   othernewr   valuesvs         r   __and__zHashes.__and__*   s    %(!! KL  >>//1 	FKC$--'#)EaQ$--2D-DECH	F c{ Fs   B+Bc                V    t        d | j                  j                         D              S )Nc              3  2   K   | ]  }t        |        y wr    )len).0digestss     r   	<genexpr>z&Hashes.digest_count.<locals>.<genexpr>?   s     FG3w<Fs   )sumr   r%   r   s    r   digest_countzHashes.digest_count=   s     Ft}}/C/C/EFFF    c                >    || j                   j                  |g       v S )z/Return whether the given hex digest is allowed.)r   get)r   	hash_name
hex_digests      r   is_hash_allowedzHashes.is_hash_allowedA   s    T]]..y"===r1   c                   i }| j                   j                         D ]  }	 t        j                  |      ||<    |D ](  }|j                         D ]  }|j                  |        * |j                         D ]&  \  }}|j                         | j                   |   v s& y | j                  |       y# t        t
        f$ r t        d|       w xY w)zCheck 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gotsr4   chunkhashgots          r   check_against_chunkszHashes.check_against_chunksE   s     ++- 	KIK")++i"8Y	K  	#E #E"#	# #jjl 	NIs}}$--	"::	 	D 	* K'*=i[(IJJKs   B33Cc                .    t        | j                  |      r    )r   r   r   r?   s     r   r=   zHashes._raise\   s    4==$//r1   c                6    | j                  t        |            S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rC   r   )r   files     r   check_against_filezHashes.check_against_file_   s     ((T):;;r1   c                h    t        |d      5 }| j                  |      cd d d        S # 1 sw Y   y xY w)Nrb)openrH   )r   pathrG   s      r   check_against_pathzHashes.check_against_pathg   s1    $ 	1**40	1 	1 	1s   (1c                \    |j                         D ]  \  }}| j                  ||      s y y)z3Return whether any of the given hashes are allowed.TF)r   r6   )r   r   r4   r5   s       r   
has_one_ofzHashes.has_one_ofk   s4    %+\\^ 	!Iz##Iz:	 r1   c                ,    t        | j                        S )z,Return whether I know any known-good hashes.)boolr   r/   s    r   __bool__zHashes.__bool__r   s    DMM""r1   c                `    t        |t              st        S | j                  |j                  k(  S r    )r!   r   r"   r   )r   r#   s     r   __eq__zHashes.__eq__v   s%    %(!!}}..r1   c           	         t        dj                  t        d | j                  j	                         D                          S )N,c              3  V   K   | ]!  \  }}|D ]  }d j                  ||f        # yw):N)join)r+   r   digest_listdigests       r   r-   z"Hashes.__hash__.<locals>.<genexpr>~   s>      (["-  HHc6]++s   '))rA   rY   r   r   r   r/   s    r   __hash__zHashes.__hash__{   s=    HH ,0MM,?,?,A 
 	
r1   r    )r   zdict[str, list[str]] | NonereturnNone)r#   r   r]   r   )r]   int)r4   strr5   r`   r]   rQ   )r>   zIterable[bytes]r]   r^   r?   zdict[str, _Hash]r]   r   )rG   r   r]   r^   )rL   r`   r]   r^   )r   zdict[str, str]r]   rQ   )r]   rQ   )r#   objectr]   rQ   )__name__
__module____qualname____doc__r   r'   propertyr0   r6   rC   r=   rH   rM   rO   rR   rT   r\    r1   r   r   r      sT    

 & G G>.0<1#/
	
r1   r   c                  ,     e Zd ZdZd fdZddZ xZS )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                2    t         |   t        g i       y)z!Don't offer the ``hashes`` kwarg.)r   N)superr   FAVORITE_HASH)r   	__class__s    r   r   zMissingHashes.__init__   s     	 34r1   c                B    t        |t           j                               r    )r	   rm   r<   rE   s     r   r=   zMissingHashes._raise   s    $}-779::r1   )r]   r^   ra   )rc   rd   re   rf   r   r=   __classcell__)rn   s   @r   rj   rj      s    5;r1   rj   )
__future__r   r8   collections.abcr   typingr   r   r   pip._internal.exceptionsr   r	   r
   pip._internal.utils.miscr   r   rm   STRONG_HASHESr   rj   rh   r1   r   <module>rw      sJ    "  $ 4 4 Q Q 0
 
 /l
 l
^;F ;r1   