
    tni                        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mZmZ d dlmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%  ej&        e'          Z(d	Z)d
Z*dZ+dZ,g dZ-dZ.dZ/d Z0d Z1 G d d          Z2 G d de2          Z3 G d de2          Z4 G d de2          Z5 G d de2          Z6 G d de6          Z7 G d de7          Z8 G d  d!e8          Z9 G d" d#e8          Z: G d$ d%e6          Z; G d& d'e;          Z< G d( d)e6          Z= G d* d+e2          Z> G d, d-e>          Z? G d. d/e>          Z@ G d0 d1e3          ZAd2 ZBd3 ZCe4e5e5e>e?e@e=e8e:e9eAd4ZDerd d5lEmFZF eDG                    eF           neDG                    e6e;e7e<d6           d7d8d9d:d;ZHd< eHI                                D             ZJdS )=    N)Mapping
formatdate)sha1sha256)
itemgetter)HAS_CRTMD5_AVAILABLEHTTPHeadersencodebytesensure_unicodeget_current_datetimeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsErrorUnknownSignatureVersionError UnsupportedSignatureVersionError)is_valid_ipv6_endpoint_urlnormalize_url_pathpercent_encode_sequence@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)expectztransfer-encodingz
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                     t          |           }|j        }t          |           rd| d}ddd}|j        /|j        |                    |j                  k    r| d|j         }|S )N[]P   i  )httphttps:)r   hostnamer   portgetscheme)url	url_partshostdefault_portss       J/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/botocore/auth.py_host_from_urlr-   J   s    
 ID!#&& 4{{{ M ~!>]..y/?@@@@--Y^--DK    c                     | j         }t          |t                    r(t          j        |                    d                    }n)t          |t                    rt          j        |          }|S Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr2   s     r,   _get_body_as_dictr:   ]   s`    
 <D$  z$++g..//	D#		  z$Kr.   c                       e Zd ZdZdZd ZdS )
BaseSignerFc                      t          d          )Nadd_auth)NotImplementedErrorselfr9   s     r,   r>   zBaseSigner.add_authn   s    !*---r.   N)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENr>    r.   r,   r<   r<   j   s-        ON. . . . .r.   r<   c                       e Zd ZdZ	 d ZdS )TokenSignerTc                     || _         d S N)
auth_token)rA   rL   s     r,   __init__zTokenSigner.__init__x   s    $r.   N)rB   rC   rD   rF   rM   rG   r.   r,   rI   rI   r   s-        N% % % % %r.   rI   c                   $    e Zd ZdZd Zd Zd ZdS )	SigV2Authz+
    Sign a request with Signature V2.
    c                     || _         d S rK   credentialsrA   rR   s     r,   rM   zSigV2Auth.__init__       &r.   c                    t                               d           t          |j                  }|j        }t          |          dk    rd}|j         d|j         d| d}t          j	        | j
        j                            d          t                    }g }t          |          D ]}|dk    r	t          ||                   }	t!          |                    d          d	          }
t!          |	                    d          d
	          }|                    |
 d|            d                    |          }||z  }t                               d|           |                    |                    d                     t)          j        |                                                                                              d          }||fS )Nz$Calculating signature using v2 auth.r   /
r1   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r(   pathlenmethodnetlochmacnewrR   
secret_keyencoder   sortedr8   r   appendjoinupdatebase64	b64encodedigeststripr7   )rA   r9   paramssplitrb   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s                 r,   calc_signaturezSigV2Auth.calc_signature   s   ;<<<%%zt99>>D#NFFelFFdFFF'..w776
 
 
 &>> 		9 		9C k!!s$$Eszz'22<<<J g!6!6UCCCLLLJ77778888XXe__")>:::^**733444u||~~..4466==gFFCyr.   c                 \   | j         t                      |j        r|j        }n|j        }| j         j        |d<   d|d<   d|d<   t          j        t          t          j                              |d<   | j         j	        r| j         j	        |d<   | 
                    ||          \  }}||d<   |S )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenrZ   )rR   r   r2   rr   
