
    g                         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y)    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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y)HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    Nhashesreturnc                 f    i }|&|j                         D ]  \  }}t        |      ||<    || _        y)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)itemssorted_allowed)selfr   allowedalgkeyss        W/var/www/django_project/virt/lib/python3.12/site-packages/pip/_internal/utils/hashes.py__init__zHashes.__init__   s>    
 #\\^ ,	T%d|,      otherc                    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   r!   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Fr    	hash_name
hex_digestc                 >    || j                   j                  |g       v S )z/Return whether the given hex digest is allowed.)r   get)r   r3   r4   s      r   is_hash_allowedzHashes.is_hash_allowedB   s    T]]..y"===r    chunksc                    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   r8   gotsr3   chunkhashgots          r   check_against_chunkszHashes.check_against_chunksF   s     ++- 	KIK")++i"8Y	K  	#E #E"#	# #jjl 	NIs}}$--	"::	 	D 	* K'*=i[(IJJKs   B33Cr@   r   r   c                 .    t        | j                  |      r#   )r	   r   r   r@   s     r   r?   zHashes._raise]   s    4==$//r    filec                 6    | j                  t        |            S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rD   r   )r   rG   s     r   check_against_filezHashes.check_against_file`   s     ((T):;;r    pathc                 h    t        |d      5 }| j                  |      cd d d        S # 1 sw Y   y xY w)Nrb)openrI   )r   rJ   rG   s      r   check_against_pathzHashes.check_against_pathh   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   r7   )r   r   r3   r4   s       r   
has_one_ofzHashes.has_one_ofl   s4    %+\\^ 	!Iz##Iz:	 r    c                 ,    t        | j                        S )z,Return whether I know any known-good hashes.)boolr   r1   s    r   __bool__zHashes.__bool__s   s    DMM""r    c                 `    t        |t              st        S | j                  |j                  k(  S r#   )r$   r   r%   r   )r   r!   s     r   __eq__zHashes.__eq__w   s%    %(!!}}..r    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   '))rB   rZ   r   r   r   r1   s    r   __hash__zHashes.__hash__|   s=    HH ,0MM,?,?,A 
 	
r    r#   )r!   r   r   r   )__name__
__module____qualname____doc__r   r   strr   r   r)   propertyintr2   rR   r7   r   bytesrD   r?   r   rI   rN   rP   rS   objectrU   r]    r    r   r   r      s   

 xS$s)^(<= 
  
 & Gc G G> ># >$ >8E? t .04W- 0* 0<x <D <1s 1t 1c3h D #$ #/F /t /
	
# 	
r    r   c                   >     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   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4r    r@   r   r   c                 B    t        |t           j                               r#   )r
   rl   r>   rF   s     r   r?   zMissingHashes._raise   s    $}-779::r    )r   N)	r^   r_   r`   ra   r   r   rb   r?   __classcell__)rm   s   @r   ri   ri      s)    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   rg   r    r   <module>rt      sI     J J Q Q 0  
 
 /l
 l
^;F ;r    