
    i_W                        d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	 ddl
mZmZmZ ddlmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZ erddlmZ ndZ ej         e!          Z"dZ# G d d          Z$ G d de$          Z% G d de$          Z& G d de$          Z' G d de$          Z( G d de$          Z) G d de$          Z* G d de$          Z+ G d de$          Z, G d d e$          Z- G d! d"e$          Z. G d# d$          Z/ G d% d&e          Z0d' Z1	 d>d(Z2d) Z3d* Z4d+ Z5d, Z6d- Z7d. Z8	 d>d/Z9d0 Z:d1 Z;d2 Z<e%e,e-e.d3Z=g d4Z>erme&e'd5Z? ed6          re(e?d7<    ed8          re)e?d9<   e*e?d:<   e+e?d;<   e=@                    e?            eAd< e?B                                D                       sJ  eCe=B                                          ZDg d=ZEdS )?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                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )BaseChecksum   c                     d S N selfchunks     \/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/botocore/httpchecksum.pyupdatezBaseChecksum.update9           c                     d S r   r   r   s    r   digestzBaseChecksum.digest<   r!   r"   c                 x    |                                  }t          j        |                              d          S )Nascii)r%   base64	b64encodedecode)r   bss     r   	b64digestzBaseChecksum.b64digest?   s.    [[]]##**7333r"   c                                                       }t           fdd          D ]}                     |                               |           d S )Nc                  8                          j                  S r   )read_CHUNK_SIZE)fileobjr   s   r   <lambda>z.BaseChecksum._handle_fileobj.<locals>.<lambda>E   s    ',,t/?"@"@ r"   r"   )telliterr    seek)r   r1   start_positionr   s   ``  r   _handle_fileobjzBaseChecksum._handle_fileobjC   sd     @@@@@#FF 	 	EKK^$$$$$r"   c                     t          |t          t          f          r|                     |           n|                     |           |                                 S r   )
isinstancebytes	bytearrayr    r7   r,   )r   bodys     r   handlezBaseChecksum.handleI   sR    dUI.// 	'KK  &&&~~r"   N)	__name__
__module____qualname__r0   r    r%   r,   r7   r=   r   r"   r   r   r   6   sd        K    4 4 4% % %         r"   r   c                        e Zd Zd Zd Zd ZdS )Crc32Checksumc                     d| _         d S Nr   
_int_crc32r$   s    r   __init__zCrc32Checksum.__init__R       r"   c                 @    t          || j                  dz  | _        d S Nl    )r   rF   r   s     r   r    zCrc32Checksum.updateU   s    t77*Dr"   c                 :    | j                             dd          S N   big	byteorderrF   to_bytesr$   s    r   r%   zCrc32Checksum.digestX       ''U';;;r"   Nr>   r?   r@   rG   r    r%   r   r"   r   rB   rB   Q   sD          E E E< < < < <r"   rB   c                        e Zd Zd Zd Zd ZdS )CrtCrc32Checksumc                     d| _         d S rD   rE   r$   s    r   rG   zCrtCrc32Checksum.__init__^   rH   r"   c                 N    t          j        || j                  }|dz  | _        d S rJ   )crt_checksumsr   rF   r   r   new_checksums      r   r    zCrtCrc32Checksum.updatea   s&    $*5$/BB&3r"   c                 :    | j                             dd          S rL   rQ   r$   s    r   r%   zCrtCrc32Checksum.digeste   rS   r"   NrT   r   r"   r   rV   rV   \   sA          4 4 4< < < < <r"   rV   c                        e Zd Zd Zd Zd ZdS )CrtCrc32cChecksumc                     d| _         d S rD   )_int_crc32cr$   s    r   rG   zCrtCrc32cChecksum.__init__k   s    r"   c                 N    t          j        || j                  }|dz  | _        d S rJ   )rY   crc32cr`   rZ   s      r   r    zCrtCrc32cChecksum.updaten   s*    $+E43CDD'*4r"   c                 :    | j                             dd          S rL   )r`   rR   r$   s    r   r%   zCrtCrc32cChecksum.digestr   s    ((e(<<<r"   NrT   r   r"   r   r^   r^   i   sA          5 5 5= = = = =r"   r^   c                        e Zd Zd Zd Zd ZdS )CrtCrc64NvmeChecksumc                     d| _         d S rD   )_int_crc64nvmer$   s    r   rG   zCrtCrc64NvmeChecksum.__init__x   s    r"   c                 N    t          j        || j                  }|dz  | _        d S )Nl    )rY   	crc64nvmerg   rZ   s      r   r    zCrtCrc64NvmeChecksum.update{   s+    $.ud6IJJ*-??r"   c                 :    | j                             dd          S )N   rN   rO   )rg   rR   r$   s    r   r%   zCrtCrc64NvmeChecksum.digest   s    "++A+???r"   NrT   r   r"   r   re   re   v   sI             @ @ @@ @ @ @ @r"   re   c                        e Zd Zd Zd Zd ZdS )CrtXxhash64Checksumc                 L    t           j                                        | _        d S r   )rY   XXHashnew_xxhash64_xxhashr$   s    r   rG   zCrtXxhash64Checksum.__init__   s    $+88::r"   c                 :    | j                             |           d S r   rq   r    r   s     r   r    zCrtXxhash64Checksum.update       E"""""r"   c                 4    | j                                         S r   rq   finalizer$   s    r   r%   zCrtXxhash64Checksum.digest       |$$&&&r"   NrT   r   r"   r   rm   rm      sA        ; ; ;# # #' ' ' ' 'r"   rm   c                        e Zd Zd Zd Zd ZdS )CrtXxhash3Checksumc                 L    t           j                                        | _        d S r   )rY   ro   new_xxhash3_64rq   r$   s    r   rG   zCrtXxhash3Checksum.__init__   s    $+::<<r"   c                 :    | j                             |           d S r   rs   r   s     r   r    zCrtXxhash3Checksum.update   rt   r"   c                 4    | j                                         S r   rv   r$   s    r   r%   zCrtXxhash3Checksum.digest   rx   r"   NrT   r   r"   r   rz   rz      sA        = = =# # #' ' ' ' 'r"   rz   c                        e Zd Zd Zd Zd ZdS )CrtXxhash128Checksumc                 L    t           j                                        | _        d S r   )rY   ro   new_xxhash3_128rq   r$   s    r   rG   zCrtXxhash128Checksum.__init__   s    $+;;==r"   c                 :    | j                             |           d S r   rs   r   s     r   r    zCrtXxhash128Checksum.update   rt   r"   c                 4    | j                                         S r   rv   r$   s    r   r%   zCrtXxhash128Checksum.digest   rx   r"   NrT   r   r"   r   r   r      sA        > > ># # #' ' ' ' 'r"   r   c                        e Zd Zd Zd Zd ZdS )Sha1Checksumc                 ,    t                      | _        d S r   )r   	_checksumr$   s    r   rG   zSha1Checksum.__init__   s    r"   c                 :    | j                             |           d S r   r   r    r   s     r   r    zSha1Checksum.update       e$$$$$r"   c                 4    | j                                         S r   r   r%   r$   s    r   r%   zSha1Checksum.digest       ~$$&&&r"   NrT   r   r"   r   r   r      sA             % % %' ' ' ' 'r"   r   c                        e Zd Zd Zd Zd ZdS )Sha256Checksumc                 ,    t                      | _        d S r   )r   r   r$   s    r   rG   zSha256Checksum.__init__       r"   c                 :    | j                             |           d S r   r   r   s     r   r    zSha256Checksum.update   r   r"   c                 4    | j                                         S r   r   r$   s    r   r%   zSha256Checksum.digest   r   r"   NrT   r   r"   r   r   r      A        " " "% % %' ' ' ' 'r"   r   c                        e Zd Zd Zd Zd ZdS )Sha512Checksumc                 ,    t                      | _        d S r   )r   r   r$   s    r   rG   zSha512Checksum.__init__   r   r"   c                 :    | j                             |           d S r   r   r   s     r   r    zSha512Checksum.update   r   r"   c                 4    | j                                         S r   r   r$   s    r   r%   zSha512Checksum.digest   r   r"   NrT   r   r"   r   r   r      r   r"   r   c                   B    e Zd ZdZ	 	 	 ddZd ZddZddZd	 Zd
 Z	dS )AwsChunkedWrapperr   Nx-amz-checksumc                 x    || _         || _        || _        |                                  || j        }|| _        d S r   )_raw_checksum_name_checksum_cls_reset_DEFAULT_CHUNK_SIZE_chunk_size)r   rawchecksum_clschecksum_name
chunk_sizes        r   rG   zAwsChunkedWrapper.__init__   sD     	+)1J%r"   c                 t    d| _         d| _        d | _        | j        r|                                 | _        d S d S )Nr"   F)
_remaining	_completer   r   r$   s    r   r   zAwsChunkedWrapper._reset   sC     	2!//11DNNN	2 	2r"   r   c                     |dk    s|dk    rt          d          |                                  | j                            d           d S )Nr   z Can only seek to start of stream	error_msg)r
   r   r   r5   )r   offsetwhences      r   r5   zAwsChunkedWrapper.seek   sV    Q;;&A++(<    		qr"   c                    ||dk    rd }| j         r	| j        sdS |d u p|t          | j                  k    }| j         sI|rG| xj        |                                 z  c_        |d u p|t          | j                  k    }| j         s|G|t          | j                  }| j        d |         }| j        |d          | _        |S )Nr   r"   )r   r   len_make_chunk)r   sizewant_more_bytes	to_returns       r   r/   zAwsChunkedWrapper.read   s    		D > 	$/ 	3 $,E$T_1E1E*E. 	J_ 	JOOt//111OO"dlIdS5I5I.IO . 	J_ 	J
 <t''D OETE*	/$%%0r"   c                    | j                             | j                  }t          t	          |                    dd                              d          }| | _        | j        r| j                            |           | j        rT| j        rM| j	                            d          }| j        
                                                    d          }d||fz  S d||fz  S )N   r'   s   0
%s:%s

s   %s
%s
)r   r/   r   hexr   encoder   r   r    r   r,   )r   	raw_chunkhex_lennamechecksums        r   r   zAwsChunkedWrapper._make_chunk  s     INN4#344	c)nn%%abb)0099&> 	-N!!),,,> 	<dn 	<&--g66D~//1188AAH(D(+;;;'9!555r"   c              #   V   K   | j         s|                                 V  | j         d S d S r   )r   r   r$   s    r   __iter__zAwsChunkedWrapper.__iter__  sH      . 	%""$$$$$ . 	% 	% 	% 	% 	%r"   )Nr   N)r   r   )
r>   r?   r@   r   rG   r   r5   r/   r   r   r   r"   r   r   r      s        %
 && & & & 2 2 2      26 6 6$% % % % %r"   r   c                   :     e Zd Z fdZd fd	Z fdZd Z xZS )StreamingChecksumBodyc                 h    t                                          ||           || _        || _        d S r   )superrG   r   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s        r   rG   zStreamingChecksumBody.__init__  s/    ^444!!r"   Nc                     t                                          |          }| j                            |           ||s|dk    r|                                  |S )N)amtr   )r   r/   r   r    _validate_checksum)r   r   r   r   s      r   r/   zStreamingChecksumBody.read   sX    %%e$$$;u;q##%%%r"   c                 2   t                                          |          }|t          |          k    r|}nt          |          d |         }| j                            |           |dk    r't          |          dk    r|                                  |S rD   )r   readintor   
memoryviewr   r    r   )r   bamount_readviewr   s       r   r   zStreamingChecksumBody.readinto'  s    gg&&q))#a&&  DDa==+.Dd###!A

##%%%r"   c                     | j                                         t          j        | j                  k    r4d| j         d| j                                          }t          |          d S )NExpected checksum $ did not match calculated checksum: r   )r   r%   r(   	b64decoder   r,   r   )r   r   s     r   r   z(StreamingChecksumBody._validate_checksum2  sw    >  ""f&6t~&F&FFF:T^ : :!^5577: :  ()<<<< GFr"   r   )r>   r?   r@   rG   r/   r   r   __classcell__)r   s   @r   r   r     s~        " " " " "
     	 	 	 	 	= = = = = = =r"   r   c                 h    t          | ||           t          | ||           t          |            d S r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms_register_checksum_feature_ids)requestoperation_modelparamss      r   resolve_checksum_contextr   ;  s:    &wHHH(/6JJJ"7+++++r"   c                 \   t          |           rd S | d                             di           }| d         d         j        }|j        }|j        p|                    d          }|                    d          }|ru||v rq|t
          }||                                         }	|	|vrIt          s/|	t          v r&t          d|	
                                 d          t          d	|	 
          nc|s|r]|dk    rW| d                             d          rd S t                                          }	t          || |          }
|
|
t          d|d<   nd S d}|j        r7t          | d                   j        dk    r| d         d         j        dk    rd}|	|d|	 d}||d<   || d         d<   d S )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_contextr   r   request_checksum_requiredalgorithm_memberalgorithm_namealgorithm_member_headerlocation_typer   s                r   r   r   A  sf    7## y)--j"==#*9#5$" ! $1M. 	8677  %(()ABB #,66  '#A  017799!555 ~1III0;!5!5!7!7 ; ; ;    (M^MM    6 
# 9=MMM 9!!"677 	F399;;"FW&6#
 #
 #./3< <78
 	M+&WU^$$+w669o.@DHH &M $2.22 I -6()%5GIz"""r"   c                     | j         }t          |t                    sdS |j                            |          }|r|j                            d          S dS )zDGet the name of the header targeted by the "requestAlgorithmMember".Nr   )input_shaper9   r   membersr   serialization)r   r   r  operation_input_shapealgorithm_member_shapes        r   r   r     so     ,7+^<< 2:>>   @%377???@ @r"   c                    |                      di                                di           }|                     d          }|sd S |dk    rt          |            na|d         dk    rt          |            nE|d         dk    rt          |            n)t	          d                    |d                   	          d
