σ οRec@@s#ddlmZddlZddlmZmZmZddlmZm Z m Z ddl m Z ddl mZerήddlmZmZmZmZmZddlmZerΛdd lmZqήdd lmZnd Zd d d gZdefd„ƒYZdefd„ƒYZdS(i(tabsolute_importN(t iteritemstiterkeyst itervalues(t HashMismatcht HashMissingtInstallationError(t read_chunks(tMYPY_CHECK_RUNNING(tDicttListtBinaryIOtNoReturntIterator(tPY3(t_Hash(t_hashtsha256tsha384tsha512tHashescB@sqeZdZd d„Zd„Zed„ƒZd„Zd„Z d„Z d„Z d„Z d „Z d „ZRS( saA wrapper that builds multiple hashes at once and checks them against known-good values cC@s|dkrin||_dS(so :param hashes: A dict of algorithm names pointing to lists of allowed hex digests N(tNonet_allowed(tselfthashes((s‰/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_internal/utils/hashes.pyt__init__)scC@sœt|tƒstS|s|S|s'|Si}xbt|jƒD]Q\}}||jkr^q=ng|D]}||j|kre|^qe||Hs(tsumRR(R((s‰/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_internal/utils/hashes.pyt digest_countEscC@s||jj|gƒkS(s/Return whether the given hex digest is allowed.(Rtget(Rt hash_namet hex_digest((s‰/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_internal/utils/hashes.pytis_hash_allowedJscC@sζi}x]t|jƒD]L}ytj|ƒ||s (e