+
     Iio  c                   s   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIHtHtHtHtHtHtHtHtHtHtHt ^ RIHtHtH t H!t! ^ RI"H#t#H$t$H%t% ]PL                  ! ]'4      t(R	t)RIt*R
t+Rt,. RJOt-Rt.Rt/R t0R t1 ! R R4      t2 ! R R]24      t3 ! R R]24      t4 ! R R]24      t5 ! R R]24      t6 ! R R]64      t7 ! R R]74      t8 ! R R]84      t9 ! R  R!]84      t: ! R" R#]64      t; ! R$ R%];4      t< ! R& R']64      t= ! R( R)]24      t> ! R* R+]>4      t? ! R, R-]>4      t@ ! R. R/]34      tAR0 tBR1 tCR2]4R3]5R4]5R5]>R6]?R7]@R8]=R9]8R:]:R;]9R<]A/tD]'       d   ^ R=IEHFtF ]DP                  ]F4       M]DP                  R>]6R?];R@]7RA]</4       RBR>RCRDRER<RFRG/tH]HP                  4        U Uu/ uF  w  rV P                  RH4      RK,          VbK   	  upp tKR# u upp i )L    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_sequenceZ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                 s    \        V 4      pVP                  p\        V 4      '       d   R V R2pR^PRR/pVP                  e<   VP                  VP	                  VP
                  4      8w  d   V RVP                   2pV# )Z[Z]Zhttphttpsi  :)r   Zhostnamer   Zportgetscheme)url	url_partshostZdefault_portss   &   2/usr/lib/python3.14/site-packages/botocore/auth.py_host_from_urlr!   Q   s    
 ID!#&&4&{M ~~!>>]..y/?/?@@V1Y^^,-DK    c                 s    V P                   p\        V\        4      '       d(   \        P                  ! VP                  R 4      4      pV# \        V\        4      '       d   \        P                  ! V4      pV# utf-8)data
isinstanceZbytesjsonZloadsdecodestr)requestr%      & r    _get_body_as_dictr,   d   sZ    
 <<D$zz$++g./ K 
D#		zz$Kr"   c                   s.   a  ] tR t^qt o RtRtR tRtV tR# )
BaseSignerFc                s    \        R 4      h)add_auth)ZNotImplementedErrorselfr*      &&r    r.   ZBaseSigner.add_authu   s    !*--r"    N)	__name__
__module____qualname____firstlineno__REQUIRES_REGIONREQUIRES_TOKENr.   __static_attributes____classdictcell____classdict__   @r    r-   r-   q   s     ON. .r"   r-   c                   s,   a  ] tR t^yt o Rt R tRtV tR# )TokenSignerTc                    Wn         R # N
auth_token)r0   rB   r1   r    __init__ZTokenSigner.__init__   s    $r"   rA   N)r3   r4   r5   r6   r8   rC   r9   r:   r;   r=   r    r>   r>   y   s     N% %r"   r>   c                   s6   a  ] tR t^t o RtR tR tR tRtV t	R# )	SigV2Authz#
Sign a request with Signature V2.
c                r?   r@   credentialsr0   rF   r1   r    rC   ZSigV2Auth.__init__       &r"   c                sl   \         P                  R 4       \        VP                  4      pVP                  p\        V4      ^ 8X  d   RpVP                   RVP                   RV R2p\        P                  ! V P                  P                  P                  R4      \        R7      p. p\        V4       Fk  pVR8X  d   K  \        W(,          4      p	\!        VP                  R4      RR7      p
\!        V	P                  R4      RR7      pVP#                  V
 R	V 24       Km  	  R
P%                  V4      pW\,          p\         P                  RV4       VP'                  VP                  R4      4       \(        P*                  ! VP-                  4       4      P/                  4       P1                  R4      pW3# )z$Calculating signature using v2 auth./
r$   Z	digestmod	Signature Zsafez-_~=&zString to sign: %s)loggerdebugr   r   pathlenmethodZnetlochmacnewrF   
secret_keyencoder   sortedr)   r   appendjoinupdatebase64	b64encodedigeststripr(   )r0   r*   paramssplitrS   string_to_signZlhmacZpairskeyvalueZ
quoted_keyZquoted_valueqsZb64s   &&&           r    calc_signatureZSigV2Auth.calc_signature   s_   ;<%zzt9>D#NN+2ell^2dV2F''..w76
 &>C k!$Eszz'2<J g!6UCLLLJ<q78 " XXe_)>:^**734u||~.446==gFyr"   c                s   V P                   f   \        4       hVP                  '       d   VP                  pMVP                  pV P                   P                  VR&   RVR&   RVR&   \
        P                  ! \        \
        P                  ! 4       4      VR&   V P                   P                  '       d   V P                   P                  VR&   V P                  W4      w  r4WBR&   V# )	NAWSAccessKeyIdZ2ZSignatureVersionZ
