
    io                        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)
connectionexpectz
keep-alivezproxy-authenticatezproxy-authorizationtetrailerztransfer-encodingupgradez
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       T/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/botocore/auth.py_host_from_urlr1   Q   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)requestr6   s     r0   _get_body_as_dictr>   d   s`    
 <D$  z$++g..//	D#		  z$Kr2   c                       e Zd ZdZdZd ZdS )
BaseSignerFc                      t          d          )Nadd_auth)NotImplementedErrorselfr=   s     r0   rB   zBaseSigner.add_authu   s    !*---r2   N)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENrB    r2   r0   r@   r@   q   s-        ON. . . . .r2   r@   c                       e Zd ZdZ	 d ZdS )TokenSignerTc                     || _         d S N)
auth_token)rE   rP   s     r0   __init__zTokenSigner.__init__   s    $r2   N)rF   rG   rH   rJ   rQ   rK   r2   r0   rM   rM   y   s-        N% % % % %r2   rM   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 rO   credentialsrE   rV   s     r0   rQ   zSigV2Auth.__init__       &r2   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   /
r5   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r,   pathlenmethodnetlochmacnewrV   
secret_keyencoder   sortedr<   r   appendjoinupdatebase64	b64encodedigeststripr;   )rE   r=   paramssplitrf   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s                 r0   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r2   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SecurityTokenr^   )rV   r   r6   rv   
access_keytimestrftimeISO8601gmtimetokenr   )rE   r=   rv   r   	signatures        r0   rB   zSigV2Auth.add_auth   s     #$&&&< 	$\FF ^F#'#3#> %(!"$0 !"mGT[]]CC{! 	=&*&6&<F?#++GV<<I'{r2   N)rF   rG   rH   __doc__rQ   r   rB   rK   r2   r0   rS   rS      sK         ' ' '  8    r2   rS   c                       e Zd Zd Zd ZdS )	SigV3Authc                     || _         d S rO   rU   rW   s     r0   rQ   zSigV3Auth.__init__   rX   r2   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-Tokenr5   r\   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rV   r   headersr   r   rj   rk   rl   rm   r   rq   r   rt   ru   r   r;   )rE   r=   new_hmacencoded_signaturer   s        r0   rB   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;.///r2   N)rF   rG   rH   rQ   rB   rK   r2   r0   r   r      s2        ' ' '< < < < <r2   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 rO   )rV   _region_name_service_namerE   rV   service_nameregion_names       r0   rQ   zSigV4Auth.__init__   s"    & ()r2   Fc                    |rAt          j        ||                    d          t                                                    }n@t          j        ||                    d          t                                                    }|S r4   )rj   rk   rm   r   	hexdigestrt   )rE   r{   msghexsigs        r0   _signzSigV4Auth._sign   sh     	F(3

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

7 3 3V<<CCEEC
r2   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_BLACKLISTr1   r,   )rE   r=   
header_mapnamer|   lnames         r0   headers_to_signzSigV4Auth.headers_to_sign   sy    
 !]]
"?0022 	* 	*KD%JJLLE444$)
5!## "0!<!<Jvr2   c                     |j         r|                     |j                   S |                     t          |j                            S rO   )rv   _canonical_query_string_params_canonical_query_string_urlr   r,   rD   s     r0   canonical_query_stringz SigV4Auth.canonical_query_string  sC    
 > 	K66w~FFF33HW[4I4IJJJr2   c           	      |   g }t          |t                    r|                                }|D ]G\  }}|                    t	          |d          t	          t          |          d          f           Hg }t          |          D ]\  }}|                    | d|             d                    |          }|S )Nz-_.~r`   rb   rc   )r7   r   r   ro   r   r<   rn   rp   )rE   rv   key_val_pairsr{   r|   sorted_key_valsr   s          r0   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!$/!:!:%%r2   c                 B   d}|j         rg }|j                             d          D ]2}|                    d          \  }}}|                    ||f           3g }t	          |          D ]\  }}|                    | d|             d                    |          }|S )Nr_   rc   rb   )queryrw   	partitionro   rn   rp   )	rE   partsr   r   pairr{   _r|   r   s	            r0   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%>%>"%%r2   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 rO   )_header_value).0vrE   s     r0   	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>7  sB        *+""1%%     r2   r'   r[   )rn   setrp   get_allro   r   )rE   r   r   sorted_header_namesr{   r|   s   `     r0   canonical_headerszSigV4Auth.canonical_headers-  s     $S%9%9::& 	= 	=CHH    />/F/Fs/K/K    E NNc;;N5$9$9;;<<<<yy!!!r2   c                 P    d                     |                                          S )N )rp   rw   )rE   r|   s     r0   r   zSigV4Auth._header_value=  s     xx&&&r2   c                 x    t          d t          |          D                       }d                    |          S )Nc              3   b   K   | ]*}|                                                                 V  +d S rO   )r   ru   )r   ns     r0   r   z+SigV4Auth.signed_headers.<locals>.<genexpr>F  s4      IIq**IIIIIIr2   ;)rn   r   rp   )rE   r   r   s      r0   signed_headerszSigV4Auth.signed_headersE  s8    IIC4H4HIIIIIxx   r2   c                     |j                             di           }|                    d          }t          |t                    o|                    d          dk    S )Nchecksumrequest_algorithminr   )contextr*   r7   dict)rE   r=   checksum_context	algorithms       r0   _is_streaming_checksum_payloadz(SigV4Auth._is_streaming_checksum_payloadI  sT    "?..z2>>$(()<==	)T**Oy}}T/B/Bi/OOr2   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seekr2   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterrq   r   r   EMPTY_SHA256_HASH)rE   r=   request_bodypositionread_chunksizer   chunkhex_checksums           r0   payloadzSigV4Auth.payloadN  s   ..w77 	$5511':: 	$ $#| 	%GL&99 	%#((**H&.!> N xxHnc22 ' '&&&&#--//Lh''' 	% ,''11333$$r2   c                 p    |j                             d          sdS |j                            dd          S )Nr&   Tpayload_signing_enabled)r,   
