
    /Jf                     n   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 d dlmZmZ d dlmZm Z m!Z! d d	lm"Z"  ej#        e$          Z%d
Z&dZ'dZ(dZ)g dZ*dZ+dZ,d Z-d Z. G d d          Z/ G d de/          Z0 G d de/          Z1 G d de/          Z2 G d de/          Z3 G d de3          Z4 G d d e4          Z5 G d! d"e5          Z6 G d# d$e5          Z7 G d% d&e3          Z8 G d' d(e8          Z9 G d) d*e3          Z: G d+ d,e/          Z; G d- d.e;          Z< G d/ d0e;          Z= G d1 d2e0          Z>e1e2e2e;e<e=e:e5e7e6e>d3Z?erd d4l@mAZA e?B                    eA           dS e?B                    e3e8e4e9d5           dS )6    N)Mapping
formatdate)sha1sha256)
itemgetter)	HAS_CRTHTTPHeadersencodebytesensure_unicodeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsError)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                     t          |           }|j        }t          |           rd| d}ddd}|j        /|j        |                    |j                  k    rd||j        fz  }|S )N[]P   i  )httphttpsz%s:%d)r   hostnamer   portgetscheme)url	url_partshostdefault_portss       P/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/botocore/auth.py_host_from_urlr)   F   s    
 ID!#&& 4{{{ M ~!>]..y/?@@@@dIN33DK    c                     | j         }t          |t                    r(t          j        |                    d                    }n)t          |t                    rt          j        |          }|S Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr.   s     r(   _get_body_as_dictr6   Y   s`    
 <D$  z$++g..//	D#		  z$Kr*   c                       e Zd ZdZdZd ZdS )
BaseSignerFc                      t          d          )Nadd_auth)NotImplementedErrorselfr5   s     r(   r:   zBaseSigner.add_authj   s    !*---r*   N)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENr:    r*   r(   r8   r8   f   s-        ON. . . . .r*   r8   c                       e Zd ZdZ	 d ZdS )TokenSignerTc                     || _         d S N)
auth_token)r=   rH   s     r(   __init__zTokenSigner.__init__t   s    $r*   N)r>   r?   r@   rB   rI   rC   r*   r(   rE   rE   n   s-        N% % % % %r*   rE   c                   $    e Zd ZdZd Zd Zd ZdS )	SigV2Authz+
    Sign a request with Signature V2.
    c                     || _         d S rG   credentialsr=   rN   s     r(   rI   zSigV2Auth.__init__}       &r*   c                    t                               d           t          |j                  }|j        }t          |          dk    rd}|j         d|j         d| d}t          j	        | j
        j                            d          t                    }g }t          |          D ]}|dk    r	t          ||                   }	t!          |                    d          d	          }
t!          |	                    d          d
	          }|                    |
 d|            d                    |          }||z  }t                               d|           |                    |                    d                     t)          j        |                                                                                              d          }||fS )Nz$Calculating signature using v2 auth.r   /
r-   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r$   pathlenmethodnetlochmacnewrN   
secret_keyencoder   sortedr4   r   appendjoinupdatebase64	b64encodedigeststripr3   )r=   r5   paramssplitr^   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s                 r(   calc_signaturezSigV2Auth.calc_signature   s   ;<<<%%zt99>>D#NFFelFFdFFF'..w776
 
 
 &>> 		9 		9C k!!s$$Eszz'22<<<J g!6!6UCCCLLLJ77778888XXe__")>:::^**733444u||~~..4466==gFFCy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<   | 
                    ||          \  }}||d<   |S )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenrV   )rN   r   r.   rn   
access_keytimestrftimeISO8601gmtimetokenry   )r=   r5   rn   rw   	signatures        r(   r:   zSigV2Auth.add_auth   s     #$&&&< 	$\FF ^F#'#3#> %(!"$0 !"mGT[]]CC{! 	=&*&6&<F?#++GV<<I'{r*   N)r>   r?   r@   __doc__rI   ry   r:   rC   r*   r(   rK   rK   x   sK         ' ' '  8    r*   rK   c                       e Zd Zd Zd ZdS )	SigV3Authc                     || _         d S rG   rM   rO   s     r(   rI   zSigV3Auth.__init__   rP   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                            d          t                    }|
                    |j        d                             d                     t          |                                                                          }d| j         j         d|                    d           }d	|j        v r|j        d	= ||j        d	<   d S )
