^VddlmZddlZddlmZddlmZmZmZddl m Z m Z m Z ddl mZerddlmZdZgd ZGd d ZGd d eZdS)) annotationsN)Iterable) TYPE_CHECKINGBinaryIONoReturn) HashMismatch HashMissingInstallationError) read_chunks)_Hashsha256)r sha384sha512ceZdZdZd#d$dZd%d Zed&d Zd'dZd(dZ d)dZ d*dZ d+dZ d,dZ d-dZd.d!Zd&d"ZdS)/HasheszaA wrapper that builds multiple hashes at once and checks them against known-good values Nhashesdict[str, list[str]] | NonereturnNoneci}|6|D]!\}}dt|D||<"||_dS)zo :param hashes: A dict of algorithm names pointing to lists of allowed hex digests Nc6g|]}|S)lower).0ks l/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/pip/_internal/utils/hashes.py z#Hashes.__init__..'s @@@a @@@)itemssorted_allowed)selfrallowedalgkeyss r__init__zHashes.__init__sV   #\\^^ A A T@@6$<<@@@  rotherct|tstS|sSs|Si}|jD]!\}jvrfd|D|<"t|S)Nc2g|]}|jv|Sr)r!)rvr$r"s rrz"Hashes.__and__..:s*EEEaQ$-2D-D-D-D-D-Dr) isinstancerNotImplementedr!r)r"r'newvaluesr$s` @r__and__zHashes.__and__*s%(( "! ! K L >//11 F FKC$-''EEEEE6EEECHHc{{rintcbtd|jDS)Nc34K|]}t|VdSN)len)rdigestss r z&Hashes.digest_count..?s(FFG3w<<FFFFFFr)sumr!r.r"s r digest_countzHashes.digest_count=s-FFt}/C/C/E/EFFFFFFr hash_namestr hex_digestboolc<||j|gvS)z/Return whether the given hex digest is allowed.)r!get)r"r:r<s ris_hash_allowedzHashes.is_hash_allowedAsT]..y"====rchunksIterable[bytes]ci}|jD]A} tj|||<#tt f$rt d|wxYw|D].}|D]}||/| D])\}}| |j|vrdS*| |dS)zCheck 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"rAgotsr:chunkhashgots rcheck_against_chunkszHashes.check_against_chunksEs++-- K KI K")+i"8"8Y * K K K'(Ii(I(IJJJ K # #E  # # E"""" ##jjll  NIs}}$- ":::; Ds 7$ArJdict[str, _Hash]rc,t|j|r3)rr!r"rJs rrIz Hashes._raise\s4=$///rfilercF|t|S)zaCheck good hashes against a file-like object Raise HashMismatch if none match. )rNr )r"rRs rcheck_against_filezHashes.check_against_file_s ((T):):;;;rpathct|d5}||cdddS#1swxYwYdS)Nrb)openrT)r"rUrRs rcheck_against_pathzHashes.check_against_pathgs $   1**400 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s 377dict[str, str]cl|D]\}}|||rdSdS)z3Return whether any of the given hashes are allowed.TF)rr@)r"rr:r<s r has_one_ofzHashes.has_one_ofksG%+\\^^   !Iz##Iz:: tt urc*t|jS)z,Return whether I know any known-good hashes.)r=r!r8s r__bool__zHashes.__bool__rsDM"""robjectcZt|tstS|j|jkSr3)r+rr,r!)r"r's r__eq__z Hashes.__eq__vs)%(( "! !}..rc tdtd|jDS)N,c3TK|]#\}}|D]}d||fV$dS):N)join)rr$ digest_listdigests rr6z"Hashes.__hash__..~sa(["-HHc6]++r)rLrfr r!rr8s r__hash__zHashes.__hash__{s\ HH,0M,?,?,A,A     rr3)rrrr)r'rrr)rr0)r:r;r<r;rr=)rArBrrrJrOrr)rRrrr)rUr;rr)rrZrr=)rr=)r'r_rr=)__name__ __module__ __qualname____doc__r&r/propertyr9r@rNrIrTrYr\r^rarirrrrrs#      &GGGXG>>>>.0000<<<<1111####////       rrc,eZdZdZd fd Zd dZxZS) MissingHasheszA 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. rrcZttgidS)z!Don't offer the ``hashes`` kwarg.)rN)superr& FAVORITE_HASH)r" __class__s rr&zMissingHashes.__init__s+  344444rrJrOrcZt|tr3)r rtrHrQs rrIzMissingHashes._raises!$}-7799:::r)rrrj)rkrlrmrnr&rI __classcell__)rus@rrqrqs[555555 ;;;;;;;;rrq) __future__rrDcollections.abcrtypingrrrpip._internal.exceptionsrr r pip._internal.utils.miscr r rt STRONG_HASHESrrqrrrr~s""""""$$$$$$4444444444QQQQQQQQQQ000000  /.. l l l l l l l l ^;;;;;F;;;;;r