o
    è’Oj_W  ã                   @   s�  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rYddlmZ ndZe  e!¡Z"dZ#G dd„ dƒZ$G dd„ de$ƒZ%G dd„ de$ƒZ&G dd„ de$ƒZ'G dd„ de$ƒZ(G dd„ de$ƒZ)G dd„ de$ƒZ*G dd„ de$ƒZ+G dd„ de$ƒZ,G dd „ d e$ƒZ-G d!d"„ d"e$ƒZ.G d#d$„ d$ƒZ/G d%d&„ d&eƒZ0d'd(„ Z1	dKd)d*„Z2d+d,„ Z3d-d.„ Z4d/d0„ Z5d1d2„ Z6d3d4„ Z7d5d6„ Z8	dKd7d8„Z9d9d:„ Z:d;d<„ Z;d=d>„ Z<e%e,e-e.d?œZ=g d@¢Z>e�r<e&e'dAœZ?edBƒ�re(e?dC< edDƒ�r)e)e?dE< e*e?dF< e+e?dG< e= @e?¡ eAdHdI„ e? B¡ D ƒƒ�s<J ‚eCe= B¡ ƒZDg dJ¢ZEdS )LaB  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                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚBaseChecksumé   c                 C   ó   d S ©N© ©ÚselfÚchunkr   r   ú[/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/botocore/httpchecksum.pyÚupdate9   ó   zBaseChecksum.updatec                 C   r   r   r   ©r   r   r   r   Údigest<   r   zBaseChecksum.digestc                 C   s   |   ¡ }t |¡ d¡S )NÚascii)r!   Úbase64Ú	b64encodeÚdecode)r   Úbsr   r   r   Ú	b64digest?   s   zBaseChecksum.b64digestc                    s:   ˆ   ¡ }t‡ ‡fdd„dƒD ]}ˆ |¡ qˆ  |¡ d S )Nc                      s   ˆ   ˆj¡S r   )ÚreadÚ_CHUNK_SIZEr   ©Úfileobjr   r   r   Ú<lambda>E   s    z.BaseChecksum._handle_fileobj.<locals>.<lambda>ó    )ÚtellÚiterr   Úseek)r   r+   Ústart_positionr   r   r*   r   Ú_handle_fileobjC   s   zBaseChecksum._handle_fileobjc                 C   s2   t |ttfƒr|  |¡ |  ¡ S |  |¡ |  ¡ S r   )Ú
isinstanceÚbytesÚ	bytearrayr   r2   r'   )r   Úbodyr   r   r   ÚhandleI   s
   

ÿzBaseChecksum.handleN)	Ú__name__Ú
__module__Ú__qualname__r)   r   r!   r'   r2   r7   r   r   r   r   r   6   s    r   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCrc32Checksumc                 C   ó
   d| _ d S ©Nr   ©Ú
