
    !jq%                    :   d Z ddlmZmZ ddlZddlZddlZddlmZ ddl	m	Z	 ddl
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 dZ ej        d          Z	 dAdBdZdCdZdDd ZdEd"ZdFd'ZdGd*ZdHd,Z dId/Z!dJd3Z"dKd7Z#dLd8Z$dLd9Z%dMd=Z&dNd>Z'dOd?Z(dPd@Z)dS )Qz
minio.signer
~~~~~~~~~~~~~~~

This module implements all helpers for AWS Signature version '4' support.

:copyright: (c) 2015 by MinIO, Inc.
:license: Apache 2.0, see LICENSE for more details.

    )absolute_importannotationsN)OrderedDict)datetime)Mappingcast)SplitResult   )time)Credentials)DictTypequeryencodesha256_hashzAWS4-HMAC-SHA256z( +)Fkeybytesdata	hexdigestboolreturnbytes | strc                    t          j        | |t          j                  }|r|                                n|                                S )z/Return HMacSHA256 digest of given key and data.)hmacnewhashlibsha256r   digest)r   r   r   hashers       V/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/minio/signer.py
_hmac_hashr   /   s=     Xc400F!*?6?    dater   regionstrservice_namec                <    t          j        |            d| d| dS )zGet scope string./z/aws4_requestr   to_signer_date)r!   r"   r$   s      r   
_get_scoper)   :   s,    !$''NN&NN<NNNNr    headers*Mapping[str, str | list[str] | tuple[str]]tuple[str, str]c                   i }|                                  D ]`\  }}|                                }|dvrCt          |t          t          f          r|n|g}d                    d |D                       ||<   at          t          |                                                     }d                    |                                          }d                    d |                                 D                       }||fS )zGet canonical headers.)authorizationz
user-agent,c                D    g | ]}t                               d |          S ) )_MULTI_SPACE_REGEXsub).0values     r   
<listcomp>z*_get_canonical_headers.<locals>.<listcomp>L   s6     - - -7<"&&sE22- - -r    ;
c                "    g | ]\  }}| d | S ): )r4   r   r5   s      r   r6   z*_get_canonical_headers.<locals>.<listcomp>S   s*    DDDjc5C		%		DDDr    )	itemslower
isinstancelisttuplejoinr   sortedkeys)r*   ordered_headersr   valuessigned_headerscanonical_headerss         r   _get_canonical_headersrH   ?   s   
 O}} 	 	Viikk 
 
 
  *&4-@@NVVvhF#&88 - -@F- - - $ $OC  "&)>)>)@)@"A"ABBOXXo224455N		DDO,A,A,C,CDDD  n,,r    queryc           	         | pd} d                     d t          d |                     d          D                       D                       S )zGet canonical query string. &c                8    g | ]}d                      |          S =)rA   )r4   pairs     r   r6   z/_get_canonical_query_string.<locals>.<listcomp>]   s/     	
 	
 	
#CHHTNN	
 	
 	
r    c                8    g | ]}|                     d           S rN   )split)r4   paramss     r   r6   z/_get_canonical_query_string.<locals>.<listcomp>_   s$    BBBvc""BBBr    )rA   rB   rR   )rI   s    r   _get_canonical_query_stringrT   X   sf     KRE88	
 	
'-BBS1A1ABBB( (	
 	
 	
  r    methodurlr	   content_sha256c                    t          |          \  }}t          |j                  }|  d|j        pd d| d| d| d| }t	          |          |fS )zGet canonical request hash.r8   r&   

)rH   rT   rI   pathr   )rU   rV   r*   rW   rG   rF   canonical_query_stringcanonical_requests           r   _get_canonical_request_hashr]   e   s     )?w(G(G%~8CC  	 	8?s	 	!	 	 	 	 		 	
 	 	  ())>99r    scopecanonical_request_hashc                <    dt          j        |            d| d| S )zGet string-to-sign.zAWS4-HMAC-SHA256
r8   )r   to_amz_date)r!   r^   r_   s      r   _get_string_to_signrb      s<    	$T-d33 	$ 	$u 	$ 	$!	$ 	$r    
secret_keyc           	        t          t          t          d| z                                   t	          j        |                                                              }t          t          t          ||                                                    }t          t          t          ||                                                    }t          t          t          |d                    S )zGet signing key.AWS4s   aws4_request)r   r   r   encoder   r(   )rc   r!   r"   r$   date_keydate_region_keydate_region_service_keys          r   _get_signing_keyrj      s     j ((**%%,,..	
 	
 H 5*Xv}}"G"GHHO"?L$7$7$9$9::  *O<<  r    signing_keystring_to_signc                p    t          t          t          | |                                d                    S )zGet signature.T)r   )r   r#   r   rf   )rk   rl   s     r   _get_signaturern      s7     ; 5 5 7 74HHH  r    
access_keyrF   	signaturec                    d|  d| d| d| S )zGet authorization.zAWS4-HMAC-SHA256 Credential=r&   z, SignedHeaders=z, Signature=r;   )ro   r^   rF   rp   s       r   _get_authorizationrr      sG    	Az 	A 	AE 	A 	A'	A 	A5>	A 	Ar    r   credentialsr   c                    t          |||           }t          ||||          \  }	}
t          |||	          }t          |j        |||           }t          ||          }t          |j        ||
|          }||d<   |S )z8Do signature V4 of given request for given service name.Authorization)r)   r]   rb   rj   rc   rn   rr   ro   )r$   rU   rV   r"   r*   rs   rW   r!   r^   r_   rF   rl   rk   rp   r.   s                  r   _sign_v4rv      s     tV\22E-HWn. .*N )u6LMMN"fl K {N;;I&~y M  -GONr    c           
     .    t          d| ||||||          S )z0Do signature V4 of given request for S3 service.s3rv   rU   rV   r"   r*   rs   rW   r!   s          r   
sign_v4_s3r{      s.     	 	 	r    c           
     .    t          d| ||||||          S )z1Do signature V4 of given request for STS service.stsry   rz   s          r   sign_v4_stsr~      s.     	 	 	r    expiresinttuple[str, SplitResult]c           
     Z   t          |dz   |z             }d|j        z   d}}|j        r
|j        dz   nd}	|	d| dt          j        |           d| d	| z  }	t          |          }
|	|
d
<   t          |
 }t          |	          }|  d|j        pd d| d| d| d
}t          |          |fS )z/Get canonical request hash for presign request.r&   zhost:hostrL   rK   z2X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=z&X-Amz-Date=z&X-Amz-Expires=z&X-Amz-SignedHeaders=   r8   rY   z
UNSIGNED-PAYLOAD)
r   netlocrI   r   ra   r?   r	   rT   rZ   r   )rU   rV   ro   r^   r!   r   x_amz_credentialrG   rF   rI   partsr[   r\   s                r   #_get_presign_canonical_request_hashr     s0    #:#3e#;<<(/#*(<f~ Y.CIcMMBE		1-	1 	1'--	1 	1 "	1 	1 !/		1 	1E IIEE!H
u
C8??  	 	8?s	 	!	 	 	 	 		 	 	  ())3..r    c                :   t          ||d          }t          | ||j        |||          \  }}t          |||          }t	          |j        ||d          }	t          |	|          }
t          |          }|j        dz   t          |
          z   |d<   t          | }|S )z)Do signature V4 of given presign request.rx   z&X-Amz-Signature=r   )r)   r   ro   rb   rj   rc   rn   r?   rI   r   r	   )rU   rV   r"   rs   r!   r   r^   r_   rl   rk   rp   r   s               r   
presign_v4r   1  s     tVT**E"E[+UD'# #C )u6LMMN";#94NNK{N;;IIIEy..Y1G1GGE!H
u
CJr    c                <    |  dt          j        |           d| dS )z;Get credential string of given access key, date and region.r&   z/s3/aws4_requestr'   )ro   r!   r"   s      r   get_credential_stringr   I  s,    OO4.t44OOvOOOOr    c                B    t          t          |||d          |           S )z0Do signature V4 of given presign POST form-data.rx   )rn   rj   )r   rc   r!   r"   s       r   post_presign_v4r   N  s*     T6488  r    )F)r   r   r   r   r   r   r   r   )r!   r   r"   r#   r$   r#   r   r#   )r*   r+   r   r,   )rI   r#   r   r#   )
rU   r#   rV   r	   r*   r+   rW   r#   r   r,   )r!   r   r^   r#   r_   r#   r   r#   )
rc   r#   r!   r   r"   r#   r$   r#   r   r   )rk   r   rl   r#   r   r#   )
ro   r#   r^   r#   rF   r#   rp   r#   r   r#   )r$   r#   rU   r#   rV   r	   r"   r#   r*   r   rs   r   rW   r#   r!   r   r   r   )rU   r#   rV   r	   r"   r#   r*   r   rs   r   rW   r#   r!   r   r   r   )rU   r#   rV   r	   ro   r#   r^   r#   r!   r   r   r   r   r   )rU   r#   rV   r	   r"   r#   rs   r   r!   r   r   r   r   r	   )ro   r#   r!   r   r"   r#   r   r#   )
r   r#   rc   r#   r!   r   r"   r#   r   r#   )*__doc__
__future__r   r   r   r   recollectionsr   r   typingr   r   urllib.parser	   rK   r   rs   r   helpersr   r   r   SIGN_V4_ALGORITHMcompiler2   r   r)   rH   rT   r]   rb   rj   rn   rr   rv   r{   r~   r   r   r   r   r;   r    r   <module>r      sN  $	 	 4 3 3 3 3 3 3 3   				 # # # # # #                       $ $ $ $ $ $       $ $ $ $ $ $ 7 7 7 7 7 7 7 7 7 7& RZ((   @ @ @ @ @O O O O
- - - -2
 
 
 
: : : :8	 	 	 	   4   
 
 
 
   8   ,   ,)/ )/ )/ )/X   0P P P P

 
 
 
 
 
r    