NDateTusegmtX-Amz-Security-Tokenr-   rT   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rN   r   headersr   r   rb   rc   rd   re   r   ri   r   rl   rm   r   r3   )r=   r5   new_hmacencoded_signaturer   s        r(   r:   zSigV3Auth.add_auth   sd   #$&&&W_$$'",D"9"9"9! 	M%88O$:;6:6F6LGO238'..w776
 
 
 	/66w??@@@'(9(9::@@BBR)9)D R R.?.F.Fw.O.OR R 	 "W_44 672;.///r*   N)r>   r?   r@   rI   r:   rC   r*   r(   r   r      s2        ' ' '< < < < <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dS )	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 0    || _         || _        || _        d S rG   )rN   _region_name_service_namer=   rN   service_nameregion_names       r(   rI   zSigV4Auth.__init__   s"    & ()r*   Fc                    |rAt          j        ||                    d          t                                                    }n@t          j        ||                    d          t                                                    }|S r,   )rb   rc   re   r   	hexdigestrl   )r=   rs   msghexsigs        r(   _signzSigV4Auth._sign   sh     	F(3

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

7 3 3V<<CCEEC
r*   c                     t                      }|j                                        D ]'\  }}|                                }|t          vr|||<   (d|vrt          |j                  |d<   |S )zk
        Select the headers from the request that need to be included
        in the StringToSign.
        r&   )r
   r   itemslowerSIGNED_HEADERS_BLACKLISTr)   r$   )r=   r5   
header_mapnamert   lnames         r(   headers_to_signzSigV4Auth.headers_to_sign   sy    
 !]]
