
    vKgo?                     t   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  SSK	J
r
  SSKJrJrJr  SSKJr  SSKJrJr  \
(       a  SS	KJr  OSr\R.                  " \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 r" S)S jr#S r$S r%S r& S)S jr'S  r(S! r)S" r*\\\S#.r+S$S%/r,\
(       a:  \\S&.r-\+R]                  \-5        \/" S' \-Ra                  5        5       5      (       d   e\1" \+Ra                  5       5      r2/ S(Qr3g)*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)HAS_CRT)AwsChunkedWrapperErrorFlexibleChecksumErrorMissingDependencyException)StreamingBody)conditionally_calculate_md5determine_content_length)	checksumsc                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
BaseChecksum0      c                     g N selfchunks     U/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/botocore/httpchecksum.pyupdateBaseChecksum.update3           c                     g r   r   r   s    r   digestBaseChecksum.digest6   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.b64digest9   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>?   s    ',,t/?/?"@r   r   )telliterr   seek)r   r-   start_positionr   s   ``  r   _handle_fileobjBaseChecksum._handle_fileobj=   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   r4   r'   )r   bodys     r   handleBaseChecksum.handleC   sL    dUI.//KK ~~   &~~r   r   N)__name__
__module____qualname____firstlineno__r,   r   r   r'   r4   r;   __static_attributes__r   r   r   r   r   0   s     K4% r   r   c                   &    \ rS rSrS rS rS rSrg)Crc32ChecksumK   c                     SU l         g Nr   
_int_crc32r   s    r   __init__Crc32Checksum.__init__L   	    r   c                 >    [        XR                  5      S-  U l        g Nl    )r   rH   r   s     r   r   Crc32Checksum.updateO   s    7*Dr   c                 6    U R                   R                  SSS9$ N   big)	byteorderrH   to_bytesr   s    r   r   Crc32Checksum.digestR       ''U';;r   rG   Nr=   r>   r?   r@   rI   r   r   rA   r   r   r   rC   rC   K   s    E<r   rC   c                   &    \ rS rSrS rS rS rSrg)CrtCrc32ChecksumV   c                     SU l         g rF   rG   r   s    r   rI   CrtCrc32Checksum.__init__X   rK   r   c                 X    [         R                  " XR                  5      nUS-  U l        g rM   )crt_checksumsr   rH   r   r   new_checksums      r   r   CrtCrc32Checksum.update[   s"    $**5//B&3r   c                 6    U R                   R                  SSS9$ rP   rT   r   s    r   r   CrtCrc32Checksum.digest_   rW   r   rG   NrX   r   r   r   rZ   rZ   V   s    4<r   rZ   c                   &    \ rS rSrS rS rS rSrg)CrtCrc32cChecksumc   c                     SU l         g rF   _int_crc32cr   s    r   rI   CrtCrc32cChecksum.__init__e   s
    r   c                 X    [         R                  " XR                  5      nUS-  U l        g rM   )r_   crc32crj   r`   s      r   r   CrtCrc32cChecksum.updateh   s%    $++E3C3CD'*4r   c                 6    U R                   R                  SSS9$ rP   )rj   rU   r   s    r   r   CrtCrc32cChecksum.digestl   s    ((e(<<r   ri   NrX   r   r   r   rf   rf   c   s    5=r   rf   c                   &    \ rS rSrS rS rS rSrg)Sha1Checksump   c                 "    [        5       U l        g r   )r   	_checksumr   s    r   rI   Sha1Checksum.__init__q   s    r   c                 :    U R                   R                  U5        g r   ru   r   r   s     r   r   Sha1Checksum.updatet       e$r   c                 6    U R                   R                  5       $ r   ru   r   r   s    r   r   Sha1Checksum.digestw       ~~$$&&r   ru   NrX   r   r   r   rr   rr   p   s     %'r   rr   c                   &    \ rS rSrS rS rS rSrg)Sha256Checksum{   c                 "    [        5       U l        g r   )r   ru   r   s    r   rI   Sha256Checksum.__init__|   s    r   c                 :    U R                   R                  U5        g r   rx   r   s     r   r   Sha256Checksum.update   rz   r   c                 6    U R                   R                  5       $ r   r|   r   s    r   r   Sha256Checksum.digest   r~   r   r   NrX   r   r   r   r   r   {   s    "%'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   rI   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	_completeru   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   r2   )r   offsetwhences      r   r2   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   r+   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   r+   r   hexr   encoder   ru   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;;)ru   r   r   r   r   r   r   )Nzx-amz-checksumN)r   r   )r=   r>   r?   r@   r   rI   r   r2   r+   r   r   rA   r   r   r   r   r      s1    %
 && 226$%r   r   c                   >   ^  \ rS rSrU 4S jrSU 4S jjrS rSrU =r$ )StreamingChecksumBody   c                 <   > [         TU ]  X5        X0l        X@l        g r   )superrI   ru   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s        r   rI   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   r+   ru   r   _validate_checksum)r   r   r   r   s      r   r+   StreamingChecksumBody.read   sC    %e$;uq##%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   )ru   r   r#   	b64decoder   r'   r   )r   r   s     r   r   (StreamingChecksumBody._validate_checksum   sg    >>  "f&6&6t~~&FF$T^^$4 5!^^5578:  ()<< Gr   )ru   r   r   )	r=   r>   r?   r@   rI   r+   r   rA   __classcell__)r   s   @r   r   r      s    "
