
    ]jo                        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jL                  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 eDj                  eF       neDj                  e6e;e7e<d6       d7d8d9d:d;ZHeHj                         D  ci c]  \  } }| j                  d<      d=   | c}} ZKyc c}} w )>    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                  9|j                  |j	                  |j
                        k7  r| d|j                   }|S )N[]P   i  )httphttps:)r   hostnamer   portgetscheme)url	url_partshostdefault_portss       7/root/env/lib/python3.12/site-packages/botocore/auth.py_host_from_urlr1   Q   s}    
 ID!#&4&{M ~~!>>]..y/?/?@@V1Y^^,-DK    c                     | j                   }t        |t              r&t        j                  |j                  d            }|S t        |t              rt        j                  |      }|S Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr6   s     r0   _get_body_as_dictr>   d   sT    
 <<D$zz$++g./ K 
D#	zz$Kr2   c                       e Zd ZdZdZd Zy)
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y)TokenSignerTc                     || _         y 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y)	SigV2Authz+
    Sign a request with Signature V2.
    c                     || _         y rO   credentialsrE   rV   s     r0   rQ   zSigV2Auth.__init__   
    &r2   c                 P   t         j                  d       t        |j                        }|j                  }t        |      dk(  rd}|j                   d|j                   d| d}t        j                  | j                  j                  j                  d      t              }g }t        |      D ]d  }|dk(  r	t        ||         }	t!        |j                  d      d	      }
t!        |	j                  d      d
	      }|j#                  |
 d|        f dj%                  |      }||z  }t         j                  d|       |j'                  |j                  d             t)        j*                  |j-                               j/                         j1                  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   sj   ;<%zzt9>D#NN+2ell^2dV2F''..w76
 &> 		9C k!s$Eszz'2<J g!6UCLLLJ<q78		9 XXe_")>:^**734u||~.446==g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<   | j                  ||      \  }}||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     #$&&<<\\F ^^F#'#3#3#>#> %(!"$0 !"mmGT[[]C{!!&*&6&6&<&<F?#++GV<I'{r2   N)rF   rG   rH   __doc__rQ   r   rB   rK   r2   r0   rS   rS      s    '8r2   rS   c                       e Zd Zd Zd Zy)	SigV3Authc                     || _         y 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                  j                  d      t              }|j                  |j                  d   j                  d             t        |j                               j                         }d| j                   j                   d|j                  d       }d	|j                  v r|j                  d	= ||j                  d	<   y )
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   sL   #$&&W__$'",D"9!!%8OO$:;6:6F6F6L6LGOO2388''..w76
 	/66w?@'(9:@@B()9)9)D)D(E F..?.F.Fw.O-PR 	 "W__4 672;./r2   N)rF   rG   rH   rQ   rB   rK   r2   r0   r   r      s    '<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y)	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 .    || _         || _        || _        y rO   )rV   _region_name_service_namerE   rV   service_nameregion_names       r0   rQ   zSigV4Auth.__init__   s    & ()r2   c                     |r:t        j                  ||j                  d      t              j	                         }|S t        j                  ||j                  d      t              j                         }|S r4   )rj   rk   rm   r   	hexdigestrt   )rE   r{   msghexsigs        r0   _signzSigV4Auth._sign   s[    ((3

7 3V<FFHC 
 ((3

7 3V<CCEC
r2   c                     t               }|j                  j                         D ]#  \  }}|j                         }|t        vs|||<   % 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   sn    
 !]
"??002 	*KD%JJLE44$)
5!	* # "0!<Jvr2   c                     |j                   r| j                  |j                         S | j                  t        |j                              S rO   )rv   _canonical_query_string_params_canonical_query_string_urlr   r,   rD   s     r0   canonical_query_stringz SigV4Auth.canonical_query_string  s:    
 >>66w~~FF33HW[[4IJJr2   c           	      :   g }t        |t              r|j                         }|D ]7  \  }}|j                  t	        |d      t	        t        |      d      f       9 g }t        |      D ]  \  }}|j                  | d|         dj                  |      }|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I	  !/ 	5JC""cU!E7#34	5!$/!:%%r2   c                 .   d}|j                   rg }|j                   j                  d      D ]*  }|j                  d      \  }}}|j                  ||f       , g }t	        |      D ]  \  }}|j                  | d|         dj                  |      }|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 $s 3Q$$c5\23 !O %]3 9