"?0022 	* 	*KD%JJLLE444$)
5!## "0!<!<Jvr*   c                     |j         r|                     |j                   S |                     t          |j                            S rG   )rn   _canonical_query_string_params_canonical_query_string_urlr   r$   r<   s     r(   canonical_query_stringz SigV4Auth.canonical_query_string   sC    
 > 	K66w~FFF33HW[4I4IJJJr*   c           	      |   g }t          |t                    r|                                }|D ]G\  }}|                    t	          |d          t	          t          |          d          f           Hg }t          |          D ]\  }}|                    | d|             d                    |          }|S )Nz-_.~rX   rZ   r[   )r/   r   r   rg   r   r4   rf   rh   )r=   rn   key_val_pairsrs   rt   sorted_key_valsr   s          r(   r   z(SigV4Auth._canonical_query_string_params  s    fg&& 	$\\^^F  	 	JC  s(((%E

*H*H*HI     !// 	5 	5JC""c#3#3E#3#34444!$/!:!:%%r*   c                 B   d}|j         rg }|j                             d          D ]2}|                    d          \  }}}|                    ||f           3g }t	          |          D ]\  }}|                    | d|             d                    |          }|S )NrW   r[   rZ   )queryro   	partitionrg   rf   rh   )	r=   partsr   r   pairrs   _rt   r   s	            r(   r   z%SigV4Auth._canonical_query_string_url  s    !#; 	?M))#.. 3 3 $s 3 3Q$$c5\2222 O %]33 9 9
U&&#'7'7'7'78888%(XXo%>%>"%%r*   c                 *    g }t          t          |                    }|D ]]}d                     fd|                    |          D                       }|                    | dt          |                      ^d                    |          S )a  
        Return the headers that need to be included in the StringToSign
        in their canonical form by converting all header keys to lower
        case, sorting them in alphabetical order and then joining
        them into a string, separated by newlines.
        ,c              3   B   K   | ]}                     |          V  d S rG   )_header_value).0vr=   s     r(   	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>,  sB        *+""1%%     r*   :rS   )rf   setrh   get_allrg   r   )r=   r   r   sorted_header_namesrs   rt   s   `     r(   canonical_headerszSigV4Auth.canonical_headers"  s     $S%9%9::& 	= 	=CHH    />/F/Fs/K/K    E NNc;;N5$9$9;;<<<<yy!!!r*   c                 P    d                     |                                          S )N )rh   ro   )r=   rt   s     r(   r   zSigV4Auth._header_value2  s     xx&&&r*   c                 x    t          d t          |          D                       }d                    |          S )Nc              3   b   K   | ]*}|                                                                 V  +d S rG   )r   rm   )r   ns     r(   r   z+SigV4Auth.signed_headers.<locals>.<genexpr>;  s4      IIq**IIIIIIr*   ;)rf   r   rh   )r=   r   r   s      r(   signed_headerszSigV4Auth.signed_headers:  s8    IIC4H4HIIIIIxx   r*   c                     |j                             di           }|                    d          }t          |t                    o|                    d          dk    S )Nchecksumrequest_algorithmintrailer)contextr"   r/   dict)r=   r5   checksum_context	algorithms       r(   _is_streaming_checksum_payloadz(SigV4Auth._is_streaming_checksum_payload>  sT    "?..z2>>$(()<==	)T**Oy}}T/B/Bi/OOr*   c                     |                      |          rt          S |                     |          st          S |j        }|rt          |d          r|                                }t          j        |j	        t                    }t                      }t          |d          D ]}|                    |           |                                }|                    |           |S |r!t          |                                          S t           S )Nseekr*   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterri   r   r   EMPTY_SHA256_HASH)r=   r5   request_bodypositionread_chunksizer   chunkhex_checksums           r(   payloadzSigV4Auth.payloadC  s   ..w77 	$5511':: 	$ $#| 	%GL&99 	%#((**H&.!> N xxHnc22 ' '&&&&#--//Lh''' 	% ,''11333$$r*   c                 p    |j                             d          sdS |j                            dd          S )Nr   Tpayload_signing_enabled)r$   
startswithr   r"   r<   s     r(   r   z%SigV4Auth._should_sha256_sign_payload]  s:    {%%g.. 	4
 ""#<dCCCr*   c                    |j                                         g}|                     t          |j                  j                  }|                    |           |                    |                     |                     |                     |          }|                    | 	                    |          dz              |                    | 
                    |                     d|j        v r|j        d         }n|                     |          }|                    |           d                    |          S )NrS   X-Amz-Content-SHA256)r`   upper_normalize_url_pathr   r$   r^   rg   r   r   r   r   r   r   rh   )r=   r5   crr^   r   body_checksums         r(   canonical_requestzSigV4Auth.canonical_requestg  s   n""$$%''(=(=(BCC
		$
		$--g66777..w77
		$((99D@AAA
		$%%o66777!W_44#O,BCMM LL11M
		-   yy}}r*   c                 B    t          t          |          d          }|S )Nz/~rX   )r   r   )r=   r^   normalized_paths      r(   r   zSigV4Auth._normalize_url_pathv  s#     24 8 8tDDDr*   c                 (   | j         j        g}|                    |j        d         dd                    |                    | j                   |                    | j                   |                    d           d                    |          S N	timestampr      aws4_requestrR   )rN   r   rg   r   r   r   rh   r=   r5   scopes      r(   r   zSigV4Auth.scopez  s~    !,-W_[1!A#6777T&'''T'(((^$$$xxr*   c                    g }|                     |j        d         dd                    |                     | j                   |                     | j                   |                     d           d                    |          S r   )rg   r   r   r   rh   r   s      r(   credential_scopezSigV4Auth.credential_scope  su    W_[1!A#6777T&'''T'(((^$$$xxr*   c                 P   dg}|                     |j        d                    |                     |                     |                     |                     t          |                    d                                                               d                    |          S )z
        Return the canonical StringToSign as well as a dict
        containing the original version of all headers that
        were included in the StringToSign.
        AWS4-HMAC-SHA256r   r-   rS   )rg   r   r   r   re   r   rh   )r=   r5   r   stss       r(   rp   zSigV4Auth.string_to_sign  s     ""

7?;/000

4((11222

6+227;;<<FFHHIIIyy~~r*   c                 ^   | j         j        }|                     d|                                 |j        d         dd                   }|                     || j                  }|                     || j                  }|                     |d          }|                     ||d          S )NAWS4r   r   r   r   T)r   )rN   rd   r   re   r   r   r   )r=   rp   r5   rs   k_datek_region	k_service	k_signings           r(   r   zSigV4Auth.signature  s    )C\\!!##W_[%A!A#%F
 
 ::fd&788JJx);<<	JJy.99	zz)^z>>>r*   c                 ^   | j         t                      t          j                                        }|                    t
                    |j        d<   |                     |           |                     |          }t          
                    d           t          
                    d|           |                     ||          }t          
                    d|           |                     ||          }t          
                    d|           |                     ||           d S )Nr   z$Calculating signature using v4 auth.zCanonicalRequest:
%sStringToSign:
%szSignature:
%s)rN   r   datetimeutcnowr   SIGV4_TIMESTAMPr   _modify_request_before_signingr   r\   r]   rp   r   _inject_signature_to_request)r=   r5   datetime_nowr   rp   r   s         r(   r:   zSigV4Auth.add_auth  s   #$&&&(//11'3'<'<_'M'M$ 	++G444 227;;;<<<,.?@@@,,W6GHH(.999NN>7;;	%y111))'9=====r*   c                 "   d|                      |          z  g}|                     |          }|                    d|                     |                      |                    d|z             d                    |          |j        d<   |S )NzAWS4-HMAC-SHA256 Credential=%szSignedHeaders=zSignature=%sz, Authorization)r   r   rg   r   rh   r   )r=   r5   r   auth_strr   s        r(   r  z&SigV4Auth._inject_signature_to_request  s    4tzz'7J7JJK..w77CT00AACC	
 	
 	
 	2333+/99X+>+>(r*   c                 .   d|j         v r|j         d= |                     |           | j        j        r%d|j         v r|j         d= | j        j        |j         d<   |j                            dd          s"d|j         v r|j         d= t          |j         d<   d S d S )Nr  r   r   Tr   )r   _set_necessary_date_headersrN   r   r   r"   r   r<   s     r(   r  z(SigV4Auth._modify_request_before_signing  s    go--0((111! 	M%88O$:;6:6F6LGO23""#<dCC 	G%88O$:;6FGO2333	G 	Gr*   c                    d|j         v r|j         d= t          j                            |j        d         t                    }t          t          t          j        |	                                                              |j         d<   d|j         v r
|j         d= d S d S d|j         v r|j         d= |j        d         |j         d<   d S )Nr   r   
X-Amz-Date)
r   r	  strptimer   r  r   intcalendartimegm	timetuple)r=   r5   datetime_timestamps      r(   r  z%SigV4Auth._set_necessary_date_headers  s     W_$$'!)!2!;!;,o" " '1HO$6$@$@$B$BCCDD' 'GOF# w..OL111 /. w..OL1,3OK,HGOL)))r*   N)F)r>   r?   r@   r   rA   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   r   r:   r  r  r  rC   r*   r(   r   r      s         O* * *      K K K& & &"& & & " " " ' ' '! ! !P P P
% % %4D D D        
 
 
? ? ?> > >$  G G GI I I I 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        d<   d S )Nr   )superr  r   r   r=   r5   	__class__s     r(   r  z*S3SigV4Auth._modify_request_before_signing  sR    ..w777!W_44 6726,,w2G2G.///r*   c                 ,   |j                             d          }t          |dd           }|i }|                    dd           }||S d}|j                             di           }|                    d          }t          |t                    r!|                    d          dk    r|d	         }|j                            d
          r	||j        vrdS |j                             dd          rdS t                      	                    |          S )Nclient_configs3r   zContent-MD5r   r   r   headerr   r   Thas_streaming_inputF)
r   r"   getattrr/   r   r$   r   r   r  r   )	r=   r5   r#  	s3_configsign_payloadchecksum_headerr   r   r!  s	           r(   r   z'S3SigV4Auth._should_sha256_sign_payload  s%     ++O<<M466	 I !}}%>EE# ("?..z2>>$(()<==	i&& 	09==+>+>(+J+J'/O&&w//	go554 ?4e<< 	5 ww227;;;r*   c                     |S rG   rC   r=   r^   s     r(   r   zS3SigV4Auth._normalize_url_path      r*   )r>   r?   r@   r  r   r   __classcell__r!  s   @r(   r  r    sf        H H H H 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                \    t                                          |||           || _        d S rG   )r  rI   _identity_cache)r=   rN   r   r   identity_cacher!  s        r(   rI   zS3ExpressAuth.__init__  s/     	lK@@@-r*   c                 J    t                                          |           d S rG   )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= d S d S )Nzx-amz-s3session-tokenr   )r  r  r   rN   r   r   s     r(   r  z,S3ExpressAuth._modify_request_before_signing   sa    ..w777"'/997;7G7MGO34!W_44 6777 54r*   )r>   r?   r@   REQUIRES_IDENTITY_CACHErI   r:   r  r.  r/  s   @r(   r1  r1    sp        ". . . . ." " " " "8 8 8 8 8 8 8 8 8r*   r1  c                       e Zd ZdZd ZdS )S3ExpressPostAuthTc                    t           j                                         }|                    t                    |j        d<   i }|j                            dd           |j        d         }i }g }|j                            dd           +|j        d         }|                    dd           |d         }||d<   d|d<   |                     |          |d<   |j        d         |d<   |                    ddi           |                    d|                     |          i           |                    d|j        d         i           | j        j	        0| j        j	        |d	<   |                    d	| j        j	        i           t          j        t          j        |                              d
                                        d
          |d<   |                     |d         |          |d<   ||j        d<   ||j        d<   d S )Nr   s3-presign-post-fieldss3-presign-post-policy
