+
     Ii_W  c                   s   R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtH	t	 ^ RI
HtHtHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHtHtHt ]'       d   ^ R
IHt MRt]P@                  ! ]!4      t"Rt# ! R R4      t$ ! R R]$4      t% ! R R]$4      t& ! R R]$4      t' ! R R]$4      t( ! R R]$4      t) ! R R]$4      t* ! R R]$4      t+ ! R R]$4      t, ! R R]$4      t- ! R  R!]$4      t. ! R" R#4      t/ ! R$ R%]4      t0R& t1R>R' lt2R( t3R) t4R* t5R+ t6R, t7R- t8R>R. lt9R/ t:R0 t;R1 t<R2]%R3],R4]-R5]./t=. R?Ot>]'       d   R2]&R6]'/t?]! R@4      '       d   ](]?R7&   ]! RA4      '       d   ])]?R8&   ]*]?R9&   ]+]?R:&   ]=P                  ]?4       ]A;QJ d*    R; ]?P                  4        4       F  '       d   K   R<M	  R=M! R; ]?P                  4        4       4      '       g   Q h]C! ]=P                  4       4      tD. RBOtER# )CaB  The interfaces in this module are not intended for public use.

This module defines interfaces for applying checksums to HTTP requests within
the context of botocore. This involves both resolving the checksum to be used
based on client configuration and environment, as well as application of the
checksum to the request.
N)crc32)sha1sha256sha512)HAS_CRThas_minimum_crt_versionurlparse)AwsChunkedWrapperErrorFlexibleChecksumErrorMissingDependencyException)StructureShape)StreamingBody)register_feature_id)conditionally_calculate_md5determine_content_lengthget_checksum_algorithm_headershas_checksum_header)	checksumsZCRC32c                   sB   a  ] tR t^6t o RtR tR tR tR tR t	Rt
V tR# )	BaseChecksumc                    R # N selfchunk   &&:/usr/lib/python3.14/site-packages/botocore/httpchecksum.pyupdateZBaseChecksum.update9           c                r   r   r   r      &r   digestZBaseChecksum.digest<   r   r   c                sl    V P                  4       p\        P                  ! V4      P                  R 4      # )ascii)r    base64Z	b64encodeZdecode)r   Zbs   & r   	b64digestZBaseChecksum.b64digest?   s)    [[]#**733r   c                s   a a SP                  4       p\        VV 3R  lR4       F  pS P                  V4       K  	  SP                  V4       R# )c                  s:   < S P                  SP                  4      # r   )read_CHUNK_SIZE)fileobjr   s   r   Z<lambda>Z.BaseChecksum._handle_fileobj.<locals>.<lambda>E   s    ',,t/?/?"@r   r   N)ZtellZiterr   seek)r   r'   Zstart_positionr   s   ff  r   _handle_fileobjZBaseChecksum._handle_fileobjC   s9     @#FEKK G^$r   c                s    \        V\        \        34      '       d"   V P                  V4       V P                  4       # V P	                  V4       V P                  4       # r   )
isinstancebytes	bytearrayr   r)   r$   )r   bodyr   r   handleZBaseChecksum.handleI   sL    dUI.//KK ~~   &~~r   r   N   )__name__
__module____qualname____firstlineno__r&   r   r    r$   r)   r.   __static_attributes____classdictcell____classdict__   @r   r   r   6   s(     K4%   r   r   c                   s2   a  ] tR t^Qt o R tR tR tRtV tR# )Crc32Checksumc                    ^ V n         R#     N
_int_crc32r   r   r   __init__ZCrc32Checksum.__init__R   	    r   c                sH    \        WP                  4      R ,          V n        R# l    N)r    r>   r   r   r   r   ZCrc32Checksum.updateU   s    7*Dr   c                <    V P                   P                  ^RR7      #    bigZ	byteorderr>   to_bytesr   r   r   r    ZCrc32Checksum.digestX       ''U';;r   r=   N	r0   r1   r2   r3   r?   r   r    r4   r5   r6   r8   r   r9   r9   Q   s     E< <r   r9   c                   s2   a  ] tR t^\t o R tR tR tRtV tR# )CrtCrc32Checksumc                r:   r;   r=   r   r   r   r?   ZCrtCrc32Checksum.__init__^   r@   r   c                b    \         P                  ! WP                  4      pVR ,          V n        R# rA   )crt_checksumsr    r>   r   r   Znew_checksum   && r   r   ZCrtCrc32Checksum.updatea   s"    $**5//B&3r   c                rB   rC   rG   r   r   r   r    ZCrtCrc32Checksum.digeste   rI   r   r=   NrJ   r6   r8   r   rK   rK   \   s     4< <r   rK   c                   s2   a  ] tR t^it o R tR tR tRtV tR# )CrtCrc32cChecksumc                r:   r;   _int_crc32cr   r   r   r?   ZCrtCrc32cChecksum.__init__k   s
    r   c                rL   rA   )rM   crc32crR   rN   rO   r   r   ZCrtCrc32cChecksum.updaten   s%    $++E3C3CD'*4r   c                rB   rC   )rR   rH   r   r   r   r    ZCrtCrc32cChecksum.digestr   s    ((e(<<r   rQ   NrJ   r6   r8   r   rP   rP   i   s     5= =r   rP   c                   s2   a  ] tR t^vt o R tR tR tRtV tR# )CrtCrc64NvmeChecksumc                r:   r;   _int_crc64nvmer   r   r   r?   ZCrtCrc64NvmeChecksum.__init__x   s
    r   c                rL   )l    N)rM   	crc64nvmerV   rN   rO   r   r   ZCrtCrc64NvmeChecksum.update{   s&    $..u6I6IJ*-??r   c                s<    V P                   P                  ^RR7      # )i   rE   rF   )rV   rH   r   r   r   r    ZCrtCrc64NvmeChecksum.digest   s    ""++A+??r   rU   NrJ   r6   r8   r   rT   rT   v   s      @@ @r   rT   c                   s2   a  ] tR t^t o R tR tR tRtV tR# )CrtXxhash64Checksumc                L    \         P                  P                  4       V n        R # r   )rM   XXHashZnew_xxhash64_xxhashr   r   r   r?   ZCrtXxhash64Checksum.__init__   s    $++88:r   c                <    V P                   P                  V4       R # r   r[   r   r   r   r   r   ZCrtXxhash64Checksum.update       E"r   c                6    V P                   P                  4       # r   r[   Zfinalizer   r   r   r    ZCrtXxhash64Checksum.digest       ||$$&&r   r[   NrJ   r6   r8   r   rX   rX      s     ;#' 'r   rX   c                   s2   a  ] tR t^t o R tR tR tRtV tR# )CrtXxhash3Checksumc                rY   r   )rM   rZ   Znew_xxhash3_64r[   r   r   r   r?   ZCrtXxhash3Checksum.__init__   s    $++::<r   c                r\   r   r]   r   r   r   r   ZCrtXxhash3Checksum.update   r^   r   c                r_   r   r`   r   r   r   r    ZCrtXxhash3Checksum.digest   ra   r   rb   NrJ   r6   r8   r   rc   rc      s     =#' 'r   rc   c                   s2   a  ] tR t^t o R tR tR tRtV tR# )CrtXxhash128Checksumc                rY   r   )rM   rZ   Znew_xxhash3_128r[   r   r   r   r?   ZCrtXxhash128Checksum.__init__   s    $++;;=r   c                r\   r   r]   r   r   r   r   ZCrtXxhash128Checksum.update   r^   r   c                r_   r   r`   r   r   r   r    ZCrtXxhash128Checksum.digest   ra   r   rb   NrJ   r6   r8   r   rd   rd      s     >#' 'r   rd   c                   s2   a  ] tR t^t o R tR tR tRtV tR# )Sha1Checksumc                $    \        4       V n        R # r   )r   	_checksumr   r   r   r?   ZSha1Checksum.__init__   s    r   c                r\   r   rg   r   r   r   r   r   ZSha1Checksum.update       e$r   c                r_   r   rg   r    r   r   r   r    ZSha1Checksum.digest       ~~$$&&r   rg   NrJ   r6   r8   r   re   re      s      %' 'r   re   c                   s2   a  ] tR t^t o R tR tR tRtV tR# )Sha256Checksumc                rf   r   )r   rg   r   r   r   r?   ZSha256Checksum.__init__       r   c                r\   r   rh   r   r   r   r   ZSha256Checksum.update   ri   r   c                r_   r   rj   r   r   r   r    ZSha256Checksum.digest   rk   r   rl   NrJ   r6   r8   r   rm   rm           "%' 'r   rm   c                   s2   a  ] tR t^t o R tR tR tRtV tR# )Sha512Checksumc                rf   r   )r   rg   r   r   r   r?   ZSha512Checksum.__init__   rn   r   c                r\   r   rh   r   r   r   r   ZSha512Checksum.update   ri   r   c                r_   r   rj   r   r   r   r    ZSha512Checksum.digest   rk   r   rl   NrJ   r6   r8   r   rp   rp      ro   r   rp   c                   sT   a  ] tR t^t o R	tR
R ltR tRR ltRR ltR t	R t
RtV tR# )AwsChunkedWrapperNc                sv    Wn         W0n        W n        V P                  4        Vf   V P                  pW@n        R # r   )_raw_checksum_name_checksum_cls_reset_DEFAULT_CHUNK_SIZE_chunk_size)r   rawchecksum_clschecksum_nameZ
chunk_sizes   &&&&&r   r?   ZAwsChunkedWrapper.__init__   s5     	+)11J%r   c                s    R V n         RV n        RV n        V P                  '       d   V P                  4       V n        R# R# )r   FN)
_remaining	_completerg   rt   r   r   r   ru   ZAwsChunkedWrapper._reset   s8    !//1DN r   c                s    V^ 8w  g   V^ 8w  d   \        RR7      hV P                  4        V P                  P                  ^ 4       R# )r<   z Can only seek to start of stream	error_msgN)r   ru   rr   r(   )r   ZoffsetZwhence   &&&r   r(   ZAwsChunkedWrapper.seek   s:    Q;&A+(<  			qr   c                s   Ve
   V^ 8:  d   R pV P                   '       d   V P                  '       g   R# VR J ;'       g    V\        V P                  4      8  pV P                   '       gV   V'       dN   V ;P                  V P                  4       ,          un        VR J ;'       g    V\        V P                  4      8  pKg  Vf   \        V P                  4      pV P                  R V pV P                  VR  V n        V# )Nr   )r|   r{   len_make_chunk)r   ZsizeZwant_more_bytesZ	to_returns   &&  r   r%   ZAwsChunkedWrapper.read   s    	D >>>$/// $,EE$T__1E*E..._OOt//11O"dlIIdS5I.IO <t'D OOET*	//$%0r   c                s
   V P                   P                  V P                  4      p\        \	        V4      4      R ,          P                  R4      pV'       * V n        V P                  '       d   V P                  P                  V4       V P                  '       da   V P                  '       dO   V P                  P                  R4      pV P                  P                  4       P                  R4      pRW43,          # RW!3,          # ):   NNr!   s   0
