
     h                        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)expectztransfer-encodingz
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                     t        |       }|j                  }t        |       rd| d}ddd}|j                  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       i/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/botocore/auth.py_host_from_urlr-   J   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)requestr2   s     r,   _get_body_as_dictr:   ]   sT    
 <<D$zz$++g./ K 
D#	zz$Kr.   c                       e Zd ZdZdZd Zy)
BaseSignerFc                     t        d      )Nadd_auth)NotImplementedErrorselfr9   s     r,   r>   zBaseSigner.add_authn   s    !*--r.   N)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENr>    r.   r,   r<   r<   j   s    ON.r.   r<   c                       e Zd ZdZ	 d Zy)TokenSignerTc                     || _         y N)
auth_token)rA   rL   s     r,   __init__zTokenSigner.__init__x   s	    $r.   N)rB   rC   rD   rF   rM   rG   r.   r,   rI   rI   r   s    N%r.   rI   c                   "    e Zd ZdZd Zd Zd Zy)	SigV2Authz+
    Sign a request with Signature V2.
    c                     || _         y rK   credentialsrA   rR   s     r,   rM   zSigV2Auth.__init__   
    &r.   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   /
r1   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r(   pathlenmethodnetlochmacnewrR   
secret_keyencoder   sortedr8   r   appendjoinupdatebase64	b64encodedigeststripr7   )rA   r9   paramssplitrb   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s                 r,   calc_signaturezSigV2Auth.calc_signature   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r.   c                    | j                   
t               |j                  r|j                  }n|j                  }| j                   j                  |d<   d|d<   d|d<   t        j                  t        t        j                               |d<   | j                   j                  r| j                   j                  |d<   | j                  ||      \  }}||d<   |S )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenrZ   )rR   r   r2   rr   
access_keytimestrftimeISO8601gmtimetokenr}   )rA   r9   rr   r{   	signatures        r,   r>   zSigV2Auth.add_auth   s     #$&&<<\\F ^^F#'#3#3#>#> %(!"$0 !"mmGT[[]C{!!&*&6&6&<&<F?#++GV<I'{r.   N)rB   rC   rD   __doc__rM   r}   r>   rG   r.   r,   rO   rO   |   s    '8r.   rO   c                       e Zd Zd Zd Zy)	SigV3Authc                     || _         y rK   rQ   rS   s     r,   rM   zSigV3Auth.__init__   rT   r.   c                    | j                   
t               d|j                  v r|j                  d= t        d      |j                  d<   | j                   j                  r>d|j                  v r|j                  d= | j                   j                  |j                  d<   t        j                  | j                   j                  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-Tokenr1   rX   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rR   r   headersr   r   rf   rg   rh   ri   r   rm   r   rp   rq   r   r7   )rA   r9   new_hmacencoded_signaturer   s        r,   r>   zSigV3Auth.add_auth   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;./r.   N)rB   rC   rD   rM   r>   rG   r.   r,   r   r      s    '<r.   r   c                       e Zd ZdZdZd ZddZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 .    || _         || _        || _        y rK   )rR   _region_name_service_namerA   rR   service_nameregion_names       r,   rM   zSigV4Auth.__init__   s    & ()r.   c                     |r:t        j                  ||j                  d      t              j	                         }|S t        j                  ||j                  d      t              j                         }|S r0   )rf   rg   ri   r   	hexdigestrp   )rA   rw   msghexsigs        r,   _signzSigV4Auth._sign   s[    ((3

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

7 3V<CCEC
r.   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_BLACKLISTr-   r(   )rA   r9   
header_mapnamerx   lnames         r,   headers_to_signzSigV4Auth.headers_to_sign   sn    
 !]
