HEX
Server: nginx/1.24.0
System: Linux webserver 6.8.0-87-generic #88-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 09:28:41 UTC 2025 x86_64
User: wpuser (1002)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc
�

��h����ddlZddlmZmZmZmZmZmZddlm	Z	m
Z
mZddlm
Z
erddlmZddlmZdZgd�ZGd	�d
�ZGd�de�Zy)
�N)�
TYPE_CHECKING�BinaryIO�Dict�Iterable�List�Optional)�HashMismatch�HashMissing�InstallationError)�read_chunks)�_Hash)�NoReturn�sha256)r�sha384�sha512c��eZdZdZddeeeeefddfd�Zdd�Z	e
defd��Zd	ed
ede
fd�Zdeeddfd
�Zdeedfddfd�Zdeddfd�Zdeddfd�Zdeeefde
fd�Zde
fd�Zdede
fd�Zdefd�Zy)�HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    N�hashes�returnc�f�i}|�&|j�D]\}}t|�||<�||_y)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)�items�sorted�_allowed)�selfr�allowed�alg�keyss     �</usr/lib/python3/dist-packages/pip/_internal/utils/hashes.py�__init__zHashes.__init__s>��
����#�\�\�^�
,�	��T�%�d�|����
,� ��
��otherc��t|t�stS|s|S|s|Si}|jj	�D]9\}}||jvr�|D�cgc]}||j|vs�|��c}||<�;t|�Scc}w�N)�
isinstancer�NotImplementedrr)rr!�newr�values�vs      r�__and__zHashes.__and__+s����%��(�!�!���K���L��� �>�>�/�/�1�	F�K�C���$�-�-�'��#)�E�a�Q�$�-�-��2D�-D��E�C��H�	F��c�{���Fs�B�+Bc�V�td�|jj�D��S)Nc3�2K�|]}t|����y�wr#)�len)�.0�digestss  r�	<genexpr>z&Hashes.digest_count.<locals>.<genexpr>@s����F�G�3�w�<�F�s�)�sumrr'�rs r�digest_countzHashes.digest_count>s ���F�t�}�}�/C�/C�/E�F�F�Fr �	hash_name�
hex_digestc�>�||jj|g�vS)z/Return whether the given hex digest is allowed.)r�get)rr3r4s   r�is_hash_allowedzHashes.is_hash_allowedBs���T�]�]�.�.�y�"�=�=�=r �chunksc��i}|jj�D]}	tj|�||<�|D](}|j�D]}|j|���*|j�D]&\}}|j�|j|vs�&y|j|�y#tt
f$rt
d|����wxYw)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�	TypeErrorrr'�updater�	hexdigest�_raise)rr8�gotsr3�chunk�hash�gots       r�check_against_chunkszHashes.check_against_chunksFs��������+�+�-�	K�I�
K�")�+�+�i�"8��Y��	K��	#�E����
�
#�����E�"�
#�	#�#�j�j�l�	�N�I�s��}�}��$�-�-�	�":�:��	�	
���D����	�*�
K�'�*=�i�[�(I�J�J�
K�s�B3�3Cr@r
rc�.�t|j|��r#)r	r�rr@s  rr?z
Hashes._raise]s���4�=�=�$�/�/r �filec�6�|jt|��S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rDr)rrGs  r�check_against_filezHashes.check_against_file`s���(�(��T�):�;�;r �pathc�h�t|d�5}|j|�cddd�S#1swYyxYw)N�rb)�openrI)rrJrGs   r�check_against_pathzHashes.check_against_pathhs1��
�$��
�	1���*�*�4�0�	1�	1�	1�s�(�1c�\�|j�D]\}}|j||�s�yy)z3Return whether any of the given hashes are allowed.TF)rr7)rrr3r4s    r�
has_one_ofzHashes.has_one_ofls4��%+�\�\�^�	�!�I�z��#�#�I�z�:��	�r c�,�t|j�S)z,Return whether I know any known-good hashes.)�boolrr1s r�__bool__zHashes.__bool__ss���D�M�M�"�"r c�`�t|t�stS|j|jk(Sr#)r$rr%r)rr!s  r�__eq__z
Hashes.__eq__ws%���%��(�!�!��}�}����.�.r c	��tdjtd�|jj	�D����S)N�,c3�VK�|]!\}}|D]}dj||f�����#y�w)�:N)�join)r-r�digest_list�digests    rr/z"Hashes.__hash__.<locals>.<genexpr>s>�����(��[�"-����H�H�c�6�]�+��+��s�'))rBrZrrrr1s r�__hash__zHashes.__hash__|s=����H�H���,0�M�M�,?�,?�,A���
�
�	
r r#)r!rrr)�__name__�
__module__�__qualname__�__doc__rr�strrrr)�property�intr2rRr7r�bytesrDr?rrIrNrPrS�objectrUr]�r rrrs���

 �x��S�$�s�)�^�(<�=�
 ��
 ��&�G�c�G��G�>��>�#�>�$�>��8�E�?��t��.0�4��W��-�0�*�0�<�x�<�D�<�1�s�1�t�1���c�3�h���D��#�$�#�/�F�/�t�/�
	
�#�	
r rc�>��eZdZdZd�fd�Zdeedfddfd�Z�xZS)	�
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.

    rc�2��t�|�tgi��y)z!Don't offer the ``hashes`` kwarg.)rN)�superr�
FAVORITE_HASH)r�	__class__s �rrzMissingHashes.__init__�s���	����� 3��4r r@r
rc�B�t|tj���r#)r
rlr>rFs  rr?zMissingHashes._raise�s���$�}�-�7�7�9�:�:r )rN)	r^r_r`rarrrbr?�
__classcell__)rms@rriri�s)����5�;�4��W��-�;�*�;r ri)r:�typingrrrrrr�pip._internal.exceptionsr	r
r�pip._internal.utils.miscrr
rrl�
STRONG_HASHESrrirgr r�<module>rtsI���J�J�Q�Q�0��� �
�
�
/�
�l
�l
�^;�F�;r