access_keytimestrftimeISO8601gmtimetokenr}   )rA   r9   rr   r{   	signatures        r,   r>   zSigV2Auth.add_auth   s     #$&&&< 	$\FF ^F#'#3#> %(!"$0 !"mGT[]]CC{! 	=&*&6&<F?#++GV<<I'{r.   N)rB   rC   rD   __doc__rM   r}   r>   rG   r.   r,   rO   rO   |   sK         ' ' '  8    r.   rO   c                       e Zd Zd Zd ZdS )	SigV3Authc                     || _         d S rK   rQ   rS   s     r,   rM   zSigV3Auth.__init__   rT   r.   c                    | j         t                      d|j        v r|j        d= t          d          |j        d<   | j         j        r%d|j        v r|j        d= | j         j        |j        d<   t          j        | j         j                            d          t                    }|
                    |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-Tokenr1   rX   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rR   r   headersr   r   rf   rg   rh   ri   r   rm   r   rp   rq   r   r7   )rA   r9   new_hmacencoded_signaturer   s        r,   r>   zSigV3Auth.add_auth   sd   #$&&&W_$$'",D"9"9"9! 	M%88O$:;6:6F6LGO238'..w776
 
 
 	/66w??@@@'(9(9::@@BBR)9)D R R.?.F.Fw.O.OR R 	 "W_44 672;.///r.   N)rB   rC   rD   rM   r>   rG   r.   r,   r   r      s2        ' ' '< < < < <r.   r   c                       e Zd ZdZdZd Zd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 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 0    || _         || _        || _        d S rK   )rR   _region_name_service_namerA   rR   service_nameregion_names       r,   rM   zSigV4Auth.__init__   s"    & ()r.   Fc                    |rAt          j        ||                    d          t                                                    }n@t          j        ||                    d          t                                                    }|S r0   )rf   rg   ri   r   	hexdigestrp   )rA   rw   msghexsigs        r,   _signzSigV4Auth._sign   sh     	F(3

7 3 3V<<FFHHCC(3

7 3 3V<<CCEEC
r.   c                     t                      }|j                                        D ]'\  }}|                                }|t          vr|||<   (d|vrt          |j                  |d<   |S )zk
        Select the headers from the request that need to be included
        in the StringToSign.
        r*   )r   r   itemslowerSIGNED_HEADERS_BLACKLISTr-   r(   )rA   r9   
header_mapnamerx   lnames         r,   headers_to_signzSigV4Auth.headers_to_sign   sy    
 !]]