"??002 	*KD%JJLE44$)
5!	* # "0!<Jvr.   c                     |j                   r| j                  |j                         S | j                  t        |j                              S rK   )rr   _canonical_query_string_params_canonical_query_string_urlr   r(   r@   s     r,   canonical_query_stringz SigV4Auth.canonical_query_string   s:    
 >>66w~~FF33HW[[4IJJr.   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\   r^   r_   )r3   r   r   rk   r   r8   rj   rl   )rA   rr   key_val_pairsrw   rx   sorted_key_valsr   s          r,   r   z(SigV4Auth._canonical_query_string_params  s    fg&\\^F  	JC  s(%E
*HI	  !/ 	5JC""cU!E7#34	5!$/!:%%r.   c                 .   d}|j                   rg }|j                   j                  d      D ]*  }|j                  d      \  }}}|j                  ||f       , g }t	        |      D ]  \  }}|j                  | d|         dj                  |      }|S )Nr[   r_   r^   )queryrs   	partitionrk   rj   rl   )	rA   partsr   r   pairrw   _rx   r   s	            r,   r   z%SigV4Auth._canonical_query_string_url  s    !#;;M))#. 3 $s 3Q$$c5\23 !O %]3 9
U&&#aw'789%(XXo%>"%%r.   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rK   )_header_value).0vrA   s     r,   	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>0  s!      *+""1%s   r#   rW   )rj   setrl   get_allrk   r   )rA   r   r   sorted_header_namesrw   rx   s   `     r,   canonical_headerszSigV4Auth.canonical_headers&  s     $S%9:& 	=CHH />/F/Fs/K E NNcU!N5$9#:;<		=
 yy!!r.   c                 @    dj                  |j                               S )N )rl   rs   )rA   rx   s     r,   r   zSigV4Auth._header_value6  s     xx&&r.   c                 Z    t        d t        |      D              }dj                  |      S )Nc              3   X   K   | ]"  }|j                         j                          $ y wrK   )r   rq   )r   ns     r,   r   z+SigV4Auth.signed_headers.<locals>.<genexpr>?  s     Iq*Is   (*;)rj   r   rl   )rA   r   r   s      r,   signed_headerszSigV4Auth.signed_headers>  s&    IC4HIIxx  r.   c                     |j                   j                  di       }|j                  d      }t        |t              xr |j                  d      dk(  S )Nchecksumrequest_algorithmintrailer)contextr&   r3   dict)rA   r9   checksum_context	algorithms       r,   _is_streaming_checksum_payloadz(SigV4Auth._is_streaming_checksum_payloadB  sJ    "??..z2>$(()<=	)T*Oy}}T/Bi/OOr.   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seekr.   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterrm   r   r   EMPTY_SHA256_HASH)rA   r9   request_bodypositionread_chunksizer   chunkhex_checksums           r,   payloadzSigV4Auth.payloadG  s    ..w75511': $#||GL&9#((*H&..!!>N xHnc2 '&'#--/Lh' ,'1133$$r.   c                 r    |j                   j                  d      sy|j                  j                  dd      S )Nr"   Tpayload_signing_enabled)r(   
startswithr   r&   r@   s     r,   r   z%SigV4Auth._should_sha256_sign_payloada  s1    {{%%g.
 ""#<dCCr.   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 )NrW   X-Amz-Content-SHA256)rd   upper_normalize_url_pathr   r(   rb   rk   r   r   r   r   r   r   rl   )rA   r9   crrb   r   body_checksums         r,   canonical_requestzSigV4Auth.canonical_requestk  s    nn""$%''(=(B(BC
		$
		$--g67..w7
		$((9D@A
		$%%o67!W__4#OO,BCM LL1M
		- yy}r.   c                 2    t        t        |      d      }|S )Nz/~r\   )r   r   )rA   rb   normalized_paths      r,   r   zSigV4Auth._normalize_url_pathz  s     24 8tDr.   c                 "   | j                   j                  g}|j                  |j                  d   dd        |j                  | j                         |j                  | j
                         |j                  d       dj                  |      S N	timestampr      aws4_requestrV   )rR   r   rk   r   r   r   rl   rA   r9   scopes      r,   r   zSigV4Auth.scope~  sp    !!,,-W__[1!A67T&&'T''(^$xxr.   c                     g }|j                  |j                  d   dd        |j                  | j                         |j                  | j                         |j                  d       dj	                  |      S r   )rk   r   r   r   rl   r   s      r,   credential_scopezSigV4Auth.credential_scope  sa    W__[1!A67T&&'T''(^$xxr.   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   r1   rW   )rk   r   r   r   ri   r   rl   )rA   r9   r   stss       r,   rt   zSigV4Auth.string_to_sign  sl     ""

