Ë
    ö­¦jÓ  ã                  ó|   — d Z ddlmZ ddlmZmZ ddlmZ erddlm	Z	 	 d	 	 	 	 	 dd„Z
	 d	 	 	 	 	 dd„Zdd	„Zdd
„Zy)aš  
Payload preparing

We have added some utils to make work with payload easier.

Basic encode example:

    .. code-block:: python

        from aiogram.utils.payload import encode_payload

        encoded = encode_payload("foo")

        # result: "Zm9v"

Basic decode it back example:

    .. code-block:: python

        from aiogram.utils.payload import decode_payload

        encoded = "Zm9v"
        decoded = decode_payload(encoded)
        # result: "foo"

Encoding and decoding with your own methods:

    1. Create your own cryptor

        .. code-block:: python

            from Cryptodome.Cipher import AES
            from Cryptodome.Util.Padding import pad, unpad

            class Cryptor:
                def __init__(self, key: str):
                    self.key = key.encode("utf-8")
                    self.mode = AES.MODE_ECB  # never use ECB in strong systems obviously
                    self.size = 32

                @property
                def cipher(self):
                    return AES.new(self.key, self.mode)

                def encrypt(self, data: bytes) -> bytes:
                    return self.cipher.encrypt(pad(data, self.size))

                def decrypt(self, data: bytes) -> bytes:
                    decrypted_data = self.cipher.decrypt(data)
                    return unpad(decrypted_data, self.size)

    2. Pass cryptor callable methods to aiogram payload tools

        .. code-block:: python

            cryptor = Cryptor("abcdefghijklmnop")
            encoded = encode_payload("foo", encoder=cryptor.encrypt)
            decoded = decode_payload(encoded_payload, decoder=cryptor.decrypt)

            # result: decoded == "foo"

é    )Úannotations)Úurlsafe_b64decodeÚurlsafe_b64encode)ÚTYPE_CHECKING)ÚCallableNc                ó„   — t        | t        «      st        | «      } | j                  d«      }|� ||«      }t        |«      S )z[Encode payload with encoder.

    Result also will be encoded with URL-safe base64url.
    zutf-8)Ú
isinstanceÚstrÚencodeÚ_encode_b64)ÚpayloadÚencoderÚpayload_bytess      úH/var/www/html/venv/lib/python3.12/site-packages/aiogram/utils/payload.pyÚencode_payloadr   I   s@   € ô �gœsÔ#Ü�g“,ˆà—N‘N 7Ó+€MØÐÙ Ó.ˆä�}Ó%Ð%ó    c                óh   — t        | «      }|€|j                  «       S  ||«      j                  «       S )z/Decode URL-safe base64url payload with decoder.)Ú_decode_b64Údecode)r   ÚdecoderÚoriginal_payloads      r   Údecode_payloadr   [   s8   € ô
 # 7Ó+Ðà€Ø×&Ñ&Ó(Ð(áÐ#Ó$×+Ñ+Ó-Ð-r   c                ó\   — t        | «      }|j                  «       }|j                  dd«      S )zEncode with URL-safe base64url.ú=Ú )r   r   Úreplace)r   Úbytes_payloadÚstr_payloads      r   r   r   h   s-   € ä,¨WÓ5€MØ×&Ñ&Ó(€KØ×Ñ˜s BÓ'Ð'r   c                ób   — | ddt        | «      dz  z
  z  z  } t        | j                  «       «      S )zDecode with URL-safe base64url.r   é   )Úlenr   r   )r   s    r   r   r   o   s1   € àˆs�aœ#˜g›,¨Ñ*Ñ*Ñ+Ñ+€GÜ˜WŸ^™^Ó-Ó.Ð.r   )N)r   r
   r   úCallable[[bytes], bytes] | NoneÚreturnr
   )r   r
   r   r"   r#   r
   )r   Úbytesr#   r
   )r   r
   r#   r$   )Ú__doc__Ú
__future__r   Úbase64r   r   Útypingr   Úcollections.abcr   r   r   r   r   © r   r   ú<module>r+      sn   ðñ=õ~ #ç 7Ý  áÝ(ð
 04ð&Øð&à,ð&ð 	ó&ð( 04ð
.Øð
.à,ð
.ð 	ó
.ó(ô/r   