startswithr   r*   rD   s     r0   r   z%SigV4Auth._should_sha256_sign_payloadh  s:    {%%g.. 	4
 ""#<dCCCr2   c                    |j                                         g}|                     t          |j                  j                  }|                    |           |                    |                     |                     |                     |          }|                    | 	                    |          dz              |                    | 
                    |                     d|j        v r|j        d         }n|                     |          }|                    |           d                    |          S )Nr[   X-Amz-Content-SHA256)rh   upper_normalize_url_pathr   r,   rf   ro   r   r   r   r   r   r   rp   )rE   r=   crrf   r   body_checksums         r0   canonical_requestzSigV4Auth.canonical_requestr  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}}r2   c                 B    t          t          |          d          }|S )Nz/~r`   )r   r   )rE   rf   normalized_paths      r0   r   zSigV4Auth._normalize_url_path  s#     24 8 8tDDDr2   c                 (   | j         j        g}|                    |j        d         dd                    |                    | j                   |                    | j                   |                    d           d                    |          S N	timestampr      aws4_requestrZ   )rV   r   ro   r   r   r   rp   rE   r=   scopes      r0   r  zSigV4Auth.scope  s~    !,-W_[1!A#6777T&'''T'(((^$$$xxr2   c                    g }|                     |j        d         dd                    |                     | j                   |                     | j                   |                     d           d                    |          S r   )ro   r   r   r   rp   r   s      r0   credential_scopezSigV4Auth.credential_scope  su    W_[1!A#6777T&'''T'(((^$$$xxr2   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   r5   r[   )ro   r   r  r   rm   r   rp   )rE   r=   r   stss       r0   rx   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~~r2   c                 ^   | j         j        }|                     d|                                 |j        d         dd                   }|                     || j                  }|                     || j                  }|                     |d          }|                     ||d          S )NAWS4r   r   r   r   T)r   )rV   rl   r   rm   r   r   r   )rE   rx   r=   r{   k_datek_region	k_service	k_signings           r0   r   zSigV4Auth.signature  s    )C\\!!##W_[%A!A#%F
 
 ::fd&788JJx);<<	JJy.99	zz)^z>>>r2   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)rV   r   r   r   SIGV4_TIMESTAMPr   _modify_request_before_signingr   rd   re   rx   r   _inject_signature_to_request)rE   r=   datetime_nowr   rx   r   s         r0   rB   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=====r2   c                 "   d|                      |           g}|                     |          }|                    d|                     |                      |                    d|            d                    |          |j        d<   |S )NzAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=, Authorization)r  r   ro   r   rp   r   )rE   r=   r   auth_strr   s        r0   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+>+>(r2   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_headersrV   r   r   r*   r   rD   s     r0   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r2   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)rE   r=   datetime_timestamps      r0   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)))r2   N)F)rF   rG   rH   r   rI   rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rx   r   rB   r  r  r  rK   r2   r0   r   r      s         O* * *      K K K& & &"& & & " " " ' ' '! ! !P P P
% % %4D D D        
 
 
? ? ?> > >$  G G GI I I I Ir2   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   rE   r=   	__class__s     r0   r  z*S3SigV4Auth._modify_request_before_signing  sR    ..w777!W_44 6726,,w2G2G.///r2   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*   getattrr7   r   r,   r   r   r%  r   )	rE   r=   r)  	s3_configsign_payloadchecksum_headerr   r   r'  s	           r0   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;;;r2   c                     |S rO   rK   rE   rf   s     r0   r   zS3SigV4Auth._normalize_url_path      r2   )rF   rG   rH   r  r   r   __classcell__r'  s   @r0   r#  r#    sf        H H H H H'< '< '< '< '<R      r2   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 rO   )r%  rQ   _identity_cache)rE   rV   r   r   identity_cacher'  s        r0   rQ   zS3ExpressAuth.__init__"  s/     	lK@@@-r2   c                 J    t                                          |           d S rO   )r%  rB   r&  s     r0   rB   zS3ExpressAuth.add_auth(  s!    !!!!!r2   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   rV   r   r&  s     r0   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4r2   )rF   rG   rH   REQUIRES_IDENTITY_CACHErQ   rB   r  r4  r5  s   @r0   r7  r7    sp        ". . . . ." " " " "8 8 8 8 8 8 8 8 8r2   r7  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-Tokenr5   policyx-amz-signaturer   r   r  r   r*   r  ro   rV   r   rr   rs   r9   dumpsrm   r;   r   rE   r=   r  fieldsrH  rC  s         r0   rB   zS3ExpressPostAuth.add_auth7  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1r2   N)rF   rG   rH   r=  rB   rK   r2   r0   r?  r?  4  s)        "'; '; '; '; ';r2   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)r:  r%  rQ   _expires)rE   rV   r   r   r:  rP  r'  s         r0   rQ   zS3ExpressQueryAuth.__init__e  s?     	)	 	 	
 	
 	
  r2   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-SignedHeadersrG  Tkeep_blank_valuesc                 &    i | ]\  }}||d          S r   rK   r   kr   s      r0   
<dictcomp>zES3ExpressQueryAuth._modify_request_before_signing.<locals>.<dictcomp>  "    EEE$!Qa1EEEr2   r_   rc   r            r   r*   r   r   r  r   rS  rV   r   r   r,   r   r   r   rv   rq   r6   r>   r   r   )rE   r=   content_typeblocklisted_content_typer   auth_paramsr-   query_string_parts
query_dictoperation_paramsnew_query_stringpnew_url_partss                r0   r  z1S3ExpressQueryAuth._modify_request_before_signingv  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 //r2   c                 ,    |xj         d| z  c_         d S Nz&X-Amz-Signature=r,   rE   r=   r   s      r0   r  z/S3ExpressQueryAuth._inject_signature_to_request  !     	69666r2   c                     |S rO   rK   r2  s     r0   r   z&S3ExpressQueryAuth._normalize_url_path  r3  r2   c                     t           S rO   r   rD   s     r0   r   zS3ExpressQueryAuth.payload  
    
  r2   )rF   rG   rH   DEFAULT_EXPIRESr=  rQ   r  r  r   r   r4  r5  s   @r0   rO  rO  a  s        O"               "?0 ?0 ?0B7 7 7               r2   rO  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 rO   rR  )rE   rV   r   r   rP  r'  s        r0   rQ   zSigV4QueryAuth.__init__  s,     	lK@@@r2   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 )NrU  rV  r  r   rW  r   TrX  c                 &    i | ]\  }}||d          S r[  rK   r\  s      r0   r^  zASigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>  r_  r2   r_   rc   r   r`  ra  rb  rc  )rE   r=   rd  blacklisted_content_typer   rf  r-   rg  rh  ri  rj  rk  rl  s                r0   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 //r2   c                 ,    |xj         d| z  c_         d S rn  ro  rp  s      r0   r  z+SigV4QueryAuth._inject_signature_to_request  rq  r2   )rF   rG   rH   rv  rQ   r  r  r4  r5  s   @r0   rx  rx    sg        O ?N           ?0 ?0 ?0B7 7 7 7 7 7 7r2   rx  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 rO   rK   r2  s     r0   r   z$S3SigV4QueryAuth._normalize_url_path&  r3  r2   c                     t           S rO   rt  rD   s     r0   r   zS3SigV4QueryAuth.payload*  ru  r2   N)rF   rG   rH   r   r   r   rK   r2   r0   r  r    s<        	 	           r2   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   rA  rB  rC  r  rD  rE  rF  x-amz-security-tokenr5   rH  rI  rJ  rL  s         r0   rB   zS3SigV4PostAuth.add_auth:  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1r2   NrF   rG   rH   r   rB   rK   r2   r0   r  r  2  s-         %; %; %; %; %;r2   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