HmacSHA256ZSignatureMethodZ	TimestampZSecurityTokenrL   )rF   r   r%   rb   
access_keytimestrftimeISO8601Zgmtimetokenrh   )r0   r*   rb   rg   	signature   &&   r    r.   ZSigV2Auth.add_auth   s     #$&&<<<\\F ^^F#'#3#3#>#> %(!"$0 !"mmGT[[]C{!!!&*&6&6&<&<F?#++G<'{r"   rE   N)
r3   r4   r5   r6   __doc__rC   rh   r.   r9   r:   r;   r=   r    rD   rD      s     '8 r"   rD   c                   s,   a  ] tR t^t o R tR tRtV tR# )	SigV3Authc                r?   r@   rE   rG   r1   r    rC   ZSigV3Auth.__init__   rH   r"   c                s:   V P                   f   \        4       hRVP                  9   d   VP                  R \        RR7      VP                  R&   V P                   P                  '       dB   RVP                  9   d   VP                  R V P                   P                  VP                  R&   \
        P                  ! V P                   P                  P                  R4      \        R7      pVP                  VP                  R,          P                  R4      4       \        VP                  4       4      P                  4       pRV P                   P                   RVP                  R4       2pR	VP                  9   d   VP                  R	 WAP                  R	&   R # )
NDateTZusegmtX-Amz-Security-Tokenr$   rK   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rF   r   headersr   rn   rV   rW   rX   rY   r   r]   r
   r`   ra   rj   r(   )r0   r*   new_hmacZencoded_signaturero   rp   r    r.   ZSigV3Auth.add_auth   sM   #$&&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;./r"   rE   N)r3   r4   r5   r6   rC   r.   r9   r:   r;   r=   r    rr   rr      s     '< <r"   rr   c                   s   a  ] tR t^t o RtRtR tRR ltR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )	SigV4Authz#
Sign a request with Signature V4.
Tc                s*    Wn         W0n        W n        R # r@   )rF   _region_name_service_namer0   rF   service_nameregion_name   &&&&r    rC   ZSigV4Auth.__init__   s    & ()r"   c                s    V'       d;   \         P                  ! WP                  R 4      \        4      P	                  4       pV# \         P                  ! WP                  R 4      \        4      P                  4       pV# r#   )rV   rW   rY   r   	hexdigestr`   )r0   re   ZmsghexZsigs   &&&& r    _signZSigV4Auth._sign   sW    ((3

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

7 3V<CCEC
r"   c                s    \        4       pVP                  P                  4        F&  w  r4VP                  4       pV\        9  g   K"  WBV&   K(  	  RV9  d   \        VP                  4      VR&   V# )zS
Select the headers from the request that need to be included
in the StringToSign.
r   )r	   rv   itemslowerSIGNED_HEADERS_BLACKLISTr!   r   )r0   r*   Z
header_mapnamerf   Zlname   &&    r    headers_to_signZSigV4Auth.headers_to_sign   se    
 !]