|v r!|d
         }|d         | d         |d         <   d S d S )Nr   r   r   zconditional-md5r   r   r   zUnknown checksum variant: {}r   r   r   headersr   )r   r   _apply_request_header_checksum_apply_request_trailer_checksumr   format)r   r  r   r   s       r   apply_request_checksumr    s   {{9b1155j"EE $$%899I %%%#G,,,,	4H	$	$&w////	4I	%	%'0000#4;;IdOLL
 
 
 	
 "%555#34N#O $W- 		3F;<<< 65r"   c                 H   |                      di                                di           }|                     d          }|d         }|| d         v rd S t                               |d                   } |                                | d                   }|| d         |<   d S )Nr   r   r   r   r  r   r<   )r   _CHECKSUM_CLSr=   )r   r  r   location_namer   r%   s         r   r  r    s    {{9b1155j"EE $$%899If%M	*** $$Y{%;<<L\^^""76?33F(.GI}%%%r"   c                    |                      di                                di           }|                     d          }|d         }t                               |d                   }| d         }| d         }||v rd S d|d	<   d
|v r|d
xx         dz  cc<   nd|d
<   ||d<   t          |          }|d|v rt          |d                   }|t	          |          |d<   d|v r|d= t
                              d           t          |t          t          f          rt          j        |          }t          |||          | d<   d S )Nr   r   r   r   r   r  r<   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   )r   r  r   intstrloggerdebugr9   r:   r;   ioBytesIOr   )r   r  r   r  r   r  r<   r   s           r   r  r    s   {{9b1155j"EE $$%899If%M $$Y{%;<<Li G6?D#,G W$$ 	"###~5####&3"#,GO-d33N"2g"="=
 W%5677! 36n2E2E./7""$%d	
 	
 	
 $	*++  z$'!#  GFOOOr"   c                    t          |           x}rC|D ]>}|                                }|dvr$|                    d          }t          |           ?dS |                     di                               di           }|                    d          }|r,t          |t                    rt          |d                    dS dS dS )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   r   r   )r   r   removeprefix'_register_checksum_algorithm_feature_idr   r9   dict)r   algorithm_headersr   r  r  r   s         r   r   r     s    :7CCC 
' 	H 	HF\\^^F   
 "(!4!45F!G!G7GGG {{9b1155j"EE $$%899I HZ	400 H/	+0FGGGGGH H H Hr"   c                 f    |                                  }|dk    rd}d| }t          |           d S )N	CRC64NVMECRC64FLEXIBLE_CHECKSUMS_REQ_)r   r   )r   checksum_algorithm_name"checksum_algorithm_name_feature_ids      r   r   r     sK    'oo//+--");"9;; ' :;;;;;r"   c                 P   |j         }|                    d          }|r||v r|t          }d |                    dg           D             }g }t          D ] }||vr||v r|                    |           !| d                             di           }	||	d<   |	| d         d<   d S d S d S )NrequestValidationModeMemberc                 6    h | ]}|                                 S r   )r   ).0as     r   	<setcomp>z7resolve_response_checksum_algorithms.<locals>.<setcomp>  s-     
 
 
AGGII
 
 
r"   responseAlgorithmsr   r   response_algorithms)r   r   r   _ALGORITHMS_PRIORITY_LISTappend)
r   r   r   r   r   mode_memberr0  usable_algorithmsr   r  s
             r   r   r     s    $1M##$ABBK :{f,,'#A 
 
,001ErJJ
 
 
 2 	4 	4I 333000!((333"9-11*bAA2C./)9	:&&&!: :,,r"   c                    |d         }|                     di           }|                     d          }|sd S |D ]u}d| }||vrd||         v r|j        rt          | ||          |d<   nt          | ||          |d<   |d                              di           }||d<   ||d         d<    d S t                              d	|           d S )