conditionsr   x-amz-algorithmx-amz-credential
x-amz-dateX-Amz-S3session-Tokenr-   policyx-amz-signaturer	  r
  r   r  r   r"   r   rg   rN   r   rj   rk   r1   dumpsre   r3   r   r=   r5   r  fieldsrB  r=  s         r(   r:   zS3ExpressPostAuth.add_auth,  s   (//11'3'<'<_'M'M$?7>>J_%=>F
?7>>J_%=>Fzz,--9#L1
)|$6 !%)ZZ%8%8!"&{;|,.@ABBB-tzz'/B/BCDDD<)EFGGG!-.2.>.DF*+($*:*@A  
 "+Jv%%g..
 

&// 	x %)NN6(3CW$M$M !4:014:0111r*   N)r>   r?   r@   r7  r:   rC   r*   r(   r9  r9  )  s)        "'; '; '; '; ';r*   r9  c                   D     e Zd ZdZdZed fd
Zd Zd Zd Zd Z	 xZ
S )	S3ExpressQueryAuthi,  T)expiresc                `    t                                          ||||           || _        d S )N)r4  r  rI   _expires)r=   rN   r   r   r4  rJ  r!  s         r(   rI   zS3ExpressQueryAuth.__init__Z  s?     	)	 	 	
 	
 	
  r*   c                 2   |j                             d          }d}||k    r|j         d= |                     |                     |                    }d|                     |          |j        d         | j        |d}| j        j        | j        j        |d<   t          |j
                  }t          |j        d          }d	 |                                D             }|j        r!|                    |j                   i |_        d
}	|j        r)|                    t#          |                     d
|_        |rt%          |          dz   }	|	 t%          |           }
|}|d         |d         |d         |
|d         f}t'          |          |_
        d S )Ncontent-type0application/x-www-form-urlencoded; charset=utf-8r   r   zX-Amz-AlgorithmzX-Amz-Credentialr  zX-Amz-ExpireszX-Amz-SignedHeadersrA  Tkeep_blank_valuesc                 &    i | ]\  }}||d          S r   rC   r   kr   s      r(   
<dictcomp>zES3ExpressQueryAuth._modify_request_before_signing.<locals>.<dictcomp>  "    EEE$!Qa1EEEr*   rW   r[   r            r   r"   r   r   r   r   rM  rN   r   r   r$   r   r   r   rn   ri   r.   r6   r   r   )r=   r5   content_typeblocklisted_content_typer   auth_paramsr%   query_string_parts
query_dictoperation_paramsnew_query_stringpnew_url_partss                r(   r  z1S3ExpressQueryAuth._modify_request_before_signingk  s    **>::> 	! 333/
 ,,T-A-A'-J-JKK  2 $

7 3 3!/+6!]#1
 
 !-373C3IK/0 W[))	 &ioNNNEE*<*B*B*D*DEEE
> 	 gn---GN < 	 /88999GL 	I6zBBSHG!8!E!EGG 	 1qtQqT+;QqTB //r*   c                 ,    |xj         d|z  z  c_         d S Nz&X-Amz-Signature=%sr$   r=   r5   r   s      r(   r  z/S3ExpressQueryAuth._inject_signature_to_request       	,y88r*   c                     |S rG   rC   r,  s     r(   r   z&S3ExpressQueryAuth._normalize_url_path  r-  r*   c                     t           S rG   r   r<   s     r(   r   zS3ExpressQueryAuth.payload  
    
  r*   )r>   r?   r@   DEFAULT_EXPIRESr7  rI   r  r  r   r   r.  r/  s   @r(   rI  rI  V  s        O"               "?0 ?0 ?0B9 9 9               r*   rI  c                   2     e Zd ZdZef fd	Zd Zd Z xZS )SigV4QueryAuth  c                 \    t                                          |||           || _        d S rG   rL  )r=   rN   r   r   rJ  r!  s        r(   rI   zSigV4QueryAuth.__init__  s,     	lK@@@r*   c                 2   |j                             d          }d}||k    r|j         d= |                     |                     |                    }d|                     |          |j        d         | j        |d}| j        j        | j        j        |d<   t          |j
                  }t          |j        d          }d	 |                                D             }|j        r!|                    |j                   i |_        d
}	|j        r)|                    t#          |                     d
|_        |rt%          |          dz   }	|	 t%          |           }
|}|d         |d         |d         |
|d         f}t'          |          |_
        d S )NrO  rP  r   r   rQ  r   TrR  c                 &    i | ]\  }}||d          S rU  rC   rV  s      r(   rX  zASigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>  rY  r*   rW   r[   r   rZ  r[  r\  r]  )r=   r5   r^  blacklisted_content_typer   r`  r%   ra  rb  rc  rd  re  rf  s                r(   r  z-SigV4QueryAuth._modify_request_before_signing  s    **>::> 	! 333/
 ,,T-A-A'-J-JKK  2 $

7 3 3!/+6!]#1
 
 !-262B2HK./ W[))	 &ioNNNEE*<*B*B*D*DEEE