"??002KDJJLE44$)5! 3 # "0!<Jvr"   c                s    VP                   '       d   V P                  VP                   4      # V P                  \        VP                  4      4      # r@   )rb   _canonical_query_string_params_canonical_query_string_urlr   r   r/   r1   r    canonical_query_stringZ SigV4Auth.canonical_query_string  s<    
 >>>66w~~FF33HW[[4IJJr"   c           	     sJ   . p\        V\        4      '       d   VP                  4       pV F7  w  r4VP                  \	        VR R7      \	        \        V4      R R7      34       K9  	  . p\        V4       F  w  r4VP                  V RV 24       K  	  RP                  V4      pV# )z-_.~rN   rO   rP   )r&   r   r   r[   r   r)   rZ   r\   )r0   rb   key_val_pairsre   rf   sorted_key_valsr      &&     r    r   Z(SigV4Auth._canonical_query_string_params  s    fg&&\\^F JC  s(%E
*HI !  !/JC""cU!E7#34 0!$/!:%%r"   c                s<   R pVP                   '       d   . pVP                   P                  R4       F)  pVP                  R4      w  rVpVP                  WW34       K+  	  . p\	        V4       F  w  rWVP                  V RV 24       K  	  RP                  V4      pV# )rM   rP   rO   )queryrc   Z	partitionr[   rZ   r\   )	r0   Zpartsr   r   Zpairre   Z_rf   r   s	   &&       r    r   Z%SigV4Auth._canonical_query_string_url  s    !#;;;M))#. $s 3$$c\2 / !O %]3
&&#aw'78 4%(XXo%>"%%r"   c                s   a  . p\        \        V4      4      pV FL  pRP                  V 3R lVP                  V4       4       4      pVP	                  V R\        V4       24       KN  	  RP                  V4      # )z
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   sF   <"   T F  pSP                  V4      x  K  	  R # 5ir@   )_header_value).0vr0   s   & r    	<genexpr>Z.SigV4Auth.canonical_headers.<locals>.<genexpr>7  s#      /K!""1%%/Ks   !r   rJ   )rZ   setr\   get_allr[   r   )r0   r   rv   Zsorted_header_namesre   rf   s   f&    r    canonical_headersZSigV4Auth.canonical_headers-  sz     $S%9:&CHH />/F/Fs/K E NNcU!N5$9#:;<	 '
 yy!!r"   c                s@    R P                  VP                  4       4      # )Z )r\   rc   )r0   rf   r1   r    r   ZSigV4Auth._header_value=  s     xx&&r"   c                sZ    \        R  \        V4       4       4      pRP                  V4      # )c              3   s\   "   T F"  qP                  4       P                  4       x  K$  	  R # 5ir@   )r   ra   )r   Znr+   r    r   Z+SigV4Auth.signed_headers.<locals>.<genexpr>F  s      I4Hq**4Hs   *,Z;)rZ   r   r\   )r0   r   rv      && r    signed_headersZSigV4Auth.signed_headersE  s&    IC4HIIxx  r"   c                s    VP                   P                  R / 4      pVP                  R4      p\        V\        4      ;'       d    VP                  R4      R8H  # )checksumrequest_algorithmintrailer)contextr   r&   dict)r0   r*   checksum_context	algorithm   &&  r    _is_streaming_checksum_payloadZ(SigV4Auth._is_streaming_checksum_payloadI  sM    "??..z2>$(()<=	)T*OOy}}T/Bi/OOr"   c                s   V P                  V4      '       d   \        # V P                  V4      '       g   \        # VP                  pV'       d   \        VR 4      '       d   VP                  4       p\        P                  ! VP                  \        4      p\        4       p\        VR4       F  pVP                  V4       K  	  VP                  4       pVP                  V4       V# V'       d   \        V4      P                  4       # \         # )seekr"   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADZbodyZhasattrZtell	functoolsZpartialZreadPAYLOAD_BUFFERr   Ziterr]   r   r   EMPTY_SHA256_HASH)r0   r*   Zrequest_bodyZpositionZread_chunksizer   ZchunkZhex_checksum   &&      r    payloadZSigV4Auth.payloadN  s    ..w775511':: $#||GL&99#((*H&..!!>N xHnc2& 3#--/Lh' ,'1133$$r"   c                s    VP                   P                  R 4      '       g   R# VP                  P                  RR4      # )r   Tpayload_signing_enabled)r   
startswithr   r   r/   r1   r    r   Z%SigV4Auth._should_sha256_sign_payloadh  s4    {{%%g..
 ""#<dCCr"   c                sV   VP                   P                  4       .pV P                  \        VP                  4      P
                  4      pVP                  V4       VP                  V P                  V4      4       V P                  V4      pVP                  V P                  V4      R ,           4       VP                  V P                  V4      4       RVP                  9   d   VP                  R,          pMV P                  V4      pVP                  V4       R P                  V4      # )rJ   X-Amz-Content-SHA256)rU   upper_normalize_url_pathr   r   rS   r[   r   r   r   r   rv   r   r\   )r0   r*   ZcrrS   r   Zbody_checksumr   r    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}r"   c                s2    \        \        V4      R R7      pV# )z/~rN   )r   r   )r0   rS   Znormalized_pathr   r    r   ZSigV4Auth._normalize_url_path  s     24 8tDr"   c                s2   V P                   P                  .pVP                  VP                  R ,          R,          4       VP                  V P                  4       VP                  V P
                  4       VP                  R4       RP                  V4      # 	timestampr    i   Naws4_requestrI   )rF   rj   r[   r   ry   rz   r\   r0   r*   scoper   r    r   ZSigV4Auth.scope  sn    !!,,-W__[1#67T&&'T''(^$xxr"   c                s   . pVP                  VP                  R ,          R,          4       VP                  V P                  4       VP                  V P                  4       VP                  R4       RP	                  V4      # r   )r[   r   ry   rz   r\   r   r   r    credential_scopeZSigV4Auth.credential_scope  s_    W__[1#67T&&'T''(^$xxr"   c                s   R.pVP                  VP                  R,          4       VP                  V P                  V4      4       VP                  \        VP	                  R4      4      P                  4       4       RP                  V4      # )z
Return the canonical StringToSign as well as a dict
containing the original version of all headers that
were included in the StringToSign.
AWS4-HMAC-SHA256r   r$   rJ   )r[   r   r   r   rY   r   r\   )r0   r*   r   Zsts   &&& r    rd   ZSigV4Auth.string_to_sign  sl     ""

7??;/0

4((12

6+227;<FFHIyy~r"   c                sZ   V P                   P                  pV P                  R V 2P                  4       VP                  R,          R,          4      pV P                  W@P
                  4      pV P                  WPP                  4      pV P                  VR4      pV P                  WqRR7      # )ZAWS4r   r   r   T)r   )rF   rX   r   rY   r   ry   rz   )r0   rd   r*   re   Zk_dateZk_regionZ	k_serviceZ	k_signings   &&&     r    ro   ZSigV4Auth.signature  s    ))C5\!!#W__[%A#%F
 ::f&7&78JJx););<	JJy.9	zz)z>>r"   c                s   V P                   f   \        4       h\        4       pVP                  \        4      VP
                  R&   V P                  V4       V P                  V4      p\        P                  R4       \        P                  RV4       V P                  W4      p\        P                  RV4       V P                  WA4      p\        P                  RV4       V P                  W4       R # )Nr   z$Calculating signature using v4 auth.zCanonicalRequest:
%sStringToSign:
%szSignature:
%s)rF   r   r   rl   SIGV4_TIMESTAMPr   _modify_request_before_signingr   rQ   rR   rd   ro   _inject_signature_to_request)r0   r*   datetime_nowr   rd   ro   r   r    r.   ZSigV4Auth.add_auth  s    #$&&+-'3'<'<_'M$ 	++G4 227;;<,.?@,,WH(.9NN>;	%y1))'=r"   c                s    R V P                  V4       2.pV P                  V4      pVP                  RV P                  V4       24       VP                  RV 24       RP	                  V4      VP
                  R&   V# )zAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=, Authorization)r   r   r[   r   r\   rv   )r0   r*   ro   Zauth_strr   s   &&&  r    r   Z&SigV4Auth._inject_signature_to_request  s~    24::g3F2GHI..w7T00ABC	
 	*YK01+/99X+>(r"   c                s   R VP                   9   d   VP                   R  V P                  V4       V P                  P                  '       dB   RVP                   9   d   VP                   R V P                  P                  VP                   R&   VP                  P                  RR4      '       g4   RVP                   9   d   VP                   R \        VP                   R&   R# R# )r   ru   r   Tr   N)rv   _set_necessary_date_headersrF   rn   r   r   r   r/   r1   r    r   Z(SigV4Auth._modify_request_before_signing  s    goo-0((1!!!%8OO$:;6:6F6F6L6LGOO23""#<dCC%8OO$:;6FGOO23 Dr"   c                s   R VP                   9   d   VP                   R  \        P                  P                  VP                  R,          \        4      p\        \        \        P                  ! VP                  4       4      4      4      VP                   R &   RVP                   9   d   VP                   R R# R# RVP                   9   d   VP                   R VP                  R,          VP                   R&   R# )rs   r   
X-Amz-DateN)
rv   datetimeZstrptimer   r   r   intcalendarZtimegmZ	timetuple)r0   r*   Zdatetime_timestampr   r    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)r"   )ry   rz   rF   N)F)r3   r4   r5   r6   rq   r7   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   ro   r.   r   r   r   r9   r:   r;   r=   r    rx   rx      s      O* K&"& " '!P
%4D
?>$GI Ir"   rx   c                   sD   a a ] tR tRt oV 3R ltV 3R ltR tRtVtV ;t	# )S3SigV4Authi  c                s   < \         SV `  V4       R VP                  9   d   VP                  R  V P                  V4      VP                  R &   R# )r   N)superr   rv   r   r0   r*   	__class__   &&r    r   Z*S3SigV4Auth._modify_request_before_signing  sA    .w7!W__4 6726,,w2G./r"   c                s$  < VP                   P                  R 4      p\        VRR4      pVf   / pVP                  RR4      pVe   V# RpVP                   P                  R/ 4      pVP                  R4      p\        V\        4      '       d    VP                  R4      R8X  d
   VR	,          pVP
                  P                  R