"?0022 	* 	*KD%JJLLE444$)
5!## "0!<!<Jvr.   c                     |j         r|                     |j                   S |                     t          |j                            S rK   )rr   _canonical_query_string_params_canonical_query_string_urlr   r(   r@   s     r,   canonical_query_stringz SigV4Auth.canonical_query_string   sC    
 > 	K66w~FFF33HW[4I4IJJJr.   c           	      |   g }t          |t                    r|                                }|D ]G\  }}|                    t	          |d          t	          t          |          d          f           Hg }t          |          D ]\  }}|                    | d|             d                    |          }|S )Nz-_.~r\   r^   r_   )r3   r   r   rk   r   r8   rj   rl   )rA   rr   key_val_pairsrw   rx   sorted_key_valsr   s          r,   r   z(SigV4Auth._canonical_query_string_params  s    fg&& 	$\\^^F  	 	JC  s(((%E

*H*H*HI     !// 	5 	5JC""c#3#3E#3#34444!$/!:!:%%r.   c                 B   d}|j         rg }|j                             d          D ]2}|                    d          \  }}}|                    ||f           3g }t	          |          D ]\  }}|                    | d|             d                    |          }|S )Nr[   r_   r^   )queryrs   	partitionrk   rj   rl   )	rA   partsr   r   pairrw   _rx   r   s	            r,   r   z%SigV4Auth._canonical_query_string_url  s    !#; 	?M))#.. 3 3 $s 3 3Q$$c5\2222 O %]33 9 9
U&&#'7'7'7'78888%(XXo%>%>"%%r.   c                 *    g }t          t          |                    }|D ]]}d                     fd|                    |          D                       }|                    | dt          |                      ^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   B   K   | ]}                     |          V  d S rK   )_header_value).0vrA   s     r,   	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>0  sB        *+""1%%     r.   r#   rW   )rj   setrl   get_allrk   r   )rA   r   r   sorted_header_namesrw   rx   s   `     r,   canonical_headerszSigV4Auth.canonical_headers&  s     $S%9%9::& 	= 	=CHH    />/F/Fs/K/K    E NNc;;N5$9$9;;<<<<yy!!!r.   c                 P    d                     |                                          S )N )rl   rs   )rA   rx   s     r,   r   zSigV4Auth._header_value6  s     xx&&&r.   c                 x    t          d t          |          D                       }d                    |          S )Nc              3   b   K   | ]*}|                                                                 V  +d S rK   )r   rq   )r   ns     r,   r   z+SigV4Auth.signed_headers.<locals>.<genexpr>?  s4      IIq**IIIIIIr.   ;)rj   r   rl   )rA   r   r   s      r,   signed_headerszSigV4Auth.signed_headers>  s8    IIC4H4HIIIIIxx   r.   c                     |j                             di           }|                    d          }t          |t                    o|                    d          dk    S )Nchecksumrequest_algorithmintrailer)contextr&   r3   dict)rA   r9   checksum_context	algorithms       r,   _is_streaming_checksum_payloadz(SigV4Auth._is_streaming_checksum_payloadB  sT    "?..z2>>$(()<==	)T**Oy}}T/B/Bi/OOr.   c                     |                      |          rt          S |                     |          st          S |j        }|rt          |d          r|                                }t          j        |j	        t                    }t                      }t          |d          D ]}|                    |           |                                }|                    |           |S |r!t          |                                          S t           S )Nseekr.   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterrm   r   r   EMPTY_SHA256_HASH)rA   r9   request_bodypositionread_chunksizer   chunkhex_checksums           r,   payloadzSigV4Auth.payloadG  s   ..w77 	$5511':: 	$ $#| 	%GL&99 	%#((**H&.!> N xxHnc22 ' '&&&&#--//Lh''' 	% ,''11333$$r.   c                 p    |j                             d          sdS |j                            dd          S )Nr"   Tpayload_signing_enabled)r(   
startswithr   r&   r@   s     r,   r   z%SigV4Auth._should_sha256_sign_payloada  s:    {%%g.. 	4
 ""#<dCCCr.   c                    |j                                         g}|                     t          |j                  j                  }|                    |           |                    |                     |                     |                     |          }|                    | 	                    |          dz              |                    | 
                    |                     d|j        v r|j        d         }n|                     |          }|                    |           d                    |          S )NrW   X-Amz-Content-SHA256)rd   upper_normalize_url_pathr   r(   rb   rk   r   r   r   r   r   r   rl   )rA   r9   crrb   r   body_checksums         r,   canonical_requestzSigV4Auth.canonical_requestk  s   n""$$%''(=(=(BCC
		$
		$--g66777..w77
		$((99D@AAA
		$%%o66777!W_44#O,BCMM LL11M
		-   yy}}r.   c                 B    t          t          |          d          }|S )Nz/~r\   )r   r   )rA   rb   normalized_paths      r,   r   zSigV4Auth._normalize_url_pathz  s#     24 8 8tDDDr.   c                 (   | j         j        g}|                    |j        d         dd                    |                    | j                   |                    | j                   |                    d           d                    |          S N	timestampr      aws4_requestrV   )rR   r   rk   r   r   r   rl   rA   r9   scopes      r,   r   zSigV4Auth.scope~  s~    !,-W_[1!A#6777T&'''T'(((^$$$xxr.   c                    g }|                     |j        d         dd                    |                     | j                   |                     | j                   |                     d           d                    |          S r   )rk   r   r   r   rl   r   s      r,   credential_scopezSigV4Auth.credential_scope  su    W_[1!A#6777T&'''T'(((^$$$xxr.   c                 P   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   r1   rW   )rk   r   r   r   ri   r   rl   )rA   r9   r   stss       r,   rt   zSigV4Auth.string_to_sign  s     ""

7?;/000