_int_crc32r    r   r   r   Ú__init__R   ó   
zCrc32Checksum.__init__c                 C   s   t || jƒd@ | _d S ©Nl   ÿÿ )r   r@   r   r   r   r   r   U   s   zCrc32Checksum.updatec                 C   ó   | j jddd�S ©Né   Úbig©Ú	byteorder©r@   Úto_bytesr    r   r   r   r!   X   ó   zCrc32Checksum.digestN©r8   r9   r:   rA   r   r!   r   r   r   r   r<   Q   ó    r<   c                   @   r;   )ÚCrtCrc32Checksumc                 C   r=   r>   r?   r    r   r   r   rA   ^   rB   zCrtCrc32Checksum.__init__c                 C   ó   t  || j¡}|d@ | _d S rC   )Úcrt_checksumsr   r@   ©r   r   Únew_checksumr   r   r   r   a   ó   zCrtCrc32Checksum.updatec                 C   rD   rE   rJ   r    r   r   r   r!   e   rL   zCrtCrc32Checksum.digestNrM   r   r   r   r   rO   \   ó    rO   c                   @   r;   )ÚCrtCrc32cChecksumc                 C   r=   r>   )Ú_int_crc32cr    r   r   r   rA   k   rB   zCrtCrc32cChecksum.__init__c                 C   rP   rC   )rQ   Úcrc32crW   rR   r   r   r   r   n   rT   zCrtCrc32cChecksum.updatec                 C   rD   rE   )rW   rK   r    r   r   r   r!   r   rL   zCrtCrc32cChecksum.digestNrM   r   r   r   r   rV   i   rU   rV   c                   @   r;   )ÚCrtCrc64NvmeChecksumc                 C   r=   r>   )Ú_int_crc64nvmer    r   r   r   rA   x   rB   zCrtCrc64NvmeChecksum.__init__c                 C   rP   )Nl   ÿÿÿÿ )rQ   Ú	crc64nvmerZ   rR   r   r   r   r   {   rT   zCrtCrc64NvmeChecksum.updatec                 C   rD   )Né   rG   rH   )rZ   rK   r    r   r   r   r!      rL   zCrtCrc64NvmeChecksum.digestNrM   r   r   r   r   rY   v   rU   rY   c                   @   r;   )ÚCrtXxhash64Checksumc                 C   ó   t j ¡ | _d S r   )rQ   ÚXXHashÚnew_xxhash64Ú_xxhashr    r   r   r   rA   …   rL   zCrtXxhash64Checksum.__init__c                 C   ó   | j  |¡ d S r   ©ra   r   r   r   r   r   r   ˆ   rL   zCrtXxhash64Checksum.updatec                 C   ó
   | j  ¡ S r   ©ra   Úfinalizer    r   r   r   r!   ‹   rB   zCrtXxhash64Checksum.digestNrM   r   r   r   r   r]   ƒ   ó    r]   c                   @   r;   )ÚCrtXxhash3Checksumc                 C   r^   r   )rQ   r_   Únew_xxhash3_64ra   r    r   r   r   rA   ‘   rL   zCrtXxhash3Checksum.__init__c                 C   rb   r   rc   r   r   r   r   r   ”   rL   zCrtXxhash3Checksum.updatec                 C   rd   r   re   r    r   r   r   r!   —   rB   zCrtXxhash3Checksum.digestNrM   r   r   r   r   rh   �   rg   rh   c                   @   r;   )ÚCrtXxhash128Checksumc                 C   r^   r   )rQ   r_   Únew_xxhash3_128ra   r    r   r   r   rA   �   rL   zCrtXxhash128Checksum.__init__c                 C   rb   r   rc   r   r   r   r   r       rL   zCrtXxhash128Checksum.updatec                 C   rd   r   re   r    r   r   r   r!   £   rB   zCrtXxhash128Checksum.digestNrM   r   r   r   r   rj   ›   rg   rj   c                   @   r;   )ÚSha1Checksumc                 C   ó   t ƒ | _d S r   )r   Ú	_checksumr    r   r   r   rA   ¨   ó   zSha1Checksum.__init__c                 C   rb   r   ©rn   r   r   r   r   r   r   «   rL   zSha1Checksum.updatec                 C   rd   r   ©rn   r!   r    r   r   r   r!   ®   rB   zSha1Checksum.digestNrM   r   r   r   r   rl   §   rN   rl   c                   @   r;   )ÚSha256Checksumc                 C   rm   r   )r   rn   r    r   r   r   rA   ³   ro   zSha256Checksum.__init__c                 C   rb   r   rp   r   r   r   r   r   ¶   rL   zSha256Checksum.updatec                 C   rd   r   rq   r    r   r   r   r!   ¹   rB   zSha256Checksum.digestNrM   r   r   r   r   rr   ²   rN   rr   c                   @   r;   )ÚSha512Checksumc                 C   rm   r   )r   rn   r    r   r   r   rA   ¾   ro   zSha512Checksum.__init__c                 C   rb   r   rp   r   r   r   r   r   Á   rL   zSha512Checksum.updatec                 C   rd   r   rq   r    r   r   r   r!   Ä   rB   zSha512Checksum.digestNrM   r   r   r   r   rs   ½   rN   rs   c                   @   sL   e Zd ZdZ			ddd„Zdd„ Zdd	d
„Zddd„Zdd„ Zdd„ Z	dS )ÚAwsChunkedWrapperr   Núx-amz-checksumc                 C   s2   || _ || _|| _|  ¡  |d u r| j}|| _d S r   )Ú_rawÚ_checksum_nameÚ_checksum_clsÚ_resetÚ_DEFAULT_CHUNK_SIZEÚ_chunk_size)r   ÚrawÚchecksum_clsÚchecksum_nameÚ
chunk_sizer   r   r   rA   Ë   s   
zAwsChunkedWrapper.__init__c                 C   s*   d| _ d| _d | _| jr|  ¡ | _d S d S )Nr-   F)Ú
_remainingÚ	_completern   rx   r    r   r   r   ry   Û   s   ÿzAwsChunkedWrapper._resetr   c                 C   s2   |dks|dkrt dd�‚|  ¡  | j d¡ d S )Nr   z Can only seek to start of stream©Ú	error_msg)r	   ry   rv   r0   )r   ÚoffsetÚwhencer   r   r   r0   â   s   ÿzAwsChunkedWrapper.seekc                 C   sª   |d ur
|dkr
d }| j r| jsdS |d u p|t| jƒk}| j s;|r;|  j|  ¡ 7  _|d u p5|t| jƒk}| j s;|s"|d u rDt| jƒ}| jd |… }| j|d … | _|S )Nr   r-   )r�   r€   ÚlenÚ_make_chunk)r   ÚsizeÚwant_more_bytesÚ	to_returnr   r   r   r(   ê   s   