4      '       d   WQP                  9  d   R# VP                   P                  RR4      '       d   R# \        SV `%  V4      # )client_configs3Nr   zContent-MD5r   r   r   Zheaderr   r   TZhas_streaming_inputF)
r   r   Zgetattrr&   r   r   r   rv   r   r   )	r0   r*   r   Z	s3_configZsign_payloadZchecksum_headerr   r   r   s	   &&      r    r   Z'S3SigV4Auth._should_sha256_sign_payload  s      ++O<M46	 I !}}%>E# ("??..z2>$(()<=	i&&9==+>(+J'/O&&w//oo5 ??4e<< w27;;r"   c                    V# r@   r2   r0   rS   r1   r    r   ZS3SigV4Auth._normalize_url_path      r"   r2   )
r3   r4   r5   r6   r   r   r   r9   r:   __classcell__r   r<      @@r    r   r     s     H'<R r"   r   c                   sN   a a ] tR tRt oRtV 3R ltV 3R ltV 3R ltRtVt	V ;t
# )S3ExpressAuthi  Tc               4   < \         SV `  WV4       W@n        R # r@   )r   rC   _identity_cache)r0   rF   r|   r}   identity_cacher   s   &&&&$r    rC   ZS3ExpressAuth.__init__"  s     	K@-r"   c                s&   < \         SV `  V4       R # r@   )r   r.   r   r   r    r.   ZS3ExpressAuth.add_auth(  s    !r"   c                s   < \         SV `  V4       R VP                  9  d$   V P                  P                  VP                  R &   RVP                  9   d   VP                  R R# R# )zx-amz-s3session-tokenru   N)r   r   rv   rF   rn   r   r   r    r   Z,S3ExpressAuth._modify_request_before_signing+  sU    .w7"'//97;7G7G7M7MGOO34!W__4 67 5r"   )r   )r3   r4   r5   r6   REQUIRES_IDENTITY_CACHErC   r.   r   r9   r:   r   r   r   r    r   r     s     "."8 8r"   r   c                   *   a  ] tR tRt o RtR tRtV tR# )S3ExpressPostAuthi4  Tc                6   \        4       pVP                  \        4      VP                  R &   / pVP                  P	                  RR4      e   VP                  R,          p/ p. pVP                  P	                  RR4      e1   VP                  R,          pVP	                  RR4      e
   VR,          pWTR&   RVR&   V P                  V4      VR&   VP                  R ,          VR&   VP                  RR/4       VP                  RV P                  V4      /4       VP                  RVP                  R ,          /4       V P                  P                  eA   V P                  P                  VR	&   VP                  R	V P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R
