a
    ݌xd                  	   @   s$  d dl Z d dlZd dlZd dlZd dl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mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZm Z m!Z! d d	lm"Z" e#e$Z%d
Z&dZ'dZ(dZ)g dZ*dZ+dZ,dd Z-dd Z.G dd dZ/G dd de/Z0G dd de/Z1G dd de/Z2G dd de/Z3G dd  d e3Z4G d!d" d"e3Z5G d#d$ d$e5Z6G d%d& d&e3Z7G d'd( d(e/Z8G d)d* d*e8Z9G d+d, d,e8Z:G d-d. d.e0Z;e1e2e2e8e9e:e7e;d/Z<erd d0l=m>Z> e<?e> ne<?e3e5e4e6d1 dS )2    N)Mapping
formatdate)sha1sha256)
itemgetter)	HAS_CRTHTTPHeadersencodebytesensure_unicodeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsError)is_valid_ipv6_endpoint_urlnormalize_url_pathpercent_encode_sequence)MD5_AVAILABLEZ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)expectz
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                 C   sZ   t | }|j}t| r"d| d}ddd}|jd urV|j||jkrVd||jf }|S )N[]P   i  )httphttpsz%s:%d)r   hostnamer   portgetscheme)url	url_partshostZdefault_ports r$   E/var/www/html/Ranjet/env/lib/python3.9/site-packages/botocore/auth.py_host_from_urlF   s    
r&   c                 C   s:   | j }t|tr"t|d}nt|tr6t|}|S Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr)   r$   r$   r%   _get_body_as_dictY   s    


r1   c                   @   s   e Zd ZdZdZdd ZdS )
BaseSignerFc                 C   s   t dd S )Nadd_auth)NotImplementedErrorselfr0   r$   r$   r%   r3   j   s    zBaseSigner.add_authN)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENr3   r$   r$   r$   r%   r2   f   s   r2   c                   @   s   e Zd ZdZdd ZdS )TokenSignerTc                 C   s
   || _ d S N)
auth_token)r6   r>   r$   r$   r%   __init__t   s    zTokenSigner.__init__N)r7   r8   r9   r;   r?   r$   r$   r$   r%   r<   n   s   r<   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )		SigV2Authz+
    Sign a request with Signature V2.
    c                 C   s
   || _ d S r=   credentialsr6   rB   r$   r$   r%   r?   }   s    zSigV2Auth.__init__c                 C   s
  t d t|j}|j}t|dkr*d}|j d|j d| d}tj	| j
jdtd}g }t|D ]R}|dkrvqht|| }	t|ddd	}
t|	dd
d	}||
 d|  qhd|}||7 }t d| ||d t|  d}||fS )Nz$Calculating signature using v2 auth.r   /
r(   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r!   pathlenmethodnetlochmacnewrB   
secret_keyencoder   sortedr/   r   appendjoinupdatebase64	b64encodedigeststripr.   )r6   r0   paramssplitrP   string_to_signZlhmacpairskeyvalueZ
quoted_keyZquoted_valueqsZb64r$   r$   r%   calc_signature   s.    


zSigV2Auth.calc_signaturec                 C   s   | j d u rt |jr|j}n|j}| j j|d< d|d< d|d< ttt |d< | j j	rh| j j	|d< | 
||\}}||d< |S )	NAWSAccessKeyId2ZSignatureVersionZ
HmacSHA256ZSignatureMethod	TimestampZSecurityTokenrH   )rB   r   r)   r`   
access_keytimestrftimeISO8601gmtimetokenrg   )r6   r0   r`   rf   	signaturer$   r$   r%   r3      s    
zSigV2Auth.add_authN)r7   r8   r9   __doc__r?   rg   r3   r$   r$   r$   r%   r@   x   s   r@   c                   @   s   e Zd Zdd Zdd ZdS )	SigV3Authc                 C   s
   || _ d S r=   rA   rC   r$   r$   r%   r?      s    zSigV3Auth.__init__c                 C   s   | j d u rt d|jv r"|jd= tdd|jd< | j jrZd|jv rL|jd= | j j|jd< tj| j jdt	d}|