þ
zAwsChunkedWrapper.readc                 C   s‚   | j  | j¡}tt|ƒƒdd …  d¡}| | _| jr!| j |¡ | jr;| jr;| j	 d¡}| j 
¡  d¡}d||f S d||f S )Né   r"   s   0
%s:%s

s   %s
%s
)rv   r(   r{   Úhexr†   Úencoder�   rn   r   rw   r'   )r   Ú	raw_chunkÚhex_lenÚnameÚchecksumr   r   r   r‡     s   zAwsChunkedWrapper._make_chunkc                 c   s    � | j s|  ¡ V  | j rd S d S r   )r�   r‡   r    r   r   r   Ú__iter__  s   €
ÿzAwsChunkedWrapper.__iter__)Nru   N)r   r   )
r8   r9   r:   rz   rA   ry   r0   r(   r‡   r’   r   r   r   r   rt   È   s    
û

rt   c                       s>   e Zd Z‡ fdd„Zd
‡ fdd„	Z‡ fdd„Zdd	„ Z‡  ZS )ÚStreamingChecksumBodyc                    s   t ƒ  ||¡ || _|| _d S r   )ÚsuperrA   rn   Ú	_expected)r   Ú
raw_streamÚcontent_lengthr‘   Úexpected©Ú	__class__r   r   rA     s   
zStreamingChecksumBody.__init__Nc                    s:   t ƒ j|d�}| j |¡ |d u s|s|dkr|  ¡  |S )N)Úamtr   )r”   r(   rn   r   Ú_validate_checksum)r   r›   r   r™   r   r   r(      s
   zStreamingChecksumBody.readc                    sZ   t ƒ  |¡}|t|ƒkr|}nt|ƒd |… }| j |¡ |dkr+t|ƒdkr+|  ¡  |S r>   )r”   Úreadintor†   Ú
memoryviewrn   r   rœ   )r   ÚbÚamount_readÚviewr™   r   r   r�   '  s   zStreamingChecksumBody.readintoc                 C   s<   | j  ¡ t | j¡krd| j› d| j  ¡ › �}t|d�‚d S )NúExpected checksum ú$ did not match calculated checksum: r‚   )rn   r!   r#   Ú	b64decoder•   r'   r
   )r   rƒ   r   r   r   rœ   2  s   
ÿÿ
ûz(StreamingChecksumBody._validate_checksumr   )r8   r9   r:   rA   r(   r�   rœ   Ú__classcell__r   r   r™   r   r“     s
    r“   c                 C   s$   t | ||ƒ t| ||ƒ t| ƒ d S r   )Ú"resolve_request_checksum_algorithmÚ$resolve_response_checksum_algorithmsÚ_register_checksum_feature_ids)ÚrequestÚoperation_modelÚparamsr   r   r   Úresolve_checksum_context;  s   r¬   c                 C   sX  t | ƒrd S | d  di ¡}| d d j}|j}|jp| d¡}| d¡}|rU||v rU|d u r1t}||  ¡ }	|	|vrTtsL|	tv rLt	d|	 
¡ › d�d�‚td	|	› �d
�‚n)|s]|r||dkr|| d  d¡rfd S t ¡ }	t|| |ƒ}
|
d ur{|
tdœ|d< nd S d}|jr—t| 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¼   r   r   r   r¦   A  sp   ÿþþ
þÿ÷ÿÿÿ
þ€ÿþýr¦   c                 C   s4   | 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_shaper3   r   Úmembersr¿   Úserialization)rª   r©   rÏ   Úoperation_input_shapeÚalgorithm_member_shaper   r   r   rÈ   �  s   
ÿÿrÈ   c                 C   s¤   |   di ¡  di ¡}|  d¡}|sd S |dkrt| ƒ n |d dkr't| ƒ n|d dkr2t| ƒ n
td |d ¡d	�‚d
|v rP|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µ   r   r   r   Úapply_request_checksumŸ  s$   



