
    vKgF                     $   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJrJrJrJr  S SKJrJrJrJr  S SK J!r!J"r"J#r#  S S	KJ$r$  \RJ                  " \&5      r'S
r(Sr)Sr*Sr+/ SQr,Sr-Sr.S r/S r0 " S S5      r1 " S S\15      r2 " S S\15      r3 " S S\15      r4 " S S\15      r5 " S S\55      r6 " S S \65      r7 " S! S"\75      r8 " S# S$\75      r9 " S% S&\55      r: " S' S(\:5      r; " S) S*\55      r< " S+ S,\15      r= " S- S.\=5      r> " S/ S0\=5      r? " S1 S2\25      r@S3 rA\3\4\4\=\>\?\<\7\9\8\@S4.rB\(       a  S S5KCJDrD  \BR                  \D5        O\BR                  \5\:\6\;S6.5        S7S8S9S:S;.rFg)<    N)Mapping
formatdate)sha1sha256)
itemgetter)	HAS_CRTHTTPHeadersencodebytesensure_unicodeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsErrorUnknownSignatureVersionError UnsupportedSignatureVersionError)is_valid_ipv6_endpoint_urlnormalize_url_pathpercent_encode_sequence)MD5_AVAILABLE@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)expectz
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                     [        U 5      nUR                  n[        U 5      (       a  SU S3nSSS.nUR                  b9  UR                  UR	                  UR
                  5      :w  a  SX!R                  4-  nU$ )N[]P   i  )httphttpsz%s:%d)r   hostnamer   portgetscheme)url	url_partshostdefault_portss       M/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/botocore/auth.py_host_from_urlr+   K   s|    
 ID!#&&4&{M ~~!>>]..y/?/?@@dNN33DK    c                     U R                   n[        U[        5      (       a'  [        R                  " UR                  S5      5      nU$ [        U[        5      (       a  [        R                  " U5      nU$ Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr0   s     r*   _get_body_as_dictr8   ^   sZ    
 <<D$zz$++g./ K 