|jd d t|  }d| j j d|d }d	|jv r|jd	= ||jd	< d S )
NDateTusegmtX-Amz-Security-Tokenr(   rF   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rB   r   headersr   rp   rT   rU   rV   rW   r   r[   r
   r^   r_   rk   r.   )r6   r0   new_hmacZencoded_signaturerq   r$   r$   r%   r3      s*    



zSigV3Auth.add_authN)r7   r8   r9   r?   r3   r$   r$   r$   r%   rs      s   rs   c                   @   s   e Zd ZdZdZdd Zd1ddZdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0S )2	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 C   s   || _ || _|| _d S r=   )rB   _region_name_service_namer6   rB   service_nameregion_namer$   r$   r%   r?      s    zSigV4Auth.__init__Fc                 C   s:   |rt ||dt }nt ||dt }|S r'   )rT   rU   rW   r   	hexdigestr^   )r6   rd   msghexsigr$   r$   r%   _sign   s    zSigV4Auth._signc                 C   sL   t  }|j D ] \}}| }|tvr|||< qd|vrHt|j|d< |S )zk
        Select the headers from the request that need to be included
        in the StringToSign.
        r#   )r	   rx   itemslowerSIGNED_HEADERS_BLACKLISTr&   r!   )r6   r0   Z
header_mapnamere   lnamer$   r$   r%   headers_to_sign   s    
zSigV4Auth.headers_to_signc                 C   s&   |j r| |j S | t|jS d S r=   )r`   _canonical_query_string_params_canonical_query_string_urlr   r!   r5   r$   r$   r%   canonical_query_string   s    z SigV4Auth.canonical_query_stringc                 C   s~   g }t |tr| }|D ]*\}}|t|ddtt|ddf qg }t|D ]\}}|| d|  qRd|}|S )Nz-_.~rJ   rL   rM   )r*   r   r   rY   r   r/   rX   rZ   )r6   r`   key_val_pairsrd   re   sorted_key_valsr   r$   r$   r%   r     s    

z(SigV4Auth._canonical_query_string_paramsc           	      C   sv   d}|j rrg }|j dD ]"}|d\}}}|||f qg }t|D ]\}}|| d|  qJd|}|S )NrI   rM   rL   )queryra   	partitionrY   rX   rZ   )	r6   partsr   r   pairrd   _re   r   r$   r$   r%   r     s    
z%SigV4Auth._canonical_query_string_urlc                    sZ   g }t t|}|D ]:}d fdd||D }|| dt|  qd|S )a  
        Return the headers that need to be included in the StringToSign
        in their canonical form by converting all header keys to lower
        case, sorting them in alphabetical order and then joining
        them into a string, separated by newlines.
        ,c                 3   s   | ]}  |V  qd S r=   )_header_value.0vr6   r$   r%   	<genexpr>,  s   z.SigV4Auth.canonical_headers.<locals>.<genexpr>:rE   )rX   setrZ   get_allrY   r   )r6   r   rx   Zsorted_header_namesrd   re   r$   r   r%   canonical_headers"  s    zSigV4Auth.canonical_headersc                 C   s   d | S )N )rZ   ra   )r6   re   r$   r$   r%   r   2  s    zSigV4Auth._header_valuec                 C   s    t dd t|D }d|S )Nc                 s   s   | ]}|   V  qd S r=   )r   r_   )r   nr$   r$   r%   r   ;      z+SigV4Auth.signed_headers.<locals>.<genexpr>;)rX   r   rZ   )r6   r   rx   r$   r$   r%   signed_headers:  s    zSigV4Auth.signed_headersc                 C   s0   |j di }|d}t|to.|ddkS )Nchecksumrequest_algorithmintrailer)contextr   r*   dict)r6   r0   checksum_context	algorithmr$   r$   r%   _is_streaming_checksum_payload>  s    