4      4      P                  R
4      VR&   V P                  VR,          V4      VR&   W1P                  R&   WAP                  R&   R# )r   s3-presign-post-fieldsNs3-presign-post-policy
conditionsr   x-amz-algorithmx-amz-credential
x-amz-dateX-Amz-S3session-Tokenr$   policyx-amz-signaturer   rl   r   r   r   r   r[   rF   rn   r^   r_   r'   dumpsrY   r(   ro   r0   r*   r   fieldsr   r   r   r    r.   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1r"   r2   N)r3   r4   r5   r6   r   r.   r9   r:   r;   r=   r    r   r   4  s     "'; ';r"   r   c                   sZ   a a ] tR tRt oRtRtR]/V 3R lltR tR tR t	R	 t
R
tVtV ;t# )S3ExpressQueryAuthia  i,  Texpiresc               s:   < \         SV `  VVVVR 7       WPn        R# ))r   Nr   rC   _expires)r0   rF   r|   r}   r   r   r   s   &&&&$$r    rC   ZS3ExpressQueryAuth.__init__e  s*     	)	 	 	
  r"   c           
        VP                   P                  R 4      pRpW#8X  d   VP                   R  V P                  V P                  V4      4      pRRRV P	                  V4      RVP
                  R,          RV P                  RV/pV P                  P                  e   V P                  P                  VR
&   \        VP                  4      p\        VP                  RR7      pVP                  4        UU	u/ uF  w  rW^ ,          bK  	  p
pp	VP                  '       d#   V
P                  VP                  4       / Vn        RpVP                   '       d"   V
P                  \#        V4      4       RVn        V
'       d   \%        V
4      R,           pV \%        V4       2pTpV^ ,          V^,          V^,          W^,          3p\'        V4      Vn
        R	# u up	pi )content-type0application/x-www-form-urlencoded; charset=utf-8X-Amz-Algorithmr   X-Amz-Credentialr   r   X-Amz-ExpiresX-Amz-SignedHeadersNr   TZkeep_blank_valuesrM   rP   rv   r   r   r   r   r   r   rF   rn   r   r   r   r   r   rb   r]   r%   r,   r   r   )r0   r*   content_typeZblocklisted_content_typer   auth_paramsr   query_string_partskr   
query_dictoperation_paramsnew_query_stringpnew_url_parts   &&             r    r   Z1S3ExpressQueryAuth._modify_request_before_signingv  s    **>:> 	! 3/
 ,,T-A-A'-JK 1

7 3'//+6T]]!>
 !!-373C3C3I3IK/0 W[[)	 &iooN*<*B*B*DE*D$!a1g*D
E>>>gnn-GN <<< /89GL6zBSH !8!E FG 	 1qtQqT+;qTB /A F   7Gc                >    V;P                   R V 2,          un         R# z&X-Amz-Signature=Nr   r0   r*   ro      &&&r    r   Z/S3ExpressQueryAuth._inject_signature_to_request       	*9+66r"   c                r   r@   r2   r   r1   r    r   Z&S3ExpressQueryAuth._normalize_url_path  r   r"   c                    \         # r@   r   r/   r1   r    r   ZS3ExpressQueryAuth.payload  
    
  r"   r   )r3   r4   r5   r6   DEFAULT_EXPIRESr   rC   r   r   r   r   r9   r:   r   r   r   r    r   r   a  s9     O"    "?0B7   r"   r   c                   sH   a a ] tR tRt oRt]3V 3R lltR tR tRtVt	V ;t