4((11222

6+227;;<<FFHHIIIyy~~r.   c                 ^   | j         j        }|                     d|                                 |j        d         dd                   }|                     || j                  }|                     || j                  }|                     |d          }|                     ||d          S )NAWS4r   r   r   r   T)r   )rR   rh   r   ri   r   r   r   )rA   rt   r9   rw   k_datek_region	k_service	k_signings           r,   r   zSigV4Auth.signature  s    )C\\!!##W_[%A!A#%F
 
 ::fd&788JJx);<<	JJy.99	zz)^z>>>r.   c                 >   | j         t                      t                      }|                    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)rR   r   r   r   SIGV4_TIMESTAMPr   _modify_request_before_signingr   r`   ra   rt   r   _inject_signature_to_request)rA   r9   datetime_nowr   rt   r   s         r,   r>   zSigV4Auth.add_auth  s    #$&&&+--'3'<'<_'M'M$ 	++G444 227;;;<<<,.?@@@,,W6GHH(.999NN>7;;	%y111))'9=====r.   c                 "   d|                      |           g}|                     |          }|                    d|                     |                      |                    d|            d                    |          |j        d<   |S )NzAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=, Authorization)r   r   rk   r   rl   r   )rA   r9   r   auth_strr   s        r,   r  z&SigV4Auth._inject_signature_to_request  s    H4::g3F3FHHI..w77CT00AACC	
 	
 	
 	0Y00111+/99X+>+>(r.   c                 .   d|j         v r|j         d= |                     |           | j        j        r%d|j         v r|j         d= | j        j        |j         d<   |j                            dd          s"d|j         v r|j         d= t          |j         d<   d S d S )Nr  r   r   Tr   )r   _set_necessary_date_headersrR   r   r   r&   r   r@   s     r,   r  z(SigV4Auth._modify_request_before_signing  s    go--0((111! 	M%88O$:;6:6F6LGO23""#<dCC 	G%88O$:;6FGO2333	G 	Gr.   c                    d|j         v r|j         d= t          j                            |j        d         t                    }t          t          t          j        |	                                                              |j         d<   d|j         v r
|j         d= d S d S d|j         v r|j         d= |j        d         |j         d<   d S )Nr   r   
X-Amz-Date)
r   datetimestrptimer   r  r   intcalendartimegm	timetuple)rA   r9   datetime_timestamps      r,   r  z%SigV4Auth._set_necessary_date_headers  s     W_$$'!)!2!;!;,o" " '1HO$6$@$@$B$BCCDD' 'GOF# w..OL111 /. w..OL1,3OK,HGOL)))r.   N)F)rB   rC   rD   r   rE   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r>   r  r  r  rG   r.   r,   r   r      s         O* * *      K K K& & &"& & & " " " ' ' '! ! !P P P
% % %4D D D        
 
 
? ? ?> > >$  G G GI I I I Ir.   r   c                   .     e Zd Z fdZ fdZd Z xZS )S3SigV4Authc                     t                                          |           d|j        v r|j        d= |                     |          |j        d<   d S )Nr   )superr  r   r   rA   r9   	__class__s     r,   r  z*S3SigV4Auth._modify_request_before_signing  sR    ..w777!W_44 6726,,w2G2G.///r.   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   zContent-MD5r   r   r   headerr   r"   Thas_streaming_inputF)
r   r&   getattrr3   r   r(   r   r   r"  r   )	rA   r9   r&  	s3_configsign_payloadchecksum_headerr   r   r$  s	           r,   r   z'S3SigV4Auth._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                     |S rK   rG   rA   rb   s     r,   r   zS3SigV4Auth._normalize_url_path      r.   )rB   rC   rD   r  r   r   __classcell__r$  s   @r,   r   r     sf        H H H H H'< '< '< '< '<R      r.   r   c                   6     e Zd ZdZ fdZ fdZ fdZ xZS )S3ExpressAuthTc                \    t                                          |||           || _        d S rK   )r"  rM   _identity_cache)rA   rR   r   r   identity_cacher$  s        r,   rM   zS3ExpressAuth.__init__  s/     	lK@@@-r.   c                 J    t                                          |           d S rK   )r"  r>   r#  s     r,   r>   zS3ExpressAuth.add_auth!  s!    !!!!!r.   c                     t                                          |           d|j        vr| j        j        |j        d<   d|j        v r
|j        d= d S d S )Nzx-amz-s3session-tokenr   )r"  r  r   rR   r   r#  s     r,   r  z,S3ExpressAuth._modify_request_before_signing$  sa    ..w777"'/997;7G7MGO34!W_44 6777 54r.   )rB   rC   rD   REQUIRES_IDENTITY_CACHErM   r>   r  r1  r2  s   @r,   r4  r4    sp        ". . . . ." " " " "8 8 8 8 8 8 8 8 8r.   r4  c                       e Zd ZdZd ZdS )S3ExpressPostAuthTc                    t                      }|                    t                    |j        d<   i }|j                            dd           |j        d         }i }g }|j                            dd           +|j        d         }|                    dd           |d         }||d<   d|d<   |                     |          |d<   |j        d         |d<   |                    ddi           |                    d|                     |          i           |                    d|j        d         i           | j        j        0| j        j        |d	<   |                    d	| j        j        i           t          j
        t          j        |                              d
                                        d
          |d<   |                     |d         |          |d<   ||j        d<   ||j        d<   d S )Nr   s3-presign-post-fieldss3-presign-post-policy
conditionsr  x-amz-algorithmx-amz-credential
x-amz-dateX-Amz-S3session-Tokenr1   policyx-amz-signaturer   r   r  r   r&   r   rk   rR   r   rn   ro   r5   dumpsri   r7   r   rA   r9   r  fieldsrE  r@  s         r,   r>   zS3ExpressPostAuth.add_auth0  s   +--'3'<'<_'M'M$?7>>J_%=>F
?7>>J_%=>Fzz,--9#L1
)|$6 !%)ZZ%8%8!"&{;|,.@ABBB-tzz'/B/BCDDD<)EFGGG!-.2.>.DF*+($*:*@A  
 "+Jv%%g..
 

&// 	x %)NN6(3CW$M$M !4:014:0111r.   N)rB   rC   rD   r:  r>   rG   r.   r,   r<  r<  -  s)        "'; '; '; '; ';r.   r<  c                   D     e Zd ZdZdZed fd
Zd Zd Zd Zd Z	 xZ
S )	S3ExpressQueryAuthi,  T)expiresc                `    t                                          ||||           || _        d S )N)r7  r"  rM   _expires)rA   rR   r   r   r7  rM  r$  s         r,   rM   zS3ExpressQueryAuth.__init__^  s?     	)	 	 	
 	
 	
  r.   c                 2   |j                             d          }d}||k    r|j         d= |                     |                     |                    }d|                     |          |j        d         | j        |d}| j        j        | j        j        |d<   t          |j
                  }t          |j        d          }d	 |                                D             }|j        r!|                    |j                   i |_        d
}	|j        r)|                    t#          |                     d
|_        |rt%          |          dz   }	|	 t%          |           }
|}|d         |d         |d         |
|d         f}t'          |          |_
        d S )Ncontent-type0application/x-www-form-urlencoded; charset=utf-8r  r   zX-Amz-AlgorithmzX-Amz-Credentialr  zX-Amz-ExpireszX-Amz-SignedHeadersrD  Tkeep_blank_valuesc                 &    i | ]\  }}||d          S r   rG   r   kr   s      r,   