z(SigV4Auth._is_streaming_checksum_payloadc                 C   s   |  |rtS | |stS |j}|r|t|dr|| }t|j	t
}t }t|dD ]}|| qV| }|| |S |rt| S tS d S )Nseekr   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterr[   r   r   EMPTY_SHA256_HASH)r6   r0   request_bodypositionZread_chunksizer   chunkZhex_checksumr$   r$   r%   payloadC  s&    


zSigV4Auth.payloadc                 C   s   |j dsdS |jddS )Nr   Tpayload_signing_enabled)r!   
startswithr   r   r5   r$   r$   r%   r   ]  s    z%SigV4Auth._should_sha256_sign_payloadc                 C   s   |j  g}| t|jj}|| || | | |}|| 	|d  || 
| d|jv r||jd }n
| |}|| d|S )NrE   X-Amz-Content-SHA256)rR   upper_normalize_url_pathr   r!   rP   rY   r   r   r   r   rx   r   rZ   )r6   r0   crrP   r   Zbody_checksumr$   r$   r%   canonical_requestg  s    




zSigV4Auth.canonical_requestc                 C   s   t t|dd}|S )Nz/~rJ   )r   r   )r6   rP   Znormalized_pathr$   r$   r%   r   v  s    zSigV4Auth._normalize_url_pathc                 C   sN   | j jg}||jd dd  || j || j |d d|S N	timestampr      aws4_requestrD   )rB   rk   rY   r   r{   r|   rZ   r6   r0   scoper$   r$   r%   r   z  s    

zSigV4Auth.scopec                 C   sH   g }| |jd dd  | | j | | j | d d|S r   )rY   r   r{   r|   rZ   r   r$   r$   r%   credential_scope  s    
zSigV4Auth.credential_scopec                 C   sH   dg}| |jd  | | | | t|d  d|S )z
        Return the canonical StringToSign as well as a dict
        containing the original version of all headers that
        were included in the StringToSign.
        AWS4-HMAC-SHA256r   r(   rE   )rY   r   r   r   rW   r   rZ   )r6   r0   r   stsr$   r$   r%   rb     s
    zSigV4Auth.string_to_signc                 C   sd   | j j}| d|  |jd dd }| || j}| || j}| |d}| j||ddS )NZAWS4r   r   r   r   T)r   )rB   rV   r   rW   r   r{   r|   )r6   rb   r0   rd   Zk_dateZk_regionZ	k_serviceZ	k_signingr$   r$   r%   rq     s    zSigV4Auth.signaturec                 C   s   | j d u rt tj }|t|jd< | | | |}t	
d t	
d| | ||}t	
d| | ||}t	
d| | || d S )Nr   z$Calculating signature using v4 auth.zCanonicalRequest:
%sStringToSign:
%szSignature:
%s)rB   r   datetimeutcnowrm   SIGV4_TIMESTAMPr   _modify_request_before_signingr   rN   rO   rb   rq   _inject_signature_to_request)r6   r0   datetime_nowr   rb   rq   r$   r$   r%   r3     s    




zSigV4Auth.add_authc                 C   sR   d|  | g}| |}|d| |  |d|  d||jd< |S )NzAWS4-HMAC-SHA256 Credential=%szSignedHeaders=zSignature=%sz, Authorization)r   r   rY   r   rZ   rx   )r6   r0   rq   auth_strr   r$   r$   r%   r     s    
z&SigV4Auth._inject_signature_to_requestc                 C   sr   d|j v r|j d= | | | jjrDd|j v r6|j d= | jj|j d< |jddsnd|j v rd|j d= t|j d< d S )Nr   rw   r   Tr   )rx   _set_necessary_date_headersrB   rp   r   r   r   r5   r$   r$   r%   r     s    



z(SigV4Auth._modify_request_before_signingc                 C   s|   d|j v rV|j d= tj|jd t}ttt|	 |j d< d|j v rx|j d= n"d|j v rh|j d= |jd |j d< d S )Nrt   r   
X-Amz-Date)
rx   r   strptimer   r   r   intcalendartimegm	timetuple)r6   r0   Zdatetime_timestampr$   r$   r%   r     s    





