U
    g                     @   s@   d dl Zd dlZd dlZd dlZddlmZ G dd deZdS )    N   )InfoExtractorc                   @   s   e Zd ZdZdZdddZdS )AWSIEzAWS4-HMAC-SHA256z	us-east-1Nc              	      s  |pi }t jt jjd}|d d }d| j|| jd}|d}|rR||d< dd }t	j
|}	d	}
t| D ] \}}|
|  d
| d7 }
qvddd t| D }dd|d |	|
||d	g}|| jddg}d|}d| j||||g}dd   fdd} fdd}d|d   }|D ]}|||}q6|||}dd| j|d |d| d | g|d!< | jd"| j|d |	rd#|	 nd	||d$S )%Nz%Y%m%dT%H%M%SZ   zapplication/json)AcceptHostz
X-Amz-Datez	X-Api-Keysession_tokenzX-Amz-Security-Tokenc                 S   s   t |   S N)hashlibsha256encode	hexdigest)s r   8/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/aws.pyaws_hash   s    z(AWSIE._aws_execute_api.<locals>.aws_hash :
;c                 S   s   g | ]}|  qS r   )lower).0headerr   r   r   
<listcomp>#   s     z*AWSIE._aws_execute_api.<locals>.<listcomp>GETurizexecute-apiZaws4_request/c                 S   s   t | | tjS r	   )hmacnewr   r
   r   keymsgr   r   r   aws_hmac3   s    z(AWSIE._aws_execute_api.<locals>.aws_hmacc                    s    | |  S r	   )digestr   r"   r   r   aws_hmac_digest6   s    z/AWSIE._aws_execute_api.<locals>.aws_hmac_digestc                    s    | |  S r	   )r   r   r$   r   r   aws_hmac_hexdigest9   s    z2AWSIE._aws_execute_api.<locals>.aws_hmac_hexdigestZAWS4Z
secret_keyz, z{} Credential={}/{}Z
access_keyzSignedHeaders=z
Signature=Authorizationzhttps://{}{}{}?)headers)dtdatetimenowtimezoneutcstrftimeZ_AWS_PROXY_HOSTZ_AWS_API_KEYgeturllibparse	urlencodesorteditemsr   joinkeys_AWS_REGION_AWS_ALGORITHMr   formatZ_download_json)selfZaws_dictZvideo_idqueryZamz_datedater)   r   r   Zcanonical_querystringZcanonical_headersheader_nameheader_valueZsigned_headersZcanonical_requestZcredential_scope_listZcredential_scopeZstring_to_signr%   r&   Z	k_signingvalue	signaturer   r$   r   _aws_execute_api   sZ    




  zAWSIE._aws_execute_api)N)__name__
__module____qualname__r9   r8   rB   r   r   r   r   r   	   s   r   )	r+   r*   r
   r   urllib.parser1   commonr   r   r   r   r   r   <module>   s
   