I iddlmZddlZddlmZddlmZmZmZddl m Z m Z m Z ddl mZerddlmZdZgd ZGd d ZGd d eZy)) annotationsN)Iterable) TYPE_CHECKINGBinaryIONoReturn) HashMismatch HashMissingInstallationError) read_chunks)_Hashsha256)r sha384sha512c|eZdZdZdddZddZeddZddZddZ ddZ dd Z dd Z dd Z dd Zdd ZddZy)HasheszaA wrapper that builds multiple hashes at once and checks them against known-good values Nci}|B|jD]/\}}t|Dcgc]}|jc}||<1||_ycc}w)zo :param hashes: A dict of algorithm names pointing to lists of allowed hex digests N)itemssortedlower_allowed)selfhashesallowedalgkeysks `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py__init__zHashes.__init__sW   #\\^ A T39$<@a @  A   AsAct|tstS|s|S|s|Si}|jj D]9\}}||jvr|Dcgc]}||j|vs|c}||<;t|Scc}wN) isinstancerNotImplementedrr)rothernewrvaluesvs r__and__zHashes.__and__*s%(! !KL >>//1 FKC$--'#)EaQ$--2D-DECH Fc{Fs B+BcVtd|jjDS)Nc32K|]}t|ywr )len).0digestss r z&Hashes.digest_count..?sFG3w<Fs)sumrr%rs r digest_countzHashes.digest_count=s Ft}}/C/C/EFFFc>||jj|gvS)z/Return whether the given hex digest is allowed.)rget)r hash_name hex_digests ris_hash_allowedzHashes.is_hash_allowedAsT]]..y"===r1ci}|jjD]} tj|||<|D](}|jD]}|j|*|jD]&\}}|j|j|vs&y|j|y#tt f$rt d|wxYw)zCheck good hashes against ones built from iterable of chunks of data. Raise HashMismatch if none match. zUnknown hash name: N) rrhashlibr$ ValueError TypeErrorr r%updater hexdigest_raise)rchunksgotsr4chunkhashgots rcheck_against_chunkszHashes.check_against_chunksEs++- KI K")++i"8Y K  #E  # E" # ##jjl NIs}}$-- "::  D * K'*=i[(IJJ Ks B33Cc.t|j|r )rrrr?s rr=z Hashes._raise\s4==$//r1c6|jt|S)zaCheck good hashes against a file-like object Raise HashMismatch if none match. )rCr )rfiles rcheck_against_filezHashes.check_against_file_s ((T):;;r1cht|d5}|j|cdddS#1swYyxYw)Nrb)openrH)rpathrGs rcheck_against_pathzHashes.check_against_pathgs1 $  1**40 1 1 1s(1c\|jD]\}}|j||syy)z3Return whether any of the given hashes are allowed.TF)rr6)rrr4r5s r has_one_ofzHashes.has_one_ofks4%+\\^  !Iz##Iz: r1c,t|jS)z,Return whether I know any known-good hashes.)boolrr/s r__bool__zHashes.__bool__rsDMM""r1c`t|tstS|j|jk(Sr )r!rr"r)rr#s r__eq__z Hashes.__eq__vs%%(! !}}..r1c tdjtd|jj DS)N,c3VK|]!\}}|D]}dj||f#yw):N)join)r+r digest_listdigests rr-z"Hashes.__hash__..~s>(["-HHc6]++s'))rArYrrrr/s r__hash__zHashes.__hash__{s= HH,0MM,?,?,A   r1r )rzdict[str, list[str]] | NonereturnNone)r#rr]r)r]int)r4strr5r`r]rQ)r>zIterable[bytes]r]r^r?zdict[str, _Hash]r]r)rGrr]r^)rLr`r]r^)rzdict[str, str]r]rQ)r]rQ)r#objectr]rQ)__name__ __module__ __qualname____doc__rr'propertyr0r6rCr=rHrMrOrRrTr\r1rrrsT  &GG>.0<1#/  r1rc,eZdZdZdfd ZddZxZS) 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. c2t|tgiy)z!Don't offer the ``hashes`` kwarg.)rN)superr FAVORITE_HASH)r __class__s rrzMissingHashes.__init__s  34r1cBt|tjr )r rmr<rEs rr=zMissingHashes._raises$}-779::r1)r]r^ra)rcrdrerfrr= __classcell__)rns@rrjrjs5 ;r1rj) __future__rr8collections.abcrtypingrrrpip._internal.exceptionsrr r pip._internal.utils.miscr r rm STRONG_HASHESrrjrhr1rrwsJ"$44QQ0  / l l ^;F;r1