
    tnia                     j   d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlm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e          Z G d de          ZeeeeeeedZdS )    )BytesIO)SIGNED_HEADERS_BLACKLIST"STREAMING_UNSIGNED_PAYLOAD_TRAILERUNSIGNED_PAYLOAD
BaseSigner_get_body_as_dict_host_from_url)HTTPHeadersawscrtget_current_datetimeparse_qsurlsplit
urlunsplit)NoCredentialsError)register_feature_id)percent_encode_sequencec                       e Zd ZdZg dZej        j        j        Z	dZ
dZd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd ZdS )CrtSigV4AuthTAuthorizationz
X-Amz-DateX-Amz-Content-SHA256zX-Amz-Security-Tokenc                 >    || _         || _        || _        d | _        d S Ncredentials_service_name_region_name_expiration_in_secondsselfr   service_nameregion_names       N/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/botocore/crt/auth.py__init__zCrtSigV4Auth.__init__1   (    &)'&*###    c                     |j                             di           }|                    d          }t          |t                    o|                    d          dk    S Nchecksumrequest_algorithmintrailercontextget
isinstancedictr    requestchecksum_context	algorithms       r#   _is_streaming_checksum_payloadz+CrtSigV4Auth._is_streaming_checksum_payload7   T    "?..z2>>$(()<==	)T**Oy}}T/B/Bi/OOr&   c                    | j         t                      t          d          }|                     |          }|                     |           t
          j        j                            | j         j	        | j         j
        | j         j                  }|                     |          rt          }n$|                     |          r|r|}n
d }nt          }|                     |          rt
          j        j        j        }nt
          j        j        j        }t
          j                            t
          j        j        j        | j        || j        | j        || j        | j        | j        ||| j                  }|                     |          }t
          j                            ||          }	|	                                  | !                    ||           d S )NFremove_tzinfoaccess_key_idsecret_access_keysession_tokenr5   signature_typecredentials_providerregionservicedateshould_sign_headeruse_double_uri_encodeshould_normalize_uri_pathsigned_body_valuesigned_body_header_typeexpiration_in_seconds)"r   r   r   _get_existing_sha256_modify_request_before_signingr   authAwsCredentialsProvider
new_static
access_key
secret_keytokenr6   r   _should_sha256_sign_payloadr   !_should_add_content_sha256_headerAwsSignedBodyHeaderTypeX_AMZ_CONTENT_SHA_256NONEAwsSigningConfigAwsSigningAlgorithmV4_SIGNATURE_TYPEr   r   _should_sign_header_USE_DOUBLE_URI_ENCODE_SHOULD_NORMALIZE_URI_PATHr   _crt_request_from_aws_requestaws_sign_requestresult_apply_signing_changes
r    r3   datetime_nowexisting_sha256rA   explicit_payloadbody_headersigning_configcrt_requestfutures
             r#   add_authzCrtSigV4Auth.add_auth<   s   #$&&&+%@@@ 33G<<++G444%{ALL*5".9*0  M  
  
 ..w77 	0A--g66 	0 (#2  #'  /112BCC 	C3I K !+=BK55k58/!5$&#7"&"=&*&E.$/"&"= 6 
 
 88AA--k>JJ##G[99999r&   c                 ~   t          |j                  }|j        r|j        nd}|j        rfg }|j                                        D ].\  }}t          |          }|                    | d|            /|dz   d                    |          z   }n|j        r| d|j         }t          j
                            |j                                                  }d }|j        r1t          |j        d          r|j        }nt          |j                  }t          j
                            |j        |||          }	|	S N/=?&seek)methodpathheadersbody_streamr   urlrt   paramsitemsstrappendjoinqueryr   httpHttpHeadersru   bodyhasattrr   HttpRequestrs   
r    aws_request	url_partscrt_patharrayparamvaluecrt_headerscrt_body_streamri   s
             r#   r_   z*CrtSigV4Auth._crt_request_from_aws_requestq   T   [_--	%.^<9>> 	7E + 2 8 8 : : 1 1uE

////0000#~7HH_ 	7"66Y_66Hk--k.A.G.G.I.IJJ  	<{'00 <"-"2")+*:";";k--%'	 . 
 
 r&   c                 \    t          j        t          |j                            |_        d S r   r
   
from_pairslistru   r    r   signed_crt_requests      r#   rb   z#CrtSigV4Auth._apply_signing_changes   ,    )4#+,,
 
