
    dh	              	           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j                  d      Zej                  d	      Zefd
edededefdZefd
edededefdZy)    N)
itemgetter)	parse_qsl)Ed25519PublicKey)InvalidSignature   )parse_webapp_init_dataWebAppInitData@e7bf03a2fa4602af4580703d88dda5bb59f32ed8b02a56c187fe7d34caed242d@40055058a4ee38156a06562e52eece92a771bcd8346a8c4615cb7376eddf72ecbot_id	init_datapublic_key_bytesreturnc           
          	 t        t        |d            }|j                  dd      }|sy|j                  dd       |  ddj	                  d	 t        |j                         t        d
            D              z   }|j                         }dt        |       dz  z  }t        j                  ||z         }t        j                  |      }		 |	j                  ||       y# t        $ r Y yw xY w# t        $ r Y yw xY 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              3   0   K   | ]  \  }}| d |   yw)=N ).0kvs      Y/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/utils/web_app_signature.py	<genexpr>z)check_webapp_signature.<locals>.<genexpr>(   s#      =q!1#Qqc
=s   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_keys
             r   check_webapp_signaturer1      s   9YtDE  OOK6MOOFD!!(-0499 =%k&7&7&9z!}M= 4   &&(Gc-((1,-G(()@AI!334DEJ)W-+  ,  s#   C" C1 "	C.-C.1	C=<C=c                 H    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)r1   r   r    )r   r   r   s      r   *safe_check_webapp_init_data_from_signaturer3   9   s(     fi1AB%i00
2
33    )r'   operatorr   urllib.parser   1cryptography.hazmat.primitives.asymmetric.ed25519r   cryptography.exceptionsr   web_appr   r	   bytesfromhexPRODUCTION_PUBLIC_KEYTEST_PUBLIC_KEYintstrboolr1   r3   r   r4   r   <module>rA      s      " N 4 ;F  -- bc <Q&&&38&	&T <Q4443844r4   