> 	 gn---GN < 	 /88999GL 	I6zBBSHG!8!E!EGG 	 1qtQqT+;QqTB //r*   c                 ,    |xj         d|z  z  c_         d S rh  ri  rj  s      r(   r  z+SigV4QueryAuth._inject_signature_to_request  rk  r*   )r>   r?   r@   rp  rI   r  r  r.  r/  s   @r(   rr  rr    sg        O ?N           ?0 ?0 ?0B9 9 9 9 9 9 9r*   rr  c                       e Zd ZdZd Zd ZdS )S3SigV4QueryAutha  S3 SigV4 auth using query parameters.

    This signer will sign a request using query parameters and signature
    version 4, i.e a "presigned url" signer.

    Based off of:

    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

    c                     |S rG   rC   r,  s     r(   r   z$S3SigV4QueryAuth._normalize_url_path  r-  r*   c                     t           S rG   rn  r<   s     r(   r   zS3SigV4QueryAuth.payload  ro  r*   N)r>   r?   r@   r   r   r   rC   r*   r(   rz  rz    s<        	 	           r*   rz  c                       e Zd ZdZd ZdS )S3SigV4PostAuthz
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                    t           j                                         }|                    t                    |j        d<   i }|j                            dd           |j        d         }i }g }|j                            dd           +|j        d         }|                    dd           |d         }||d<   d|d<   |                     |          |d<   |j        d         |d<   |                    ddi           |                    d|                     |          i           |                    d|j        d         i           | j        j	        0| j        j	        |d	<   |                    d	| j        j	        i           t          j        t          j        |                              d
                                        d
          |d<   |                     |d         |          |d<   ||j        d<   ||j        d<   d S )Nr   r;  r<  r=  r   r>  r?  r@  x-amz-security-tokenr-   rB  rC  rD  rF  s         r(   r:   zS3SigV4PostAuth.add_auth/  s   (//11'3'<'<_'M'M$?7>>J_%=>F
?7>>J_%=>Fzz,--9#L1
)|$6 !%)ZZ%8%8!"&{;|,.@ABBB-tzz'/B/BCDDD<)EFGGG!--1-=-CF)*5t7G7MNOOO "+Jv%%g..
 

&// 	x %)NN6(3CW$M$M !4:014:0111r*   Nr>   r?   r@   r   r:   rC   r*   r(   r~  r~  '  s-         %; %; %; %; %;r*   r~  c                   d    e Zd Zg dZddZd Zd Zd Zd ZddZ		 dd	Z
	 dd
