
    жvgl                         d dl Z d dlmZmZmZmZ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dS )    N)TYPE_CHECKINGBinaryIODictIterableListNoReturnOptional)HashMismatchHashMissingInstallationError)read_chunks)_Hashsha256)r   sha384sha512c                   (   e Zd ZdZddeeeee         f                  ddfdZddZ	e
defd            Zd	ed
edefdZdee         ddfdZdeedf         ddfdZdeddfdZdeddfdZdeeef         defdZdefdZdedefdZdefdZdS )HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    Nhashesreturnc                     i }|6|                                 D ]!\  }}d t          |          D             ||<   "|| _        dS )zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        Nc                 6    g | ]}|                                 S  )lower).0ks     W/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py
<listcomp>z#Hashes.__init__.<locals>.<listcomp>$   s     @@@a		@@@    )itemssorted_allowed)selfr   allowedalgkeyss        r   __init__zHashes.__init__   sV    
 #\\^^ A A	T@@6$<<@@@r   otherc                      t          |t                    st          S |s S  s|S i }|j                                        D ]!\  } j        vr fd|D             |<   "t          |          S )Nc                 2    g | ]}|j                  v |S r   )r!   )r   vr$   r"   s     r   r   z"Hashes.__and__.<locals>.<listcomp>7   s*    EEEaQ$-2D-D-D-D-D-Dr   )
isinstancer   NotImplementedr!   r   )r"   r'   newvaluesr$   s   `   @r   __and__zHashes.__and__'   s    %(( 	"!!  	K 	L  >//11 	F 	FKC$-''EEEEE6EEECHHc{{r   c                 b    t          d | j                                        D                       S )Nc              3   4   K   | ]}t          |          V  d S N)len)r   digestss     r   	<genexpr>z&Hashes.digest_count.<locals>.<genexpr><   s(      FFG3w<<FFFFFFr   )sumr!   r.   r"   s    r   digest_countzHashes.digest_count:   s-    FFt}/C/C/E/EFFFFFFr   	hash_name
hex_digestc                 <    || j                             |g           v S )z/Return whether the given hex digest is allowed.)r!   get)r"   r9   r:   s      r   is_hash_allowedzHashes.is_hash_allowed>   s    T]..y"====r   chunksc                    i }| j                                         D ]A}	 t          j        |          ||<   # t          t
          f$ r t          d|           w xY w|D ].}|                                D ]}|                    |           /|	                                D ])\  }}|
                                | j         |         v r dS *|                     |           dS )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"   r>   gotsr9   chunkhashgots          r   check_against_chunkszHashes.check_against_chunksB   s    ++-- 	K 	KIK")+i"8"8Y	* K K K'(Ii(I(IJJJK  	# 	#E # #E""""# #jjll 	 	NIs}}$-	"::: ;Ds	   7$ArF   r   r   c                 ,    t          | j        |          r2   )r
   r!   r"   rF   s     r   rE   zHashes._raiseY   s    4=$///r   filec                 F    |                      t          |                    S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rJ   r   )r"   rM   s     r   check_against_filezHashes.check_against_file\   s      ((T):):;;;r   pathc                     t          |d          5 }|                     |          cd d d            S # 1 swxY w Y   d S )Nrb)openrO   )r"   rP   rM   s      r   check_against_pathzHashes.check_against_pathd   s    $ 	1**400	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   377c                 l    |                                 D ]\  }}|                     ||          r dS dS )z3Return whether any of the given hashes are allowed.TF)r   r=   )r"   r   r9   r:   s       r   
has_one_ofzHashes.has_one_ofh   sG    %+\\^^ 	 	!Iz##Iz:: ttur   c                 *    t          | j                  S )z,Return whether I know any known-good hashes.)boolr!   r7   s    r   __bool__zHashes.__bool__o   s    DM"""r   c                 Z    t          |t                    st          S | j        |j        k    S r2   )r+   r   r,   r!   )r"   r'   s     r   __eq__zHashes.__eq__s   s)    %(( 	"!!}..r   c           	          t          d                    t          d | j                                        D                                           S )N,c              3   T   K   | ]#\  }}|D ]}d                      ||f          V  $dS ):N)join)r   r$   digest_listdigests       r   r5   z"Hashes.__hash__.<locals>.<genexpr>{   sa        (["-   HHc6]++      r   )rH   r`   r    r!   r   r7   s    r   __hash__zHashes.__hash__x   s\    HH  ,0M,?,?,A,A     
 
 	
r   r2   )r'   r   r   r   )__name__
__module____qualname____doc__r	   r   strr   r&   r/   propertyintr8   rX   r=   r   bytesrJ   rE   r   rO   rT   rV   rY   objectr[   rc   r   r   r   r   r      s        

  
 xS$s)^(<= 
  
  
  
  
    & Gc G G G XG> ># >$ > > > >8E? t    .04W- 0* 0 0 0 0<x <D < < < <1s 1t 1 1 1 1c3h D    #$ # # # #/F /t / / / /
	
# 	
 	
 	
 	
 	
 	
r   r   c                   D     e Zd ZdZd	 fdZdeedf         ddf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.

    r   Nc                 Z    t                                          t          g i           dS )z!Don't offer the ``hashes`` kwarg.)r   N)superr&   FAVORITE_HASH)r"   	__class__s    r   r&   zMissingHashes.__init__   s+     	 344444r   rF   r   r   c                 Z    t          |t                                                             r2   )r   rq   rD   rL   s     r   rE   zMissingHashes._raise   s!    $}-7799:::r   )r   N)	rd   re   rf   rg   r&   r   rh   rE   __classcell__)rr   s   @r   rn   rn      sr         5 5 5 5 5 5;4W- ;* ; ; ; ; ; ; ; ;r   rn   )r@   typingr   r   r   r   r   r   r	   pip._internal.exceptionsr
   r   r   pip._internal.utils.miscr   r   rq   STRONG_HASHESr   rn   r   r   r   <module>ry      s    T T T T T T T T T T T T T T T T T T Q Q Q Q Q Q Q Q Q Q 0 0 0 0 0 0 
 
 /..l
 l
 l
 l
 l
 l
 l
 l
^; ; ; ; ;F ; ; ; ; ;r   