
     hK                        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
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 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      Z) G d de      Z*d Z+	 d1d Z,d! Z-d" Z.d# Z/d$ Z0d% Z1	 d1d&Z2d' Z3d( Z4d) Z5e#e'e(d*Z6g d+Z7e
rBe$e%d,Z8 ed-      re&e8d.<   e6js                  e8        e:d/ e8jw                         D              sJ  e<e6jw                               Z=g d0Z>y)2aB  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                   .    e Zd ZdZd Zd Zd Zd Zd Zy)BaseChecksum   c                      y N selfchunks     q/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/botocore/httpchecksum.pyupdatezBaseChecksum.update8           c                      y r   r   r   s    r   digestzBaseChecksum.digest;   r   r    c                 j    | j                         }t        j                  |      j                  d      S )Nascii)r#   base64	b64encodedecode)r   bss     r   	b64digestzBaseChecksum.b64digest>   s)    [[]#**733r    c                      j                         }t         fdd      D ]  } j                  |        j                  |       y )Nc                  :     j                  j                        S r   )read_CHUNK_SIZE)fileobjr   s   r   <lambda>z.BaseChecksum._handle_fileobj.<locals>.<lambda>D   s    ',,t/?/?"@ r    r    )telliterr   seek)r   r/   start_positionr   s   ``  r   _handle_fileobjzBaseChecksum._handle_fileobjB   s=     @#F 	EKK	^$r    c                     t        |t        t        f      r!| j                  |       | j                         S | j	                  |       | j                         S r   )
isinstancebytes	bytearrayr   r5   r*   )r   bodys     r   handlezBaseChecksum.handleH   sI    dUI./KK ~~   &~~r    N)	__name__
__module____qualname__r.   r   r#   r*   r5   r;   r   r    r   r   r   5   s     K4% r    r   c                       e Zd Zd Zd Zd Zy)Crc32Checksumc                     d| _         y Nr   
_int_crc32r"   s    r   __init__zCrc32Checksum.__init__Q   	    r    c                 @    t        || j                        dz  | _        y Nl    )r   rD   r   s     r   r   zCrc32Checksum.updateT   s    t7*Dr    c                 <    | j                   j                  dd      S N   big	byteorderrD   to_bytesr"   s    r   r#   zCrc32Checksum.digestW       ''U';;r    Nr<   r=   r>   rE   r   r#   r   r    r   r@   r@   P   s    E<r    r@   c                       e Zd Zd Zd Zd Zy)CrtCrc32Checksumc                     d| _         y rB   rC   r"   s    r   rE   zCrtCrc32Checksum.__init__]   rF   r    c                 X    t        j                  || j                        }|dz  | _        y rH   )crt_checksumsr   rD   r   r   new_checksums      r   r   zCrtCrc32Checksum.update`   s$    $**5$//B&3r    c                 <    | j                   j                  dd      S rJ   rO   r"   s    r   r#   zCrtCrc32Checksum.digestd   rQ   r    NrR   r   r    r   rT   rT   [   s    4<r    rT   c                       e Zd Zd Zd Zd Zy)CrtCrc32cChecksumc                     d| _         y rB   )_int_crc32cr"   s    r   rE   zCrtCrc32cChecksum.__init__j   s
    r    c                 X    t        j                  || j                        }|dz  | _        y rH   )rW   crc32cr^   rX   s      r   r   zCrtCrc32cChecksum.updatem   s'    $++E43C3CD'*4r    c                 <    | j                   j                  dd      S rJ   )r^   rP   r"   s    r   r#   zCrtCrc32cChecksum.digestq   s    ((e(<<r    NrR   r   r    r   r\   r\   h   s    5=r    r\   c                       e Zd Zd Zd Zd Zy)CrtCrc64NvmeChecksumc                     d| _         y rB   )_int_crc64nvmer"   s    r   rE   zCrtCrc64NvmeChecksum.__init__w   s
    r    c                 X    t        j                  || j                        }|dz  | _        y )Nl    )rW   	crc64nvmere   rX   s      r   r   zCrtCrc64NvmeChecksum.updatez   s(    $..ud6I6IJ*-??r    c                 <    | j                   j                  dd      S )N   rL   rM   )re   rP   r"   s    r   r#   zCrtCrc64NvmeChecksum.digest~   s    ""++A+??r    NrR   r   r    r   rc   rc   u   s     @@r    rc   c                       e Zd Zd Zd Zd Zy)Sha1Checksumc                 "    t               | _        y r   )r   	_checksumr"   s    r   rE   zSha1Checksum.__init__   s    r    c                 :    | j                   j                  |       y r   rm   r   r   s     r   r   zSha1Checksum.update       e$r    c                 6    | j                   j                         S r   rm   r#   r"   s    r   r#   zSha1Checksum.digest       ~~$$&&r    NrR   r   r    r   rk   rk      s     %'r    rk   c                       e Zd Zd Zd Zd Zy)Sha256Checksumc                 "    t               | _        y r   )r   rm   r"   s    r   rE   zSha256Checksum.__init__   s    r    c                 :    | j                   j                  |       y r   ro   r   s     r   r   zSha256Checksum.update   rp   r    c                 6    | j                   j                         S r   rr   r"   s    r   r#   zSha256Checksum.digest   rs   r    NrR   r   r    r   ru   ru      s    "%'r    ru   c                   @    e Zd ZdZ	 	 	 d	dZd Zd