ÿÿþrÜ   c                 C   sd   |   di ¡  di ¡}|  d¡}|d }|| d v rd S t  |d ¡}|ƒ  | d ¡}|| d |< d S )Nr­   r‘   r¾   r�   rØ   r¼   r6   )r¿   Ú_CHECKSUM_CLSr7   )r©   rÍ   r¼   Úlocation_namer}   r!   r   r   r   rÙ   ¸  s   
rÙ   c                 C   s   |   di ¡  di ¡}|  d¡}|d }t  |d ¡}| d }| d }||v r(d S d|d	< d
|v r9|d
  d7  < nd|d
< ||d< t|ƒ}|d u rSd|v rSt|d ƒ}|d ur]t|ƒ|d< d|v ri|d= t d¡ t|tt	fƒrut
 |¡}t|||d�| d< d S )Nr­   r‘   r¾   r�   r¼   rØ   r6   Ú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Údebugr3   r4   r5   ÚioÚBytesIOrt   )r©   rÍ   r¼   rÞ   r}   rØ   r6   r—   r   r   r   rÚ   Ä  s<   
ÿ
ýrÚ   c                 C   s€   t | ƒ }r|D ]}| ¡ }|dvr| d¡}t|ƒ q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¿   r3   Údict)r©   Úalgorithm_headersr¶   rÐ   rÍ   r¼   r   r   r   r¨   ö  s   
€
ÿr¨   c                 C   s*   |   ¡ }|dkr
d}d|› �}t|ƒ d S )NÚ	CRC64NVMEÚCRC64ÚFLEXIBLE_CHECKSUMS_REQ_)rÆ   r   )r¼   Úchecksum_algorithm_nameÚ"checksum_algorithm_name_feature_idr   r   r   rç     s   ÿrç   c           
      C   s˜   |j }| d¡}|rH||v rJ|d u rt}dd„ | dg ¡D ƒ}g }tD ]}||vr*q#||v r3| |¡ q#| d  di ¡}	||	d< |	| d d< d S d S d S )NÚrequestValidationModeMemberc                 S   s   h | ]}|  ¡ ’qS r   )rÄ   )Ú.0Úar   r   r   Ú	<setcomp>  s    ÿz7resolve_response_checksum_algorithms.<locals>.<setcomp>ÚresponseAlgorithmsr­   r‘   Úresponse_algorithms)rÁ   r¿   rÃ   Ú_ALGORITHMS_PRIORITY_LISTÚappend)
r©   rª   r«   rÌ   rÁ   Úmode_memberrô   Úusable_algorithmsr¼   rÍ   r   r   r   r§     s&   

ÿ
€ðr§   c           	      C   s²   |d }|  di ¡}|  d¡}|sd S |D ];}d|› �}||vr!qd|| v r(q|jr4t| ||ƒ|d< nt| ||ƒ|d< |d   di ¡}||d< ||d d<  d S t d	|¡ d S )
NrØ   r‘   rô   r»   ú-r6   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_namer   r   r   Úhandle_checksum_body-  s4   


ÿÿþr  c                 C   s8   t  |¡}d|› �}t| j|d  d¡|ƒ |d | ƒS )Nr»   rØ   zcontent-length)rÝ   r¿   r“   r|   )rþ   rÿ   r¼   r}   r  r   r   r   rü   V  s   


ürü   c           	      C   sj   | j }d|› �}t |¡}|ƒ }| |¡ |d | }| ¡ t |¡kr3d|› d| ¡ › �}t|d�‚|S )Nr»   rØ   r¢   r£   r‚   )	ÚcontentrÝ   r¿   r   r!   r#   r¤   r'   r
   )	rþ   rÿ   r¼   r6   r  r}   r‘   r˜   rƒ   r   r   r   rý   a  s   


ÿÿ
rý   )r   r   r   r   )r   rX   r[   Úxxhash64Úxxhash3Ú	xxhash128)r   rX   )r   é   rF   r[   )r   é   r‹   r  r  r  c                 c   s   � | ]}|t v V  qd S r   )rÅ   )rð   r�   r   r   r   Ú	<genexpr>‘  s   € 
ÿr	  )	r  r  r[   r  rX   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   rQ   Ú	getLoggerr8   râ   rÇ   r   r<   rO   rV   rY   r]   rh   rj   rl   rr   rs   rt   r“   r¬   r¦   rÈ   rÜ   rÙ   rÚ   r¨   rç   r§   r  rü   rý   rÝ   rÅ   Ú_CRT_CHECKSUM_CLSr   ÚallÚkeysÚlistrÃ   rõ   r   r   r   r   Ú<module>   s„   
R!

üN2
ÿ)üþ


ÿ