D#		zz$Kr,   c                   "    \ rS rSrSrSrS rSrg)
BaseSignerk   Fc                     [        S5      e)Nadd_auth)NotImplementedErrorselfr7   s     r*   r=   BaseSigner.add_autho   s    !*--r,    N)__name__
__module____qualname____firstlineno__REQUIRES_REGIONREQUIRES_TOKENr=   __static_attributes__rB   r,   r*   r:   r:   k   s    ON.r,   r:   c                        \ rS rSrSr S rSrg)TokenSigners   Tc                     Xl         g N
auth_token)r@   rP   s     r*   __init__TokenSigner.__init__y   s    $r,   rO   N)rC   rD   rE   rF   rH   rQ   rI   rB   r,   r*   rK   rK   s   s    N%r,   rK   c                   *    \ rS rSrSrS rS rS rSrg)	SigV2Auth}   z#
Sign a request with Signature V2.
c                     Xl         g rN   credentialsr@   rX   s     r*   rQ   SigV2Auth.__init__       &r,   c                 F   [         R                  S5        [        UR                  5      nUR                  n[        U5      S:X  a  SnUR                   SUR                   SU S3n[        R                  " U R                  R                  R                  S5      [        S9n/ n[        U5       H`  nUS:X  a  M  [        X(   5      n	[!        UR                  S5      SS	9n
[!        U	R                  S5      S
S	9nUR#                  U
 SU 35        Mb     SR%                  U5      nX\-  n[         R                  SU5        UR'                  UR                  S5      5        [(        R*                  " UR-                  5       5      R/                  5       R1                  S5      nX4$ )Nz$Calculating signature using v2 auth.r   /
r/   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r&   pathlenmethodnetlochmacnewrX   
secret_keyencoder   sortedr6   r   appendjoinupdatebase64	b64encodedigeststripr5   )r@   r7   paramssplitri   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s                 r*   calc_signature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                    U R                   c
  [        5       eUR                  (       a  UR                  nOUR                  nU R                   R                  US'   SUS'   SUS'   [
        R                  " [        [
        R                  " 5       5      US'   U R                   R                  (       a  U R                   R                  US'   U R                  X5      u  p4XBS'   U$ )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenra   )rX   r   r0   ry   
access_keytimestrftimeISO8601gmtimetokenr   )r@   r7   ry   r   	signatures        r*   r=   SigV2Auth.add_auth   s     #$&&<<\\F ^^F#'#3#3#>#> %(!"$0 !"mmGT[[]C{!!&*&6&6&<&<F?#++G<'{r,   rW   N)	rC   rD   rE   rF   __doc__rQ   r   r=   rI   rB   r,   r*   rT   rT   }   s    '8r,   rT   c                        \ rS rSrS rS rSrg)	SigV3Auth   c                     Xl         g rN   rW   rY   s     r*   rQ   SigV3Auth.__init__   r[   r,   c                    U R                   c
  [        5       eSUR                  ;   a  UR                  S	 [        SS9UR                  S'   U R                   R                  (       a@  SUR                  ;   a  UR                  S	 U R                   R                  UR                  S'   [
        R                  " U R                   R                  R                  S5      [        S9nUR                  UR                  S   R                  S5      5        [        UR                  5       5      R                  5       nSU R                   R                   SUR                  S5       3nS	UR                  ;   a  UR                  S		 XAR                  S	'   g )
NDateTusegmtX-Amz-Security-Tokenr/   r_   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rX   r   headersr   r   rm   rn   ro   rp   r   rt   r   rw   rx   r   r5   )r@   r7   new_hmacencoded_signaturer   s        r*   r=   SigV3Auth.add_auth   sJ   #$&&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,   rW   N)rC   rD   rE   rF   rQ   r=   rI   rB   r,   r*   r   r      s    '<r,   r   c                       \ rS rSrSrSrS rSS jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)	SigV4Auth   z#
Sign a request with Signature V4.
Tc                 (    Xl         X0l        X l        g rN   )rX   _region_name_service_namer@   rX   service_nameregion_names       r*   rQ   SigV4Auth.__init__   s    & ()r,   c                     U(       a:  [         R                  " XR                  S5      [        5      R	                  5       nU$ [         R                  " XR                  S5      [        5      R                  5       nU$ r.   )rm   rn   rp   r   	hexdigestrw   )r@   r~   msghexsigs        r*   _signSigV4Auth._sign   sW    ((3

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

7 3V<CCEC
r,   c                     [        5       nUR                  R                  5        H%  u  p4UR                  5       nU[        ;  d  M!  XBU'   M'     SU;  a  [        UR                  5      US'   U$ )zS
Select the headers from the request that need to be included
in the StringToSign.
r(   )r
   r   itemslowerSIGNED_HEADERS_BLACKLISTr+   r&   )r@   r7   
header_mapnamer   lnames         r*   headers_to_signSigV4Auth.headers_to_sign   se    
 !]
"??002KDJJLE44$)5! 3 # "0!<Jvr,   c                     UR                   (       a  U R                  UR                   5      $ U R                  [        UR                  5      5      $ rN   )ry   _canonical_query_string_params_canonical_query_string_urlr   r&   r?   s     r*   canonical_query_string SigV4Auth.canonical_query_string   s:    
 >>66w~~FF33HW[[4IJJr,   c           	      <   / n[        U[        5      (       a  UR                  5       nU H1  u  p4UR                  [	        USS9[	        [        U5      SS945        M3     / n[        U5       H  u  p4UR                  U SU 35        M     SR                  U5      nU$ )Nz-_.~rc   re   rf   )r1   r   r   rr   r   r6   rq   rs   )r@   ry   key_val_pairsr~   r   sorted_key_valsr   s          r*   r   (SigV4Auth._canonical_query_string_params  s    fg&&\\^F JC  s(%E
*HI !  !/JC""cU!E7#34 0!$/!:%%r,   c                 :   SnUR                   (       a  / nUR                   R                  S5       H)  nUR                  S5      u  pVnUR                  XW45        M+     / n[	        U5       H  u  pWUR                  U SU 35        M     SR                  U5      nU$ )Nrb   rf   re   )queryrz   	partitionrr   rq   rs   )	r@   partsr   r   pairr~   _r   r   s	            r*   r   %SigV4Auth._canonical_query_string_url  s    !#;;M))#. $s 3$$c\2 / !O %]3
&&#aw'78 4%(XXo%>"%%r,   c                    ^  / n[        [        U5      5      nU HL  nSR                  U 4S jUR                  U5       5       5      nUR	                  U S[        U5       35        MN     SR                  U5      $ )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   D   >#    U H  nTR                  U5      v   M     g 7frN   )_header_value).0vr@   s     r*   	<genexpr>.SigV4Auth.canonical_headers.<locals>.<genexpr>1  s#      /K!""1%%/Ks    :r^   )rq   setrs   get_allrr   r   )r@   r   r   sorted_header_namesr~   r   s   `     r*   canonical_headersSigV4Auth.canonical_headers'  sz     $S%9:&CHH />/F/Fs/K E NNcU!N5$9#:;<	 '
 yy!!r,   c                 @    SR                  UR                  5       5      $ )N )rs   rz   )r@   r   s     r*   r   SigV4Auth._header_value7  s     xx&&r,   c                 Z    [        S [        U5       5       5      nSR                  U5      $ )Nc              3   Z   #    U H"  oR                  5       R                  5       v   M$     g 7frN   )r   rx   )r   ns     r*   r   +SigV4Auth.signed_headers.<locals>.<genexpr>@  s      I4Hq**4Hs   )+;)rq   r   rs   )r@   r   r   s      r*   signed_headersSigV4Auth.signed_headers?  s&    IC4HIIxx  r,   c                     UR                   R                  S0 5      nUR                  S5      n[        U[        5      =(       a    UR                  S5      S:H  $ )Nchecksumrequest_algorithmintrailer)contextr$   r1   dict)r@   r7   checksum_context	algorithms       r*   _is_streaming_checksum_payload(SigV4Auth._is_streaming_checksum_payloadC  sJ    "??..z2>$(()<=	)T*Oy}}T/Bi/OOr,   c                    U R                  U5      (       a  [        $ U R                  U5      (       d  [        $ UR                  nU(       a  [        US5      (       a  UR                  5       n[        R                  " UR                  [        5      n[        5       n[        US5       H  nUR                  U5        M     UR                  5       nUR                  U5        U$ U(       a  [        U5      R                  5       $ [         $ )Nseekr,   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterrt   r   r   EMPTY_SHA256_HASH)r@   r7   request_bodypositionread_chunksizer   chunkhex_checksums           r*   payloadSigV4Auth.payloadH  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                 |    UR                   R                  S5      (       d  gUR                  R                  SS5      $ )Nr!   Tpayload_signing_enabled)r&   
startswithr   r$   r?   s     r*   r   %SigV4Auth._should_sha256_sign_payloadb  s4    {{%%g..
 ""#<dCCr,   c                 D   UR                   R                  5       /nU R                  [        UR                  5      R
                  5      nUR                  U5        UR                  U R                  U5      5        U R                  U5      nUR                  U R                  U5      S-   5        UR                  U R                  U5      5        SUR                  ;   a  UR                  S   nOU R                  U5      nUR                  U5        SR                  U5      $ )Nr^   X-Amz-Content-SHA256)rk   upper_normalize_url_pathr   r&   ri   rr   r   r   r   r   r   r  rs   )r@   r7   crri   r   body_checksums         r*   canonical_requestSigV4Auth.canonical_requestl  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                 ,    [        [        U5      SS9nU$ )Nz/~rc   )r   r   )r@   ri   normalized_paths      r*   r  SigV4Auth._normalize_url_path{  s     24 8tDr,   c                 "   U R                   R                  /nUR                  UR                  S   SS 5        UR                  U R                  5        UR                  U R
                  5        UR                  S5        SR                  U5      $ N	timestampr      aws4_requestr]   )rX   r   rr   r   r   r   rs   r@   r7   scopes      r*   r  SigV4Auth.scope  sp    !!,,-W__[1!A67T&&'T''(^$xxr,   c                     / nUR                  UR                  S   SS 5        UR                  U R                  5        UR                  U R                  5        UR                  S5        SR	                  U5      $ r  )rr   r   r   r   rs   r  s      r*   credential_scopeSigV4Auth.credential_scope  sa    W__[1!A67T&&'T''(^$xxr,   c                    S/nUR                  UR                  S   5        UR                  U R                  U5      5        UR                  [        UR	                  S5      5      R                  5       5        SR                  U5      $ )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/   r^   )rr   r   r  r   rp   r   rs   )r@   r7   r  stss       r*   r{   SigV4Auth.string_to_sign  sl     ""

7??;/0

4((12

6+227;<FFHIyy~r,   c                 D   U R                   R                  nU R                  SU 3R                  5       UR                  S   SS 5      nU R                  X@R
                  5      nU R                  XPR                  5      nU R                  US5      nU R                  XqSS9$ )NAWS4r  r   r  r  T)r   )rX   ro   r   rp   r   r   r   )r@   r{   r7   r~   k_datek_region	k_service	k_signings           r*   r   SigV4Auth.signature  s    ))C5\!!#W__[%A!A%F
 ::f&7&78JJx););<	JJy.9	zz)z>>r,   c                 
   U R                   c
  [        5       e[        R                  R                  5       nUR	                  [
        5      UR                  S'   U R                  U5        U R                  U5      n[        R                  S5        [        R                  SU5        U R                  X5      n[        R                  SU5        U R                  XA5      n[        R                  SU5        U R                  X5        g )Nr  z$Calculating signature using v4 auth.zCanonicalRequest:
%szStringToSign:
%szSignature:
%s)rX   r   datetimeutcnowr   SIGV4_TIMESTAMPr   _modify_request_before_signingr  rg   rh   r{   r   _inject_signature_to_request)r@   r7   datetime_nowr  r{   r   s         r*   r=   SigV4Auth.add_auth  s    #$&&((//1'3'<'<_'M$ 	++G4 227;;<,.?@,,WH(.9NN>;	%y1))'=r,   c                     SU R                  U5       3/nU R                  U5      nUR                  SU R                  U5       35        UR                  SU 35        SR	                  U5      UR
                  S'   U$ )NzAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=z, Authorization)r  r   rr   r   rs   r   )r@   r7   r   auth_strr   s        r*   r1  &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UR                   ;   a  UR                   S	 U R                  U5        U R                  R                  (       a@  SUR                   ;   a  UR                   S	 U R                  R                  UR                   S'   UR                  R                  SS5      (       d1  SUR                   ;   a  UR                   S	 [        UR                   S'   g g )Nr5  r   r  Tr  )r   _set_necessary_date_headersrX   r   r   r$   r   r?   s     r*   r0  (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UR                   ;   a  UR                   S	 [        R                  R                  UR                  S   [        5      n[        [        [        R                  " UR                  5       5      5      5      UR                   S'   SUR                   ;   a  UR                   S	 g g SUR                   ;   a  UR                   S	 UR                  S   UR                   S'   g )Nr   r  
X-Amz-Date)
r   r-  strptimer   r/  r   intcalendartimegm	timetuple)r@   r7   datetime_timestamps      r*   r9  %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,   )r   r   rX   N)F)rC   rD   rE   rF   r   rG   rQ   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r{   r   r=   r1  r0  r9  rI   rB   r,   r*   r   r      s     O* K&"& " '!P
%4D
?>$GIr,   r   c                   :   ^  \ rS rSrU 4S jrU 4S jrS rSrU =r$ )S3SigV4Authi  c                    > [         TU ]  U5        SUR                  ;   a  UR                  S	 U R                  U5      UR                  S'   g )Nr  )superr0  r   r  r@   r7   	__class__s     r*   r0  *S3SigV4Auth._modify_request_before_signing  sA    .w7!W__4 6726,,w2G./r,   c                 
  > UR                   R                  S5      n[        USS 5      nUc  0 nUR                  SS 5      nUb  U$ SnUR                   R                  S0 5      nUR                  S5      n[        U[        5      (       a  UR                  S5      S:X  a  US	   nUR
                  R                  S
5      (       a  XQR                  ;  a  gUR                   R                  SS5      (       a  g[        TU ]%  U5      $ )Nclient_configs3r  zContent-MD5r   r   r   headerr   r!   Thas_streaming_inputF)
r   r$   getattrr1   r   r&   r	  r   rG  r   )	r@   r7   rL  	s3_configsign_payloadchecksum_headerr   r   rI  s	           r*   r   'S3SigV4Auth._should_sha256_sign_payload  s      ++O<M46	 I !}}%>E# ("??..z2>$(()<=	i&&9==+>(+J'/O&&w//oo5 ??4e<< w27;;r,   c                     U$ rN   rB   r@   ri   s     r*   r  S3SigV4Auth._normalize_url_path      r,   rB   )	rC   rD   rE   rF   r0  r   r  rI   __classcell__rI  s   @r*   rE  rE    s    H'<R r,   rE  c                   D   ^  \ rS rSrSrU 4S jrU 4S jrU 4S jrSrU =r	$ )S3ExpressAuthi  Tc                2   > [         TU ]  XU5        X@l        g rN   )rG  rQ   _identity_cache)r@   rX   r   r   identity_cacherI  s        r*   rQ   S3ExpressAuth.__init__  s     	K@-r,   c                 $   > [         TU ]  U5        g rN   )rG  r=   rH  s     r*   r=   S3ExpressAuth.add_auth"  s    !r,   c                    > [         TU ]  U5        SUR                  ;  a#  U R                  R                  UR                  S'   SUR                  ;   a  UR                  S	 g g )Nzx-amz-s3session-tokenr   )rG  r0  r   rX   r   rH  s     r*   r0  ,S3ExpressAuth._modify_request_before_signing%  sU    .w7"'//97;7G7G7M7MGOO34!W__4 67 5r,   )r^  )
rC   rD   rE   rF   REQUIRES_IDENTITY_CACHErQ   r=   r0  rI   rY  rZ  s   @r*   r\  r\    s    "."8 8r,   r\  c                       \ rS rSrSrS rSrg)S3ExpressPostAuthi.  Tc                 $   [         R                   R                  5       nUR                  [        5      UR                  S'   0 nUR                  R                  SS 5      b  UR                  S   n0 n/ nUR                  R                  SS 5      b'  UR                  S   nUR                  SS 5      b  US   nXTS'   SUS'   U R                  U5      US'   UR                  S   US'   UR                  SS05        UR                  SU R                  U5      05        UR                  SUR                  S   05        U R                  R                  b@  U R                  R                  US	'   UR                  S	U R                  R                  05        [        R                  " [        R                  " U5      R                  S
5      5      R                  S
5      US'   U R!                  US   U5      US'   X1R                  S'   XAR                  S'   g )Nr  s3-presign-post-fieldss3-presign-post-policy
conditionsr"  x-amz-algorithmx-amz-credential
x-amz-dateX-Amz-S3session-Tokenr/   policyx-amz-signaturer-  r.  r   r/  r   r$   r  rr   rX   r   ru   rv   r3   dumpsrp   r5   r   r@   r7   r2  fieldsrp  rk  s         r*   r=   S3ExpressPostAuth.add_auth1  s   ((//1'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,   rB   N)rC   rD   rE   rF   re  r=   rI   rB   r,   r*   rg  rg  .  s    "';r,   rg  c                   P   ^  \ rS rSrSrSr\S.U 4S jjrS rS rS r	S	 r
S
rU =r$ )S3ExpressQueryAuthi[  i,  T)expiresc                2   > [         TU ]  UUUUS9  XPl        g )N)r_  rG  rQ   _expires)r@   rX   r   r   r_  ry  rI  s         r*   rQ   S3ExpressQueryAuth.__init___  s*     	)	 	 	
  r,   c                 f   UR                   R                  S5      nSnX#:X  a  UR                   S	 U R                  U R                  U5      5      nSU R	                  U5      UR
                  S   U R                  US.nU R                  R                  b  U R                  R                  US'   [        UR                  5      n[        UR                  SS9nUR                  5        VV	s0 sH
  u  pXS	   _M     n
nn	UR                  (       a"  U
R                  UR                  5        0 Ul        S
nUR                   (       a!  U
R                  [#        U5      5        S
Ul        U
(       a  [%        U
5      S-   nU [%        U5       3nUnUS	   US   US   XS   4n['        U5      Ul
        g s  sn	nf )Ncontent-type0application/x-www-form-urlencoded; charset=utf-8r"  r  zX-Amz-AlgorithmzX-Amz-Credentialr<  zX-Amz-ExpireszX-Amz-SignedHeadersro  Tkeep_blank_valuesr   rb   rf            r   r$   r   r   r  r   r|  rX   r   r   r&   r   r   r   ry   rt   r0   r8   r   r   )r@   r7   content_typeblocklisted_content_typer   auth_paramsr'   query_string_partskr   
query_dictoperation_paramsnew_query_stringpnew_url_partss                  r*   r0  1S3ExpressQueryAuth._modify_request_before_signingp  s    **>:> 	! 3/
 ,,T-A-A'-JK  2 $

7 3!//+6!]]#1
 !!-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   *F-c                 4    U=R                   SU 3-  sl         g Nz&X-Amz-Signature=r&   r@   r7   r   s      r*   r1  /S3ExpressQueryAuth._inject_signature_to_request       	*9+66r,   c                     U$ rN   rB   rV  s     r*   r  &S3ExpressQueryAuth._normalize_url_path  rX  r,   c                     [         $ rN   r   r?   s     r*   r  S3ExpressQueryAuth.payload  
    
  r,   r|  )rC   rD   rE   rF   DEFAULT_EXPIRESre  rQ   r0  r1  r  r  rI   rY  rZ  s   @r*   rx  rx  [  s7    O"     "?0B7   r,   rx  c                   >   ^  \ rS rSrSr\4U 4S jjrS rS rSrU =r	$ )SigV4QueryAuthi    c                 2   > [         TU ]  XU5        X@l        g rN   r{  )r@   rX   r   r   ry  rI  s        r*   rQ   SigV4QueryAuth.__init__  s     	K@r,   c                 f   UR                   R                  S5      nSnX#:X  a  UR                   S	 U R                  U R                  U5      5      nSU R	                  U5      UR
                  S   U R                  US.nU R                  R                  b  U R                  R                  US'   [        UR                  5      n[        UR                  SS9nUR                  5        VV	s0 sH
  u  pXS	   _M     n
nn	UR                  (       a"  U
R                  UR                  5        0 Ul        S
nUR                   (       a!  U
R                  [#        U5      5        S
Ul        U
(       a  [%        U
5      S-   nU [%        U5       3nUnUS	   US   US   XS   4n['        U5      Ul
        g s  sn	nf )Nr  r  r"  r  r  r   Tr  r   rb   rf   r  r  r  r  )r@   r7   r  blacklisted_content_typer   r  r'   r  r  r   r  r  r  r  r  s                  r*   r0  -SigV4QueryAuth._modify_request_before_signing  s    **>:> 	! 3/
 ,,T-A-A'-JK  2 $

7 3!//+6!]]#1
 !!-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                 4    U=R                   SU 3-  sl         g r  r  r  s      r*   r1  +SigV4QueryAuth._inject_signature_to_request  r  r,   r  )
rC   rD   rE   rF   r  rQ   r0  r1  rI   rY  rZ  s   @r*   r  r    s#    O ?N ?0B7 7r,   r  c                   $    \ rS rSrSrS rS rSrg)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                     U$ rN   rB   rV  s     r*   r  $S3SigV4QueryAuth._normalize_url_path   rX  r,   c                     [         $ rN   r  r?   s     r*   r  S3SigV4QueryAuth.payload$  r  r,   rB   N)rC   rD   rE   rF   r   r  r  rI   rB   r,   r*   r  r    s    	 r,   r  c                       \ rS rSrSrS rSrg)S3SigV4PostAuthi,  zv
Presigns a s3 post

Implementation doc here:
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
c                 $   [         R                   R                  5       nUR                  [        5      UR                  S'   0 nUR                  R                  SS 5      b  UR                  S   n0 n/ nUR                  R                  SS 5      b'  UR                  S   nUR                  SS 5      b  US   nXTS'   SUS'   U R                  U5      US'   UR                  S   US'   UR                  SS05        UR                  SU R                  U5      05        UR                  SUR                  S   05        U R                  R                  b@  U R                  R                  US	'   UR                  S	U R                  R                  05        [        R                  " [        R                  " U5      R                  S
5      5      R                  S
5      US'   U R!                  US   U5      US'   X1R                  S'   XAR                  S'   g )Nr  ri  rj  rk  r"  rl  rm  rn  x-amz-security-tokenr/   rp  rq  rr  rt  s         r*   r=   S3SigV4PostAuth.add_auth4  s   ((//1'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,   rB   NrC   rD   rE   rF   r   r=   rI   rB   r,   r*   r  r  ,  s    %;r,   r  c                   r    \ rS rSr/ SQrSS jrS rS rS rS r	SS	 jr
 SS
 jr SS jrS rS rS rSrg)
HmacV1Authi\  )$
accelerateaclcorsdefaultObjectAcllocationlogging
partNumberrp  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                     Xl         g rN   rW   r   s       r*   rQ   HmacV1Auth.__init__  r[   r,   c                 &   [         R                  " U R                  R                  R	                  S5      [
        S9nUR                  UR	                  S5      5        [        UR                  5       5      R                  5       R                  S5      $ )Nr/   r_   )rm   rn   rX   ro   rp   r   rt   r   rw   rx   r5   )r@   r{   r   s      r*   sign_stringHmacV1Auth.sign_string  sk    88''..w74
 	--g678??,-335<<WEEr,   c                 F   / SQn/ nSU;   a  US	 U R                  5       US'   U Hi  nSnU HD  nUR                  5       nX   c  M  Xt:X  d  M!  UR                  X   R                  5       5        SnMF     U(       a  MX  UR                  S5        Mk     SR	                  U5      $ )N)content-md5r  dater   FTrb   r^   )	_get_dater   rr   rx   rs   )r@   r   interesting_headershoiihfoundr~   lks           r*   canonical_standard_headers%HmacV1Auth.canonical_standard_headers  s    EW..*%BEYY[<+JJw|1134 E	 
 5

2 & yy~r,   c                 b   / n0 nU H[  nUR                  5       nX   c  M  UR                  S5      (       d  M2  SR                  S UR                  U5       5       5      X5'   M]     [	        UR                  5       5      nU H  nUR                  U SX4    35        M     SR                  U5      $ )Nx-amz-r   c              3   >   #    U H  oR                  5       v   M     g 7frN   )rx   )r   r   s     r*   r   6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s      2+?a		+?s   r   r^   )r   r	  rs   r   rq   keysrr   )r@   r   r  custom_headersr~   r  sorted_header_keyss          r*   canonical_custom_headers#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                 J    [        U5      S:X  a  U$ US   [        US   5      4$ )z
TODO: Do we need this?
r  r   )rj   r   )r@   nvs     r*   	unquote_vHmacV1Auth.unquote_v  s+     r7a<IqE72a5>**r,   c                    Ub  UnOUR                   nUR                  (       a  UR                  R                  S5      nU Vs/ sH  oUR                  SS5      PM     nnU Vs/ sH(  oUS   U R                  ;   d  M  U R	                  U5      PM*     nn[        U5      S:  aQ  UR                  [        S5      S9  U Vs/ sH  nSR                  U5      PM     nnUS-  nUSR                  U5      -  nU$ s  snf s  snf s  snf )Nrf   re   r  r   )r~   ?)	ri   r   rz   QSAOfInterestr  rj   sortr   rs   )r@   rz   	auth_pathbufqsaas         r*   canonical_resource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   C5#C:<C:>C?c                     UR                  5       S-   nX`R                  U5      S-   -  nU R                  U5      nU(       a  XgS-   -  nX`R                  X%S9-  nU$ )Nr^   r  )r  r  r  r  )r@   rk   rz   r   ry  r  csr  s           r*   canonical_stringHmacV1Auth.canonical_string  sg     \\^d"
--g6==66w?4''B
%%e%AA	r,   c                     U R                   R                  (       a  US	 U R                   R                  US'   U R                  XX5S9n[        R	                  SU 35        U R                  U5      $ )Nr  r  zStringToSign:
)rX   r   r  rg   rh   r  )r@   rk   rz   r   ry  r  r{   s          r*   get_signatureHmacV1Auth.get_signature  st     !!./.2.>.>.D.DG*+..7 / 
 	~&678//r,   c                 B   U R                   c  [        e[        R                  S5        [	        UR
                  5      n[        R                  SUR                   35        U R                  UR                  X!R                  UR                  S9nU R                  X5        g )Nz(Calculating signature using hmacv1 auth.zHTTP request method: r  )rX   r   rg   rh   r   r&   rk   r  r   r  _inject_signature)r@   r7   rz   r   s       r*   r=   HmacV1Auth.add_auth  s    #$$?@%,W^^,<=>&&NNE??g>O>O ' 
	 	w2r,   c                     [        SS9$ )NTr   r   r@   s    r*   r  HmacV1Auth._get_date  s    &&r,   c                     SUR                   ;   a  UR                   S	 SU R                  R                   SU 3nX1R                   S'   g )Nr5  zAWS r   )r   rX   r   )r@   r7   r   auth_headers       r*   r  HmacV1Auth._inject_signature  sG    goo- 0T--8899+F+6(r,   rW   )NNrN   )rC   rD   rE   rF   r  rQ   r  r  r  r  r  r  r  r=   r  r  rI   rB   r,   r*   r  r  \  sN    %MN'F"+6 ?C	 ?C
0	3'7r,   r  c                   4    \ rS rSrSrSr\4S jrS rS rSr	g)	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                     Xl         X l        g rN   )rX   r|  )r@   rX   ry  s      r*   rQ   HmacV1QueryAuth.__init__  s    &r,   c                 |    [        [        [        R                  " 5       [        U R                  5      -   5      5      $ rN   )r6   r>  r   r|  r  s    r*   r  HmacV1QueryAuth._get_date  s&    3tyy{S%77899r,   c                    0 nU R                   R                  US'   X#S'   UR                   H\  nUR                  5       nUS:X  a  UR                  S   US'   M-  UR	                  S5      (       d  US;   d  MK  UR                  U   X5'   M^     [        U5      n[        UR                  5      nUS   (       a
  US    SU 3nUS	   US
   US   XgS   4n[        U5      Ul        g )Nr   ra   r   Expiresr  )r  r     rf   r   r  r  r  )	rX   r   r   r   r	  r   r   r&   r   )	r@   r7   r   r  
header_keyr  r  r  r  s	            r*   r  !HmacV1QueryAuth._inject_signature  s    
'+'7'7'B'B
#$"+;!//J!!#B V#(/(?
9% x((B 3 - ")!4
 *  3:> W[[!Q4 #$A$q)9(:;1qtQqT+;qTB /r,   )r|  rX   N)
rC   rD   rE   rF   r   r  rQ   r  r  rI   rB   r,   r*   r  r    s      O,;  :0r,   r  c                       \ rS rSrSrS rSrg)HmacV1PostAuthi:  z
Generates a presigned post for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
c                    0 nUR                   R                  SS 5      b  UR                   S   n0 n/ nUR                   R                  SS 5      b'  UR                   S   nUR                  SS 5      b  US   nXCS'   U R                  R                  US'   U R                  R                  b@  U R                  R                  US'   UR                  SU R                  R                  05        [        R                  " [        R                  " U5      R                  S5      5      R                  S5      US'   U R                  US   5      US'   X!R                   S'   X1R                   S'   g )	Nri  rj  rk  r   r  r/   rp  r   )r   r$   rX   r   r   rr   ru   rv   r3   rs  rp   r5   r  )r@   r7   ru  rp  rk  s        r*   r=   HmacV1PostAuth.add_authC  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,   rB   Nr  rB   r,   r*   r  r  :  s    ;r,   r  c                       \ rS rSrSrS rSrg)
BearerAuthib  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                     U R                   c
  [        5       eSU R                   R                   3nSUR                  ;   a  UR                  S	 X!R                  S'   g )NzBearer r5  )rP   r   r   r   )r@   r7   r
  s      r*   r=   BearerAuth.add_authj  sP    ??""$$ 5 567goo-0+6(r,   rB   Nr  rB   r,   r*   r  r  b  s    7r,   r  c                     U  H>  nUS:X  a  [         U   s  $ U[         ;   a  [         U   nU[        ;   a  Us  $ M7  [        US9e   [        U S9e)Nsmithy.api#noAuth)signature_version)AUTH_TYPE_TO_SIGNATURE_VERSIONAUTH_TYPE_MAPSr   r   )
auth_trait	auth_typer!  s      r*   resolve_auth_typer&  t  sa    	++1)<<88 >y I N2(( 3 /KK   +Z
HHr,   )v2v3v3httpsrM  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   )Gru   r?  r-  r   rm   r3   r  r   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr	   r
   r   r   r   r   r   r   r   botocore.exceptionsr   r   r   r   botocore.utilsr   r   r   r   	getLoggerrC   rg   r   r   r   r/  r   r   r   r+   r8   r:   rK   rT   r   r   rE  r\  rg  rx  r  r  r  r  r  r  r  r&  r#  botocore.crt.authr+  rt   r"  rB   r,   r*   <module>r9     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 

%(!,!2 4,-&*		
 !)	" r,   