7??;/0

4((12

6+227;<FFHIyy~r.   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   )rR   rh   r   ri   r   r   r   )rA   rt   r9   rw   k_datek_region	k_service	k_signings           r,   r   zSigV4Auth.signature  s    ))C5\!!#W__[%A!A%F
 ::fd&7&78JJx););<	JJy.9	zz)^z>>r.   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)rR   r   r   r   SIGV4_TIMESTAMPr   _modify_request_before_signingr   r`   ra   rt   r   _inject_signature_to_request)rA   r9   datetime_nowr   rt   r   s         r,   r>   zSigV4Auth.add_auth  s    #$&&+-'3'<'<_'M$ 	++G4 227;;<,.?@,,W6GH(.9NN>7;	%y1))'9=r.   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   rk   r   rl   r   )rA   r9   r   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                    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_headersrR   r   r   r&   r   r@   s     r,   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r.   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)rA   r9   datetime_timestamps      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.   N)F)rB   rC   rD   r   rE   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r>   r  r  r  rG   r.   r,   r   r      s     O* K&"& " '!P
%4D
?>$GIr.   r   c                   .     e Zd Z fdZ fdZd Z xZS )S3SigV4Authc                     t         |   |       d|j                  v r|j                  d= | j                  |      |j                  d<   y )Nr   )superr  r   r   rA   r9   	__class__s     r,   r  z*S3SigV4Auth._modify_request_before_signing  sA    .w7!W__4 6726,,w2G./r.   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&   getattrr3   r   r(   r   r   r"  r   )	rA   r9   r&  	s3_configsign_payloadchecksum_headerr   r   r$  s	           r,   r   z'S3SigV4Auth._should_sha256_sign_payload  s      ++O<M46	 I !}}%>E# ("??..z2>$(()<=	i&9==+>(+J'/O&&w/goo5 ??4e< w27;;r.   c                     |S rK   rG   rA   rb   s     r,   r   zS3SigV4Auth._normalize_url_path      r.   )rB   rC   rD   r  r   r   __classcell__r$  s   @r,   r   r     s    H'<Rr.   r   c                   6     e Zd ZdZ fdZ fdZ fdZ xZS )S3ExpressAuthTc                6    t         |   |||       || _        y rK   )r"  rM   _identity_cache)rA   rR   r   r   identity_cacher$  s        r,   rM   zS3ExpressAuth.__init__  s     	lK@-r.   c                 $    t         |   |       y rK   )r"  r>   r#  s     r,   r>   zS3ExpressAuth.add_auth!  s    !r.   c                     t         |   |       d|j                  vr#| j                  j                  |j                  d<   d|j                  v r|j                  d= y y )Nzx-amz-s3session-tokenr   )r"  r  r   rR   r   r#  s     r,   r  z,S3ExpressAuth._modify_request_before_signing$  sU    .w7"'//97;7G7G7M7MGOO34!W__4 67 5r.   )rB   rC   rD   REQUIRES_IDENTITY_CACHErM   r>   r  r1  r2  s   @r,   r4  r4    s    "."8 8r.   r4  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-Tokenr1   policyx-amz-signaturer   r   r  r   r&   r   rk   rR   r   rn   ro   r5   dumpsri   r7   r   rA   r9   r  fieldsrE  r@  s         r,   r>   zS3ExpressPostAuth.add_auth0  s   +-'3'<'<_'M$??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.   N)rB   rC   rD   r:  r>   rG   r.   r,   r<  r<  -  s    "';r.   r<  c                   D     e Zd ZdZdZed fd
Zd Zd Zd Zd Z	 xZ
S )	S3ExpressQueryAuthi,  T)expiresc                :    t         |   ||||       || _        y )N)r7  r"  rM   _expires)rA   rR   r   r   r7  rM  r$  s         r,   rM   zS3ExpressQueryAuth.__init__^  s,     	)	 	 	
  r.   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-SignedHeadersrD  Tkeep_blank_valuesr   r[   r_            r   r&   r   r   r   r   rP  rR   r   r   r(   r   r   r   rr   rm   r2   r:   r   r   )rA   r9   content_typeblocklisted_content_typer   auth_paramsr)   query_string_partskr   
query_dictoperation_paramsnew_query_stringpnew_url_partss                  r,   r  z1S3ExpressQueryAuth._modify_request_before_signingo  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(   rA   r9   r   s      r,   r  z/S3ExpressQueryAuth._inject_signature_to_request       	*9+66r.   c                     |S rK   rG   r/  s     r,   r   z&S3ExpressQueryAuth._normalize_url_path  r0  r.   c                     t         S rK   r   r@   s     r,   r   zS3ExpressQueryAuth.payload  
    
  r.   )rB   rC   rD   DEFAULT_EXPIRESr:  rM   r  r  r   r   r1  r2  s   @r,   rL  rL  Z  s-    O"   "?0B7 r.   rL  c                   2     e Zd ZdZef fd	Zd Zd Z xZS )SigV4QueryAuth  c                 6    t         |   |||       || _        y rK   rO  )rA   rR   r   r   rM  r$  s        r,   rM   zSigV4QueryAuth.__init__  s     	lK@r.   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 )NrR  rS  r  r   rT  r   TrU  r   r[   r_   rW  rX  rY  rZ  )rA   r9   r[  blacklisted_content_typer   r]  r)   r^  r_  r   r`  ra  rb  rc  rd  s                  r,   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re  c                 4    |xj                   d| z  c_         y rg  rh  ri  s      r,   r  z+SigV4QueryAuth._inject_signature_to_request  rj  r.   )rB   rC   rD   ro  rM   r  r  r1  r2  s   @r,   rq  rq    s    O ?N ?0B7r.   rq  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 rK   rG   r/  s     r,   r   z$S3SigV4QueryAuth._normalize_url_path  r0  r.   c                     t         S rK   rm  r@   s     r,   r   zS3SigV4QueryAuth.payload#  rn  r.   N)rB   rC   rD   r   r   r   rG   r.   r,   rx  rx    s    	 r.   rx  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   r>  r?  r@  r  rA  rB  rC  x-amz-security-tokenr1   rE  rF  rG  rI  s         r,   r>   zS3SigV4PostAuth.add_auth3  s   +-'3'<'<_'M$??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.   NrB   rC   rD   r   r>   rG   r.   r,   r|  r|  +  s    %;r.   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
