
    e                         d dl Z d dl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 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Optional)HashMismatchHashMissingInstallationError)read_chunks)_Hash)NoReturn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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                 t    i }|,|                                 D ]\  }}t          |          ||<   || _        dS )zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)itemssorted_allowed)selfr   allowedalgkeyss        Q/var/www/html/api/venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py__init__zHashes.__init__   sF    
 #\\^^ , ,	T%d||    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   ).0vr   r   s     r   
<listcomp>z"Hashes.__and__.<locals>.<listcomp>;   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   r6   r7   s      r   is_hash_allowedzHashes.is_hash_allowedB   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;   gotsr6   chunkhashgots          r   check_against_chunkszHashes.check_against_chunksF   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rC   r   r   c                 ,    t          | j        |          r/   )r	   r   r   rC   s     r   rB   zHashes._raise]   s    4=$///r    filec                 F    |                      t          |                    S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rG   r   )r   rJ   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)openrL   )r   rM   rJ   s      r   check_against_pathzHashes.check_against_pathh   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                 *    t          | j                  S )z,Return whether I know any known-good hashes.)boolr   r4   s    r   __bool__zHashes.__bool__l   s    DM"""r    c                 Z    t          |t                    st          S | j        |j        k    S r/   )r(   r   r)   r   )r   r!   s     r   __eq__zHashes.__eq__p   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   r2   z"Hashes.__hash__.<locals>.<genexpr>x   sa        (["-   HHc6]++      r    )rE   r[   r   r   r   r4   s    r   __hash__zHashes.__hash__u   s\    HH  ,0M,?,?,A,A     
 
 	
r    r/   )r!   r   r   r   )__name__
__module____qualname____doc__r   r   strr   r   r,   propertyintr5   rS   r:   r   bytesrG   rB   r   rL   rQ   rT   objectrV   r^   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#$ # # # #/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    rC   r   r   c                 Z    t          |t                                                             r/   )r
   rl   rA   rI   s     r   rB   zMissingHashes._raise   s!    $}-7799:::r    )r   N)	r_   r`   ra   rb   r   r   rc   rB   __classcell__)rm   s   @r   ri   ri      sr         5 5 5 5 5 5;4W- ;* ; ; ; ; ; ; ; ;r    ri   )r=   typingr   r   r   r   r   r   pip._internal.exceptionsr	   r
   r   pip._internal.utils.miscr   r   r   rl   STRONG_HASHESr   ri   r$   r    r   <module>rt      s    J J J J J J J J J J J J J J J J Q Q Q Q Q Q Q Q Q Q 0 0 0 0 0 0    
 
 /..e
 e
 e
 e
 e
 e
 e
 e
P; ; ; ; ;F ; ; ; ; ;r    