partNumberrH  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 rO   rU   r   s       r0   rQ   zHmacV1Auth.__init__  rX   r2   c                 N   t          j        | j        j                            d          t
                    }|                    |                    d                     t          |                                          	                                
                    d          S )Nr5   r\   )rj   rk   rV   rl   rm   r   rq   r   rt   ru   r;   )rE   rx   r   s      r0   sign_stringzHmacV1Auth.sign_string  s    8'..w774
 
 
 	--g667778??,,--3355<<WEEEr2   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-md5rU  dater   FTr_   r[   )	_get_dater   ro   ru   rp   )rE   r   interesting_headershoiihfoundr{   lks           r0   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~~r2   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 rO   )ru   )r   r   s     r0   r   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s;       2 2&'		2 2 2 2 2 2r2   r'   r[   )r   r   rp   r   rn   keysro   )rE   r   r  custom_headersr{   r  sorted_header_keyss          r0   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~~r2   c                 f    t          |          dk    r|S |d         t          |d                   fS )z(
        TODO: Do we need this?
        r`  r   )rg   r   )rE   nvs     r0   	unquote_vzHmacV1Auth.unquote_v  s1     r77a<<IqE72a5>>**r2   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 )Nrc   c                 :    g | ]}|                     d d          S )rb   r`  rw   r   as     r0   
<listcomp>z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s$    000q1773??000r2   c                 X    g | ]&}|d          j         v                     |          'S r[  )QSAOfInterestr  )r   r  rE   s     r0   r  z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s=       &'!A$$:L2L2Lq!!2L2L2Lr2   r   )r{   c                 8    g | ]}d                      |          S )rb   )rp   r  s     r0   r  z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s"    000qsxx{{000r2   ?)rf   r   rw   rg   sortr   rp   )rE   rw   	auth_pathbufqsas   `    r0   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}}$
r2   c                     |                                 dz   }||                     |          dz   z  }|                     |          }|r||dz   z  }||                     ||          z  }|S )Nr[   r  )r   r  r  r  )rE   rh   rw   r   rP  r  csr  s           r0   canonical_stringzHmacV1Auth.canonical_string  s     \\^^d"
d--g66==66w?? 	(.4''B
d%%ey%AAA	r2   c                     | j         j        r|d= | j         j        |d<   |                     ||||          }t                              d|           |                     |          S )Nr  r  r  )rV   r   r  rd   re   r  )rE   rh   rw   r   rP  r  rx   s          r0   get_signaturezHmacV1Auth.get_signature  s{     ! 	E./.2.>.DG*+..E7i / 
 
 	(.999///r2   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  )rV   r   rd   re   r   r,   rh   r  r   r  _inject_signature)rE   r=   rw   r   s       r0   rB   zHmacV1Auth.add_auth  s    #$$?@@@%%.???&&NE7?g>O ' 
 
	 	w	22222r2   c                 "    t          d          S )NTr   r   rE   s    r0   r  zHmacV1Auth._get_date  s    &&&&r2   c                 `    d|j         v r|j         d= d| j        j         d| }||j         d<   d S )Nr  zAWS r'   )r   rV   r   )rE   r=   r   auth_headers       r0   r  zHmacV1Auth._inject_signature  sH    go-- 0FT-8FF9FF+6(((r2   )NNrO   )rF   rG   rH   r  rQ   r  r  r  r  r  r  r  rB   r  r  rK   r2   r0   r  r  b  s        % % %MN' ' ' 'F F F  "  + + +   6 ?C	 	 	 	 ?C
0 
0 
0 
0	3 	3 	3' ' '7 7 7 7 7r2   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

    ry  c                 "    || _         || _        d S rO   )rV   rS  )rE   rV   rP  s      r0   rQ   zHmacV1QueryAuth.__init__  s    &r2   c                     t          t          t          j                    t          | j                  z                       S rO   )r<   r  r   rS  r  s    r0   r  zHmacV1QueryAuth._get_date  s-    3ty{{S%7%7788999r2   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   r^   r   Expiresr  )r  rU     rc   r   r`  ra  rb  )	rV   r   r   r   r   r   r   r,   r   )	rE   r=   r   rh  
header_keyr  rj  rk  rl  s	            r0   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 //r2   N)rF   rG   rH   r   rv  rQ   r  r  rK   r2   r0   r  r    sZ          O,;        : : :0 0 0 0 0r2   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 )	NrA  rB  rC  r   r  r5   rH  r   )r   r*   rV   r   r   ro   rr   rs   r9   rK  rm   r;   r  )rE   r=   rM  rH  rC  s        r0   rB   zHmacV1PostAuth.add_authI  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1r2   Nr  rK   r2   r0   r  r  @  s-         ; ; ; ; ;r2   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  )rP   r   r   r   )rE   r=   r  s      r0   rB   zBearerAuth.add_authp  sQ    ?""$$$7 577go--0+6(((r2   Nr  rK   r2   r0   r  r  h  s-         7 7 7 7 7r2   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      r0   resolve_auth_typer  z  s     L L	+++1)<<<<888 >y I N22(((( 3 /KKKK
*Z
H
H
HHr2   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     r0   r  z2resolve_auth_scheme_preference.<locals>.<listcomp>  s)    JJJ6c**2.JJJr2   c                 $    g | ]}|t           v|S rK   )AUTH_PREF_TO_SIGNATURE_VERSIONr  s     r0   r  z2resolve_auth_scheme_preference.<locals>.<listcomp>  s.       777 	777r2   z/Unsupported auth schemes in preference list: %rc                     g | ]}|v |	S rK   rK   )r   r+   service_supporteds     r0   r  z2resolve_auth_scheme_preference.<locals>.<listcomp>  s/       &&& 	&&&r2   noAuthr  r  )
rd   re   r   fromkeysr  r*   r  r   rp   rn   )preference_listauth_optionsunsupportedcombinedprioritized_schemesr+   sig_versionr  s          @r0   resolve_auth_scheme_preferencer    s)   JJ\JJJ %  K
  
={	
 	
 	
 !22H   mmH--   &  X1&9999488@@.(( ) +))F+<$=$=>>   r2   )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      r0   r^  r^    sA     " " " [ c2" " "r2   )Krr   r  r  r   rj   r9   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   	getLoggerrF   rd   r   r   r   r  r   r   r   r1   r>   r@   rM   rS   r   r   r#  r7  r?  rO  rx  r  r  r  r  r  r  r  r  r  botocore.crt.authr  rq   r  r   r  rK   r2   r0   <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" " "   r2   