HEX
Server: Apache
System: Linux p3plzcpnl506847.prod.phx3.secureserver.net 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: slfopp7cb1df (5698090)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //opt/python38/lib/python3.8/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-38.pyc
U

�{�e��@s�ddlZddlmZmZmZmZmZmZddlm	Z	m
Z
mZddlm
Z
erdddlmZddlmZdZddd	gZGd
d�d�ZGdd
�d
e�ZdS)�N)�
TYPE_CHECKING�BinaryIO�Dict�Iterable�List�Optional)�HashMismatch�HashMissing�InstallationError)�read_chunks)�_Hash)�NoReturn�sha256�sha384�sha512c@s�eZdZdZd%eeeeefdd�dd�Zddd�dd�Z	e
ed	�d
d��Zeee
d�d
d�Zeedd�dd�Zeedfdd�dd�Zedd�dd�Zedd�dd�Zeeefe
d�dd�Ze
d	�dd �Zee
d�d!d"�Zed	�d#d$�ZdS)&�HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    N)�hashes�returncCs4i}|dk	r*|��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�>/tmp/pip-unpacked-wheel-_0scjqea/pip/_internal/utils/hashes.py�__init__s
zHashes.__init__)�otherrcsbt|t�stS|s�S�s|Si}|j��D],\�}��jkr@q,��fdd�|D�|�<q,t|�S)Ncsg|]}|�j�kr|�qSr)r)�.0�v�rrrr�
<listcomp>;sz"Hashes.__and__.<locals>.<listcomp>)�
isinstancer�NotImplementedrr)rr�new�valuesrr!r�__and__+s

zHashes.__and__�rcCstdd�|j��D��S)Ncss|]}t|�VqdS�N)�len)r�digestsrrr�	<genexpr>@sz&Hashes.digest_count.<locals>.<genexpr>)�sumrr&�rrrr�digest_count>szHashes.digest_count)�	hash_name�
hex_digestrcCs||j�|g�kS)z/Return whether the given hex digest is allowed.)r�get)rr0r1rrr�is_hash_allowedBszHashes.is_hash_allowed)�chunksrc
Cs�i}|j��D]>}zt�|�||<Wqttfk
rJtd|����YqXq|D]}|��D]}|�|�q^qR|�	�D] \}}|�
�|j|krxdSqx|�|�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)rr4�gotsr0�chunk�hash�gotrrr�check_against_chunksFszHashes.check_against_chunksrr
�r;rcCst|j|��dSr))rr�rr;rrrr:]sz
Hashes._raise)�filercCs|�t|��S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )r?r)rrBrrr�check_against_file`szHashes.check_against_file)�pathrc
Cs,t|d��}|�|�W5QR�SQRXdS)N�rb)�openrC)rrDrBrrr�check_against_pathhszHashes.check_against_pathcCs(|��D]\}}|�||�rdSqdS)z3Return whether any of the given hashes are allowed.TF)rr3)rrr0r1rrr�
has_one_oflszHashes.has_one_ofcCs
t|j�S)z,Return whether I know any known-good hashes.)�boolrr.rrr�__bool__sszHashes.__bool__cCst|t�stS|j|jkSr))r#rr$r)rrrrr�__eq__ws
z
Hashes.__eq__cCs"td�tdd�|j��D����S)N�,css*|]"\}}|D]}d�||f�VqqdS)�:N)�join)rrZdigest_list�digestrrrr,s�z"Hashes.__hash__.<locals>.<genexpr>)r=rNrrrr.rrr�__hash__|s���zHashes.__hash__)N)�__name__�
__module__�__qualname__�__doc__rr�strrrr'�property�intr/rIr3r�bytesr?r:rrCrGrHrJ�objectrKrPrrrrrs"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__rr
r@cCst|t����dSr))r	r\r9rArrrr:�szMissingHashes._raise)	rQrRrSrTrrrUr:�
__classcell__rrr]rrZ�srZ)r5�typingrrrrrr�pip._internal.exceptionsrr	r
�pip._internal.utils.miscrrr
r\�
STRONG_HASHESrrZrrrr�<module>s 
o