Ë
    ö­¦j2	  ã            	       óÈ   — 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      úR/var/www/html/venv/lib/python3.12/site-packages/aiogram/utils/web_app_signature.pyú	<genexpr>z)check_webapp_signature.<locals>.<genexpr>*   s#   è ø€ ò =Ù�q˜!ˆ1ˆ#ˆQˆqˆcŒ
ñ=ù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
  € ðÜœ9 Y¸tÔDÓEˆð  —O‘O K°Ó6€MÙØà‡O�O�F˜DÔ!à!˜( -Ð0°4·9±9ñ =Ü% k×&7Ñ&7Ó&9¼zÈ!»}ÔMô=ó 4ñ Ðð  ×&Ñ&Ó(€Gà”c˜-Ó(Ð(¨1Ñ,Ñ-€GÜ×(Ñ(¨¸Ñ)@ÓA€Iä!×3Ñ3Ð4DÓE€JðØ×Ñ˜) 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+   € ô ˜f iÐ1AÔ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   