Viewing File: /opt/hc_python/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc

�

T�*j����ddlmZddlZddlmZddlmZmZmZddl	m
Z
mZmZddl
mZerddlmZddlmZd	Zgd
�ZGd�d�ZGd
�de�Zy)�)�annotationsN)�Iterable)�
TYPE_CHECKING�BinaryIO�NoReturn)�HashMismatch�HashMissing�InstallationError)�read_chunks)�Mapping)�_Hash�sha256)r�sha384�sha512c�|�eZdZdZddd�Zdd�Zedd��Zdd�Zdd�Z	dd�Z
dd	�Zdd
�Zdd�Z
dd�Zdd
�Zdd�Zy)�HasheszaA wrapper that builds multiple hashes at once and checks them against
    known-good values

    Nc��i}|�B|j�D]/\}}t|�D�cgc]}|j���c}||<�1||_ycc}w)zo
        :param hashes: A dict of algorithm names pointing to lists of allowed
            hex digests
        N)�items�sorted�lower�_allowed)�self�hashes�allowed�alg�keys�ks      �I/opt/hc_python/lib/python3.12/site-packages/pip/_internal/utils/hashes.py�__init__zHashes.__init__sT��
����#�\�\�^�	��T�39�$�<�@�<�a����	�<�@����,� ��
�� As�Ac��t|t�stS|s|S|s|Si}|jj	�D]9\}}||jvr�|D�cgc]}||j|vs�|��c}||<�;t|�Scc}w�N)�
isinstancer�NotImplementedrr)r�other�newr�values�vs      r�__and__zHashes.__and__*s����%��(�!�!���K���L��� �>�>�/�/�1�K�C���$�-�-�'��#)�E�6�a�Q�$�-�-��2D�-D��6�E�C��H�2��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�/E�G�3�w�<�/E�s�)�sumrr&�rs r�digest_countzHashes.digest_count=s ���F�t�}�}�/C�/C�/E�F�F�F�c�>�||jj|g�vS)z/Return whether the given hex digest is allowed.)r�get)r�	hash_name�
hex_digests   r�is_hash_allowedzHashes.is_hash_allowedAs���T�]�]�.�.�y�"�=�=�=r2c��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�	TypeErrorr
r&�updater�	hexdigest�_raise)r�chunks�gotsr5�chunk�hash�gots       r�check_against_chunkszHashes.check_against_chunksEs��������+�+�-�I�
K�")�+�+�i�"8��Y��.��E����
�����E�"�&��#�j�j�l�N�I�s��}�}��$�-�-�	�":�:��+�	
���D����	�*�
K�'�*=�i�[�(I�J�J�
K�s�B3�3Cc�.�t|j|��r!)rr�rr@s  rr>z
Hashes._raise\s���4�=�=�$�/�/r2c�6�|jt|��S)zaCheck good hashes against a file-like object

        Raise HashMismatch if none match.

        )rDr)r�files  r�check_against_filezHashes.check_against_file_s���(�(��T�):�;�;r2c�h�t|d�5}|j|�cddd�S#1swYyxYw)N�rb)�openrI)r�pathrHs   r�check_against_pathzHashes.check_against_pathgs(��
�$��
���*�*�4�0��
�
�s�(�1c�\�|j�D]\}}|j||�s�yy)z3Return whether any of the given hashes are allowed.TF)rr7)rrr5r6s    r�
has_one_ofzHashes.has_one_ofks/��%+�\�\�^�!�I�z��#�#�I�z�:��&4�r2c�,�t|j�S)z,Return whether I know any known-good hashes.)�boolrr0s r�__bool__zHashes.__bool__rs���D�M�M�"�"r2c�`�t|t�stS|j|jk(Sr!)r"rr#r)rr$s  r�__eq__z
Hashes.__eq__vs%���%��(�!�!��}�}����.�.r2c	��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>~s7�����,A�(��[�"-���H�H�c�6�]�+�"-�,�,A�s�'))rBrZrrrr0s r�__hash__zHashes.__hash__{s=����H�H���,0�M�M�,?�,?�,A���
�
�	
r2r!)rzdict[str, list[str]] | None�return�None)r$rr^r)r^�int)r5�strr6rar^rR)r?zIterable[bytes]r^r_�r@zdict[str, _Hash]r^r)rHrr^r_)rMrar^r_)rzMapping[str, str]r^rR)r^rR)r$�objectr^rR)�__name__�
__module__�__qualname__�__doc__rr(�propertyr1r7rDr>rIrNrPrSrUr]�r2rrrsT���

 ��&�G��G�>��.0�<�1��#�/�
	
r2rc�,��eZdZdZd�fd�Zdd�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.

    c�2��t�|�tgi��y)z!Don't offer the ``hashes`` kwarg.)rN)�superr�
FAVORITE_HASH)r�	__class__s �rrzMissingHashes.__init__�s���	����� 3��4r2c�B�t|tj���r!)r	rnr=rFs  rr>zMissingHashes._raise�s���$�}�-�7�7�9�:�:r2)r^r_rb)rdrerfrgrr>�
__classcell__)ros@rrkrk�s����5�;r2rk)�
__future__rr9�collections.abcr�typingrrr�pip._internal.exceptionsrr	r
�pip._internal.utils.miscrrr
rn�
STRONG_HASHESrrkrir2r�<module>rxsM��"��$�4�4�Q�Q�0��'���
�
/�
�l
�l
�^;�F�;r2
Back to Directory File Manager