z%SigV4Auth._set_necessary_date_headersN)F)r7   r8   r9   rr   r:   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rb   rq   r3   r   r   r   r$   r$   r$   r%   rz      s0   




rz   c                       s0   e Zd Z fddZ fddZdd Z  ZS )S3SigV4Authc                    s2   t  | d|jv r|jd= | ||jd< d S )Nr   )superr   rx   r   r5   	__class__r$   r%   r     s    
z*S3SigV4Auth._modify_request_before_signingc                    s   |j d}t|dd }|d u r$i }|dd }|d ur<|S d}|j di }|d}t|trx|ddkrx|d	 }|jd
r||jvrdS |j ddrdS t 	|S )Nclient_configs3r   zContent-MD5r   r   r   headerr   r   TZhas_streaming_inputF)
r   r   getattrr*   r   r!   r   rx   r   r   )r6   r0   r   Z	s3_configZsign_payloadZchecksum_headerr   r   r   r$   r%   r     s(    

z'S3SigV4Auth._should_sha256_sign_payloadc                 C   s   |S r=   r$   r6   rP   r$   r$   r%   r     s    zS3SigV4Auth._normalize_url_path)r7   r8   r9   r   r   r   __classcell__r$   r$   r   r%   r     s   )r   c                       s4   e Zd ZdZef fdd	Zdd Zdd Z  ZS )SigV4QueryAuth  c                    s   t  ||| || _d S r=   )r   r?   _expires)r6   rB   r~   r   expiresr   r$   r%   r?     s    zSigV4QueryAuth.__init__c                 C   s  |j d}d}||kr |j d= | | |}d| ||jd | j|d}| jjd urf| jj|d< t	|j
}t|jdd}d	d
 | D }|jr||j i |_d}	|jr|t| d|_|rt|d }	|	 t| }
