£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
ReF                 @   s   d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ erd dlmZmZmZmZmZ d dlmZ erd d	lmZ nd d
lmZ dZdddgZG dd deZG dd deZdS )    )absolute_importN)	iteritemsiterkeys
itervalues)HashMismatchHashMissingInstallationError)read_chunks)MYPY_CHECK_RUNNING)DictListBinaryIONoReturnIterator)PY3)_Hash)_hashsha256sha384sha512c               @   sf   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S )HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    Nc             C   s   |dkri n|| _ dS )zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)_allowed)selfhashes r   /builddir/build/BUILDROOT/alt-python36-pip-20.2.4-5.el8.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_internal/utils/hashes.py__init__)   s    zHashes.__init__c                sf   t |tstS |sS s|S i }x:t|jD ],\ } jkrBq. fdd|D | < q.W t|S )Nc                s   g | ]}|j   kr|qS r   )r   ).0v)algr   r   r   
<listcomp>B   s    z"Hashes.__and__.<locals>.<listcomp>)
isinstancer   NotImplementedr   r   )r   othernewvaluesr   )r   r   r   __and__1   s    

zHashes.__and__c             C   s   t dd | jj D S )Nc             s   s   | ]}t |V  qd S )N)len)r   digestsr   r   r   	<genexpr>H   s    z&Hashes.digest_count.<locals>.<genexpr>)sumr   r%   )r   r   r   r   digest_countE   s    zHashes.digest_countc             C   s   || j j|g kS )z/Return whether the given hex digest is allowed.)r   get)r   	hash_name
hex_digestr   r   r   is_hash_allowedJ   s    zHashes.is_hash_allowedc             C   s   i }xLt | jD ]>}ytj|||< W q ttfk
rL   tdj|Y qX qW x(|D ] }xt|D ]}|j	| qfW qXW x*t
|D ]\}}|j | j| krdS qW | j| 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   formatr   updater   	hexdigest_raise)r   chunksgotsr-   chunkhashgotr   r   r   check_against_chunksS   s    
zHashes.check_against_chunksc             C   s   t | j|d S )N)r   r   )r   r8   r   r   r   r6   m   s    zHashes._raisec             C   s   | j t|S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r<   r	   )r   filer   r   r   check_against_fileq   s    zHashes.check_against_filec          	   C   s    t |d}| j|S Q R X d S )Nrb)openr>   )r   pathr=   r   r   r   check_against_pathz   s    zHashes.check_against_pathc             C   s
   t | jS )z,Return whether I know any known-good hashes.)boolr   )r   r   r   r   __nonzero__   s    zHashes.__nonzero__c             C   s   | j  S )N)rD   )r   r   r   r   __bool__   s    zHashes.__bool__)N)__name__
__module____qualname____doc__r   r&   propertyr+   r/   r<   r6   r>   rB   rD   rE   r   r   r   r   r   $   s   
		r   c                   s(   e Zd ZdZ fddZdd Z  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                s   t t| jtg id dS )z!Don't offer the ``hashes`` kwarg.)r   N)superrK   r   FAVORITE_HASH)r   )	__class__r   r   r      s    zMissingHashes.__init__c             C   s   t |t j d S )N)r   rM   r5   )r   r8   r   r   r   r6      s    zMissingHashes._raise)rF   rG   rH   rI   r   r6   __classcell__r   r   )rN   r   rK      s   rK   )
__future__r   r0   Zpip._vendor.sixr   r   r   pip._internal.exceptionsr   r   r   pip._internal.utils.miscr	   pip._internal.utils.typingr
   typingr   r   r   r   r   r   r   r   rM   STRONG_HASHESobjectr   rK   r   r   r   r   <module>   s   
e