partNumberrE  requestPaymenttorrent
versioning	versionIdversionswebsiteuploadsuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdelete	lifecycletaggingrestorestorageClassnotificationreplicationr  	analyticsmetrics	inventoryselectzselect-typezobject-lockNc                     || _         y rK   rQ   r   s       r,   rM   zHmacV1Auth.__init__  rT   r.   c                 *   t        j                  | j                  j                  j	                  d      t
              }|j                  |j	                  d             t        |j                               j                         j                  d      S )Nr1   rX   )rf   rg   rR   rh   ri   r   rm   r   rp   rq   r7   )rA   rt   r   s      r,   sign_stringzHmacV1Auth.sign_string  sk    88''..w74
 	--g678??,-335<<WEEr.   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-md5rR  dater   FTr[   rW   )	_get_dater   rk   rq   rl   )rA   r   interesting_headershoiihfoundrw   lks           r,   canonical_standard_headersz%HmacV1Auth.canonical_standard_headers  s    EW..*% 	BE !YY[3<+bJJws|1134 E	!
 

2	 yy~r.   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rK   )rq   )r   r   s     r,   r   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s      2&'	2s   r#   rW   )r   r   rl   r   rj   keysrk   )rA   r   r  custom_headersrw   r  sorted_header_keyss          r,   canonical_custom_headersz#HmacV1Auth.canonical_custom_headers  s     	CBs|'==*), 2+2??3+?2 *N2&		 $N$7$7$9:% 	7CJJ#as 3456	7yy~r.   c                 H    t        |      dk(  r|S |d   t        |d         fS )z(
        TODO: Do we need this?
        rW  r   )rc   r   )rA   nvs     r,   	unquote_vzHmacV1Auth.unquote_v  s+     r7a<IqE72a5>**r.   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 )Nr_   r^   rW  r   )rw   ?)	rb   r   rs   QSAOfInterestr  rc   sortr   rl   )rA   rs   	auth_pathbufqsaas         r,   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 )NrW   r  )r   r  r  r  )rA   rd   rs   r   rM  r  csr  s           r,   canonical_stringzHmacV1Auth.canonical_string  so     \\^d"
