7iddlZddlmZmZmZmZmZmZddlm Z m Z m Z ddl m Z er ddlmZddlmZdZgdZGd d ZGd d eZy) N) TYPE_CHECKINGBinaryIODictIterableListOptional) HashMismatch HashMissingInstallationError) read_chunks)_Hash)NoReturnsha256)rsha384sha512ceZdZdZddeeeeefddfdZddZ e de fdZ d ed ede fd Zd eeddfd ZdeedfddfdZdeddfdZdeddfdZdeeefde fdZde fdZdede fdZde fdZy)HasheszaA wrapper that builds multiple hashes at once and checks them against known-good values Nhashesreturncfi}|&|jD]\}}t|||<||_y)zo :param hashes: A dict of algorithm names pointing to lists of allowed hex digests N)itemssorted_allowed)selfrallowedalgkeyss c/mnt/ssd/data/python-lab/ChefSystem/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py__init__zHashes.__init__s>   #\\^ , T%d|  ,  otherct|tstS|s|S|s|Si}|jj D]9\}}||jvr|Dcgc]}||j|vs|c}||<;t|Scc}wN) isinstancerNotImplementedrr)rr!newrvaluesvs 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/EFFFr hash_name hex_digestc>||jj|gvS)z/Return whether the given hex digest is allowed.)rget)rr3r4s ris_hash_allowedzHashes.is_hash_allowedBsT]]..y"===r chunksci}|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)rr8gotsr3chunkhashgots rcheck_against_chunkszHashes.check_against_chunksFs++- KI K")++i"8Y K  #E  # E" # ##jjl NIs}}$-- "::  D * K'*=i[(IJJ Ks B33Cr@r rc.t|j|r#)r rrr@s rr?z Hashes._raise]s4==$//r filec6|jt|S)zaCheck good hashes against a file-like object Raise HashMismatch if none match. )rDr )rrGs rcheck_against_filezHashes.check_against_file`s ((T):;;r pathcht|d5}|j|cdddS#1swYyxYw)Nrb)openrI)rrJrGs rcheck_against_pathzHashes.check_against_pathhs1 $  1**40 1 1 1s(1c\|jD]\}}|j||syy)z3Return whether any of the given hashes are allowed.TF)rr7)rrr3r4s r has_one_ofzHashes.has_one_ofls4%+\\^  !Iz##Iz: r c,t|jS)z,Return whether I know any known-good hashes.)boolrr1s r__bool__zHashes.__bool__ssDMM""r c`t|tstS|j|jk(Sr#)r$rr%r)rr!s r__eq__z Hashes.__eq__ws%%(! !}}..r c tdjtd|jj DS)N,c3VK|]!\}}|D]}dj||f#yw):N)join)r-r digest_listdigests rr/z"Hashes.__hash__..s>(["-HHc6]++s'))rBrZrrrr1s r__hash__zHashes.__hash__|s= HH,0MM,?,?,A   r r#)r!rrr)__name__ __module__ __qualname____doc__rrstrrrr)propertyintr2rRr7rbytesrDr?rrIrNrPrSobjectrUr]r rrrs  xS$s)^(<=    &GcGG>>#>$>8E?t.04W -0*0eZdZdZdfd ZdeedfddfdZxZS) 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. rc2t|tgiy)z!Don't offer the ``hashes`` kwarg.)rN)superr FAVORITE_HASH)r __class__s rrzMissingHashes.__init__s  34r r@r rcBt|tjr#)r rlr>rFs rr?zMissingHashes._raises$}-779::r )rN) r^r_r`rarrrbr? __classcell__)rms@rriris)5 ;4W -;*;r ri)r:typingrrrrrrpip._internal.exceptionsr r r pip._internal.utils.miscr r rrl STRONG_HASHESrrirgr rrtsIJJQQ0  / l l ^;F;r