%s:%s

s   %s
%s
)rr   r%   rw   Zhexr   Zencoder|   rg   r   rs   r$   )r   Z	raw_chunkZhex_lennamechecksums   &    r   r   ZAwsChunkedWrapper._make_chunk  s     IINN4#3#34	c)n%b)009&>>>NN!!),>>>dnnn&&--g6D~~//188AH(D+;;;'!555r   c              #  sZ   "   V P                   '       g   V P                  4       x  K&  R # 5ir   )r|   r   r   r   r   __iter__ZAwsChunkedWrapper.__iter__  s"     ...""$$ !s   ++)rg   rt   rs   rw   r|   rr   r{   r/   )Nzx-amz-checksumN)r<   r   )r0   r1   r2   r3   rv   r?   ru   r(   r%   r   r   r4   r5   r6   r8   r   rq   rq      s.     %& 226$% %r   rq   c                   sT   a a ] tR tRt oV 3R ltRV 3R lltV 3R ltR tRtVt	V ;t
# )StreamingChecksumBodyi  c                s>   < \         SV `  W4       W0n        W@n        R # r   )superr?   rg   	_expected)r   Z
raw_streamcontent_lengthr   expected	__class__s   &&&&&r   r?   ZStreamingChecksumBody.__init__  s    4!!r   c                s   < \         SV `  VR 7      pV P                  P                  V4       Ve   V'       g   V^ 8  d   V P	                  4        V# ))amt)r   r%   rg   r   _validate_checksum)r   r   r   r   s   && r   r%   ZStreamingChecksumBody.read   sC    %e$;uq##%r   c                s   < \         SV `  V4      pV\        V4      8X  d   TpM\        V4      R V pV P                  P                  V4       V^ 8X  d!   \        V4      ^ 8  d   V P                  4        V# r   )r   readintor   Z
memoryviewrg   r   r   )r   ZbZamount_readZviewr   s   &&  r   r   ZStreamingChecksumBody.readinto'  si    g&q)#a& Da=+.Dd#!A
##%r   c                s    V P                   P                  4       \        P                  ! V P                  4      8w  d7   R V P                   RV P                   P                  4        2p\        VR7      hR# )Expected checksum $ did not match calculated checksum: r}   N)rg   r    r"   	b64decoder   r$   r   )r   r~   r#   r   r   Z(StreamingChecksumBody._validate_checksum2  sg    >>  "f&6&6t~~&FF$T^^$4 5!^^5578:  ()<< Gr   )rg   r   r   )r0   r1   r2   r3   r?   r%   r   r   r4   r5   Z__classcell__)r   r7   s   @@r   r   r     s     "
	= =r   r   c                 sL    \        WV4       \        WV4       \        V 4       R # r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms_register_checksum_feature_ids)requestoperation_modelparamsr   r   resolve_checksum_contextr   ;  s    &wH(6J"7+r   c                 s   \        V 4      '       d   R # V R,          P                  R/ 4      pV R,          R,          P                  pVP                  pVP                  ;'       g    VP                  R4      pVP                  R4      pV'       dr   W9   dl   Vf   \
        pW(,          P                  4       p	W9  dE   \        '       g*   V	\        9   d   \        RV	P                  4        R2R7      h\        R	V	 2R
7      hMkV'       g   V'       dZ   VR8X  dS   V R,          P                  R4      '       d   R # \        P                  4       p	\        WV4      p
V
e   RV
R\        /VR&   MR # RpVP                  '       dC   \        V R,          4      P                   R8X  d"   V R,          R,          P"                  R8w  d   RpRV	RVRRV	 2/pWR&   W@R,          R&   R # )Ncontextr   Zclient_configZrequestChecksumRequiredZrequestAlgorithmMemberzUsing za requires an additional dependency. You will need to pip install botocore[crt] before proceeding.)Zmsgz Unsupported checksum algorithm: r}   Zwhen_supportedZis_presign_requestr   valuerequest_algorithm_headerheaderZurlZhttpsZs3trailer	algorithminx-amz-checksum-request_algorithm)r   getrequest_checksum_calculationhttp_checksumZhttp_checksum_required_SUPPORTED_CHECKSUM_ALGORITHMSlowerr   _CRT_CHECKSUM_ALGORITHMSr	   upperr   DEFAULT_CHECKSUM_ALGORITHM$_get_request_algorithm_member_headerZhas_streaming_inputr   ZschemeZsignature_version)r   r   r   supported_algorithmschecksum_contextr   r   Zrequest_checksum_requiredalgorithm_memberalgorithm_nameZalgorithm_member_headerZlocation_typer   s   &&&&         r   r   r   A  s    7##y)--j"=#*9#5$"" ! $11M.. 	8 	867  %(()AB,6  '#A 177957~1II0 !5!5!7 8 9; ;  (<^<LM  6 
#9=MM 9!!"677399;"F&6#
 #./3<78
 	M+++WU^$++w69o.@@DH &M 	^m/.!12I -6()%5Iz"r   c                s    V P                   p\        V\        4      '       g   R# VP                  P	                  V4      pV'       d   VP
                  P	                  R4      # R# )zDGet the name of the header targeted by the "requestAlgorithmMember".Nr   )Zinput_shaper*   r
   Zmembersr   Zserialization)r   r   r   Zoperation_input_shapeZalgorithm_member_shape   &&&  r   r   r     s\     ,77+^<<2::>> %3377?? r   c                 s   V P                  R / 4      P                  R/ 4      pVP                  R4      pV'       g   R# VR8X  d   \        V 4       MVVR,          R8X  d   \        V 4       M<VR,          R8X  d   \        V 4       M"\	        RP                  VR,          4      R	7      hR