U&&#aw'789%(XXo%>"%%r2   c                      g }t        t        |            }|D ]J  }dj                   fd|j                  |      D              }|j	                  | dt        |              L dj                  |      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   @   K   | ]  }j                  |        y wrO   )_header_value).0vrE   s     r0   	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>7  s!      *+""1%s   r'   r[   )rn   setrp   get_allro   r   )rE   r   r   sorted_header_namesr{   r|   s   `     r0   canonical_headerszSigV4Auth.canonical_headers-  s     $S%9:& 	=CHH />/F/Fs/K E NNcU!N5$9#:;<		=
 yy!!r2   c                 @    dj                  |j                               S )N )rp   rw   )rE   r|   s     r0   r   zSigV4Auth._header_value=  s     xx&&r2   c                 Z    t        d t        |      D              }dj                  |      S )Nc              3   X   K   | ]"  }|j                         j                          $ y wrO   )r   ru   )r   ns     r0   r   z+SigV4Auth.signed_headers.<locals>.<genexpr>F  s     Iq*Is   (*;)rn   r   rp   )rE   r   r   s      r0   signed_headerszSigV4Auth.signed_headersE  s&    IC4HIIxx  r2   c                     |j                   j                  di       }|j                  d      }t        |t              xr |j                  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  sJ    "??..z2>$(()<=	)T*Oy}}T/Bi/OOr2   c                    | j                  |      rt        S | j                  |      st        S |j                  }|rt        |d      r|j                         }t        j                  |j                  t              }t               }t        |d      D ]  }|j                  |        |j                         }|j                  |       |S |rt        |      j                         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5511': $#||GL&9#((*H&..!!>N xHnc2 '&'#--/Lh' ,'1133$$r2   c                 r    |j                   j                  d      sy|j                  j                  dd      S )Nr&   Tpayload_signing_enabled)r,   
