o
    LDi2	                  	   @   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)InvalidSignature)Ed25519PublicKey   )WebAppInitDataparse_webapp_init_data@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   k/var/www/www-root/data/www/77.83.87.30/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 d}t|)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   msgr   r   r   *safe_check_webapp_init_data_from_signature<   s   r0   )r$   operatorr   urllib.parser   cryptography.exceptionsr   1cryptography.hazmat.primitives.asymmetric.ed25519r   web_appr   r   bytesfromhexPRODUCTION_PUBLIC_KEYTEST_PUBLIC_KEYintstrboolr.   r0   r   r   r   r   <module>   s<    

/