<dictcomp>zES3ExpressQueryAuth._modify_request_before_signing.<locals>.<dictcomp>  "    EEE$!Qa1EEEr.   r[   r_   r            r   r&   r   r   r   r   rP  rR   r   r   r(   r   r   r   rr   rm   r2   r:   r   r   )rA   r9   content_typeblocklisted_content_typer   auth_paramsr)   query_string_parts
query_dictoperation_paramsnew_query_stringpnew_url_partss                r,   r  z1S3ExpressQueryAuth._modify_request_before_signingo  s    **>::> 	! 333/
 ,,T-A-A'-J-JKK  2 $

7 3 3!/+6!]#1
 
 !-373C3IK/0 W[))	 &ioNNNEE*<*B*B*D*DEEE
> 	 gn---GN < 	 /88999GL 	I6zBBSHG!8!E!EGG 	 1qtQqT+;QqTB //r.   c                 ,    |xj         d| z  c_         d S Nz&X-Amz-Signature=r(   rA   r9   r   s      r,   r  z/S3ExpressQueryAuth._inject_signature_to_request  !     	69666r.   c                     |S rK   rG   r/  s     r,   r   z&S3ExpressQueryAuth._normalize_url_path  r0  r.   c                     t           S rK   r   r@   s     r,   r   zS3ExpressQueryAuth.payload  
    
  r.   )rB   rC   rD   DEFAULT_EXPIRESr:  rM   r  r  r   r   r1  r2  s   @r,   rL  rL  Z  s        O"               "?0 ?0 ?0B7 7 7               r.   rL  c                   2     e Zd ZdZef fd	Zd Zd Z xZS )SigV4QueryAuth  c                 \    t                                          |||           || _        d S rK   rO  )rA   rR   r   r   rM  r$  s        r,   rM   zSigV4QueryAuth.__init__  s,     	lK@@@r.   c                 2   |j                             d          }d}||k    r|j         d= |                     |                     |                    }d|                     |          |j        d         | j        |d}| j        j        | j        j        |d<   t          |j
                  }t          |j        d          }d	 |                                D             }|j        r!|                    |j                   i |_        d
}	|j        r)|                    t#          |                     d
|_        |rt%          |          dz   }	|	 t%          |           }
|}|d         |d         |d         |
|d         f}t'          |          |_
        d S )NrR  rS  r  r   rT  r   TrU  c                 &    i | ]\  }}||d          S rX  rG   rY  s      r,   r[  zASigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>  r\  r.   r[   r_   r   r]  r^  r_  r`  )rA   r9   ra  blacklisted_content_typer   rc  r)   rd  re  rf  rg  rh  ri  s                r,   r  z-SigV4QueryAuth._modify_request_before_signing  s    **>::> 	! 333/
 ,,T-A-A'-J-JKK  2 $

7 3 3!/+6!]#1
 
 !-262B2HK./ W[))	 &ioNNNEE*<*B*B*D*DEEE
> 	 gn---GN < 	 /88999GL 	I6zBBSHG!8!E!EGG 	 1qtQqT+;QqTB //r.   c                 ,    |xj         d| z  c_         d S rk  rl  rm  s      r,   r  z+SigV4QueryAuth._inject_signature_to_request  rn  r.   )rB   rC   rD   rs  rM   r  r  r1  r2  s   @r,   ru  ru    sg        O ?N           ?0 ?0 ?0B7 7 7 7 7 7 7r.   ru  c                       e Zd ZdZd Z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                     |S rK   rG   r/  s     r,   r   z$S3SigV4QueryAuth._normalize_url_path  r0  r.   c                     t           S rK   rq  r@   s     r,   r   zS3SigV4QueryAuth.payload#  rr  r.   N)rB   rC   rD   r   r   r   rG   r.   r,   r}  r}    s<        	 	           r.   r}  c                       e Zd ZdZd ZdS )S3SigV4PostAuthz
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                    t                      }|                    t                    |j        d<   i }|j                            dd           |j        d         }i }g }|j                            dd           +|j        d         }|                    dd           |d         }||d<   d|d<   |                     |          |d<   |j        d         |d<   |                    ddi           |                    d|                     |          i           |                    d|j        d         i           | j        j        0| j        j        |d	<   |                    d	| j        j        i           t          j
        t          j        |                              d
                                        d
          |d<   |                     |d         |          |d<   ||j        d<   ||j        d<   d S )Nr   r>  r?  r@  r  rA  rB  rC  x-amz-security-tokenr1   rE  rF  rG  rI  s         r,   r>   zS3SigV4PostAuth.add_auth3  s   +--'3'<'<_'M'M$?7>>J_%=>F
?7>>J_%=>Fzz,--9#L1
)|$6 !%)ZZ%8%8!"&{;|,.@ABBB-tzz'/B/BCDDD<)EFGGG!--1-=-CF)*5t7G7MNOOO "+Jv%%g..
 

&// 	x %)NN6(3CW$M$M !4:014:0111r.   NrB   rC   rD   r   r>   rG   r.   r,   r  r  +  s-         %; %; %; %; %;r.   r  c                   d    e Zd Zg dZddZd Zd Zd Zd ZddZ		 dd	Z
	 dd
Zd Zd Zd ZdS )
HmacV1Auth)$
accelerateaclcorsdefaultObjectAcllocationlogging
partNumberrE  requestPaymenttorrent
versioning	versionIdversionswebsiteuploadsuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdelete	lifecycletaggingrestorestorageClassnotificationreplicationr  	analyticsmetrics	inventoryselectzselect-typezobject-lockNc                     || _         d S rK   rQ   r   s       r,   rM   zHmacV1Auth.__init__  rT   r.   c                 N   t          j        | j        j                            d          t
                    }|                    |                    d                     t          |                                          	                                
                    d          S )Nr1   rX   )rf   rg   rR   rh   ri   r   rm   r   rp   rq   r7   )rA   rt   r   s      r,   sign_stringzHmacV1Auth.sign_string  s    8'..w774
 
 
 	--g667778??,,--3355<<WEEEr.   c                 \   g d}g }d|v r|d= |                                  |d<   |D ]q}d}|D ]S}|                                }||         5||k    r/|                    ||                                                    d}T|s|                    d           rd                    |          S )N)content-md5rR  dater   FTr[   rW   )	_get_dater   rk   rq   rl   )rA   r   interesting_headershoiihfoundrw   lks           r,   canonical_standard_headersz%HmacV1Auth.canonical_standard_headers  s    EEEW..**% 	 	BE ! !YY[[3<+bJJws|1133444 E 

2yy~~r.   c                    g }i }|D ]h}|                                 }||         J|                    d          r5d                    d |                    |          D                       ||<   it	          |                                          }|D ]"}|                    | d||                     #d                    |          S )Nx-amz-r   c              3   >   K   | ]}|                                 V  d S rK   )rq   )r   r   s     r,   r   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s;       2 2&'		2 2 2 2 2 2r.   r#   rW   )r   r   rl   r   rj   keysrk   )rA   r   r  custom_headersrw   r  sorted_header_keyss          r,   canonical_custom_headersz#HmacV1Auth.canonical_custom_headers  s     	 	CBs|'==** ), 2 2+2??3+?+?2 2 2 * *N2& $N$7$7$9$9::% 	7 	7CJJ#55s 3556666yy~~r.   c                 f    t          |          dk    r|S |d         t          |d                   fS )z(
        TODO: Do we need this?
        r]  r   )rc   r   )rA   nvs     r,   	unquote_vzHmacV1Auth.unquote_v  s1     r77a<<IqE72a5>>**r.   c                 T    ||}n|j         }|j        r|j                            d          }d |D             } fd|D             }t          |          dk    rL|                    t          d                     d |D             }|dz  }|d                    |          z  }|S )Nr_   c                 :    g | ]}|                     d d          S )r^   r]  rs   r   as     r,   
<listcomp>z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s$    000q1773??000r.   c                 X    g | ]&}|d          j         v                     |          'S rX  )QSAOfInterestr  )r   r  rA   s     r,   r  z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s=       &'!A$$:L2L2Lq!!2L2L2Lr.   r   )rw   c                 8    g | ]}d                      |          S )r^   )rl   r  s     r,   r  z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s"    000qsxx{{000r.   ?)rb   r   rs   rc   sortr   rl   )rA   rs   	auth_pathbufqsas   `    r,   canonical_resourcezHmacV1Auth.canonical_resource  s      CC*C; 
	%+##C((C00C000C   +.  C 3xx!||Z]]+++00C000s
sxx}}$
r.   c                     |                                 dz   }||                     |          dz   z  }|                     |          }|r||dz   z  }||                     ||          z  }|S )NrW   r  )r   r  r  r  )rA   rd   rs   r   rM  r  csr  s           r,   canonical_stringzHmacV1Auth.canonical_string  s     \\^^d"
d--g66==66w?? 	(.4''B
d%%ey%AAA	r.   c                     | j         j        r|d= | j         j        |d<   |                     ||||          }t                              d|           |                     |          S )Nr  r  r  )rR   r   r  r`   ra   r  )rA   rd   rs   r   rM  r  rt   s          r,   get_signaturezHmacV1Auth.get_signature  s{     ! 	E./.2.>.DG*+..E7i / 
 
 	(.999///r.   c                 :   | j         t          t                              d           t	          |j                  }t                              d|j                   |                     |j        ||j        |j	                  }| 
                    ||           d S )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr  )rR   r   r`   ra   r   r(   rd   r  r   r  _inject_signature)rA   r9   rs   r   s       r,   r>   zHmacV1Auth.add_auth  s    #$$?@@@%%.???&&NE7?g>O ' 
 
	 	w	22222r.   c                 "    t          d          S )NTr   r   rA   s    r,   r  zHmacV1Auth._get_date  s    &&&&r.   c                 `    d|j         v r|j         d= d| j        j         d| }||j         d<   d S )Nr  zAWS r#   )r   rR   r   )rA   r9   r   auth_headers       r,   r  zHmacV1Auth._inject_signature  sH    go-- 0FT-8FF9FF+6(((r.   )NNrK   )rB   rC   rD   r  rM   r  r  r  r  r  r  r  r>   r  r  rG   r.   r,   r  r  [  s        % % %MN' ' ' 'F F F  "  + + +   6 ?C	 	 	 	 ?C