r&   c                 8    |                                 t          vS r   lowerr   r    namekwargss      r#   r\   z CrtSigV4Auth._should_sign_header       zz||#;;;r&   c                     | j         D ]}||j        v r|j        |= d|j        vrt          |j                  |j        d<   d S d S Nhost_PRESIGNED_HEADERS_BLOCKLISTru   r	   rx   r    r3   hs      r#   rL   z+CrtSigV4Auth._modify_request_before_signing   _     2 	' 	'AGO##OA&((&4W[&A&AGOF### )(r&   c                 6    |j                             d          S Nr   ru   r/   r    r3   s     r#   rK   z!CrtSigV4Auth._get_existing_sha256       ""#9:::r&   c                 p    |j                             d          sdS |j                            dd          S NhttpsTpayload_signing_enabledrx   
startswithr.   r/   r   s     r#   rS   z(CrtSigV4Auth._should_sha256_sign_payload   :    {%%g.. 	4
 ""#<dCCCr&   c                 
    |d uS r    r    rf   s     r#   rT   z.CrtSigV4Auth._should_add_content_sha256_header       t++r&   N)__name__
__module____qualname__REQUIRES_REGIONr   r   rM   AwsSignatureTypeHTTP_REQUEST_HEADERSr[   r]   r^   r$   r6   rk   r_   rb   r\   rL   rK   rS   rT   r   r&   r#   r   r   %   s        O$ $ $  k2GO!!%+ + +P P P
3: 3: 3:j  <
 
 
< < <B B B; ; ;D D D, , , , ,r&   r   c                   2     e Zd ZdZdZd Z fdZd Z xZS )CrtS3SigV4AuthFc                     d S r   r   r   s     r#   rK   z#CrtS3SigV4Auth._get_existing_sha256       tr&   c                 ,   |j                             d          }t          |dd           }|i }|                    dd           }||S d}|j                             di           }|                    d          }t          |t                    r!|                    d          dk    r|d	         }|j                            d
          r	||j        vrdS |j                             dd          rdS t                      	                    |          S )Nclient_configs3r   Content-MD5r)   r*   r+   headerr   r   Thas_streaming_inputF)
r.   r/   getattrr0   r1   rx   r   ru   superrS   )	r    r3   r   	s3_configsign_payloadchecksum_headerr4   r5   	__class__s	           r#   rS   z*CrtS3SigV4Auth._should_sha256_sign_payload   s%     ++O<<M466	 I !}}%>EE# ("?..z2>>$(()<==	i&& 	09==+>+>(+J+J'/O&&w//	go554 ?4e<< 	5 ww227;;;r&   c                     dS NTr   r   s     r#   rT   z0CrtS3SigV4Auth._should_add_content_sha256_header   r   r&   	r   r   r   r]   r^   rK   rS   rT   __classcell__r   s   @r#   r   r      sc        "!&  '< '< '< '< '<R      r&   r   c                       e Zd ZdZg dZej        j        j        Z	dZ
dZd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd ZdS )CrtSigV4AsymAuthTr   c                 >    || _         || _        || _        d | _        d S r   r   r   s       r#   r$   zCrtSigV4AsymAuth.__init__   r%   r&   c                    t          d           | j        t                      t          d          }|                     |          }|                     |           t          j        j        	                    | j        j
        | j        j        | j        j                  }|                     |          rt          }n$|                     |          r|r|}n