V9   d&   VR
,          pVR,          V R,          VR,          &   R# R# )r   r   r   Nzconditional-md5r   r   r   zUnknown checksum variant: {}r}   r   r   headersr   )r   r   _apply_request_header_checksum_apply_request_trailer_checksumr   Zformat)r   r   r   r   s   &   r   apply_request_checksumr     s    {{9b155j"E $$%89I%%#G,	4H	$&w/	4I	%'0#4;;IdOL
 	
 "%55#34N#O $W- 		3F;< 6r   c                 s$   V P                  R / 4      P                  R/ 4      pVP                  R4      pVR,          pW0R,          9   d   R# \        P                  VR,          4      pV! 4       P                  V R,          4      pWPR,          V&   R# )r   r   r   r   r   Nr   r-   )r   _CHECKSUM_CLSr.   )r   r   r   location_namery   r       &     r   r   r     s    {{9b155j"E $$%89If%M	** $$Y{%;<L^""76?3F(.I}%r   c                 sx   V P                  R / 4      P                  R/ 4      pVP                  R4      pVR,          p\        P                  VR,          4      pV R,          pV R,          pW59   d   R# RVR	&   R
V9   d   VR
;;,          R,          uu&   MRVR
&   W5R&   \        V4      pVf   RV9   d   \        VR,          4      pVe   \	        V4      VR&   RV9   d   VR \
        P                  R4       \        V\        \        34      '       d   \        P                  ! V4      p\        VVVR7      V R&   R# )r   r   r   r   r   r   r-   NZchunkedzTransfer-EncodingzContent-Encodingz,aws-chunkedzaws-chunkedzX-Amz-TrailerzContent-LengthzX-Amz-Decoded-Content-LengthzVRemoving the Content-Length header since 'chunked' is specified for Transfer-Encoding.)ry   rz   )r   r   r   ZintZstrloggerdebugr*   r+   r,   ioZBytesIOrq   )r   r   r   r   ry   r   r-   r   s   &       r   r   r     s@   {{9b155j"E $$%89If%M $$Y{%;<Li G6?D#,G W$ 	"#~5#&3"#,O-d3N"2g"=
 W%567! 36n2E./7"$%d	
 $	*++zz$'!#GFOr   c                sz   \        V 4      ;p'       dA   V F8  pVP                  4       pVR9  g   K  VP                  R4      p\        V4       K:  	  R# V P	                  R/ 4      P	                  R/ 4      pVP	                  R4      pV'       d-   \        V\        4      '       d   \        VR,          4       R# R# R# )zARegister feature IDs for checksum algorithms used in the request.zX-AMZ-CHECKSUM-Nr   r   r   r   )zX-AMZ-CHECKSUM-ALGORITHMzX-AMZ-CHECKSUM-MODEzX-AMZ-CHECKSUM-TYPE)r   r   Zremoveprefix'_register_checksum_algorithm_feature_idr   r*   Zdict)r   Zalgorithm_headersr   r   r   r   r   r   r   r     s    :7CCC'F\\^F  
 "(!4!45F!G7G ( 	 {{9b155j"E $$%89IZ	400/	+0FG 1yr   c                 sX    V P                  4       pVR 8X  d   RpRV 2p\        V4       R# )Z	CRC64NVMEZCRC64ZFLEXIBLE_CHECKSUMS_REQ_N)r   r   )r   Zchecksum_algorithm_nameZ"checksum_algorithm_name_feature_ids   &  r   r   r     s9    'oo/+-")
!"9!:; ' :;r   c                 s   VP                   pVP                  R 4      pV'       d   WR9   d   Vf   \        pVP                  R. 4       Uu0 uF  qfP                  4       kK  	  pp. p\         F$  p	W9  d   K  W9   g   K  VP                  V	4       K&  	  V R,          P                  R/ 4      p
WR&   WR,          R&   R# R# R# u upi )ZrequestValidationModeMemberNZresponseAlgorithmsr   r   response_algorithms)r   r   r   r   _ALGORITHMS_PRIORITY_LISTZappend)r   r   r   r   r   Zmode_memberZar   Zusable_algorithmsr   r   s   &&&&       r   r   r     s     $11M##$ABK{,'#A ,001ErJ
J!GGIJ 	 
 2I30!((3	 3 #9-11*bA2C./)9	:&! -{
s   
Cc                 s   VR ,          pVP                  R/ 4      pVP                  R4      pV'       g   R# V Fy  pRV 2pW9  d   K  RWH,          9   d   K  VP                  '       d   \        WV4      VR&   M\        WV4      VR&   VR,          P                  R/ 4      pWuR&   WQR,          R&    R# 	  \        P                  R	V4       R# )
r   r   r   Nr   Z-r-   r   Zresponse_algorithmz[Skipping checksum validation. Response did not contain one of the following algorithms: %s.)r   Zhas_streaming_output_handle_streaming_response_handle_bytes_responser   r   )	http_responseresponser   r   r   r   Z
algorithmsr   header_names	   &&&&     r   handle_checksum_bodyr   -  s    y!G{{:r2!%%&;<J	'	{3%
 '&&///9 HV  6 HV
 $I.22:rB1:-.*:J'3  6 LLer   c                 s    \         P                  V4      pR V 2p\        V P                  VR,          P                  R4      V! 4       VR,          V,          4      # )r   r   zcontent-length)r   r   r   rx   )r   r   r   ry   r   r   r   r   r   V  sZ     $$Y/L#I;/K  01K(	 r   c                 s8   V P                   pR V 2p\        P                  V4      pV! 4       pVP                  V4       VR,          V,          pVP	                  4       \
        P                  ! V4      8w  d#   RV RVP                  4        2p\        VR7      hV# )r   r   r   r   r}   )	Zcontentr   r   r   r    r"   r   r$   r   )	r   r   r   r-   r   ry   r   r   r~   s	   &&&      r   r   r   a  s      D#I;/K $$Y/L~HOOD	";/HF,,X66 
 +!++-.0 	 $i88Kr   r    r   r   r   rS   rW   xxhash64xxhash3	xxhash128c              #   s2   "   T F  q\         9   x  K  	  R # 5ir   )r   )Z.0r   r#   r   	<genexpr>r     s      5MT((5Ms   FTr   )r    rS   rW   r   r   r   )r<   i   rD   )r<   i   r   )	r   r   rW   r   rS   r    r   r   r   )FZ__doc__r"   r   ZloggingZbinasciir    Zhashlibr   r   r   Zbotocore.compatr   r   r   Zbotocore.exceptionsr   r   r	   Zbotocore.modelr
   Zbotocore.responser   Zbotocore.useragentr   Zbotocore.utilsr   r   r   r   Zawscrtr   rM   Z	getLoggerr0   r   r   r   r9   rK   rP   rT   rX   rc   rd   re   rm   rp   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z_CRT_CHECKSUM_CLSr   ZallZkeysZlistr   r   r   r   r   <module>r      s@    	   ( ( F F 
 * + 2  1M			8	$$    6<L <
<| 
<
= 
=
@< 
@	', 	'	' 	'	'< 	''< ''\ ''\ 'O% O%d=M =B,K6\@ 
2	//dH*<:0&R" ]
Lnn	   	!#
 z**)=+&z**(;*%'9)$)=+&*+ 5F5K5K5M333 5F5K5K5M     "&m&8&8&:!; 
 r   