dZddZd Zd Z	y)AwsChunkedWrapperr   Nc                 x    || _         || _        || _        | j                          || j                  }|| _        y r   )_raw_checksum_name_checksum_cls_reset_DEFAULT_CHUNK_SIZE_chunk_size)r   rawchecksum_clschecksum_name
chunk_sizes        r   rE   zAwsChunkedWrapper.__init__   s=     	+)11J%r    c                 r    d| _         d| _        d | _        | j                  r| j                         | _        y y )Nr    F)
_remaining	_completerm   r~   r"   s    r   r   zAwsChunkedWrapper._reset   s5    !//1DN r    c                     |dk7  s|dk7  rt        d      | j                          | j                  j                  d       y )Nr   z Can only seek to start of stream	error_msg)r	   r   r|   r3   )r   offsetwhences      r   r3   zAwsChunkedWrapper.seek   s:    Q;&A+(<  			qr    c                    ||dk  rd }| j                   r| j                  sy|d u xs |t        | j                        kD  }| j                   sR|rP| xj                  | j                         z  c_        |d u xs |t        | j                        kD  }| j                   s|rP|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 >>$// $,E$T__1E*E.._OOt//11O"dlIdS5I.IO .._
 <t'D OOET*	//$%0r    c                    | j                   j                  | j                        }t        t	        |            dd  j                  d      }| | _        | j                  r| j                  j                  |       | j                  rW| j                  rK| j                  j                  d      }| j                  j                         j                  d      }d||fz  S d||fz  S )N   r%   s   0
%s:%s

s   %s
%s
)r|   r-   r   hexr   encoder   rm   r   r}   r*   )r   	raw_chunkhex_lennamechecksums        r   r   zAwsChunkedWrapper._make_chunk   s     IINN4#3#34	c)n%ab)009&>>NN!!),>>dnn&&--g6D~~//188AH(D(+;;;'9!555r    c              #   d   K   | j                   s | j                          | j                   sy y wr   )r   r   r"   s    r   __iter__zAwsChunkedWrapper.__iter__   s%     ..""$$ ..s   +00)Nzx-amz-checksumN)r   r   )
r<   r=   r>   r   rE   r   r3   r-   r   r   r   r    r   rz   rz      s1    %
 && 226$%r    rz   c                   :     e Zd Z fdZd fd	Z fdZd Z xZS )StreamingChecksumBodyc                 B    t         |   ||       || _        || _        y r   )superrE   rm   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s        r   rE   zStreamingChecksumBody.__init__   s     ^4!!r    c                     t         |   |      }| j                  j                  |       ||s|dkD  r| j	                          |S )N)amtr   )r   r-   rm   r   _validate_checksum)r   r   r   r   s      r   r-   zStreamingChecksumBody.read   sC    %e$;uq##%r    c                     t         |   |      }|t        |      k(  r|}nt        |      d | }| j                  j                  |       |dk(  rt        |      dkD  r| j                          |S rB   )r   readintor   
memoryviewrm   r   r   )r   bamount_readviewr   s       r   r   zStreamingChecksumBody.readinto   si    g&q)#a& Da=+.Dd#!A
##%r    c                     | j                   j                         t        j                  | j                        k7  r6d| j                   d| j                   j                          }t        |      y )NExpected checksum $ did not match calculated checksum: r   )rm   r#   r&   	b64decoder   r*   r
   )r   r   s     r   r   z(StreamingChecksumBody._validate_checksum  sg    >>  "f&6&6t~~&FF$T^^$4 5!^^5578:  ()<< Gr    r   )r<   r=   r>   rE   r-   r   r   __classcell__)r   s   @r   r   r      s    "
	=r    r   c                 8    t        | ||       t        | ||       y r   )"resolve_request_checksum_algorithm$resolve_response_checksum_algorithms)requestoperation_modelparamss      r   resolve_checksum_contextr     s    &wH(/6Jr    c                    t        |       ry | d   j                  di       }| d   d   j                  }|j                  }|j                  xs |j                  d      }|j                  d      }|r^||v rZ|t
        }||   j                         }	|	|vrt        s&|	t        v rt        d|	j                          d      t        d	|	 
      |s|rJ|dk(  rE| d   j                  d      ry t        j                         }	t        || |      }