d }nt           }|                     |          rt          j        j        j        }nt          j        j        j        }t          j                            t          j        j        j        | j        || j        | j        || j        | j        | j        ||| j                  }|                     |          }t          j                             ||          }	|	!                                 | "                    ||           d S )NSIGV4A_SIGNINGFr9   r;   r?   )#r   r   r   r   rK   rL   r   rM   rN   rO   rP   rQ   rR   r6   r   rS   r   rT   rU   rV   rW   rX   rY   V4_ASYMMETRICr[   r   r   r\   r]   r^   r   r_   r`   ra   rb   rc   s
             r#   rk   zCrtSigV4AsymAuth.add_auth   s   ,---#$&&&+%@@@ 33G<<++G444%{ALL*5".9*0  M  
  
 ..w77 	0A--g66 	0 (#2  #'  /112BCC 	C3I K !+=BK55k5C/!5$&#7"&"=&*&E.$/"&"= 6 
 
 88AA--k>JJ##G[99999r&   c                 ~   t          |j                  }|j        r|j        nd}|j        rfg }|j                                        D ].\  }}t          |          }|                    | d|            /|dz   d                    |          z   }n|j        r| d|j         }t          j
                            |j                                                  }d }|j        r1t          |j        d          r|j        }nt          |j                  }t          j
                            |j        |||          }	|	S rm   rw   r   s
             r#   r_   z.CrtSigV4AsymAuth._crt_request_from_aws_request3  r   r&   c                 \    t          j        t          |j                            |_        d S r   r   r   s      r#   rb   z'CrtSigV4AsymAuth._apply_signing_changesQ  r   r&   c                 8    |                                 t          vS r   r   r   s      r#   r\   z$CrtSigV4AsymAuth._should_sign_headerW  r   r&   c                     | j         D ]}||j        v r|j        |= d|j        vrt          |j                  |j        d<   d S d S r   r   r   s      r#   rL   z/CrtSigV4AsymAuth._modify_request_before_signingZ  r   r&   c                 6    |j                             d          S r   r   r   s     r#   rK   z%CrtSigV4AsymAuth._get_existing_sha256d  r   r&   c                     |j                             di           }|                    d          }t          |t                    o|                    d          dk    S r(   r-   r2   s       r#   r6   z/CrtSigV4AsymAuth._is_streaming_checksum_payloadg  r7   r&   c                 p    |j                             d          sdS |j                            dd          S r   r   r   s     r#   rS   z,CrtSigV4AsymAuth._should_sha256_sign_payloadl  r   r&   c                 
    |d uS r   r   r   s     r#   rT   z2CrtSigV4AsymAuth._should_add_content_sha256_headerv  r   r&   N)r   r   r   r   r   r   rM   r   r   r[   r]   r^   r$   rk   r_   rb   r\   rL   rK   r6   rS   rT   r   r&   r#   r   r      s        O$ $ $  k2GO!!%+ + +4: 4: 4:l  <
 
 
< < <B B B; ; ;P P P
D D D, , , , ,r&   r   c                   2     e Zd ZdZdZd Z fdZd Z xZS )CrtS3SigV4AsymAuthFc                     d S r   r   r   s     r#   rK   z'CrtS3SigV4AsymAuth._get_existing_sha256  r   r&   c                 \   |j                             d          }t          |dd           }|i }|                    dd           }||S |j                            d          r	d|j        vrdS |j                             dd          rdS t                                          |          S )	Nr   r   r   r   r   Tr   F)r.   r/   r   rx   r   ru   r   rS   )r    r3   r   r   r   r   s        r#   rS   z.CrtS3SigV4AsymAuth._should_sha256_sign_payload  s      ++O<<M466	 I !}}%>EE# &&w//	GO334 ?4e<< 	5 ww227;;;r&   c                     dS r   r   r   s     r#   rT   z4CrtS3SigV4AsymAuth._should_add_content_sha256_header  r   r&   r   r   s   @r#   r   r   {  sc        "!&  "< "< "< "< "<H      r&   r   c                   \     e Zd ZdZej        j        j        Zef fd	Z	 fdZ
 fdZ xZS )CrtSigV4AsymQueryAuth  c                 \    t                                          |||           || _        d S r   r   r$   r   r    r   r!   r"   expiresr   s        r#   r$   zCrtSigV4AsymQueryAuth.__init__  /     	lK@@@&-###r&   c                    t                                          |           |j                            d          }|dk    r|j        d= t	          |j                  }t          |j        d          }d |                                D             }|j	        r)|
                    t          |                     d|_	        t          |          }|}|d         |d         |d	         ||d
         f}t          |          |_        d S )Ncontent-type0application/x-www-form-urlencoded; charset=utf-8Tkeep_blank_valuesc                 &    i | ]\  }}||d          S r   r   .0kvs      r#   
