+
    iK                     L   R t ^ RIt^ RIt^ RIt^ RIHt ^ RI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 ]
'       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 t+R1R lt,R  t-R! t.R" t/R# t0R$ t1R1R% lt2R& t3R' t4R( t5R)]#R*]'R+](/t6. R2Ot7]
'       d   R)]$R,]%/t8]! R34      '       d   ]&]8R-&   ]6Ps                  ]84       ]:;QJ d*    R. ]8Pw                  4        4       F  '       d   K   R/M	  R0M! R. ]8Pw                  4        4       4      '       g   Q h]<! ]6Pw                  4       4      t=. R4Ot>R# )5aB  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has_minimum_crt_versionurlparse)AwsChunkedWrapperErrorFlexibleChecksumErrorMissingDependencyException)StructureShape)StreamingBody)register_feature_id)conditionally_calculate_md5determine_content_lengthhas_checksum_header)	checksumsCRC32c                   B   a  ] tR t^5t o RtR tR tR tR tR t	Rt
V tR# )	BaseChecksumc                    R # N selfchunks   &&7/usr/lib/python3/dist-packages/botocore/httpchecksum.pyupdateBaseChecksum.update8           c                    R # r   r   r   s   &r   digestBaseChecksum.digest;   r   r   c                l    V P                  4       p\        P                  ! V4      P                  R 4      # )ascii)r"   base64	b64encodedecode)r   bss   & r   	b64digestBaseChecksum.b64digest>   s)    [[]#**733r   c                   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 P                  SP                  4      # r   )read_CHUNK_SIZE)fileobjr   s   r   <lambda>.BaseChecksum._handle_fileobj.<locals>.<lambda>D   s    ',,t/?/?"@r   r   N)telliterr   seek)r   r0   start_positionr   s   ff  r   _handle_fileobjBaseChecksum._handle_fileobjB   s9     @#FEKK G^$r   c                    \        V\        \        34      '       d"   V P                  V4       V P                  4       # V P	                  V4       V P                  4       # r   )
isinstancebytes	bytearrayr   r7   r*   )r   bodys   &&r   handleBaseChecksum.handleH   sL    dUI.//KK ~~   &~~r   r   N   )__name__
__module____qualname____firstlineno__r/   r   r"   r*   r7   r>   __static_attributes____classdictcell____classdict__s   @r   r   r   5   s(     K4%   r   r   c                   2   a  ] tR t^Pt o R tR tR tRtV tR# )Crc32Checksumc                    ^ V n         R#     N
_int_crc32r!   s   &r   __init__Crc32Checksum.__init__Q   	    r   c                H    \        WP                  4      R ,          V n        R# l    N)r   rO   r   s   &&r   r   Crc32Checksum.updateT   s    7*Dr   c                <    V P                   P                  ^RR7      #    big	byteorderrO   to_bytesr!   s   &r   r"   Crc32Checksum.digestW       ''U';;r   rN   N	rA   rB   rC   rD   rP   r   r"   rE   rF   rG   s   @r   rJ   rJ   P   s     E< <r   rJ   c                   2   a  ] tR t^[t o R tR tR tRtV tR# )CrtCrc32Checksumc                    ^ V n         R# rL   rN   r!   s   &r   rP   CrtCrc32Checksum.__init__]   rR   r   c                b    \         P                  ! WP                  4      pVR ,          V n        R# rT   )crt_checksumsr   rO   r   r   new_checksums   && r   r   CrtCrc32Checksum.update`   s"    $**5//B&3r   c                <    V P                   P                  ^RR7      # rW   r\   r!   s   &r   r"   CrtCrc32Checksum.digestd   r_   r   rN   Nr`   rG   s   @r   rb   rb   [   s     4< <r   rb   c                   2   a  ] tR t^ht o R tR tR tRtV tR# )CrtCrc32cChecksumc                    ^ V n         R# rL   _int_crc32cr!   s   &r   rP   CrtCrc32cChecksum.__init__j   s
    r   c                b    \         P                  ! WP                  4      pVR ,          V n        R# rT   )rf   crc32crp   rg   s   && r   r   CrtCrc32cChecksum.updatem   s%    $++E3C3CD'*4r   c                <    V P                   P                  ^RR7      # rW   )rp   r]   r!   s   &r   r"   CrtCrc32cChecksum.digestq   s    ((e(<<r   ro   Nr`   rG   s   @r   rm   rm   h   s     5= =r   rm   c                   2   a  ] tR t^ut o R tR tR tRtV tR# )CrtCrc64NvmeChecksumc                    ^ V n         R# rL   _int_crc64nvmer!   s   &r   rP   CrtCrc64NvmeChecksum.__init__w   s
    r   c                b    \         P                  ! WP                  4      pVR ,          V n        R# )l    N)rf   	crc64nvmer{   rg   s   && r   r   CrtCrc64NvmeChecksum.updatez   s&    $..u6I6IJ*-??r   c                <    V P                   P                  ^RR7      # )   rY   rZ   )r{   r]   r!   s   &r   r"   CrtCrc64NvmeChecksum.digest~   s    ""++A+??r   rz   Nr`   rG   s   @r   rx   rx   u   s      @@ @r   rx   c                   2   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!   s   &r   rP   Sha1Checksum.__init__   s    r   c                <    V P                   P                  V4       R # r   r   r   r   s   &&r   r   Sha1Checksum.update       e$r   c                6    V P                   P                  4       # r   r   r"   r!   s   &r   r"   Sha1Checksum.digest       ~~$$&&r   r   Nr`   rG   s   @r   r   r      s      %' 'r   r   c                   2   a  ] tR t^t o R tR tR tRtV tR# )Sha256Checksumc                $    \        4       V n        R # r   )r   r   r!   s   &r   rP   Sha256Checksum.__init__   s    r   c                <    V P                   P                  V4       R # r   r   r   s   &&r   r   Sha256Checksum.update   r   r   c                6    V P                   P                  4       # r   r   r!   s   &r   r"   Sha256Checksum.digest   r   r   r   Nr`   rG   s   @r   r   r      s     "%' 'r   r   c                   T   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                v    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_name