# )SigV4QueryAuthi    c                r   r@   r   )r0   rF   r|   r}   r   r   s   &&&&&r    rC   ZSigV4QueryAuth.__init__  s     	K@r"   c           
     r   )r   r   r   r   r   r   r   r   r   Nru   Tr   rM   rP   r   )r0   r*   r   Zblacklisted_content_typer   r   r   r   r   r   r   r   r   r   r   r   r    r   Z-SigV4QueryAuth._modify_request_before_signing  s    **>:> 	! 3/
 ,,T-A-A'-JK 1

7 3'//+6T]]!>
 !!-262B2B2H2HK./ W[[)	 &iooN*<*B*B*DE*D$!a1g*D
E>>>gnn-GN <<< /89GL6zBSH !8!E FG 	 1qtQqT+;qTB /A Fr   c                r  r  r  r  r  r    r   Z+SigV4QueryAuth._inject_signature_to_request  r  r"   r
  )r3   r4   r5   r6   r  rC   r   r   r9   r:   r   r   r   r    r  r    s%     O ?N ?0B7 7r"   r  c                   s0   a  ] tR tRt o RtR tR tRtV tR# )S3SigV4QueryAuthi  zS3 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                r   r@   r2   r   r1   r    r   Z$S3SigV4QueryAuth._normalize_url_path&  r   r"   c                r  r@   r  r/   r1   r    r   ZS3SigV4QueryAuth.payload*  r	  r"   r2   N)	r3   r4   r5   r6   rq   r   r   r9   r:   r;   r=   r    r  r    s     	   r"   r  c                   r   )S3SigV4PostAuthi2  zv
Presigns a s3 post

