U
ÀÒ.e´ ã @ sÐ d dl mZ d dlZd dlmZmZmZ d dlmZm Z m
Z
d dlmZ d dl
mZ eržd dlmZmZmZmZmZ d dlmZ er’d d lmZ nd d
lmZ dZddd
gZG dd„ deƒZG dd„ deƒZdS )é )Úabsolute_importN)Ú iteritemsÚiterkeysÚ
itervalues)ÚHashMismatchÚHashMissingÚInstallationError)Úread_chunks)ÚMYPY_CHECK_RUNNING)ÚDictÚListÚBinaryIOÚNoReturnÚIterator)ÚPY3)Ú_Hash)Ú_hashZsha256Zsha384Zsha512c @ s^ e Zd ZdZddd„Zedd„ ƒZdd„ Zd d
„ Zdd„ Z d
d„ Z
dd„ Zdd„ Zdd„ Z
dS )ÚHasheszaA wrapper that builds multiple hashes at once and checks them against
known-good values
Nc C s |dkri n|| _ dS )zo
:param hashes: A dict of algorithm names pointing to lists of allowed
hex digests
N)Ú_allowed)ÚselfÚhashes© r ú>/usr/lib/python3.8/site-packages/pip/_internal/utils/hashes.pyÚ__init__, s zHashes.__init__c C s t dd„ | j ¡ D ƒƒS )Nc s s | ]}t |ƒV qd S ©N)Úlen)Ú.0Zdigestsr r r Ú