chunk_sizes   &&&&&r   rP   AwsChunkedWrapper.__init__   s5     	+)11J%r   c                    R V n         RV n        RV n        V P                  '       d   V P                  4       V n        R# R# )r   FN)
_remaining	_completer   r   r!   s   &r   r   AwsChunkedWrapper._reset   s8    !//1DN r   c                    V^ 8w  g   V^ 8w  d   \        RR7      hV P                  4        V P                  P                  ^ 4       R# )rM   z Can only seek to start of stream	error_msgN)r   r   r   r5   )r   offsetwhences   &&&r   r5   AwsChunkedWrapper.seek   s:    Q;&A+(<  			qr   c                   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   sizewant_more_bytes	to_returns   &&  r   r.   AwsChunkedWrapper.read   s    	D >>>$/// $,EE$T__1E*E..._OOt//11O"dlIIdS5I.IO <t'D OOET*	//$%0r   c                
   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
)r   r.   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%b)009&>>>NN!!),>>>dnnn&&--g6D~~//188AH(D+;;;'!555r   c              #  Z   "   V P                   '       g   V P                  4       x  K&  R # 5ir   )r   r   r!   s   &r   __iter__AwsChunkedWrapper.__iter__   s"     ...""$$ !s   ++)r   r   r   r   r   r   r   r@   )Nzx-amz-checksumN)rM   r   )rA   rB   rC   rD   r   rP   r   r5   r.   r   r   rE   rF   rG   s   @r   r   r      s.     %& 226$% %r   r   c                   T   a a ] tR t^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
# )StreamingChecksumBodyc                >   < \         SV `  W4       W0n        W@n        R # r   )superrP   r   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s   &&&&&r   rP   StreamingChecksumBody.__init__   s    4!!r   c                   < \         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.   r   r   _validate_checksum)r   r   r   r   s   && r   r.   StreamingChecksumBody.read   sC    %e$;uq##%r   c                   < \         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   
memoryviewr   r   r   )r   bamount_readviewr   s   &&  r   r   StreamingChecksumBody.readinto   si    g&q)#a& Da=+.Dd#!A
##%r   c                    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)r   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   )r   r   r   )rA   rB   rC   rD   rP   r.   r   r   rE   rF   __classcell__)r   rH   s   @@r   r   r      s     "
	= =r   r   c                 6    \        WV4       \        WV4       R # r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms)requestoperation_modelparamss   &&&r   resolve_checksum_contextr     s    &wH(6Jr   c                    \        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   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_requestr   valuerequest_algorithm_headerheaderurlhttpss3trailer	algorithminx-amz-checksum-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     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                    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   )input_shaper:   r   membersr   serialization)r   r   r	  operation_input_shapealgorithm_member_shapes   &&&  r   r  r  ^  s\     ,77+^<<2::>> %3377?? r   c                    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	   format)r   r  r   r   s   &   r   apply_request_checksumr  n  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                 :   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&   \        V4       R# )r   r   r   r   r  Nr   r=   )r   _CHECKSUM_CLSr>   '_register_checksum_algorithm_feature_id)r   r  r   location_namer   r"   s   &     r   r  r    s    {{9b155j"E $$%89If%M	** $$Y{%;<L^""76?3F(.I}%+I6r   c                 T   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       \        V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=   NchunkedzTransfer-EncodingzContent-Encodingz,aws-chunkedzaws-chunkedzX-Amz-TrailerzX-Amz-Decoded-Content-LengthzContent-LengthzVRemoving the Content-Length header since 'chunked' is specified for Transfer-Encoding.)r   r   )r   r  r  r   strloggerdebugr:   r;   r<   ioBytesIOr   )r   r  r   r  r   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+I6-d3N! 36n2E./w&()LLh $	*++zz$'!#GFOr   c                 f    V R ,          P                  4       pVR8X  d   RpRV 2p\        V4       R# )r   	CRC64NVMECRC64FLEXIBLE_CHECKSUMS_REQ_N)r   r   )r   checksum_algorithm_name"checksum_algorithm_name_feature_ids   &  r   r  r    s@    '4::<+-")