0 
0 
0 
0	3 	3 	3' ' '7 7 7 7 7r.   r  c                   ,    e Zd ZdZdZefdZd Z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

    rv  c                 "    || _         || _        d S rK   )rR   rP  )rA   rR   rM  s      r,   rM   zHmacV1QueryAuth.__init__  s    &r.   c                     t          t          t          j                    t          | j                  z                       S rK   )r8   r  r   rP  r  s    r,   r  zHmacV1QueryAuth._get_date  s-    3ty{{S%7%7788999r.   c                    i }| j         j        |d<   ||d<   |j        D ]V}|                                }|dk    r|j        d         |d<   -|                    d          s|dv r|j        |         ||<   Wt          |          }t          |j                  }|d         r|d          d| }|d	         |d
         |d         ||d         f}t          |          |_        d S )Nr   rZ   r   Expiresr  )r  rR     r_   r   r]  r^  r_  )	rR   r   r   r   r   r   r   r(   r   )	rA   r9   r   re  
header_keyr  rg  rh  ri  s	            r,   r  z!HmacV1QueryAuth._inject_signature  s   
'+'7'B
#$"+
;!/ 	5 	5J!!##B V##(/(?
9%% x(( 5B 3 - - ")!4
2 3:>> W[!!Q4 	< #$A$;;)9;;1qtQqT+;QqTB //r.   N)rB   rC   rD   r   rs  rM   r  r  rG   r.   r,   r  r    sZ          O,;        : : :0 0 0 0 0r.   r  c                       e Zd ZdZ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                    i }|j                             dd           |j         d         }i }g }|j                             dd           +|j         d         }|                    dd           |d         }||d<   | j        j        |d<   | j        j        0| j        j        |d<   |                    d| j        j        i           t          j        t          j	        |          
                    d                                        d          |d<   |                     |d                   |d<   ||j         d<   ||j         d<   d S )	Nr>  r?  r@  r   r  r1   rE  r   )r   r&   rR   r   r   rk   rn   ro   r5   rH  ri   r7   r  )rA   r9   rJ  rE  r@  s        r,   r>   zHmacV1PostAuth.add_authB  sT   ?7>>J_%=>F