d--g6==66w?.4''B
d%%ey%AA	r.   c                     | j                   j                  r|d= | j                   j                  |d<   | j                  ||||      }t        j	                  d|       | j                  |      S )Nr~  r  r  )rR   r   r  r`   ra   r  )rA   rd   rs   r   rM  r  rt   s          r,   get_signaturezHmacV1Auth.get_signature  ss     !!./.2.>.>.D.DG*+..E7i / 
 	(.9//r.   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  )rR   r   r`   ra   r   r(   rd   r  r   r  _inject_signature)rA   r9   rs   r   s       r,   r>   zHmacV1Auth.add_auth  s    #$$?@%.?&&NNE7??g>O>O ' 
	 	w	2r.   c                     t        d      S )NTr   r   rA   s    r,   r  zHmacV1Auth._get_date  s    &&r.   c                     d|j                   v r|j                   d= d| j                  j                   d| }||j                   d<   y )Nr  zAWS r#   )r   rR   r   )rA   r9   r   auth_headers       r,   r  zHmacV1Auth._inject_signature  sI    goo- 0T--8899+F+6(r.   )NNrK   )rB   rC   rD   r  rM   r  r  r  r  r  r  r  r>   r  r  rG   r.   r,   r  r  [  sN    %MN'F"+6 ?C	 ?C
0	3'7r.   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

    rr  c                      || _         || _        y rK   )rR   rP  )rA   rR   rM  s      r,   rM   zHmacV1QueryAuth.__init__  s    &r.   c                 z    t        t        t        j                         t        | j                        z               S rK   )r8   r  r   rP  r  s    r,   r  zHmacV1QueryAuth._get_date  s&    3tyy{S%77899r.   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   rZ   r   Expiresr  )r  rR     r_   r   rW  rX  rY  )	rR   r   r   r   r   r   r   r(   r   )	rA   r9   r   r`  
header_keyr  rb  rc  rd  s	            r,   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 /r.   N)rB   rC   rD   r   ro  rM   r  r  rG   r.   r,   r  r    s      O,;  :0r.   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 )	Nr>  r?  r@  r   r~  r1   rE  r   )r   r&   rR   r   r   rk   rn   ro   r5   rH  ri   r7   r  )rA   r9   rJ  rE  r@  s        r,   r>   zHmacV1PostAuth.add_authB  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1r.   Nr  rG   r.   r,   r  r  9  s    ;r.   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  )rL   r   r   r   )rA   r9   r  s      r,   r>   zBearerAuth.add_authi  sR    ??""$$ 5 567goo-0+6(r.   Nr  rG   r.   r,   r  r  a  s    7r.   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      r,   resolve_auth_typer  s  sa     L	++1)<<88 >y I N2((.KKL +Z
HHr.   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  )rs   AUTH_PREF_TO_SIGNATURE_VERSIONr`   ra   r   fromkeysr&   r  r   rl   rj   )preference_listauth_optionsr'   service_supportedunsupportedcombinedprioritized_schemessig_versions           r,   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  )Lrn   r  r  r   rf   r5   r  r   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr	   r
   r   r   r   r   r   r   r   r   r   botocore.exceptionsr   r   r   r   botocore.utilsr   r   r   	getLoggerrB   r`   r   r   r   r  r   r   r   r-   r:   r<   rI   rO   r   r   r   r4  r<  rL  rq  rx  r|  r  r  r  r  r  r  r  botocore.crt.authr  rm   r  r   rs   r  )auth_schemer  s   00r,   <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