startswithr   r*   rD   s     r0   r   z%SigV4Auth._should_sha256_sign_payloadh  s1    {{%%g.
 ""#<dCCr2   c                 @   |j                   j                         g}| j                  t        |j                        j
                        }|j                  |       |j                  | j                  |             | j                  |      }|j                  | j                  |      dz          |j                  | j                  |             d|j                  v r|j                  d   }n| j                  |      }|j                  |       dj                  |      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    nn""$%''(=(B(BC
		$
		$--g67..w7
		$((9D@A
		$%%o67!W__4#OO,BCM LL1M
		- yy}r2   c                 2    t        t        |      d      }|S )Nz/~r`   )r   r   )rE   rf   normalized_paths      r0   r   zSigV4Auth._normalize_url_path  s     24 8tDr2   c                 "   | j                   j                  g}|j                  |j                  d   dd        |j                  | j                         |j                  | j
                         |j                  d       dj                  |      S N	timestampr      aws4_requestrZ   )rV   r   ro   r   r   r   rp   rE   r=   scopes      r0   r  zSigV4Auth.scope  sp    !!,,-W__[1!A67T&&'T''(^$xxr2   c                     g }|j                  |j                  d   dd        |j                  | j                         |j                  | j                         |j                  d       dj	                  |      S r   )ro   r   r   r   rp   r   s      r0   credential_scopezSigV4Auth.credential_scope  sa    W__[1!A67T&&'T''(^$xxr2   c                    dg}|j                  |j                  d          |j                  | j                  |             |j                  t        |j	                  d            j                                dj                  |      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  sl     ""

7??;/0

4((12

6+227;<FFHIyy~r2   c                 P   | j                   j                  }| j                  d| j                         |j                  d   dd       }| j                  || j
                        }| j                  || j                        }| j                  |d      }| j                  ||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    ))C5\!!#W__[%A!A%F
 ::fd&7&78JJx););<	JJy.9	zz)^z>>r2   c                    | j                   
t               t               }|j                  t              |j
                  d<   | j                  |       | j                  |      }t        j                  d       t        j                  d|       | j                  ||      }t        j                  d|       | j                  ||      }t        j                  d|       | j                  ||       y )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$ 	++G4 227;;<,.?@,,W6GH(.9NN>7;	%y1))'9=r2   c                     d| j                  |       g}| j                  |      }|j                  d| j                  |              |j                  d|        dj	                  |      |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~    24::g3F2GHI..w7T00ABC	
 	*YK01+/99X+>(r2   c                    d|j                   v r|j                   d= | j                  |       | j                  j                  r>d|j                   v r|j                   d= | j                  j                  |j                   d<   |j                  j                  dd      s/d|j                   v r|j                   d= t        |j                   d<   y y )Nr  r   r   Tr   )r   _set_necessary_date_headersrV   r   r   r*   r   rD   s     r0   r  z(SigV4Auth._modify_request_before_signing  s    goo-0((1!!%8OO$:;6:6F6F6L6LGOO23""#<dC%8OO$:;6FGOO23 Dr2   c                    d|j                   v r|j                   d= t        j                  j                  |j                  d   t              }t        t        t        j                  |j                                           |j                   d<   d|j                   v r|j                   d= y y d|j                   v r|j                   d= |j                  d   |j                   d<   y )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!2!;!;,o" '1HOO$6$@$@$BCD'GOOF# w.OOL1 / w.OOL1,3OOK,HGOOL)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&"& " '!P
%4D
?>$G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                  |      |j                  d<   y )Nr   )superr  r   r   rE   r=   	__class__s     r0   r  z*S3SigV4Auth._modify_request_before_signing  sA    .w7!W__4 6726,,w2G./r2   c                    |j                   j                  d      }t        |dd       }|i }|j                  dd       }||S d}|j                   j                  di       }|j                  d      }t        |t              r|j                  d      dk(  r|d	   }|j
                  j                  d
      r||j                  vry|j                   j                  dd      ry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	 I !}}%>E# ("??..z2>$(()<=	i&9==+>(+J'/O&&w/goo5 ??4e< w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#    s    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                6    t         |   |||       || _        y rO   )r%  rQ   _identity_cache)rE   rV   r   r   identity_cacher'  s        r0   rQ   zS3ExpressAuth.__init__"  s     	lK@-r2   c                 $    t         |   |       y 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= y y )Nzx-amz-s3session-tokenr   )r%  r  r   rV   r   r&  s     r0   r  z,S3ExpressAuth._modify_request_before_signing+  sU    .w7"'//97;7G7G7M7MGOO34!W__4 67 5r2   )rF   rG   rH   REQUIRES_IDENTITY_CACHErQ   rB   r  r4  r5  s   @r0   r7  r7    s    "."8 8r2   r7  c                       e Zd ZdZd Zy)S3ExpressPostAuthTc                    t               }|j                  t              |j                  d<   i }|j                  j	                  dd       |j                  d   }i }g }|j                  j	                  dd       &|j                  d   }|j	                  dd       |d   }||d<   d|d<   | j                  |      |d<   |j                  d   |d<   |j                  ddi       |j                  d| j                  |      i       |j                  d|j                  d   i       | j                  j                  @| j                  j                  |d	<   |j                  d	| j                  j                  i       t        j                  t        j                  |      j                  d
            j                  d
      |d<   | j                  |d   |      |d<   ||j                  d<   ||j                  d<   y )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$??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|$6 !%)ZZ%8!"&{;|,.@AB-tzz'/BCD<)EFG!!-.2.>.>.D.DF*+($*:*:*@*@A
 "++JJv%%g.

&/ 	x %)NN6(3CW$M !4:014:0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         |   ||||       || _        y )N)r:  r%  rQ   _expires)rE   rV   r   r   r:  rP  r'  s         r0   rQ   zS3ExpressQueryAuth.__init__e  s,     	)	 	 	
  r2   c                 N   |j                   j                  d      }d}||k(  r|j                   d= | j                  | j                  |            }d| j	                  |      |j
                  d   | j                  |d}| j                  j                  | j                  j                  |d<   t        |j                        }t        |j                  d      }|j                         D 	ci c]  \  }}	||	d	    }
}}	|j                  r"|
j                  |j                         i |_        d
}|j                   r!|
j                  t#        |             d
|_        |
rt%        |
      dz   }| t%        |       }|}|d	   |d   |d   ||d   f}t'        |      |_
        y c c}	}w )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_valuesr   r_   rc            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kr   
query_dictoperation_paramsnew_query_stringpnew_url_partss                  r0   r  z1S3ExpressQueryAuth._modify_request_before_signingv  s    **>:> 	! 33/
 ,,T-A-A'-JK  2 $

7 3!//+6!]]#1
 !!-373C3C3I3IK/0 W[[)	 &iooN*<*B*B*DE$!Qa1gE
E>>gnn-GN << /89GL6zBSH !8!E FG 	 1qtQqT+;QqTB /A F   ,F!c                 4    |xj                   d| z  c_         y Nz&X-Amz-Signature=r,   rE   r=   r   s      r0   r  z/S3ExpressQueryAuth._inject_signature_to_request       	*9+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"   "?0B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                 6    t         |   |||       || _        y rO   rR  )rE   rV   r   r   rP  r'  s        r0   rQ   zSigV4QueryAuth.__init__  s     	lK@r2   c                 N   |j                   j                  d      }d}||k(  r|j                   d= | j                  | j                  |            }d| j	                  |      |j
                  d   | j                  |d}| j                  j                  | j                  j                  |d<   t        |j                        }t        |j                  d      }|j                         D 	ci c]  \  }}	||	d	    }
}}	|j                  r"|
j                  |j                         i |_        d
}|j                   r!|
j                  t#        |             d
|_        |
rt%        |
      dz   }| t%        |       }|}|d	   |d   |d   ||d   f}t'        |      |_
        y c c}	}w )NrU  rV  r  r   rW  r   TrX  r   r_   rc   rZ  r[  r\  r]  )rE   r=   r^  blacklisted_content_typer   r`  r-   ra  rb  r   rc  rd  re  rf  rg  s                  r0   r  z-SigV4QueryAuth._modify_request_before_signing  s    **>:> 	! 33/
 ,,T-A-A'-JK  2 $

7 3!//+6!]]#1
 !!-262B2B2H2HK./ W[[)	 &iooN*<*B*B*DE$!Qa1gE
E>>gnn-GN << /89GL6zBSH !8!E FG 	 1qtQqT+;QqTB /A Frh  c                 4    |xj                   d| z  c_         y rj  rk  rl  s      r0   r  z+SigV4QueryAuth._inject_signature_to_request  rm  r2   )rF   rG   rH   rr  rQ   r  r  r4  r5  s   @r0   rt  rt    s    O ?N ?0B7r2   rt  c                       e Zd ZdZd Zd Zy)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   rp  rD   s     r0   r   zS3SigV4QueryAuth.payload*  rq  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y)S3SigV4PostAuthz
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                    t               }|j                  t              |j                  d<   i }|j                  j	                  dd       |j                  d   }i }g }|j                  j	                  dd       &|j                  d   }|j	                  dd       |d   }||d<   d|d<   | j                  |      |d<   |j                  d   |d<   |j                  ddi       |j                  d| j                  |      i       |j                  d|j                  d   i       | j                  j                  @| j                  j                  |d	<   |j                  d	| j                  j                  i       t        j                  t        j                  |      j                  d
            j                  d
      |d<   | j                  |d   |      |d<   ||j                  d<   ||j                  d<   y )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$??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|$6 !%)ZZ%8!"&{;|,.@AB-tzz'/BCD<)EFG!!--1-=-=-C-CF)*5t7G7G7M7MNO "++JJv%%g.