<dictcomp>zHCrtSigV4AsymQueryAuth._modify_request_before_signing.<locals>.<dictcomp>  s"    EEE$!Qa1EEEr&    r            )r   rL   ru   r/   r   rx   r   r~   rz   dataupdater   r   r   )
r    r3   content_typer   query_string_parts
query_dictnew_query_stringpnew_url_partsr   s
            r#   rL   z4CrtSigV4AsymQueryAuth._modify_request_before_signing  s   ..w777 **>::MMM/ W[))	 &ioNNNEE*<*B*B*D*DEEE
 < 	 /88999GL2:>> 1qtQqT+;QqTB //r&   c                    t                                          ||           t          |j                  j        }t          |j                  }t          |d         |d         |d         ||d         f          |_        d S Nr   r   r   r   r   rb   r   rt   r~   rx   r   r    r   r   signed_queryr   r   s        r#   rb   z,CrtSigV4AsymQueryAuth._apply_signing_changes  q    &&{4FGGG 2 788>[_%% %adAaD!A$ad%KLLr&   r   r   r   DEFAULT_EXPIRESr   rM   r   HTTP_REQUEST_QUERY_PARAMSr[   r$   rL   rb   r   r   s   @r#   r   r     s        Ok2LO ?N. . . . . .(0 (0 (0 (0 (0TM M M M M M M M Mr&   r   c                   &    e Zd ZdZdZdZd Zd ZdS )CrtS3SigV4AsymQueryAuthzS3 SigV4A auth using query parameters.
    This signer will sign a request using query parameters and signature
    version 4A, i.e a "presigned url" signer.
    Fc                     dS NFr   r   s     r#   rS   z3CrtS3SigV4AsymQueryAuth._should_sha256_sign_payload  	    
 ur&   c                     dS r  r   r   s     r#   rT   z9CrtS3SigV4AsymQueryAuth._should_add_content_sha256_header      ur&   Nr   r   r   __doc__r]   r^   rS   rT   r   r&   r#   r  r    sJ          #!&      r&   r  c                   \     e Zd ZdZej        j        j        Zef fd	Z	 fdZ
 fdZ xZS )CrtSigV4QueryAuthr   c                 \    t                                          |||           || _        d S r   r   r   s        r#   r$   zCrtSigV4QueryAuth.__init__  r   r&   c                 ^   t                                          |           |j                            d          }|dk    r|j        d= t	          |j                  }d t          |j        d                                          D             }|j	        r!|
                    |j	                   i |_	        |j        r)|
                    t          |                     d|_        t          |          }|}|d         |d         |d	         ||d
         f}t          |          |_        d S )Nr   r   c                 &    i | ]\  }}||d          S r   r   r   s      r#   r   zDCrtSigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>!  s2     
 
 
1 qt
 
 
r&   Tr   r   r   r   r   r   )r   rL   ru   r/   r   rx   r   r~   rz   ry   r   r   r   r   r   )	r    r3   r   r   r   r   r   r  r   s	           r#   rL   z0CrtSigV4QueryAuth._modify_request_before_signing  s:   ..w777 **>::MMM/ W[))	
 
 4  egg	
 
 

 > 	 gn---GN < 	 /88999GL2:>> 1qtQqT+;QqTB //r&   c                    t                                          ||           t          |j                  j        }t          |j                  }t          |d         |d         |d         ||d         f          |_        d S r  r  r  s        r#   rb   z(CrtSigV4QueryAuth._apply_signing_changesB  r  r&   r  r   s   @r#   r  r    s        Ok2LO ?N. . . . . ..0 .0 .0 .0 .0`M M M M M M M M Mr&   r  c                   &    e Zd ZdZdZdZd Zd ZdS )CrtS3SigV4QueryAutha  S3 SigV4 auth using query parameters.
    This signer will sign a request using query parameters and signature
    version 4, i.e a "presigned url" signer.
    Based off of:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
    Fc                     dS r  r   r   s     r#   rS   z/CrtS3SigV4QueryAuth._should_sha256_sign_payload_  r  r&   c                     dS r  r   r   s     r#   rT   z5CrtS3SigV4QueryAuth._should_add_content_sha256_headerf  r  r&   Nr  r   r&   r#   r  r  S  sJ          #!&      r&   r  )v4zv4-queryv4as3v4z
s3v4-querys3v4azs3v4a-queryN)ior   botocore.authr   r   r   r   r   r	   botocore.compatr
   r   r   r   r   r   botocore.exceptionsr   botocore.useragentr   botocore.utilsr   r   r   r   r   r   r  r  r  CRT_AUTH_TYPE_MAPSr   r&   r#   <module>r)     s                                       3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2L, L, L, L, L,: L, L, L,^4 4 4 4 4\ 4 4 4nM, M, M, M, M,z M, M, M,`/ / / / /) / / /dBM BM BM BM BM, BM BM BMJ    3   ,HM HM HM HM HM HM HM HMV    +   6 !%*    r&   