
    tniK                        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
rSe$e%d,Z8 ed-          re&e8d.<   e69                    e8            e:d/ e8;                                D                       sJ  e<e6;                                          Z=g d0Z>dS )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                   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     R/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/botocore/httpchecksum.pyupdatezBaseChecksum.update8           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>D   s    ',,t/?"@"@ r    r    )telliterr   seek)r   r/   start_positionr   s   ``  r   _handle_fileobjzBaseChecksum._handle_fileobjB   sd     @@@@@#FF 	 	EKK^$$$$$r    c                     t          |t          t          f          r|                     |           n|                     |           |                                 S r   )
isinstancebytes	bytearrayr   r5   r*   )r   bodys     r   handlezBaseChecksum.handleH   sR    dUI.// 	'KK  &&&~~r    N)	__name__
__module____qualname__r.   r   r#   r*   r5   r;   r   r    r   r   r   5   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__Q       r    c                 @    t          || j                  dz  | _        d S Nl    )r   rD   r   s     r   r   zCrc32Checksum.updateT   s    t77*Dr    c                 :    | 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   sD          E E E< < < < <r    r@   c                        e Zd Zd Zd Zd ZdS )CrtCrc32Checksumc                     d| _         d S rB   rC   r"   s    r   rE   zCrtCrc32Checksum.__init__]   rF   r    c                 N    t          j        || j                  }|dz  | _        d S rH   )crt_checksumsr   rD   r   r   new_checksums      r   r   zCrtCrc32Checksum.update`   s&    $*5$/BB&3r    c                 :    | j                             dd          S rJ   rO   r"   s    r   r#   zCrtCrc32Checksum.digestd   rQ   r    NrR   r   r    r   rT   rT   [   sA          4 4 4< < < < <r    rT   c                        e Zd Zd Zd Zd ZdS )CrtCrc32cChecksumc                     d| _         d S rB   )_int_crc32cr"   s    r   rE   zCrtCrc32cChecksum.__init__j   s    r    c                 N    t          j        || j                  }|dz  | _        d S rH   )rW   crc32cr^   rX   s      r   r   zCrtCrc32cChecksum.updatem   s*    $+E43CDD'*4r    c                 :    | j                             dd          S rJ   )r^   rP   r"   s    r   r#   zCrtCrc32cChecksum.digestq   s    ((e(<<<r    NrR   r   r    r   r\   r\   h   sA          5 5 5= = = = =r    r\   c                        e Zd Zd Zd Zd ZdS )CrtCrc64NvmeChecksumc                     d| _         d S rB   )_int_crc64nvmer"   s    r   rE   zCrtCrc64NvmeChecksum.__init__w   s    r    c                 N    t          j        || j                  }|dz  | _        d S )Nl    )rW   	crc64nvmere   rX   s      r   r   zCrtCrc64NvmeChecksum.updatez   s+    $.ud6IJJ*-??r    c                 :    | 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   sI             @ @ @@ @ @ @ @r    rc   c                        e Zd Zd Zd Zd ZdS )Sha1Checksumc                 ,    t                      | _        d S r   )r   	_checksumr"   s    r   rE   zSha1Checksum.__init__   s    r    c                 :    | j                             |           d S r   rm   r   r   s     r   r   zSha1Checksum.update       e$$$$$r    c                 4    | j                                         S r   rm   r#   r"   s    r   r#   zSha1Checksum.digest       ~$$&&&r    NrR   r   r    r   rk   rk      sA             % % %' ' ' ' 'r    rk   c                        e Zd Zd Zd Zd ZdS )Sha256Checksumc                 ,    t                      | _        d S r   )r   rm   r"   s    r   rE   zSha256Checksum.__init__   s    r    c                 :    | j                             |           d S r   ro   r   s     r   r   zSha256Checksum.update   rp   r    c                 4    | j                                         S r   rr   r"   s    r   r#   zSha256Checksum.digest   rs   r    NrR   r   r    r   ru   ru      sA        " " "% % %' ' ' ' 'r    ru   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   rE   zAwsChunkedWrapper.__init__   sD     	+)1J%r    c                 t    d| _         d| _        d | _        | j        r|                                 | _        d S d S )Nr    F)
_remaining	_completerm   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}   r3   )r   offsetwhences      r   r3   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   rm   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   rE   r   r3   r-   r   r   r   r    r   rz   rz      s        %
 && & & & 2 2 2      26 6 6$% % % % %r    rz   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   )superrE   rm   	_expected)r   
raw_streamcontent_lengthr   expected	__class__s        r   rE   zStreamingChecksumBody.__init__   s/    ^444!!r    Nc                     t                                          |          }| j                            |           ||s|dk    r|                                  |S )N)amtr   )r   r-   rm   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 rB   )r   readintor   
memoryviewrm   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   )rm   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   )r<   r=   r>   rE   r-   r   r   __classcell__)r   s   @r   r   r      s~        " " " " "
     	 	 	 	 	= = = = = = =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                 \   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     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_shaper7   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   n  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                 f   |                      di                                di           }|                     d          }|d         }|| d         v rd S t                               |d                   } |                                | d                   }|| d         |<   t          |           d S )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155j"EE $$%899If%M	*** $$Y{%;<<L\^^""76?33F(.GI}%+I66666r    c                 x   |                      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          |          }|3t	          |          |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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155j"EE $$%899If%M $$Y{%;<<Li G6?D#,G W$$ 	"###~5####&3"#,GO+I666-d33N! 36n2E2E./w&&()LLh   $	*++  z$'!#  GFOOOr    c                 r    | d                                          }|dk    rd}d| }t          |           d S )Nr   	CRC64NVMECRC64FLEXIBLE_CHECKSUMS_REQ_)r   r   )r   checksum_algorithm_name"checksum_algorithm_name_feature_ids      r   r   r     sR    '4::<<+--");"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_memberr  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   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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   r  r    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    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`   rg   )r   r`   )r      rK   rg   c              #   (   K   | ]}|t           v V  d S r   )r   )r  r   s     r   	<genexpr>r  :  s9        -1((     r    )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 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 K K 	K6 K6 K6 K6\@ @ @ 
 
 
2
7 
7 
7* * *Z< < < <@: : : :0& & &R    "  
 <;; 
  "# 
 z** >)=+&*+++3  5F5K5K5M5M        "&m&8&8&:&:!;!; NNN   r    