&/ 	x %)NN6(3CW$M !4:014:01r2   NrF   rG   rH   r   rB   rK   r2   r0   r  r  2  s    %;r2   r  c                   b    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y)
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                     || _         y rO   rU   r   s       r0   rQ   zHmacV1Auth.__init__  rX   r2   c                 *   t        j                  | j                  j                  j	                  d      t
              }|j                  |j	                  d             t        |j                               j                         j                  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  sk    88''..w74
 	--g678??,-335<<WEEr2   c                 ,   g d}g }d|v r|d= | j                         |d<   |D ]_  }d}|D ]B  }|j                         }||   ||k(  s|j                  ||   j                                d}D |rO|j                  d       a dj	                  |      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W..*% 	BE !YY[3<+bJJws|1134 E	!
 

2	 yy~r2   c                 P   g }i }|D ]T  }|j                         }||   |j                  d      s+dj                  d |j                  |      D              ||<   V t	        |j                               }|D ]  }|j                  | d||            dj                  |      S )Nx-amz-r   c              3   <   K   | ]  }|j                           y wrO   )ru   )r   r   s     r0   r   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s      2&'	2s   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??3+?2 *N2&		 $N$7$7$9:% 	7CJJ#as 3456	7yy~r2   c                 H    t        |      dk(  r|S |d   t        |d         fS )z(
        TODO: Do we need this?
        rZ  r   )rg   r   )rE   nvs     r0   	unquote_vzHmacV1Auth.unquote_v  s+     r7a<IqE72a5>**r2   c                    ||}n|j                   }|j                  r|j                  j                  d      }|D cg c]  }|j                  dd       }}|D cg c]%  }|d   | j                  v s| j	                  |      ' }}t        |      dkD  rR|j                  t        d             |D cg c]  }dj                  |       }}|dz  }|dj                  |      z  }|S c c}w c c}w c c}w )Nrc   rb   rZ  r   )r{   ?)	rf   r   rw   QSAOfInterestr  rg   sortr   rp   )rE   rw   	auth_pathbufqsaas         r0   canonical_resourcezHmacV1Auth.canonical_resource  s      C**C;;++##C(C,/0q1773?0C0+.&'!A$$:L:L2Lq!C  3x!|Z]+,/0qsxx{00s
sxx}$
 1
 1s   C*C/3C/5C4c                     |j                         dz   }|| j                  |      dz   z  }| j                  |      }|r||dz   z  }|| j                  ||      z  }|S )Nr[   r  )r   r  r  r  )rE   rh   rw   r   rP  r  csr  s           r0   canonical_stringzHmacV1Auth.canonical_string  so     \\^d"
