o
    Fh	                  	   @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ ddl	m
Z
mZ edZed	Zefd
edededefddZefd
edededefddZdS )    N)
itemgetter)	parse_qsl)Ed25519PublicKey)InvalidSignature   )parse_webapp_init_dataWebAppInitData@e7bf03a2fa4602af4580703d88dda5bb59f32ed8b02a56c187fe7d34caed242d@40055058a4ee38156a06562e52eece92a771bcd8346a8c4615cb7376eddf72ecbot_id	init_datapublic_key_bytesreturnc           
      C   s   z
t t|dd}W n
 ty   Y dS w |dd}|sdS |dd |  ddd	d
 t| tddD  }| }dt	| d  }t
|| }t|}	z	|	|| W dS  tyh   Y dS w )aM  
    Check incoming WebApp init data signature without bot token using only bot id.

    Source: https://core.telegram.org/bots/webapps#validating-data-for-third-party-use

    :param bot_id: Bot ID
    :param init_data: WebApp init data
    :param public_key: Public key
    :return: True if signature is valid, False otherwise
    T)strict_parsingF	signatureNhashz:WebAppData

c                 s   s"    | ]\}}| d | V  qdS )=N ).0kvr   r   R/var/www/html/venv/lib/python3.10/site-packages/aiogram/utils/web_app_signature.py	<genexpr>(   s    
z)check_webapp_signature.<locals>.<genexpr>r   )keyr      )dictr   
ValueErrorpopjoinsorteditemsr   encodelenbase64urlsafe_b64decoder   from_public_bytesverifyr   )
r   r   r   parsed_datasignature_b64data_check_stringmessagepaddingr   
public_keyr   r   r   check_webapp_signature   s,   

r.   c                 C   s   t | ||r
t|S td)a
  
    Validate raw WebApp init data using only bot id and return it as WebAppInitData object

    :param bot_id: bot id
    :param init_data: data from frontend to be parsed and validated
    :param public_key_bytes: public key
    :return: WebAppInitData object
    zInvalid init data signature)r.   r   r   )r   r   r   r   r   r   *safe_check_webapp_init_data_from_signature9   s   r/   )r$   operatorr   urllib.parser   1cryptography.hazmat.primitives.asymmetric.ed25519r   cryptography.exceptionsr   web_appr   r   bytesfromhexPRODUCTION_PUBLIC_KEYTEST_PUBLIC_KEYintstrboolr.   r/   r   r   r   r   <module>   s<    

*