
    !i_W                        S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	  SSK
JrJrJr  SSKJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJr  \(       a  SSKJr  OSr\R@                  " \!5      r"Sr# " S S5      r$ " S S\$5      r% " S S\$5      r& " S S\$5      r' " S S\$5      r( " S S\$5      r) " S S\$5      r* " S S\$5      r+ " S S\$5      r, " S S \$5      r- " S! S"\$5      r. " S# S$5      r/ " S% S&\5      r0S' r1 S>S( jr2S) r3S* r4S+ r5S, r6S- r7S. r8 S>S/ jr9S0 r:S1 r;S2 r<\%\,\-\.S3.r=/ S4Qr>\(       ah  \&\'S5.r?\" S65      (       a  \(\?S7'   \" S85      (       a  \)\?S9'   \*\?S:'   \+\?S;'   \=R                  \?5        \A" S< \?R                  5        5       5      (       d   e\C" \=R                  5       5      rD/ S=QrEg)?aB  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)	checksumsCRC32c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
BaseChecksum6      c                     g N selfchunks     T/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/botocore/httpchecksum.pyupdateBaseChecksum.update9           c                     g r   r   r   s    r    digestBaseChecksum.digest<   r#   r$   c                 l    U R                  5       n[        R                  " U5      R                  S5      $ )Nascii)r'   base64	b64encodedecode)r   bss     r    	b64digestBaseChecksum.b64digest?   s)    [[]#**733r$   c                    ^ ^ TR                  5       n[        UU 4S jS5       H  nT R                  U5        M     TR                  U5        g )Nc                  :   > T R                  TR                  5      $ r   )read_CHUNK_SIZE)fileobjr   s   r    <lambda>.BaseChecksum._handle_fileobj.<locals>.<lambda>E   s    ',,t/?/?"@r$   r$   )telliterr!   seek)r   r5   start_positionr   s   ``  r    _handle_fileobjBaseChecksum._handle_fileobjC   s9     @#FEKK G^$r$   c                     [        U[        [        45      (       a!  U R                  U5        U R                  5       $ U R	                  U5        U R                  5       $ r   )
isinstancebytes	bytearrayr!   r<   r/   )r   bodys     r    handleBaseChecksum.handleI   sL    dUI.//KK ~~   &~~r$   r   N)__name__
__module____qualname____firstlineno__r4   r!   r'   r/   r<   rC   __static_attributes__r   r$   r    r   r   6   s     K4% r$   r   c                   &    \ rS rSrS rS rS rSrg)Crc32ChecksumQ   c                     SU l         g Nr   
_int_crc32r&   s    r    __init__Crc32Checksum.__init__R   	    r$   c                 >    [        XR                  5      S-  U l        g Nl    )r   rP   r   s     r    r!   Crc32Checksum.updateU   s    7*Dr$   c                 6    U R                   R                  SSS9$ N   big	byteorderrP   to_bytesr&   s    r    r'   Crc32Checksum.digestX       ''U';;r$   rO   NrE   rF   rG   rH   rQ   r!   r'   rI   r   r$   r    rK   rK   Q   s    E<r$   rK   c                   &    \ rS rSrS rS rS rSrg)CrtCrc32Checksum\   c                     SU l         g rN   rO   r&   s    r    rQ   CrtCrc32Checksum.__init__^   rS   r$   c                 X    [         R                  " XR                  5      nUS-  U l        g rU   )crt_checksumsr   rP   r   r   new_checksums      r    r!   CrtCrc32Checksum.updatea   s"    $**5//B&3r$   c                 6    U R                   R                  SSS9$ rX   r]   r&   s    r    r'   CrtCrc32Checksum.digeste   r`   r$   rO   Nra   r   r$   r    rc   rc   \   s    4<r$   rc   c                   &    \ rS rSrS rS rS rSrg)CrtCrc32cChecksumi   c                     SU l         g rN   _int_crc32cr&   s    r    rQ   CrtCrc32cChecksum.__init__k   s
    r$   c                 X    [         R                  " XR                  5      nUS-  U l        g rU   )rh   crc32crs   ri   s      r    r!   CrtCrc32cChecksum.updaten   s%    $++E3C3CD'*4r$   c                 6    U R                   R                  SSS9$ rX   )rs   r^   r&   s    r    r'   CrtCrc32cChecksum.digestr   s    ((e(<<r$   rr   Nra   r   r$   r    ro   ro   i   s    5=r$   ro   c                   &    \ rS rSrS rS rS rSrg)CrtCrc64NvmeChecksumv   c                     SU l         g rN   _int_crc64nvmer&   s    r    rQ   CrtCrc64NvmeChecksum.__init__x   s
    r$   c                 X    [         R                  " XR                  5      nUS-  U l        g )Nl    )rh   	crc64nvmer   ri   s      r    r!   CrtCrc64NvmeChecksum.update{   s&    $..u6I6IJ*-??r$   c                 6    U R                   R                  SSS9$ )N   rZ   r[   )r   r^   r&   s    r    r'   CrtCrc64NvmeChecksum.digest   s    ""++A+??r$   r~   Nra   r   r$   r    r{   r{   v   s     @@r$   r{   c                   &    \ rS rSrS rS rS rSrg)CrtXxhash64Checksum   c                 J    [         R                  R                  5       U l        g r   )rh   XXHashnew_xxhash64_xxhashr&   s    r    rQ   CrtXxhash64Checksum.__init__   s    $++88:r$   c                 :    U R                   R                  U5        g r   r   r!   r   s     r    r!   CrtXxhash64Checksum.update       E"r$   c                 6    U R                   R                  5       $ r   r   finalizer&   s    r    r'   CrtXxhash64Checksum.digest       ||$$&&r$   r   Nra   r   r$   r    r   r      s    ;#'r$   r   c                   &    \ rS rSrS rS rS rSrg)CrtXxhash3Checksum   c                 J    [         R                  R                  5       U l        g r   )rh   r   new_xxhash3_64r   r&   s    r    rQ   CrtXxhash3Checksum.__init__   s    $++::<r$   c                 :    U R                   R                  U5        g r   r   r   s     r    r!   CrtXxhash3Checksum.update   r   r$   c                 6    U R                   R                  5       $ r   r   r&   s    r    r'   CrtXxhash3Checksum.digest   r   r$   r   Nra   r   r$   r    r   r      s    =#'r$   r   c                   &    \ rS rSrS rS rS rSrg)CrtXxhash128Checksum   c                 J    [         R                  R                  5       U l        g r   )rh   r   new_xxhash3_128r   r&   s    r    rQ   CrtXxhash128Checksum.__init__   s    $++;;=r$   c                 :    U R                   R                  U5        g r   r   r   s     r    r!   CrtXxhash128Checksum.update   r   r$   c                 6    U R                   R                  5       $ r   r   r&   s    r    r'   CrtXxhash128Checksum.digest   r   r$   r   Nra   r   r$   r    r   r      s    >#'r$   r   c                   &    \ rS rSrS rS rS rSrg)Sha1Checksum   c                 "    [        5       U l        g r   )r   	_checksumr&   s    r    rQ   Sha1Checksum.__init__   s    r$   c                 :    U R                   R                  U5        g r   r   r!   r   s     r    r!   Sha1Checksum.update       e$r$   c                 6    U R                   R                  5       $ r   r   r'   r&   s    r    r'   Sha1Checksum.digest       ~~$$&&r$   r   Nra   r   r$   r    r   r      s     %'r$   r   c                   &    \ rS rSrS rS rS rSrg)Sha256Checksum   c                 "    [        5       U l        g r   )r   r   r&   s    r    rQ   Sha256Checksum.__init__       r$   c                 :    U R                   R                  U5        g r   r   r   s     r    r!   Sha256Checksum.update   r   r$   c                 6    U R                   R                  5       $ r   r   r&   s    r    r'   Sha256Checksum.digest   r   r$   r   Nra   r   r$   r    r   r          "%'r$   r   c                   &    \ rS rSrS rS rS rSrg)Sha512Checksum   c                 "    [        5       U l        g r   )r   r   r&   s    r    rQ   Sha512Checksum.__init__   r   r$   c                 :    U R                   R                  U5        g r   r   r   s     r    r!   Sha512Checksum.update   r   r$   c                 6    U R                   R                  5       $ r   r   r&   s    r    r'   Sha512Checksum.digest   r   r$   r   Nra   r   r$   r    r   r      r   r$   r   c                   N    \ rS rSrSr   SS jrS rSS jrSS jrS r	S	 r
S
rg)AwsChunkedWrapper   r   Nc                 r    Xl         X0l        X l        U R                  5         Uc  U R                  nX@l        g r   )_raw_checksum_name_checksum_cls_reset_DEFAULT_CHUNK_SIZE_chunk_size)r   rawchecksum_clschecksum_name
chunk_sizes        r    rQ   AwsChunkedWrapper.__init__   s5     	+)11J%r$   c                 |    SU l         SU l        S U l        U R                  (       a  U R                  5       U l        g g )Nr$   F)
_remaining	_completer   r   r&   s    r    r   AwsChunkedWrapper._reset   s5    !//1DN r$   c                     US:w  d  US:w  a	  [        SS9eU R                  5         U R                  R                  S5        g )Nr   z Can only seek to start of stream	error_msg)r
   r   r   r:   )r   offsetwhences      r    r:   AwsChunkedWrapper.seek   s:    Q;&A+(<  			qr$   c                    Ub  US::  a  S nU R                   (       a  U R                  (       d  gUS L =(       d    U[        U R                  5      :  nU R                   (       dg  U(       a`  U =R                  U R                  5       -  sl        US L =(       d    U[        U R                  5      :  nU R                   (       d	  U(       a  M`  Uc  [        U R                  5      nU R                  S U nU R                  US  U l        U$ )Nr   r$   )r   r   len_make_chunk)r   sizewant_more_bytes	to_returns       r    r3   AwsChunkedWrapper.read   s    	D >>$// $,E$T__1E*E.._OOt//11O"dlIdS5I.IO ..__
 <t'D OOET*	//$%0r$   c                    U R                   R                  U R                  5      n[        [	        U5      5      SS  R                  S5      nU(       + U l        U R                  (       a  U R                  R                  U5        U R                  (       a[  U R                  (       aJ  U R                  R                  S5      nU R                  R                  5       R                  S5      nSX44-  $ SX!4-  $ )N   r*   s   0
%s:%s

s   %s
%s
)r   r3   r   hexr   encoder   r   r!   r   r/   )r   	raw_chunkhex_lennamechecksums        r    r   AwsChunkedWrapper._make_chunk  s     IINN4#3#34	c)n%ab)009&>>NN!!),>>dnn&&--g6D~~//188AH(D+;;;'!555r$   c              #   z   #    U R                   (       d&  U R                  5       v   U R                   (       d  M%  g g 7fr   )r   r   r&   s    r    __iter__AwsChunkedWrapper.__iter__  s&     ..""$$ ...s   5;;)r   r   r   r   r   r   r   )Nzx-amz-checksumN)r   r   )rE   rF   rG   rH   r   rQ   r   r:   r3   r   r   rI   r   r$   r    r   r      s1    %
 && 226$%r$   r   c                   J   ^  \ rS rSrU 4S jrSU 4S jjrU 4S jrS rSrU =r	$ )StreamingChecksumBodyi  c                 <   > [         TU ]  X5        X0l        X@l        g r   )superrQ   r   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s        r    rQ   StreamingChecksumBody.__init__  s    4!!r$   c                    > [         TU ]  US9nU R                  R                  U5        Ub  U(       d  US:  a  U R	                  5         U$ )N)amtr   )r   r3   r   r!   _validate_checksum)r   r  r   r  s      r    r3   StreamingChecksumBody.read   sC    %e$;uq##%r$   c                    > [         TU ]  U5      nU[        U5      :X  a  UnO[        U5      S U nU R                  R                  U5        US:X  a  [        U5      S:  a  U R                  5         U$ rN   )r   readintor   
memoryviewr   r!   r  )r   bamount_readviewr  s       r    r  StreamingChecksumBody.readinto'  si    g&q)#a& Da=+.Dd#!A
##%r$   c                     U R                   R                  5       [        R                  " U R                  5      :w  a3  SU R                   SU R                   R                  5        3n[        US9eg )NExpected checksum $ did not match calculated checksum: r   )r   r'   r+   	b64decoder   r/   r   )r   r   s     r    r  (StreamingChecksumBody._validate_checksum2  sg    >>  "f&6&6t~~&FF$T^^$4 5!^^5578:  ()<< Gr$   )r   r   r   )
rE   rF   rG   rH   rQ   r3   r  r  rI   __classcell__)r  s   @r    r   r     s    "
	= =r$   r   c                 J    [        XU5        [        XU5        [        U 5        g r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms_register_checksum_feature_ids)requestoperation_modelparamss      r    resolve_checksum_contextr  ;  s    &wH(6J"7+r$   c                 <   [        U 5      (       a  g U S   R                  S0 5      nU S   S   R                  nUR                  nUR                  =(       d    UR                  S5      nUR                  S5      nU(       ab  X;   a]  Uc  [
        nX(   R                  5       n	X;  a<  [        (       d%  U	[        ;   a  [        SU	R                  5        S3S9e[        S	U	 3S
9eO_U(       d  U(       aP  US:X  aJ  U S   R                  S5      (       a  g [        R                  5       n	[        XU5      n
U
b  U
[        S.US'   Og SnUR                  (       a4  [        U S   5      R                   S:X  a  U S   S   R"                  S:w  a  SnU	USU	 3S.nXS'   X@S   S'   g )Ncontextr   client_configrequestChecksumRequiredrequestAlgorithmMemberzUsing za requires an additional dependency. You will need to pip install botocore[crt] before proceeding.)msgz Unsupported checksum algorithm: r   when_supportedis_presign_request)r   valuerequest_algorithm_headerheaderurlhttpss3trailerx-amz-checksum-)	algorithminr   request_algorithm)r   getrequest_checksum_calculationhttp_checksumhttp_checksum_required_SUPPORTED_CHECKSUM_ALGORITHMSlowerr   _CRT_CHECKSUM_ALGORITHMSr   upperr   DEFAULT_CHECKSUM_ALGORITHM$_get_request_algorithm_member_headerhas_streaming_inputr	   schemesignature_version)r  r  r  supported_algorithmschecksum_contextr3  r4  request_checksum_requiredalgorithm_memberalgorithm_namealgorithm_member_headerlocation_typer/  s                r    r  r  A  s    7##y)--j"=#*9#5$"" ! $11M.. 	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 $!.!12I -6()%5Iz"r$   c                     U R                   n[        U[        5      (       d  gUR                  R	                  U5      nU(       a  UR
                  R	                  S5      $ g)zDGet the name of the header targeted by the "requestAlgorithmMember".Nr   )input_shaper?   r   membersr2  serialization)r  r  rB  operation_input_shapealgorithm_member_shapes        r    r;  r;    s\     ,77+^<<2::>> %3377?? r$   c                 \   U R                  S0 5      R                  S0 5      nUR                  S5      nU(       d  g US:X  a  [        U 5        OEUS   S:X  a  [        U 5        O0US   S:X  a  [        U 5        O[	        SR                  US   5      S	9eS
U;   a  US
   nUS   U S   US   '   g g )Nr   r   r1  zconditional-md5r0  r)  r-  zUnknown checksum variant: {}r   r(  r'  headersr   )r2  r   _apply_request_header_checksum_apply_request_trailer_checksumr   format)r  r@  r/  r(  s       r    apply_request_checksumrQ    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                     U R                  S0 5      R                  S0 5      nUR                  S5      nUS   nX0S   ;   a  g [        R                  US   5      nU" 5       R                  U S   5      nXPS   U'   g )Nr   r   r1  r   rM  r/  rB   )r2  _CHECKSUM_CLSrC   )r  r@  r/  location_namer   r'   s         r    rN  rN    s    {{9b155j"E $$%89If%M	** $$Y{%;<L^""76?3F(.I}%r$   c                 (   U R                  S0 5      R                  S0 5      nUR                  S5      nUS   n[        R                  US   5      nU S   nU S   nX5;   a  g SUS	'   S
U;   a  US
==   S-  ss'   OSUS
'   X5S'   [        U5      nUc  SU;   a  [        US   5      nUb  [	        U5      US'   SU;   a  US	 [
        R                  S5        [        U[        [        45      (       a  [        R                  " U5      n[        UUUS9U S'   g )Nr   r   r1  r   r/  rM  rB   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.)r   r   )r2  rS  r   intstrloggerdebugr?   r@   rA   ioBytesIOr   )r  r@  r/  rT  r   rM  rB   r  s           r    rO  rO    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                 b   [        U 5      =n(       a>  U H7  nUR                  5       nUS;  d  M  UR                  S5      n[        U5        M9     gU R	                  S0 5      R	                  S0 5      nUR	                  S5      nU(       a%  [        U[        5      (       a  [        US   5        ggg)zARegister feature IDs for checksum algorithms used in the request.)zX-AMZ-CHECKSUM-ALGORITHMzX-AMZ-CHECKSUM-MODEzX-AMZ-CHECKSUM-TYPEzX-AMZ-CHECKSUM-Nr   r   r1  r/  )r   r9  removeprefix'_register_checksum_algorithm_feature_idr2  r?   dict)r  algorithm_headersr)  rC  r@  r/  s         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                 T    U R                  5       nUS:X  a  SnSU 3n[        U5        g )N	CRC64NVMECRC64FLEXIBLE_CHECKSUMS_REQ_)r9  r   )r/  checksum_algorithm_name"checksum_algorithm_name_feature_ids      r    r_  r_    s9    'oo/+-")
!"9!:; ' :;r$   c                 p   UR                   nUR                  S5      nU(       a  XR;   a  Uc  [        nUR                  S/ 5       Vs1 s H  ofR                  5       iM     nn/ n[         H"  n	X;  a  M
  X;   d  M  UR                  U	5        M$     U S   R                  S0 5      n
XS'   XS   S'   g g g s  snf )NrequestValidationModeMemberresponseAlgorithmsr   r   response_algorithms)r4  r2  r6  r7  _ALGORITHMS_PRIORITY_LISTappend)r  r  r  r?  r4  mode_memberark  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   B3c                 n   US   nUR                  S0 5      nUR                  S5      nU(       d  g U Hi  nSU 3nX;  a  M  SXH   ;   a  M  UR                  (       a  [        XU5      US'   O[        XU5      US'   US   R                  S0 5      nXuS'   XQS   S'     g    [        R                  S	U5        g )
NrM  r   rk  r.  -rB   r   response_algorithmz[Skipping checksum validation. Response did not contain one of the following algorithms: %s.)r2  has_streaming_output_handle_streaming_response_handle_bytes_responserY  rZ  )	http_responseresponser   r  rM  r@  
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                     [         R                  U5      nSU 3n[        U R                  US   R                  S5      U" 5       US   U   5      $ )Nr.  rM  zcontent-length)rS  r2  r   r   )rw  rx  r/  r   rz  s        r    ru  ru  V  sZ     $$Y/L#I;/K  01K(	 r$   c                     U R                   nSU 3n[        R                  U5      nU" 5       nUR                  U5        US   U   nUR	                  5       [
        R                  " U5      :w  a  SU SUR                  5        3n[        US9eU$ )Nr.  rM  r  r  r   )	contentrS  r2  r!   r'   r+   r  r/   r   )	rw  rx  r/  rB   rz  r   r   r  r   s	            r    rv  rv  a  s      D#I;/K $$Y/L~HOOD	";/HF,,X66 
 +!++-.0 	 $i88Kr$   )r   r   r   r   )r   rv   r   xxhash64xxhash3	xxhash128)r   rv   )r      rY   r   )r      r   r  r  r  c              #   2   #    U  H  o[         ;   v   M     g 7fr   )r8  ).0r   s     r    	<genexpr>r    s      5MT((5Ms   )	r  r  r   r  rv   r   r   r   r   r   )F__doc__r+   r[  loggingbinasciir   hashlibr   r   r   botocore.compatr   r   r	   botocore.exceptionsr
   r   r   botocore.modelr   botocore.responser   botocore.useragentr   botocore.utilsr   r   r   r   awscrtr   rh   	getLoggerrE   rY  r:  r   rK   rc   ro   r{   r   r   r   r   r   r   r   r   r  r  r;  rQ  rN  rO  r  r_  r  r{  ru  rv  rS  r8  _CRT_CHECKSUM_CLSr!   allkeyslistr6  rl  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" 	   "#
 z**)=+&z**(;*%'9)$)=+&*+ 5F5K5K5M     "&m&8&8&:!; 
 r$   