d--g6==66w?.4''B
d%%ey%AA	r2   c                     | j                   j                  r|d= | j                   j                  |d<   | j                  ||||      }t        j	                  d|       | j                  |      S )Nr  r  r  )rV   r   r  rd   re   r  )rE   rh   rw   r   rP  r  rx   s          r0   get_signaturezHmacV1Auth.get_signature  ss     !!./.2.>.>.D.DG*+..E7i / 
 	(.9//r2   c                 F   | j                   t        t        j                  d       t	        |j
                        }t        j                  d|j                         | j                  |j                  ||j                  |j                        }| j                  ||       y )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    #$$?@%.?&&NNE7??g>O>O ' 
	 	w	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<   y )Nr  zAWS r'   )r   rV   r   )rE   r=   r   auth_headers       r0   r  zHmacV1Auth._inject_signature  sI    goo- 0T--8899+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  sN    %MN'F"+6 ?C	 ?C
0	3'7r2   r  c                   *    e Zd ZdZdZefdZd Zd Zy)HmacV1QueryAuthz
    Generates a presigned request for s3.

    Spec from this document:

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

    ru  c                      || _         || _        y rO   )rV   rS  )rE   rV   rP  s      r0   rQ   zHmacV1QueryAuth.__init__  s    &r2   c                 z    t        t        t        j                         t        | j                        z               S rO   )r<   r  r   rS  r  s    r0   r  zHmacV1QueryAuth._get_date  s&    3tyy{S%77899r2   c                    i }| j                   j                  |d<   ||d<   |j                  D ]R  }|j                         }|dk(  r|j                  d   |d<   +|j	                  d      s|dv sA|j                  |   ||<   T t        |      }t        |j                        }|d   r