|
|
t        d|d<   ny d}|j                  r2t        | d         j                   dk(  r| d   d   j"                  dk7  rd}|	|d|	 d}||d<   || d   d<   y )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     s    7#y)--j"=#*9#5$"" ! $11M.. 	867  %(()AB,6  '#A  01779!55~1II0 !5!5!7 8 9; ;  (<^<LM  
#9=MM 9!!"67399;"FW&6#
 #./3<78
 	M++WU^$++w69o.@@DH &M $!.!12I -6()%5GIz"r    c                     | j                   }t        |t              sy|j                  j	                  |      }|r|j
                  j	                  d      S y)zDGet the name of the header targeted by the "requestAlgorithmMember".Nr   )input_shaper7   r   membersr   serialization)r   r   r   operation_input_shapealgorithm_member_shapes        r   r   r   ^  sY     ,77+^<2::>> %3377?? r    c                 N   | j                  di       j                  di       }|j                  d      }|sy |dk(  rt        |        nF|d   dk(  rt        |        n2|d   dk(  rt        |        nt	        dj                  |d         	      d
|v r|d
   }|d   | d   |d   <   y y )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   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                    | j                  di       j                  di       }|j                  d      }|d   }|| d   v ry t        j                  |d         } |       j                  | d         }|| d   |<   t        |       y )Nr   r   r   r   r   r   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(.GI}%+I6r    c                     | j                  di       j                  di       }|j                  d      }|d   }t        j                  |d         }| d   }| d   }||v ry d|d	<   d
|v r|d
xx   dz  cc<   nd|d
<   ||d<   t        |       t        |      }|*t	        |      |d<   d|v r|d= t
        j                  d       t        |t        t        f      rt        j                  |      }t        |||      | d<   y )Nr   r   r   r   r   r   r:   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debugr7   r8   r9   ioBytesIOrz   )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"#,GO+I6-d3N! 36n2E./w&()LLh $	*+zz$'!#GFOr    c                 X    | d   j                         }|dk(  rd}d| }t        |       y )Nr   	CRC64NVMECRC64FLEXIBLE_CHECKSUMS_REQ_)r   r   )r   checksum_algorithm_name"checksum_algorithm_name_feature_ids      r   r   r     s@    '4::<+-")
!"9!:; ' :;r    c                 V   |j                   }|j                  d      }|r||v r|t        }|j                  dg       D ch c]  }|j                          }}g }t        D ]  }	|	|vr|	|v s|j                  |	        | d   j                  di       }
||
d<   |
| d   d<   y y y c c}w )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     $11M##$ABK{f,'#A ,001ErJ
AGGI
 
 2 	4I 3300!((3		4 #9-11*bA2C./)9	:&! -{
s    B&c                 X   |d   }|j                  di       }|j                  d      }|sy |D ]d  }d| }||vrd||   v r|j                  rt        | ||      |d<   nt        | ||      |d<   |d   j                  di       }||d<   ||d   d<    y  t        j                  d	|       y )
Nr   r   r  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!%%&;<J 	'	{3g%
 '+&&//9x HV  6x HV
 $I.22:rB1:-.*:J'36 LLer    c                     t         j                  |      }d| }t        | j                  |d   j                  d       |       |d   |         S )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                 "   | j                   }d| }t        j                  |      } |       }|j                  |       |d   |   }|j	                         t        j                  |      k7  r"d| d|j                          }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    s      D#I;/K $$Y/L~HOOD	";/HF,,X66 
 +!++-.0 	 $i88Kr    )r   r   r   )r   r`   rg   )r   r`   )r      rK   rg   c              #   ,   K   | ]  }|t         v   y wr   )r   ).0r   s     r   	<genexpr>r  :  s      -1((s   )rg   r`   r   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   rW   	getLoggerr<   r   r   r   r@   rT   r\   rc   rk   ru   rz   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+     s    	     F F 
 * + 2  1M			8	$$    6<L <
<| 
<
= 
=
@< 
@'< ''\ 'O% O%d=M =BK 	K6\@ 
2
7*Z< <@:0&R" 
 < 
 "#
 z*)=+&*+ 5F5K5K5M    "&m&8&8&:!; N r    