= =r   r   c                 4    [        XU5        [        XU5        g r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms)requestoperation_modelparamss      r   resolve_checksum_contextr      s    &wH(6Jr   c                 j   UR                   nUR                  S5      nU(       a  XR;   a  Uc  [        nX%   R                  5       nXc;  a<  [        (       d%  U[
        ;   a  [        SUR                  5        S3S9e[        SU 3S9eSnUR                  (       a  U S   R                  S	5      (       a  S
nUUSU 3S.nUS   U S   ;   a  g U S   R                  S0 5      n	XS'   XS   S'   g UR                  (       d  UR                  S5      (       a"  U S   R                  S0 5      n	SU	S'   XS   S'   g g )NrequestAlgorithmMemberzUsing za requires an additional dependency. You will need to pip install botocore[crt] before proceeding.)msgz Unsupported checksum algorithm: r   headerurlzhttps:trailerx-amz-checksum-)	algorithminr   r   headerscontextr   request_algorithmrequestChecksumRequiredconditional-md5)http_checksumget_SUPPORTED_CHECKSUM_ALGORITHMSlowerr   _CRT_CHECKSUM_ALGORITHMSr	   upperr   has_streaming_input
startswithhttp_checksum_required)
r   r   r   supported_algorithmsr   algorithm_memberalgorithm_namelocation_typer   checksum_contexts
             r   r   r      s    $11M$(()AB,6  '#A 177957~1II0 !5!5!7 8 9; ;  (<^<LM  !..u~((22 !* (%n%56
	 V	 22"9-11*bA09,-)9	:&		/	/=3D3D!4 4 #9-11*bA0A,-)9	:&4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        g US   S:X  a  [        U 5        g US   S:X  a  [        U 5        g [	        SR                  US   5      S	9e)
Nr   r   r   r   r   r   r   zUnknown checksum variant: {}r   )r   r   _apply_request_header_checksum_apply_request_trailer_checksumr   format)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
 	
r   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   r   r   r   r   r:   )r   _CHECKSUM_CLSr;   )r   r   r   location_namer   r   s         r   r   r   A  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b  [        U5      US'   [	        U[
        [        45      (       a  [        R                  " U5      n[        UUUS9U S'   g )Nr   r   r   r   r   r   r:   chunkedzTransfer-EncodingzContent-Encodingz,aws-chunkedzaws-chunkedzX-Amz-TrailerzX-Amz-Decoded-Content-Length)r   r   )
r   r   r   strr7   r8   r9   ioBytesIOr   )r   r   r   r   r   r   r:   r   s           r   r   r   M  s    {{9b155j"E $$%89If%M $$Y{%;<Li G6?D#,G W$ 	"#~5#&3"#,O-d3N! 36n2E./$	*++zz$'!#GFOr   c                 n   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)r   r   r   r   _ALGORITHMS_PRIORITY_LISTappend)r   r   r   r   r   mode_memberar   usable_algorithmsr   r   s              r   r   r   s  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   B2c                 t   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 S
35        g )Nr   r   r   r   -r:   r   response_algorithmzXSkipping checksum validation. Response did not contain one of the following algorithms: .)r   has_streaming_output_handle_streaming_response_handle_bytes_responseloggerinfo)	http_responseresponser   r   r   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 KK!!+A	/r   c                     [         R                  U5      nSU 3n[        U R                  US   R                  S5      U" 5       US   U   5      $ )Nr   r   zcontent-length)r   r   r   r   )r  r  r   r   r  s        r   r  r    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   r   r   r   r   )	contentr   r   r   r   r#   r   r'   r   )	r  r  r   r:   r  r   r   r   r   s	            r   r	  r	    s      D#I;/K $$Y/L~HOOD	";/HF,,X66 
 +!++-.0 	 $i88Kr   )r   r   r   r   rm   )r   rm   c              #   0   #    U H  o[         ;   v   M     g 7fr   )r   ).0r   s     r   	<genexpr>r    s      5MT((5Ms   )rm   r   r   r   r   )4__doc__r#   r   loggingbinasciir   hashlibr   r   botocore.compatr   botocore.exceptionsr   r   r	   botocore.responser
   botocore.utilsr   r   awscrtr   r_   	getLoggerr=   r
  r   rC   rZ   rf   rr   r   r   r   r   r   r   r   r   r   r  r  r	  r   r   _CRT_CHECKSUM_CLSr   allkeyslistr   r   r   r   r   <module>r%     sv    	     # 
 ,
 1M			8	$   6<L <
<| 
<
= 
='< ''\ 'O% O%d=M =,K 	7:t
(	/#N <@:0&R" 
 $X. 
 "# *+ 5F5K5K5M     "&m&8&8&:!; A r   