Zd Zd Zd ZdS )
HmacV1Auth)$
accelerateaclcorsdefaultObjectAcllocationlogging
partNumberrB  requestPaymenttorrent
versioning	versionIdversionswebsiteuploadsuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdelete	lifecycletaggingrestorestorageClassnotificationreplicationr  	analyticsmetrics	inventoryselectzselect-typezobject-lockNc                     || _         d S rG   rM   r   s       r(   rI   zHmacV1Auth.__init__  rP   r*   c                 N   t          j        | j        j                            d          t
                    }|                    |                    d                     t          |                                          	                                
                    d          S )Nr-   rT   )rb   rc   rN   rd   re   r   ri   r   rl   rm   r3   )r=   rp   r   s      r(   sign_stringzHmacV1Auth.sign_string  s    8'..w774
 
 
 	--g667778??,,--3355<<WEEEr*   c                 \   g d}g }d|v r|d= |                                  |d<   |D ]q}d}|D ]S}|                                }||         5||k    r/|                    ||                                                    d}T|s|                    d           rd                    |          S )N)content-md5rO  dater   FTrW   rS   )	_get_dater   rg   rm   rh   )r=   r   interesting_headershoiihfoundrs   lks           r(   canonical_standard_headersz%HmacV1Auth.canonical_standard_headers  s    EEEW..**% 	 	BE ! !YY[[3<+bJJws|1133444 E 

2yy~~r*   c                    g }i }|D ]h}|                                 }||         J|                    d          r5d                    d |                    |          D                       ||<   it	          |                                          }|D ]"}|                    | d||                     #d                    |          S )Nx-amz-r   c              3   >   K   | ]}|                                 V  d S rG   )rm   )r   r   s     r(   r   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s;       2 2&'		2 2 2 2 2 2r*   r   rS   )r   r   rh   r   rf   keysrg   )r=   r   r  custom_headersrs   r  sorted_header_keyss          r(   canonical_custom_headersz#HmacV1Auth.canonical_custom_headers  s     	 	CBs|'==** ), 2 2+2??3+?+?2 2 2 * *N2& $N$7$7$9$9::% 	7 	7CJJ#55s 3556666yy~~r*   c                 f    t          |          dk    r|S |d         t          |d                   fS )z(
        TODO: Do we need this?
        rZ  r   )r_   r   )r=   nvs     r(   	unquote_vzHmacV1Auth.unquote_v  s1     r77a<<IqE72a5>>**r*   c                 T    ||}n|j         }|j        r|j                            d          }d |D             } fd|D             }t          |          dk    rL|                    t          d                     d |D             }|dz  }|d                    |          z  }|S )Nr[   c                 :    g | ]}|                     d d          S )rZ   rZ  )ro   r   as     r(   
<listcomp>z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s$    000q1773??000r*   c                 X    g | ]&}|d          j         v                     |          'S rU  )QSAOfInterestr  )r   r  r=   s     r(   r  z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s=       &'!A$$:L2L2Lq!!2L2L2Lr*   r   )rs   c                 8    g | ]}d                      |          S )rZ   )rh   r  s     r(   r  z1HmacV1Auth.canonical_resource.<locals>.<listcomp>  s"    000qsxx{{000r*   ?)r^   r   ro   r_   sortr   rh   )r=   ro   	auth_pathbufqsas   `    r(   canonical_resourcezHmacV1Auth.canonical_resource  s      CC*C; 
	%+##C((C00C000C   +.  C 3xx!||Z]]+++00C000s
sxx}}$
r*   c                     |                                 dz   }||                     |          dz   z  }|                     |          }|r||dz   z  }||                     ||          z  }|S )NrS   r  )r   r  r  r  )r=   r`   ro   r   rJ  r  csr  s           r(   canonical_stringzHmacV1Auth.canonical_string  s     \\^^d"
d--g66==66w?? 	(.4''B
d%%ey%AAA	r*   c                     | j         j        r|d= | j         j        |d<   |                     ||||          }t                              d|           |                     |          S )Nr  r  r  )rN   r   r  r\   r]   r  )r=   r`   ro   r   rJ  r  rp   s          r(   get_signaturezHmacV1Auth.get_signature  s{     ! 	E./.2.>.DG*+..E7i / 
 
 	(.999///r*   c                 :   | j         t          t                              d           t	          |j                  }t                              d|j                   |                     |j        ||j        |j	                  }| 
                    ||           d S )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr  )rN   r   r\   r]   r   r$   r`   r  r   r  _inject_signature)r=   r5   ro   r   s       r(   r:   zHmacV1Auth.add_auth  s    #$$?@@@%%.???&&NE7?g>O ' 
 
	 	w	22222r*   c                 "    t          d          S )NTr   r   r=   s    r(   r  zHmacV1Auth._get_date  s    &&&&r*   c                 `    d|j         v r|j         d= d| j        j         d| }||j         d<   d S )Nr  zAWS r   )r   rN   r   )r=   r5   r   auth_headers       r(   r  zHmacV1Auth._inject_signature  sH    go-- 0FT-8FF9FF+6(((r*   )NNrG   )r>   r?   r@   r  rI   r  r  r  r  r  r  r  r:   r  r  rC   r*   r(   r  r  W  s        % % %MN' ' ' 'F F F  "  + + +   6 ?C	 	 	 	 ?C
0 
0 
0 
0	3 	3 	3' ' '7 7 7 7 7r*   r  c                   ,    e Zd ZdZdZefdZd Zd ZdS )HmacV1QueryAuthz
    Generates a presigned request for s3.

    Spec from this document:

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

    rs  c                 "    || _         || _        d S rG   )rN   rM  )r=   rN   rJ  s      r(   rI   zHmacV1QueryAuth.__init__  s    &r*   c                     t          t          t          j                    t          | j                  z                       S rG   )r4   r  r   rM  r  s    r(   r  zHmacV1QueryAuth._get_date  s-    3ty{{S%7%7788999r*   c                    i }| j         j        |d<   ||d<   |j        D ]V}|                                }|dk    r|j        d         |d<   -|                    d          s|dv r|j        |         ||<   Wt          |          }t          |j                  }|d         r|d          d| }|d	         |d
         |d         ||d         f}t          |          |_        d S )Nr{   rV   r   Expiresr  )r  rO     r[   r   rZ  r[  r\  )	rN   r   r   r   r   r   r   r$   r   )	r=   r5   r   rb  
header_keyr  rd  re  rf  s	            r(   r  z!HmacV1QueryAuth._inject_signature  s   
'+'7'B
#$"+
;!/ 	5 	5J!!##B V##(/(?
9%% x(( 5B 3 - - ")!4
2 3:>> W[!!Q4 	< #$A$;;)9;;1qtQqT+;QqTB //r*   N)r>   r?   r@   r   rp  rI   r  r  rC   r*   r(   r  r     sZ          O,;        : : :0 0 0 0 0r*   r  c                       e Zd ZdZd ZdS )HmacV1PostAuthz
    Generates a presigned post for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
    c                    i }|j                             dd           |j         d         }i }g }|j                             dd           +|j         d         }|                    dd           |d         }||d<   | j        j        |d<   | j        j        0| j        j        |d<   |                    d| j        j        i           t          j        t          j	        |          
                    d                                        d          |d<   |                     |d                   |d<   ||j         d<   ||j         d<   d S )	Nr;  r<  r=  r{   r  r-   rB  r   )r   r"   rN   r   r   rg   rj   rk   r1   rE  re   r3   r  )r=   r5   rG  rB  r=  s        r(   r:   zHmacV1PostAuth.add_auth>  sT   ?7>>J_%=>F
