o
    5˜Žj2	  ã                	   @   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   ú\/var/www/kodo/Anonymous/send/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<    ÿ
ýÿþý
ü/ýÿþýü