B
    =)H[²  ã               @   sz   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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Úsha256Úsha384Úsha512c               @   sJ   e Zd ZdZd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   ú[C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_internal\utils\hashes.pyÚ__init__   s    zHashes.__init__c          
   C   s´   i }xJt | jƒD ]<}yt |¡||< W q ttfk
rJ   td| ƒ‚Y qX qW x(|D ] }xt|ƒD ]}| |¡ qdW qVW x*t	|ƒD ]\}}| 
¡ | j| kr„dS q„W |  |¡ dS )z‚Check good hashes against ones built from iterable of chunks of
        data.

        Raise HashMismatch if none match.

        zUnknown hash name: %sN)r   r   ÚhashlibÚnewÚ
ValueErrorÚ	TypeErrorr   r   Úupdater   Ú	hexdigestÚ_raise)r   ÚchunksÚgotsÚ	hash_nameÚchunkÚhashÚgotr   r   r   Úcheck_against_chunks"   s    
zHashes.check_against_chunksc             C   s   t | j|ƒ‚d S )N)r   r   )r   r   r   r   r   r   9   s    zHashes._raisec             C   s   |   t|ƒ¡S )zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r!   r	   )r   Úfiler   r   r   Úcheck_against_file<   s    zHashes.check_against_filec          	   C   s    t |dƒ�}|  |¡S Q R X d S )NÚrb)Úopenr#   )r   Úpathr"   r   r   r   Úcheck_against_pathD   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__H   s    zHashes.__nonzero__c             C   s   |   ¡ S )N)r)   )r   r   r   r   Ú__bool__L   s    zHashes.__bool__)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r   r#   r'   r)   r*   r   r   r   r   r      s   
r   c                   s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚMissingHasheszÀA 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)Úsuperr/   r   ÚFAVORITE_HASH)r   )Ú	__class__r   r   r   W   s    zMissingHashes.__init__c             C   s   t |t  ¡ ƒ‚d S )N)r   r1   r   )r   r   r   r   r   r   ]   s    zMissingHashes._raise)r+   r,   r-   r.   r   r   Ú__classcell__r   r   )r2   r   r/   P   s   r/   )Ú
__future__r   r   Úpip._vendor.sixr   r   r   Úpip._internal.exceptionsr   r   r   Úpip._internal.utils.miscr	   r1   ÚSTRONG_HASHESÚobjectr   r/   r   r   r   r   Ú<module>   s   
: