HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: sport3497 (1034)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/pip/_internal/utils/__pycache__/hashes.cpython-310.pyc
o

��h��@s�ddlmZddlZddlmZddlmZmZmZddl	m
Z
mZmZddl
mZer2ddlmZdZgd	�ZGd
d�d�ZGdd
�d
e�ZdS)�)�annotationsN)�Iterable)�
TYPE_CHECKING�BinaryIO�NoReturn)�HashMismatch�HashMissing�InstallationError)�read_chunks)�_Hash�sha256)r�sha384�sha512c@s�eZdZdZd/d0dd�Zd1d
d�Zed2d
d��Zd3dd�Zd4dd�Z	d5dd�Z
d6d d!�Zd7d#d$�Zd8d&d'�Z
d9d(d)�Zd:d+d,�Zd2d-d.�ZdS);�HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    N�hashes�dict[str, list[str]] | None�return�NonecCs>i}|dur|��D]\}}dd�t|�D�||<q
||_dS)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        NcSsg|]}|���qS�)�lower)�.0�krr�E/usr/local/lib/python3.10/dist-packages/pip/_internal/utils/hashes.py�
<listcomp>'sz#Hashes.__init__.<locals>.<listcomp>)�items�sorted�_allowed)�selfr�allowed�alg�keysrrr�__init__s

zHashes.__init__�othercsbt|t�stS|s�S�s|Si}|j��D]\�}��jvr q��fdd�|D�|�<qt|�S)Ncsg|]}|�j�vr|�qSr)r)r�v�rrrrr:sz"Hashes.__and__.<locals>.<listcomp>)�
isinstancer�NotImplementedrr)rr"�new�valuesrr$r�__and__*s

zHashes.__and__�intcCstdd�|j��D��S)Ncss�|]}t|�VqdS�N)�len)r�digestsrrr�	<genexpr>?s�z&Hashes.digest_count.<locals>.<genexpr>)�sumrr(�rrrr�digest_count=szHashes.digest_count�	hash_name�str�
hex_digest�boolcCs||j�|g�vS)z/Return whether the given hex digest is allowed.)r�get)rr2r4rrr�is_hash_allowedAszHashes.is_hash_allowed�chunks�Iterable[bytes]c
Cs�i}|j��D]}z	t�|�||<Wqttfy"td|����w|D]}|��D]}|�|�q+q%|�	�D]\}}|�
�|j|vrHdSq8|�|�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)rr8�gotsr2�chunk�hash�gotrrr�check_against_chunksEs ���zHashes.check_against_chunksr@�dict[str, _Hash]rcCst|j|��r+)rr�rr@rrrr?\sz
Hashes._raise�filercCs|�t|��S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rDr
)rrGrrr�check_against_file_szHashes.check_against_file�pathcCs8t|d��
}|�|�Wd�S1swYdS)N�rb)�openrH)rrIrGrrr�check_against_pathgs$�zHashes.check_against_path�dict[str, str]cCs(|��D]
\}}|�||�rdSqdS)z3Return whether any of the given hashes are allowed.TF)rr7)rrr2r4rrr�
has_one_ofks
�zHashes.has_one_ofcCs
t|j�S)z,Return whether I know any known-good hashes.)r5rr0rrr�__bool__rs
zHashes.__bool__�objectcCst|t�stS|j|jkSr+)r%rr&r)rr"rrr�__eq__vs
z
Hashes.__eq__cCs"td�tdd�|j��D����S)N�,css,�|]\}}|D]
}d�||f�VqqdS)�:N)�join)rr�digest_list�digestrrrr.~s����z"Hashes.__hash__.<locals>.<genexpr>)rBrTrrrr0rrr�__hash__{s���zHashes.__hash__r+)rrrr)r"rrr)rr*)r2r3r4r3rr5)r8r9rr�r@rErr)rGrrr)rIr3rr)rrMrr5)rr5)r"rPrr5)�__name__�
__module__�__qualname__�__doc__r!r)�propertyr1r7rDr?rHrLrNrOrQrWrrrrrs








rcs,eZdZdZd�fdd�Zd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.

    rrcst�jtgid�dS)z!Don't offer the ``hashes`` kwarg.)rN)�superr!�
FAVORITE_HASHr0��	__class__rrr!�szMissingHashes.__init__r@rErcCst|t����r+)rr`r>rFrrrr?�szMissingHashes._raise)rrrX)rYrZr[r\r!r?�
__classcell__rrrarr^�sr^)�
__future__rr:�collections.abcr�typingrrr�pip._internal.exceptionsrrr	�pip._internal.utils.miscr
rr`�
STRONG_HASHESrr^rrrr�<module>so