
    G˝i2	              	           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)InvalidSignature)Ed25519PublicKey   )WebAppInitDataparse_webapp_init_data@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      X/home/leshdev/mybot/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- 1  *  s#   C" C1 "	C.-C.1	C=<C=c                 L    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)r1   r	   r    )r   r   r   msgs       r   *safe_check_webapp_init_data_from_signaturer4   <   s+     fi1AB%i00
'C
S/    )r'   operatorr   urllib.parser   cryptography.exceptionsr   1cryptography.hazmat.primitives.asymmetric.ed25519r   web_appr   r	   bytesfromhexPRODUCTION_PUBLIC_KEYTEST_PUBLIC_KEYintstrboolr1   r4   r   r5   r   <module>rB      s      " 4 N ;F  -- bc 4))) ) 
	)^ 4  	r5   