|d    d| }|d	   |d
   |d   ||d   f}t        |      |_        y )Nr   r^   r   Expiresr  )r  rU     rc   r   rZ  r[  r\  )	rV   r   r   r   r   r   r   r,   r   )	rE   r=   r   rc  
header_keyr  re  rf  rg  s	            r0   r  z!HmacV1QueryAuth._inject_signature  s    
'+'7'7'B'B
#$"+
;!// 	5J!!#B V#(/(?
9% x(B 3 - ")!4
2	5  3:> W[[!Q4 #$A$q)9(:;1qtQqT+;QqTB /r2   N)rF   rG   rH   r   rr  rQ   r  r  rK   r2   r0   r  r    s      O,;  :0r2   r  c                       e Zd ZdZd Zy)HmacV1PostAuthz
    Generates a presigned post for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
    c                    i }|j                   j                  dd       |j                   d   }i }g }|j                   j                  dd       &|j                   d   }|j                  dd       |d   }||d<   | j                  j                  |d<   | j                  j                  @| j                  j                  |d<   |j                  d| j                  j                  i       t        j                  t        j                  |      j                  d            j                  d      |d<   | j                  |d         |d<   ||j                   d<   ||j                   d<   y )	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  sX   ??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|#'#3#3#>#> !!--1-=-=-C-CF)*5t7G7G7M7MNO "++JJv%%g.

&/ 	x #..vh/?@{4:014:01r2   Nr  rK   r2   r0   r  r  @  s    ;r2   r  c                       e Zd ZdZd Zy)
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<   y )NzBearer r  )rP   r   r   r   )rE   r=   r  s      r0   rB   zBearerAuth.add_authp  sR    ??""$$ 5 567goo-0+6(r2   Nr  rK   r2   r0   r  r  h  s    7r2   r  c                     | D ];  }|dk(  rt         |   c S |t         v rt         |   }|t        v s-|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  sa     L	++1)<<88 >y I N2((.KKL +Z
HHr2   c                    |D cg c]  }|j                  d      d    }}| D cg c]  }|t        vr| }}|rt        j                  d|       | |z   }t        j                  |      D cg c]  }||v r|
 }}|D ]3  }|dk(  rt        |   c S t        j                  |      }|t        v s1|c S  t        dj                  t        |                  c c}w c c}w c c}w )N#z/Unsupported auth schemes in preference list: %rnoAuthr  r  )rw   AUTH_PREF_TO_SIGNATURE_VERSIONrd   re   r   fromkeysr*   r  r   rp   rn   )preference_listauth_optionsr+   service_supportedunsupportedcombinedprioritized_schemessig_versions           r0   resolve_auth_scheme_preferencer    s   =IJ6c*2.JJ &77 	K 
 ={	
 !22H mmH-&& 	  & X1&99488@.( +))F+<$=> 5 Ks   CC-C")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  r  r  )Lrr   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  rt  r{  r  r  r  r  r  r  r  r  botocore.crt.authr  rq   r  r   rw   r  )auth_schemer  s   00r0   <module>r     s:           # "         
		8	$ G  
"  & %I "&
. .%* %:
 :z<
 <8JI
 JIZ3) 3l8K 8**; *;Ze  e PN7Y N7b ~  0-;i -;`f7 f7R20j 20j%;Z %;P7 7$
IB 

%(!,!2 4,-&*		
 !)	"  %C$H$H$J" [ c2+"  "s    G