Nr  r   r0  r   -r<   r   response_algorithmz[Skipping checksum validation. Response did not contain one of the following algorithms: %s.)r   has_streaming_output_handle_streaming_response_handle_bytes_responser  r  )	http_responseresponser   r   r  r  
algorithmsr   header_names	            r   handle_checksum_bodyr?  -  s+   y!G{{:r22!%%&;<<J   	3	33g%%
 '+&&&/ 	9x   HV  6x   HV
 $I.22:rBB1:-.*:J'
LLe    r"   c                     t                               |          }d| }t          | j        |d                             d           |            |d         |                   S )Nr   r  zcontent-length)r  r   r   r   )r;  r<  r   r   r>  s        r   r9  r9  V  sg     $$Y//L/I//K  011K(	  r"   c                 T   | j         }d| }t                              |          } |            }|                    |           |d         |         }|                                t          j        |          k    r*d| d|                                 }t          |          |S )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:  a  s     D/I//K $$Y//L|~~HOOD	";/HF,X66660 0 0!++--0 0 	 $i8888Kr"   )r   r   r   r   )r   rb   ri   xxhash64xxhash3	xxhash128)r   rb   )r      rM   ri   )r      r   rC  rD  rE  c              #   (   K   | ]}|t           v V  d S r   )r   )r,  r   s     r   	<genexpr>rI    s9        -1((     r"   )	rE  rD  ri   rC  rb   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   rY   	getLoggerr>   r  r   r   rB   rV   r^   re   rm   rz   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r?  r9  r:  r  r   _CRT_CHECKSUM_CLSr    allkeyslistr   r1  r   r"   r   <module>rZ     s     				        ( ( ( ( ( ( ( ( ( ( F F F F F F F F F F         
 * ) ) ) ) ) + + + + + + 2 2 2 2 2 2             1111111M		8	$	$$                6< < < < <L < < <
< 
< 
< 
< 
<| 
< 
< 
<
= 
= 
= 
= 
= 
= 
= 
=
@ 
@ 
@ 
@ 
@< 
@ 
@ 
@	' 	' 	' 	' 	', 	' 	' 	'	' 	' 	' 	' 	' 	' 	' 	'	' 	' 	' 	' 	'< 	' 	' 	'' ' ' ' '< ' ' '' ' ' ' '\ ' ' '' ' ' ' '\ ' ' 'O% O% O% O% O% O% O% O%d= = = = =M = = =B, , , 	K6 K6 K6 K6\@ @ @ 
 
 
2	/ 	/ 	// / /dH H H*< < < <@: : : :0& & &R    " 	       "# 
 z** >)=+&z** >(;*%'9)$)=+&*+++3  5F5K5K5M5M        "&m&8&8&:&:!;!; 
 
 
   r"   