|}|d |d |d |
|d f}t||_
d S )Ncontent-typez0application/x-www-form-urlencoded; charset=utf-8r   r   )zX-Amz-AlgorithmzX-Amz-Credentialr   zX-Amz-ExpireszX-Amz-SignedHeadersrw   T)keep_blank_valuesc                 S   s   i | ]\}}||d  qS r   r$   )r   kr   r$   r$   r%   
<dictcomp><  r   zASigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>rI   rM   r            )rx   r   r   r   r   r   r   rB   rp   r   r!   r   r   r   r`   r[   r)   r1   r   r   )r6   r0   content_typeZblacklisted_content_typer   Zauth_paramsr"   Zquery_string_parts
query_dictZoperation_paramsnew_query_stringpnew_url_partsr$   r$   r%   r     s>    
z-SigV4QueryAuth._modify_request_before_signingc                 C   s   | j d| 7  _ d S )Nz&X-Amz-Signature=%s)r!   )r6   r0   rq   r$   r$   r%   r   ^  s    z+SigV4QueryAuth._inject_signature_to_request)r7   r8   r9   DEFAULT_EXPIRESr?   r   r   r   r$   r$   r   r%   r     s
   Ar   c                   @   s    e Zd ZdZdd Zdd ZdS )S3SigV4QueryAutha  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

    c                 C   s   |S r=   r$   r   r$   r$   r%   r   q  s    z$S3SigV4QueryAuth._normalize_url_pathc                 C   s   t S r=   )r   r5   r$   r$   r%   r   u  s    zS3SigV4QueryAuth.payloadN)r7   r8   r9   rr   r   r   r$   r$   r$   r%   r   e  s   r   c                   @   s   e Zd ZdZdd ZdS )S3SigV4PostAuthz
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                 C   sP  t j  }|t|jd< i }|jdd d ur:|jd }i }g }|jdd d urv|jd }|dd d urv|d }||d< d|d< | ||d< |jd |d< |ddi |d| |i |d|jd i | jj	d ur| jj	|d	< |d	| jj	i t
t|d
d
|d< | |d ||d< ||jd< ||jd< d S )Nr   s3-presign-post-fieldss3-presign-post-policy
conditionsr   zx-amz-algorithmzx-amz-credentialz
x-amz-datex-amz-security-tokenr(   policyzx-amz-signature)r   r   rm   r   r   r   r   rY   rB   rp   r\   r]   r,   dumpsrW   r.   rq   )r6   r0   r   fieldsr  r   r$   r$   r%   r3     s:    



zS3SigV4PostAuth.add_authNr7   r8   r9   rr   r3   r$   r$   r$   r%   r   }  s   r   c                   @   st   e Zd Zg dZdddZdd Zdd Zd	d
 Zdd ZdddZ	dddZ
dddZdd Zdd Zdd ZdS )
HmacV1Auth)$Z
accelerateZaclZcorsZdefaultObjectAcllocationloggingZ
partNumberr  requestPaymentZtorrentZ
versioningZ	versionIdversionsZwebsiteZuploadsZuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdeleteZ	lifecycleZtaggingrestoreZstorageClassZnotificationZreplicationr  Z	analyticsZmetricsZ	inventoryselectzselect-typezobject-lockNc                 C   s
   || _ d S r=   rA   r}   r$   r$   r%   r?     s    zHmacV1Auth.__init__c                 C   s>   t j| jjdtd}||d t| 	 
dS )Nr(   rF   )rT   rU   rB   rV   rW   r   r[   r
   r^   r_   r.   )r6   rb   ry   r$   r$   r%   sign_string  s
    zHmacV1Auth.sign_stringc                 C   s   g d}g }d|v r|d= |   |d< |D ]R}d}|D ]6}| }|| d ur6||kr6|||   d}q6|s*|d q*d|S )N)content-md5r   datert   FTrI   rE   )	_get_dater   rY   r_   rZ   )r6   rx   Zinteresting_headershoiZihfoundrd   lkr$   r$   r%   canonical_standard_headers  s    z%HmacV1Auth.canonical_standard_headersc                 C   s   g }i }|D ]@}|  }|| d ur|drddd ||D ||< qt| }|D ]}|| d||   q^d|S )Nx-amz-r   c                 s   s   | ]}|  V  qd S r=   )r_   r   r$   r$   r%   r     s   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>r   rE   )r   r   rZ   r   rX   keysrY   )r6   rx   r  custom_headersrd   r  Zsorted_header_keysr$   r$   r%   canonical_custom_headers  s    

z#HmacV1Auth.canonical_custom_headersc                 C   s(   t |dkr|S |d t|d fS dS )z(
        TODO: Do we need this?
        r   r   N)rQ   r   )r6   nvr$   r$   r%   	unquote_v   s    zHmacV1Auth.unquote_vc                    s   |d ur|}n|j }|jr|jd}dd |D } fdd|D }t|dkr|jtdd dd |D }|d7 }|d|7 }|S )	NrM   c                 S   s   g | ]}| d dqS )rL   r   )ra   r   ar$   r$   r%   
<listcomp>  r   z1HmacV1Auth.canonical_resource.<locals>.<listcomp>c                    s$   g | ]}|d   j v r |qS r   )QSAOfInterestr  r  r   r$   r%   r    s   r   )rd   c                 S   s   g | ]}d  |qS )rL   )rZ   r  r$   r$   r%   r    r   ?)rP   r   ra   rQ   sortr   rZ   )r6   ra   	auth_pathbufZqsar$   r   r%   canonical_resource	  s    	
zHmacV1Auth.canonical_resourcec                 C   sN   |  d }|| |d 7 }| |}|r8||d 7 }|| j||d7 }|S )NrE   r!  )r   r  r  r#  )r6   rR   ra   rx   r   r!  csr  r$   r$   r%   canonical_string#  s    
zHmacV1Auth.canonical_stringc                 C   sB   | j jr|d= | j j|d< | j||||d}td| | |S )Nr   r$  r   )rB   rp   r&  rN   rO   r  )r6   rR   ra   rx   r   r!  rb   r$   r$   r%   get_signature.  s    zHmacV1Auth.get_signaturec                 C   sX   | j d u rttd t|j}td|j | j|j||j|j	d}| 
|| d S )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr$  )rB   r   rN   rO   r   r!   rR   r'  rx   r!  _inject_signature)r6   r0   ra   rq   r$   r$   r%   r3   :  s    


zHmacV1Auth.add_authc                 C   s
   t ddS )NTru   r   r   r$   r$   r%   r  E  s    zHmacV1Auth._get_datec                 C   s4   d|j v r|j d= d| jj d| }||j d< d S )Nr   zAWS r   )rx   rB   rk   )r6   r0   rq   auth_headerr$   r$   r%   r(  H  s    
zHmacV1Auth._inject_signature)NN)N)NN)NN)r7   r8   r9   r  r?   r  r  r  r  r#  r&  r'  r3   r  r(  r$   r$   r$   r%   r    s   '
	
 
 
r  c                   @   s0   e Zd ZdZdZefddZdd Zdd Zd	S )
HmacV1QueryAuthz
    Generates a presigned request for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
    #RESTAuthenticationQueryStringAuth

    r   c                 C   s   || _ || _d S r=   )rB   r   )r6   rB   r   r$   r$   r%   r?   c  s    zHmacV1QueryAuth.__init__c                 C   s   t tt t| j S r=   )r/   r   rl   r   r   r$   r$   r%   r  g  s    zHmacV1QueryAuth._get_datec           	      C   s   i }| j j|d< ||d< |jD ]D}| }|dkrB|jd |d< q|dsT|dv r|j| ||< qt|}t|j}|d r|d  d| }|d	 |d
 |d ||d f}t||_d S )Nrh   rH   rt   ZExpiresr  )r  r      rM   r   r   r   r   )	rB   rk   rx   r   r   r   r   r!   r   )	r6   r0   rq   r   Z
header_keyr  r   r   r   r$   r$   r%   r(  j  s    

z!HmacV1QueryAuth._inject_signatureN)r7   r8   r9   rr   r   r?   r  r(  r$   r$   r$   r%   r*  V  s
   
r*  c                   @   s   e Zd ZdZdd ZdS )HmacV1PostAuthz
    Generates a presigned post for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
    c                 C   s   i }|j dd d ur |j d }i }g }|j dd d ur\|j d }|dd d ur\|d }||d< | jj|d< | jjd ur| jj|d< |d| jji tt	|
dd|d< | |d |d< ||j d< ||j d< d S )	Nr   r   r   rh   r   r(   r  rq   )r   r   rB   rk   rp   rY   r\   r]   r,   r  rW   r.   r  )r6   r0   r  r  r   r$   r$   r%   r3     s,    


zHmacV1PostAuth.add_authNr  r$   r$   r$   r%   r,    s   r,  c                   @   s   e Zd ZdZdd ZdS )
BearerAuthz
    Performs bearer token authorization by placing the bearer token in the
    Authorization header as specified by Section 2.1 of RFC 6750.

    https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
    c                 C   s>   | j d u rt d| j j }d|jv r0|jd= ||jd< d S )NzBearer r   )r>   r   rp   rx   )r6   r0   r)  r$   r$   r%   r3     s    

zBearerAuth.add_authNr  r$   r$   r$   r%   r-    s   r-  )Zv2Zv3Zv3httpsr   zs3-queryzs3-presign-postzs3v4-presign-postZbearer)CRT_AUTH_TYPE_MAPS)Zv4zv4-queryZs3v4z
s3v4-query)@r\   r   r   r   rT   r,   r  rl   collections.abcr   email.utilsr   hashlibr   r   operatorr   Zbotocore.compatr   r	   r
   r   r   r   r   r   r   Zbotocore.exceptionsr   r   Zbotocore.utilsr   r   r   r   	getLoggerr7   rN   r   r   rn   r   r   r   r   r&   r1   r2   r<   r@   rs   rz   r   r   r   r   r  r*  r,  r-  ZAUTH_TYPE_MAPSZbotocore.crt.authr.  r[   r$   r$   r$   r%   <module>   sz   ,

=  6Q0 *5(