Current File : //lib/python3.9/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-39.pyc
a

[��f��@s�ddlZddlmZmZmZmZmZddlmZm	Z	m
Z
ddlmZer`ddlm
Z
ddlmZdZgd�ZGd	d
�d
�ZGdd�de�ZdS)
�N)�
TYPE_CHECKING�BinaryIO�Dict�Iterator�List)�HashMismatch�HashMissing�InstallationError)�read_chunks)�_Hash)�NoReturn�sha256)r
Zsha384Zsha512c@s�eZdZdZd#eeeefdd�dd�Zddd�dd�Ze	e
d	�d
d��Zeeed�d
d�Z
eedd�dd�Zeedfdd�dd�Zedd�dd�Zedd�dd�Zed	�dd�Zeed�dd �Ze
d	�d!d"�ZdS)$�HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    N)�hashes�returncCs4i}|dur*|��D]\}}t|�||<q||_dS)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)�items�sorted�_allowed)�selfr�allowed�alg�keys�r�>/usr/lib/python3.9/site-packages/pip/_internal/utils/hashes.py�__init__s
zHashes.__init__)�otherrcsbt|t�stS|s�S�s|Si}|j��D],\�}��jvr@q,��fdd�|D�|�<q,t|�S)Ncsg|]}|�j�vr|�qSr)r)�.0�v�rrrr�
<listcomp>;�z"Hashes.__and__.<locals>.<listcomp>)�
isinstancer�NotImplementedrr)rr�new�valuesrrr�__and__+s

zHashes.__and__�rcCstdd�|j��D��S)Ncss|]}t|�VqdS�N)�len)rZdigestsrrr�	<genexpr>@r z&Hashes.digest_count.<locals>.<genexpr>)�sumrr$�rrrr�digest_count>szHashes.digest_count)�	hash_name�
hex_digestrcCs||j�|g�vS)z/Return whether the given hex digest is allowed.)r�get)rr-r.rrr�is_hash_allowedBszHashes.is_hash_allowed)�chunksrc
Cs�i}|j��D]<}zt�|�||<WqttfyHtd|����Yq0q|D]}|��D]}|�|�q\qP|�	�D] \}}|�
�|j|vrvdSqv|�|�dS)z�Check good hashes against ones built from iterable of chunks of
        data.

        Raise HashMismatch if none match.

        zUnknown hash name: N)rr�hashlibr#�
ValueError�	TypeErrorr	r$�updater�	hexdigest�_raise)rr1�gotsr-�chunk�hashZgotrrr�check_against_chunksFszHashes.check_against_chunksrr�r8rcCst|j|��dSr')rr�rr8rrrr7]sz
Hashes._raise)�filercCs|�t|��S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r;r
)rr>rrr�check_against_file`szHashes.check_against_file)�pathrcCs8t|d��}|�|�Wd�S1s*0YdS)N�rb)�openr?)rr@r>rrr�check_against_pathhszHashes.check_against_pathcCs
t|j�S)z,Return whether I know any known-good hashes.)�boolrr+rrr�__bool__lszHashes.__bool__cCst|t�stS|j|jkSr')r!rr"r)rrrrr�__eq__ps
z
Hashes.__eq__cCs"td�tdd�|j��D����S)N�,css*|]"\}}|D]}d�||f�VqqdS)�:N)�join)rrZdigest_listZdigestrrrr)xs�z"Hashes.__hash__.<locals>.<genexpr>)r:rIrrrr+rrr�__hash__us���zHashes.__hash__)N)�__name__�
__module__�__qualname__�__doc__r�strrrr%�property�intr,rDr0r�bytesr;r7rr?rCrE�objectrFrJrrrrrsrcs>eZdZdZdd��fdd�Zeedfdd�d	d
�Z�ZS)�
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.

    Nr&cst�jtgid�dS)z!Don't offer the ``hashes`` kwarg.)rN)�superr�
FAVORITE_HASHr+��	__class__rrr�szMissingHashes.__init__rrr<cCst|t����dSr')rrVr6r=rrrr7�szMissingHashes._raise)	rKrLrMrNrrrOr7�
__classcell__rrrWrrT�srT)r2�typingrrrrrZpip._internal.exceptionsrrr	Zpip._internal.utils.miscr
rrrVZ
STRONG_HASHESrrTrrrr�<module>sh