!"9!:; ' :;r   c                    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 )requestValidationModeMemberN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     $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                    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   -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!%%&;<J	'	{3%
 '&&///9 HV  6 HV
 $I.22:rB1:-.*:J'3  6 LLer   c                     \         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   r   )r9  r:  r   r   r<  s   &&&  r   r7  r7    sZ     $$Y/L#I;/K  01K(	 r   c                 8   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   )	contentr  r   r   r"   r&   r   r*   r	   )	r9  r:  r   r=   r<  r   r   r   r   s	   &&&      r   r8  r8    s      D#I;/K $$Y/L~HOOD	";/HF,,X66 
 +!++-.0 	 $i88Kr   r   r   r   rs   r~   c              #   2   "   T F  q\         9   x  K  	  R # 5ir   )r   ).0r   s   & r   	<genexpr>rC  :  s      5MT((5Ms   FTr   )r   rs   r~   )rM      rX   )r~   rs   r   r   r   )?__doc__r&   r"  loggingbinasciir   hashlibr   r   botocore.compatr   r   r   botocore.exceptionsr   r	   r
   botocore.modelr   botocore.responser   botocore.useragentr   botocore.utilsr   r   r   awscrtr   rf   	getLoggerrA   r   r  r   rJ   rb   rm   rx   r   r   r   r   r   r   r  r  r  r  r  r   r=  r7  r8  r  r   _CRT_CHECKSUM_CLSr   allkeyslistr   r.  r   r   r   <module>rU     s    	     F F 
 * + 2  1M			8	$$    6<L <
<| 
<
= 
=
@< 
@'< ''\ 'O% O%d=M =BK
K6\@ 
2
7*Z<:0&R" ]
Ln
 < 
 	!#
 z**)=+&*+ 5F5K5K5M333 5F5K5K5M     "&m&8&8&:!; N r   