HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-311.pyc
�

�mi����ddlmZddlZddlmZddlmZmZmZddl	m
Z
mZmZddl
mZerddlmZdZgd	�ZGd
�d��ZGd�d
e��ZdS)�)�annotationsN)�Iterable)�
TYPE_CHECKING�BinaryIO�NoReturn)�HashMismatch�HashMissing�InstallationError)�read_chunks)�_Hash�sha256)r
�sha384�sha512c��eZdZdZd#d$d�Zd%d	�Zed&d���Zd'd�Zd(d�Z	d)d�Z
d*d�Zd+d�Zd,d�Z
d-d�Zd.d!�Zd&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�Nonec��i}|�6|���D]!\}}d�t|��D��||<�"||_dS)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        Nc�6�g|]}|�����S�)�lower)�.0�ks  �<D:\Python311\Lib\site-packages\pip/_internal/utils/hashes.py�
<listcomp>z#Hashes.__init__.<locals>.<listcomp>'s ��@�@�@�a����	�	�@�@�@�)�items�sorted�_allowed)�selfr�allowed�alg�keyss     r�__init__zHashes.__init__sY��
���	A�#�\�\�^�^�
A�
A�	��T�@�@�6�$�<�<�@�@�@�������
�
�
r�otherc�����t|t��stS|s�S�s|Si}|j���D]!\�}��jvr���fd�|D��|�<�"t|��S)Nc�2��g|]}|�j�v�|��Sr)r!)r�vr$r"s  ��rrz"Hashes.__and__.<locals>.<listcomp>:s*���E�E�E�a�Q�$�-��2D�-D�E��E�E�Er)�
isinstancer�NotImplementedr!r)r"r'�new�valuesr$s`   @r�__and__zHashes.__and__*s������%��(�(�	"�!�!��	��K��	��L��� �>�/�/�1�1�	F�	F�K�C���$�-�'�
��E�E�E�E�E�6�E�E�E�C��H�H��c�{�{�r�intc�b�td�|j���D����S)Nc3�4K�|]}t|��V��dS�N)�len)r�digestss  r�	<genexpr>z&Hashes.digest_count.<locals>.<genexpr>?s(����F�F�G�3�w�<�<�F�F�F�F�F�Fr)�sumr!r.�r"s r�digest_countzHashes.digest_count=s-���F�F�t�}�/C�/C�/E�/E�F�F�F�F�F�Fr�	hash_name�str�
hex_digest�boolc�<�||j�|g��vS)z/Return whether the given hex digest is allowed.)r!�get)r"r:r<s   r�is_hash_allowedzHashes.is_hash_allowedAs���T�]�.�.�y�"�=�=�=�=r�chunks�Iterable[bytes]c���i}|j���D]A}	tj|��||<�#tt
f$rt
d|�����wxYw|D].}|���D]}|�|����/|�	��D])\}}|�
��|j|vrdS�*|�|��dS)z�Check good hashes against ones built from iterable of chunks of
        data.

        Raise HashMismatch if none match.

        zUnknown hash name: N)r!r%�hashlibr-�
ValueError�	TypeErrorr
r.�updater�	hexdigest�_raise)r"rA�gotsr:�chunk�hash�gots       r�check_against_chunkszHashes.check_against_chunksEs������+�+�-�-�	K�	K�I�
K�")�+�i�"8�"8��Y�����	�*�
K�
K�
K�'�(I�i�(I�(I�J�J�J�
K�����	#�	#�E����
�
�
#�
#�����E�"�"�"�"�
#�#�j�j�l�l�	�	�N�I�s��}�}���$�-�	�":�:�
����
����D�����s	�7�$ArJ�dict[str, _Hash]rc�,�t|j|���r3)rr!�r"rJs  rrIz
Hashes._raise\s���4�=�$�/�/�/r�filerc�F�|�t|����S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rNr)r"rRs  r�check_against_filezHashes.check_against_file_s ���(�(��T�):�):�;�;�;r�pathc��t|d��5}|�|��cddd��S#1swxYwYdS)N�rb)�openrT)r"rUrRs   r�check_against_pathzHashes.check_against_pathgs���
�$��
�
�	1���*�*�4�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�3�7�7�dict[str, str]c�l�|���D]\}}|�||��rdS�dS)z3Return whether any of the given hashes are allowed.TF)rr@)r"rr:r<s    r�
has_one_ofzHashes.has_one_ofksG��%+�\�\�^�^�	�	�!�I�z��#�#�I�z�:�:�
��t�t�
��urc�*�t|j��S)z,Return whether I know any known-good hashes.)r=r!r8s r�__bool__zHashes.__bool__rs���D�M�"�"�"r�objectc�Z�t|t��stS|j|jkSr3)r+rr,r!)r"r's  r�__eq__z
Hashes.__eq__vs)���%��(�(�	"�!�!��}���.�.rc	��td�td�|j���D��������S)N�,c3�TK�|]#\}}|D]}d�||f��V���$dS)�:N)�join)rr$�digest_list�digests    rr6z"Hashes.__hash__.<locals>.<genexpr>~sa������(��[�"-�����H�H�c�6�]�+�+�������r)rLrfr r!rr8s r�__hash__zHashes.__hash__{s\����H�H����,0�M�,?�,?�,A�,A������
�
�
�
�	
rr3)rrrr)r'rrr)rr0)r:r;r<r;rr=)rArBrr�rJrOrr)rRrrr)rUr;rr)rrZrr=)rr=)r'r_rr=)�__name__�
__module__�__qualname__�__doc__r&r/�propertyr9r@rNrIrTrYr\r^rarirrrrrs#��������

 �
 �
 �
 �
 �����&�G�G�G��X�G�>�>�>�>�����.0�0�0�0�<�<�<�<�1�1�1�1�����#�#�#�#�/�/�/�/�
	
�	
�	
�	
�	
�	
rrc�,��eZdZdZd	�fd�Zd
d�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.

    rrc�Z��t���tgi���dS)z!Don't offer the ``hashes`` kwarg.)rN)�superr&�
FAVORITE_HASH)r"�	__class__s �rr&zMissingHashes.__init__�s+���	������� 3��4�4�4�4�4rrJrOrc�Z�t|t������r3)r	rtrHrQs  rrIzMissingHashes._raise�s!���$�}�-�7�7�9�9�:�:�:r)rrrj)rkrlrmrnr&rI�
__classcell__)rus@rrqrq�s[���������5�5�5�5�5�5�;�;�;�;�;�;�;�;rrq)�
__future__rrD�collections.abcr�typingrrr�pip._internal.exceptionsrr	r
�pip._internal.utils.miscrrrt�
STRONG_HASHESrrqrrr�<module>r~s��"�"�"�"�"�"�����$�$�$�$�$�$�4�4�4�4�4�4�4�4�4�4�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�0�0�0�0�0�0���������
�
�
/�.�.�
�l
�l
�l
�l
�l
�l
�l
�l
�^;�;�;�;�;�F�;�;�;�;�;r