Implementation doc here:
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
c                r   )r   r   Nr   r   r   r   r   r   x-amz-security-tokenr$   r   r   r   r   r   r    r.   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1r"   r2   Nr3   r4   r5   r6   rq   r.   r9   r:   r;   r=   r    r  r  2  s     %; %;r"   r  c                   s  a  ] tR tRt o . RNRNRNRNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR
NRNR NR!NR"NR#NR$NtR2R& ltR' tR( tR) tR* t	R3R+ lt
R2R, ltR2R- ltR. tR/ tR0 tR1tV tR%# )4
HmacV1Authib  Z
accelerateZaclZcorsZdefaultObjectAclZlocationloggingZ
partNumberr   ZrequestPaymentZtorrentZ
versioningZ	versionIdZversionsZwebsiteZuploadsZuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingZdeleteZ	lifecycleZtaggingZrestoreZstorageClassZnotificationZreplicationZ	analyticsZmetricsZ	inventoryZselectzselect-typezobject-lockNc                r?   r@   rE   r{   r~   r    rC   ZHmacV1Auth.__init__  rH   r"   c                s,   \         P                  ! V P                  P                  P	                  R 4      \
        R7      pVP                  VP	                  R 4      4       \        VP                  4       4      P                  4       P                  R 4      # )r$   rK   )rV   rW   rF   rX   rY   r   r]   r
   r`   ra   r(   )r0   rd   rw   r   r    sign_stringZHmacV1Auth.sign_string  sk    88''..w74
 	--g678??,-335<<WEEr"   c                s^   . ROp. pRV9   d   VR V P                  4       VR&   V Ft  pRpV FN  pVP                  4       pW,          f   K  Wt8X  g   K'  VP                  W,          P                  4       4       RpKP  	  V'       d   Kc  VP                  R4       Kv  	  RP	                  V4      # )content-md5rs   FTrM   rJ   )r  r   Zdate)	_get_dater   r[   ra   r\   )r0   rv   Zinteresting_headershoiZihZfoundre   lkr   r    canonical_standard_headersZ%HmacV1Auth.canonical_standard_headers  s    EW..*%BEYY[<+JJw|1134 E	 
 5

2 & yy~r"   c                sv   . p/ pV Fa  pVP                  4       pW,          f   K  VP                  R4      '       g   K8  RP                  R VP                  V4       4       4      W5&   Kc  	  \	        VP                  4       4      pV F  pVP                  V RW4,           24       K!  	  RP                  V4      # )Nx-amz-r   c              3   s@   "   T F  qP                  4       x  K  	  R # 5ir@   )ra   )r   r   r+   r    r   Z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s      2+?a		+?s   r   rJ   )r   r   r\   r   rZ   Zkeysr[   )r0   rv   r  custom_headersre   r  Zsorted_header_keysr   r    canonical_custom_headersZ#HmacV1Auth.canonical_custom_headers  s    CB|'==**), 2+2??3+?2 *N&	  $N$7$7$9:%CJJ#a 3456 &yy~r"   c                s\    \        V4      ^8X  d   V# V^ ,          \        V^,          4      3# )z
TODO: Do we need this?
)rT   r   )r0   Znvr1   r    	unquote_vZHmacV1Auth.unquote_v  s+     r7a<IqE72a5>**r"   c                s.   Ve   TpMVP                   pVP                  '       d   VP                  P                  R4      pV Uu. uF  qUP                  R^4      NK  	  ppV Uu. uF-  qU^ ,          V P                  9   g   K  V P	                  V4      NK/  	  pp\        V4      ^ 8  d]   VP                  \        ^ 4      R7       V Uu. uF  pRP                  V4      NK  	  ppVR,          pVRP                  V4      ,          pV# u upi u upi u upi )NrP   rO   )re   Z?)	rS   r   rc   QSAOfInterestr  rT   Zsortr   r\   )r0   rc   	auth_pathZbufZqsaZas   &&&   r    canonical_resourceZHmacV1Auth.canonical_resource  s      C**C;;;++##C(C,/0Cq773?CC0+.+.aA$$:L:L2L!q!3   3x!|Z]+,/0Cqsxx{C0s
sxx}$
 1
 1s   D%DD	Dc                s    VP                  4       R ,           pW`P                  V4      R ,           ,          pV P                  V4      pV'       d   WgR ,           ,          pW`P                  W%R7      ,          pV# )rJ   r  )r   r  r  r   )r0   rU   rc   rv   r   r  Zcsr  s   &&&&&&  r    canonical_stringZHmacV1Auth.canonical_string  sg     \\^d"
--g6==66w?4''B
%%e%AA	r"   c                s    V P                   P                  '       d   VR  V P                   P                  VR &   V P                  WW5R7      p\        P	                  RV4       V P                  V4      # )r  r!  r   )rF   rn   r"  rQ   rR   r  )r0   rU   rc   rv   r   r  rd   s   &&&&&& r    get_signatureZHmacV1Auth.get_signature  sr     !!!./.2.>.>.D.DG*+..7 / 
 	(.9//r"   c                sH   V P                   f   \        h\        P                  R4       \	        VP
                  4      p\        P                  RVP                  4       V P                  VP                  W!P                  VP                  R7      pV P                  W4       R # )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr!  )rF   r   rQ   rR   r   r   rU   r#  rv   r  _inject_signature)r0   r*   rc   ro   r   r    r.   ZHmacV1Auth.add_auth  s|    #$$?@%.?&&NNE??g>O>O ' 
	 	w2r"   c                s    \        R R7      # )Trt   r   r0      &r    r  ZHmacV1Auth._get_date  s    &&r"   c                s    R VP                   9   d   VP                   R  RV P                  P                   RV 2pW1P                   R &   R# )r   zAWS r   N)rv   rF   rj   )r0   r*   ro   auth_headerr   r    r$  ZHmacV1Auth._inject_signature  sG    goo- 0T--8899+F+6(r"   rE   )NNr@   )r3   r4   r5   r6   r  rC   r  r  r  r  r   r"  r#  r.   r  r$  r9   r:   r;   r=   r    r  r  b  s    %%% 	% 		%
 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%  	!%" 	 #%$ 	$%%& 	'%( 	!)%* 	'+%, 	$-%. 	/%0 	1%2 	3%4 	5%6 	7%8 	9%: 	;%< 	=%> 	?%@ 	A%B 	C%D 	E%F 	G%H 	I%MN'F"+4	
0	3'7 7r"   r  c                   s@   a  ] tR tRt o RtRt]3R ltR tR tRt	V t
R# )	HmacV1QueryAuthi  z
Generates a presigned request for s3.

Spec from this document:

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

r  c                s    Wn         W n        R # r@   )rF   r   )r0   rF   r   r  r    rC   ZHmacV1QueryAuth.__init__  s    &r"   c                s    \        \        \        P                  ! 4       \        V P                  4      ,           4      4      # r@   )r)   r   rk   r   r%  r&  r    r  ZHmacV1QueryAuth._get_date  s&    3tyy{S%77899r"   c                s   / pV P                   P                  VR &   W#R&   VP                   Fg  pVP                  4       pVR8X  d   VP                  R,          VR&   K2  VP	                  R4      '       g
   VR9   g   KR  VP                  V,          W5&   Ki  	  \        V4      p\        VP                  4      pV^,          '       d   V^,           RV 2pV^ ,          V^,          V^,          Wg^,          3p\        V4      Vn        R# )ri   rL   rs   ZExpiresr  rP   N)r  r   )	rF   rj   rv   r   r   r   r   r   r   )	r0   r*   ro   r   Z
header_keyr  r   r   r   s	   &&&      r    r$  Z!HmacV1QueryAuth._inject_signature  s    
'+'7'7'B'B
#$"+;!//J!!#B V#(/(?
9% x((B 3 - ")!4
 *  3:> W[[!Q44 #$A$q)9(:;1qtQqT+;qTB /r"   )r   rF   N)r3   r4   r5   r6   rq   r  rC   r  r$  r9   r:   r;   r=   r    r(  r(    s(      O,;  :0 0r"   r(  c                   r   )HmacV1PostAuthi@  z
Generates a presigned post for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
c                s   / pVP                   P                  R R4      e   VP                   R ,          p/ p. pVP                   P                  RR4      e1   VP                   R,          pVP                  RR4      e
   VR,          pWCR&   V P                  P                  VR&   V P                  P                  eA   V P                  P                  VR&   VP                  RV P                  P                  /4       \        P                  ! \        P                  ! V4      P                  R4      4      P                  R4      VR&   V P                  VR,          4      VR&   W!P                   R &   W1P                   R&   R# )	r   Nr   r   ri   r  r$   r   ro   )r   r   rF   rj   rn   r[   r^   r_   r'   r   rY   r(   r  )r0   r*   r   r   r   rp   r    r.   ZHmacV1PostAuth.add_authI  sR   ??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1r"   r2   Nr  r;   r=   r    r)  r)  @  s     ; ;r"   r)  c                   r   )
BearerAuthih  z
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                s    V P                   f   \        4       hRV P                   P                   2pRVP                  9   d   VP                  R W!P                  R&   R # )NzBearer r   )rB   r   rn   rv   )r0   r*   r'  r   r    r.   ZBearerAuth.add_authp  sP    ??""$$ 5 567goo-0+6(r"   r2   Nr  r;   r=   r    r*  r*  h  s     7 7r"   r*  c                 s    V  FL  pVR 8X  d   \         V,          u # V\         9   d   \         V,          pV\        9   d   Vu # KB  \        VR7      h	  \        V R7      h)smithy.api#noAuthsignature_version)AUTH_TYPE_TO_SIGNATURE_VERSIONAUTH_TYPE_MAPSr   r   )Z
auth_traitZ	auth_typer-  s   &  r    resolve_auth_typer0  z  sa    	++1)<<88 >y I N2(( 3 /KK   +Z
HHr"   c                 s   V Uu. uF  q"P                  R 4      R,          NK  	  ppV  Uu. uF  pV\        9  g   K  VNK  	  ppV'       d   \        P                  RV4       W,           p\        P                  V4       Uu. uF  pW#9   g   K  VNK  	  ppV F=  pVR8X  d   \        V,          u # \        P                  V4      pV\        9   g   K;  Vu # 	  \        RP                  \        V4      4      R7      hu upi u upi u upi )#z/Unsupported auth schemes in preference list: %rZnoAuthr   r,  )rc   AUTH_PREF_TO_SIGNATURE_VERSIONrQ   rR   r   Zfromkeysr   r/  r   r\   rZ   )Zpreference_listZauth_optionsr   Zservice_supportedZunsupportedZcombinedZprioritized_schemessig_versionr   r    resolve_auth_scheme_preferencer5    s   =IJ\6c*2..\J &%F77 	%  
 ={	
 2H mmH--F& 	-   &X1&99488@.( & +))F+<$=> 5 Ks    C>DDDDZv2Zv3Zv3httpsr   zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postZbearer)CRT_AUTH_TYPE_MAPSZv4zv4-queryZs3v4z
s3v4-queryzaws.auth#sigv4zaws.auth#sigv4aZv4azsmithy.api#httpBearerAuthr+  Znoner1  i   )Z
connectionZexpectz
keep-alivezproxy-authenticatezproxy-authorizationZter   ztransfer-encodingZupgradez
user-agentzx-amzn-trace-idr2  )Lr^   r   r   r   rV   r'   r  rk   Zcollections.abcr   Zemail.utilsr   Zhashlibr   r   Zoperatorr   Zbotocore.compatr   r   r	   r
   r   r   r   r   r   r   r   Zbotocore.exceptionsr   r   r   r   Zbotocore.utilsr   r   r   Z	getLoggerr3   rQ   r   r   rm   r   r   r   r   r!   r,   r-   r>   rD   rr   rx   r   r   r   r   r  r  r  r  r(  r)  r*  r0  r5  r/  Zbotocore.crt.authr6  r]   r.  r   rc   r3  )Zauth_schemer4  s   00r    <module>r7     se           # "         
		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 	))y*~M,!2j 4,-)K*		
 du	"  %C$H$H$J"$J  c2+$J"  "s   6$G 