
    /Jf?                        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 ddl	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZ e
rdd	lmZ ndZ ej        e          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          Z  G d de          Z!d Z"	 d)dZ#d Z$d Z%d Z&	 d)dZ'd  Z(d! Z)d" Z*eeed#Z+d$d%gZ,e
rCeed&Z-e+.                    e-            e/d' e-0                                D                       sJ  e1e+0                                          Z2g d(Z3dS )*aC   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                   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     X/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/botocore/httpchecksum.pyupdatezBaseChecksum.update2           c                     d S r   r   r   s    r   digestzBaseChecksum.digest5   r   r   c                 x    |                                  }t          j        |                              d          S )Nascii)r   base64	b64encodedecode)r   bss     r   	b64digestzBaseChecksum.b64digest8   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>>   s    ',,t/?"@"@ r   r   )telliterr   seek)r   r)   start_positionr   s   ``  r   _handle_fileobjzBaseChecksum._handle_fileobj<   sd     @@@@@#FF 	 	EKK^$$$$$r   c                     t          |t          t          f          r|                     |           n|                     |           |                                 S r   )
isinstancebytes	bytearrayr   r/   r$   )r   bodys     r   handlezBaseChecksum.handleB   sR    dUI.// 	'KK  &&&~~r   N)	__name__
__module____qualname__r(   r   r   r$   r/   r5   r   r   r   r   r   /   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__K       r   c                 @    t          || j                  dz  | _        d S Nl    )r   r>   r   s     r   r   zCrc32Checksum.updateN   s    t77*Dr   c                 :    | j                             dd          S N   big)	byteorderr>   to_bytesr   s    r   r   zCrc32Checksum.digestQ       ''U';;;r   Nr6   r7   r8   r?   r   r   r   r   r   r:   r:   J   sD          E E E< < < < <r   r:   c                        e Zd Zd Zd Zd ZdS )CrtCrc32Checksumc                     d| _         d S r<   r=   r   s    r   r?   zCrtCrc32Checksum.__init__W   r@   r   c                 N    t          j        || j                  }|dz  | _        d S rB   )crt_checksumsr   r>   r   r   new_checksums      r   r   zCrtCrc32Checksum.updateZ   s&    $*5$/BB&3r   c                 :    | j                             dd          S rD   rH   r   s    r   r   zCrtCrc32Checksum.digest^   rJ   r   NrK   r   r   r   rM   rM   U   sA          4 4 4< < < < <r   rM   c                        e Zd Zd Zd Zd ZdS )CrtCrc32cChecksumc                     d| _         d S r<   )_int_crc32cr   s    r   r?   zCrtCrc32cChecksum.__init__d   s    r   c                 N    t          j        || j                  }|dz  | _        d S rB   )rP   crc32crW   rQ   s      r   r   zCrtCrc32cChecksum.updateg   s*    $+E43CDD'*4r   c                 :    | j                             dd          S rD   )rW   rI   r   s    r   r   zCrtCrc32cChecksum.digestk   s    ((e(<<<r   NrK   r   r   r   rU   rU   b   sA          5 5 5= = = = =r   rU   c                        e Zd Zd Zd Zd ZdS )Sha1Checksumc                 ,    t                      | _        d S r   )r   	_checksumr   s    r   r?   zSha1Checksum.__init__p   s    r   c                 :    | j                             |           d S r   r^   r   r   s     r   r   zSha1Checksum.updates       e$$$$$r   c                 4    | j                                         S r   r^   r   r   s    r   r   zSha1Checksum.digestv       ~$$&&&r   NrK   r   r   r   r\   r\   o   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   r?   zSha256Checksum.__init__{   s    r   c                 :    | j                             |           d S r   r`   r   s     r   r   zSha256Checksum.update~   ra   r   c                 4    | j                                         S r   rc   r   s    r   r   zSha256Checksum.digest   rd   r   NrK   r   r   r   rf   rf   z   sA        " " "% % %' ' ' ' 'r   rf   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   r?   zAwsChunkedWrapper.__init__   sD     	+)1J%r   c                 t    d| _         d| _        d | _        | j        r|                                 | _        d S d S )Nr   F)
_remaining	_completer^   rp   r   s    r   rq   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   rq   rn   r-   )r   offsetwhences      r   r-   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   )rz   ry   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
)rn   r'   rs   hexr   encoderz   r^   r   ro   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   )rz   r   r   s    r   __iter__zAwsChunkedWrapper.__iter__   sH      . 	%""$$$$$ . 	% 	% 	% 	% 	%r   )Nrl   N)r   r   )
r6   r7   r8   rr   r?   rq   r-   r'   r   r   r   r   r   rk   rk      s        %
 && & & & 2 2 2      26 6 6$% % % % %r   rk   c                   0     e Zd Z fdZd fd	Zd Z xZS )StreamingChecksumBodyc                 h    t                                          ||           || _        || _        d S r   )superr?   r^   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s        r   r?   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                     | 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_checksum   sw    >  ""f&6t~&F&FFF:T^ : :!^5577: :  ()<<<< GFr   r   )r6   r7   r8   r?   r'   r   __classcell__)r   s   @r   r   r      se        " " " " "
     = = = = = = =r   r   c                 J    t          | ||           t          | ||           d S r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms)requestoperation_modelparamss      r   resolve_checksum_contextr      s,    &wHHH(/6JJJJJr   c                    |j         }|                    d          }|r||v r|t          }||                                         }||vrIt          s/|t
          v r&t          d|                                 d          t          d|z            d}|j	        r| d         
                    d	          rd
}||d|z  d}|d         | d         v rd S | d                             di           }	||	d<   |	| d         d<   d S |j        s|                    d          r.| d                             di           }	d|	d<   |	| d         d<   d S d S )NrequestAlgorithmMemberzUsing za requires an additional dependency. You will need to pip install botocore[crt] before proceeding.)msgz"Unsupported checksum algorithm: %sr|   headerurlzhttps:trailerx-amz-checksum-%s)	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    $1M$(()ABB /:,66  '#A  017799!555 ~1III0;!5!5!7!7 ; ; ;    (>O    !. 	*u~((22 * !* ('.8
 
	 V	 222F"9-11*bAA09,-)9	:&&&		/ :=3D3D!4 4 : #9-11*bAA0A,-)9	:&&&: :r   c                 \   |                      di                                di           }|                     d          }|sd S |dk    rt          |            d S |d         dk    rt          |            d S |d         dk    rt          |            d S t	          d|d         z  	          )
Nr   r   r   r   r   r   r   zUnknown checksum variant: %sr|   )r   r   _apply_request_header_checksum_apply_request_trailer_checksumr   )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0#4yF
 
 
 	
r   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   r4   )r   _CHECKSUM_CLSr5   )r   r   r   location_nameru   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          |          }|t          |          |d<   t	          |t
          t          f          rt          j        |          }t          |||          | d<   d S )Nr   r   r   r   r   r   r4   chunkedzTransfer-EncodingzContent-Encodingz,aws-chunkedzaws-chunkedzX-Amz-TrailerzX-Amz-Decoded-Content-Length)ru   rv   )
r   r   r   strr1   r2   r3   ioBytesIOrk   )r   r   r   r   ru   r   r4   r   s           r   r   r   L  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! 36n2E2E./$	*++  z$'!#  GFOOOr   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>z  s-     
 
 
AGGII
 
 
r   responseAlgorithmsr   r   response_algorithms)r   r   r   _ALGORITHMS_PRIORITY_LISTappend)
r   r   r   r   r   mode_memberr   usable_algorithmsr   r   s
             r   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|z  }||vrd||         v r|j        rt          | ||          |d<   nt          | ||          |d<   |d                              di           }||d<   ||d         d<    d S t                              d	| d
           d S )Nr   r   r   r   -r4   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     s9   y!G{{:r22!%%&;<<J   	)I5g%%
 '+&&&/ 	9x   HV  6x   HV
 $I.22:rBB1:-.*:J'
KK	/!+	/ 	/ 	/    r   c                     t                               |          }d|z  }t          | j        |d                             d           |            |d         |                   S )Nr   r   zcontent-length)r   r   r   rt   )r   r   r   ru   r   s        r   r   r     sd     $$Y//L%	1K  011K(	  r   c                 T   | j         }d|z  }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   r4   r   ru   r   r   r}   s	            r   r   r     s     D%	1K $$Y//L|~~HOOD	";/HF,X66666 ""$$$ 	 $i8888Kr   )r   r   r   r   rY   )r   rY   c              #   (   K   | ]}|t           v V  d S r   )r   )r   r   s     r   	<genexpr>r     s9        -1((     r   )rY   r   r   r   r   )4__doc__r    r   loggingbinasciir   hashlibr   r   botocore.compatr   botocore.exceptionsr   r   r	   botocore.responser
   botocore.utilsr   r   awscrtr   rP   	getLoggerr6   r   r   r:   rM   rU   r\   rf   rk   r   r   r   r   r   r   r   r   r   r   r   r   _CRT_CHECKSUM_CLSr   allkeyslistr   r   r   r   r   <module>r      s     				                        # # # # # #         
 , + + + + +       
  1111111M		8	$	$               6< < < < <L < < <
< 
< 
< 
< 
<| 
< 
< 
<
= 
= 
= 
= 
= 
= 
= 
=' ' ' ' '< ' ' '' ' ' ' '\ ' ' 'O% O% O% O% O% O% O% O%d= = = = =M = = =,K K K 	7: 7: 7: 7:t
 
 
(	/ 	/ 	/# # #N <@: : : :0& & &R    (  
 $X. 
 
 "#  *+++3  5F5K5K5M5M        "&m&8&8&:&:!;!; AAA   r   