?7>>J_%=>Fzz,--9#L1
)|#'#3#> !--1-=-CF)*5t7G7MNOOO "+Jv%%g..
 

&// 	x #..vh/?@@{4:014:0111r*   Nr  rC   r*   r(   r  r  5  s-         ; ; ; ; ;r*   r  c                       e Zd ZdZd ZdS )
BearerAuthz
    Performs bearer token authorization by placing the bearer token in the
    Authorization header as specified by Section 2.1 of RFC 6750.

    https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
    c                     | j         t                      d| j         j         }d|j        v r|j        d= ||j        d<   d S )NzBearer r  )rH   r   r   r   )r=   r5   r  s      r(   r:   zBearerAuth.add_authe  sQ    ?""$$$7 577go--0+6(((r*   Nr  rC   r*   r(   r  r  ]  s-         7 7 7 7 7r*   r  )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-query)Crj   r  r	  r   rb   r1   r  r   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr	   r
   r   r   r   r   r   r   r   botocore.exceptionsr   r   botocore.utilsr   r   r   r   	getLoggerr>   r\   r   r   r   r  r   r   r   r)   r6   r8   rE   rK   r   r   r  r1  r9  rI  rr  rz  r~  r  r  r  r  AUTH_TYPE_MAPSbotocore.crt.authr  ri   rC   r*   r(   <module>r     sK              # # # # # # " " " " " "                      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 E D D D D D D D          * ) ) ) ) ) 
	8	$	$ G  
"   
 & %I "  &
 
 
. . . . . . . .% % % % %* % % %: : : : :
 : : :z< < < < <
 < < <8JI JI JI JI JI
 JI JI JIZ3 3 3 3 3) 3 3 3l8 8 8 8 8K 8 8 8**; *; *; *; *; *; *; *;Ze  e  e  e  e  e  e  e PN9 N9 N9 N9 N9Y N9 N9 N9b         ~      0-; -; -; -; -;i -; -; -;`f7 f7 f7 f7 f7 f7 f7 f7R20 20 20 20 20j 20 20 20j%; %; %; %; %;Z %; %; %;P7 7 7 7 7 7 7 7& 

%(!,!2   444444,-----&*		
 	
    r*   