?7>>J_%=>Fzz,--9#L1
)|#'#3#> !--1-=-CF)*5t7G7MNOOO "+Jv%%g..
 

&// 	x #..vh/?@@{4:014:0111r.   Nr  rG   r.   r,   r  r  9  s-         ; ; ; ; ;r.   r  c                       e Zd ZdZ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                     | j         t                      d| j         j         }d|j        v r|j        d= ||j        d<   d S )NzBearer r  )rL   r   r   r   )rA   r9   r  s      r,   r>   zBearerAuth.add_authi  sQ    ?""$$$7 577go--0+6(((r.   Nr  rG   r.   r,   r  r  a  s-         7 7 7 7 7r.   r  c                     | D ]J}|dk    rt           |         c S |t           v rt           |         }|t          v r|c S ;t          |          t          |           )Nsmithy.api#noAuthsignature_version)AUTH_TYPE_TO_SIGNATURE_VERSIONAUTH_TYPE_MAPSr   r   )
auth_trait	auth_typer  s      r,   resolve_auth_typer  s  s     L L	+++1)<<<<888 >y I N22(((( 3 /KKKK
*Z
H
H
HHr.   c                    d |D             d | D             }|rt                               d|           | z   }fdt                              |          D             }|D ]>}|dk    rt          |         c S t                              |          }|t          v r|c S ?t          d                    t                                        )Nc                 D    g | ]}|                     d           d         S #r  r   r'   s     r,   r  z2resolve_auth_scheme_preference.<locals>.<listcomp>  s)    JJJ6c**2.JJJr.   c                 $    g | ]}|t           v|S rG   )AUTH_PREF_TO_SIGNATURE_VERSIONr  s     r,   r  z2resolve_auth_scheme_preference.<locals>.<listcomp>  s.       777 	777r.   z/Unsupported auth schemes in preference list: %rc                     g | ]}|v |	S rG   rG   )r   r'   service_supporteds     r,   r  z2resolve_auth_scheme_preference.<locals>.<listcomp>  s/       &&& 	&&&r.   noAuthr  r  )
r`   ra   r   fromkeysr  r&   r  r   rl   rj   )preference_listauth_optionsunsupportedcombinedprioritized_schemesr'   sig_versionr  s          @r,   resolve_auth_scheme_preferencer    s)   JJ\JJJ %  K
  
={	
 	
 	
 !22H   mmH--   &  X1&9999488@@.(( ) +))F+<$=$=>>   r.   )v2v3v3httpsr'  zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postbearer)CRT_AUTH_TYPE_MAPS)v4zv4-querys3v4z
s3v4-queryr  v4ar   none)zaws.auth#sigv4zaws.auth#sigv4azsmithy.api#httpBearerAuthr  c                 L    i | ]!\  }}|                     d           d         |"S r  r  )r   auth_schemer  s      r,   r[  r[    sA     " " " [ c2" " "r.   )Krn   r  r  r   rf   r5   r  r   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr	   r
   r   r   r   r   r   r   r   r   r   botocore.exceptionsr   r   r   r   botocore.utilsr   r   r   	getLoggerrB   r`   r   r   r   r  r   r   r   r-   r:   r<   rI   rO   r   r   r   r4  r<  rL  ru  r}  r  r  r  r  r  r  r  r  botocore.crt.authr  rm   r  r   r  rG   r.   r,   <module>r     s              # # # # # # " " " " " "                                                                    
	8	$	$ G  
"    & %I "  &
 
 
. . . . . . . .% % % % %* % % %: : : : :
 : : :z< < < < <
 < < <8JI JI JI JI JI
 JI JI JIZ3 3 3 3 3) 3 3 3l8 8 8 8 8K 8 8 8**; *; *; *; *; *; *; *;Ze  e  e  e  e  e  e  e PN7 N7 N7 N7 N7Y N7 N7 N7b         ~      0-; -; -; -; -;i -; -; -;`f7 f7 f7 f7 f7 f7 f7 f7R20 20 20 20 20j 20 20 20j%; %; %; %; %;Z %; %; %;P7 7 7 7 7 7 7 7$
I 
I 
I  B 

%(!,!2   444444,----&*		
 	
   !)	" " " "$B$H$H$J$J" " "   r.   