o
    FÆh~  ã                   @   sœ   d Z ddlmZmZ ddlmZmZ 	ddedeeegef  defdd	„Z		dded
eeegef  defdd„Z
dedefdd„Zdedefdd„ZdS )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"

é    )Úurlsafe_b64decodeÚurlsafe_b64encode)ÚCallableÚOptionalNÚpayloadÚencoderÚreturnc                 C   s4   t | tƒs	t| ƒ} |  d¡}|dur||ƒ}t|ƒS )z[Encode payload with encoder.

    Result also will be encoded with URL-safe base64url.
    zutf-8N)Ú
isinstanceÚstrÚencodeÚ_encode_b64)r   r   Úpayload_bytes© r   úH/var/www/html/venv/lib/python3.10/site-packages/aiogram/utils/payload.pyÚencode_payloadD   s   

r   Údecoderc                 C   s$   t | ƒ}|du r| ¡ S ||ƒ ¡ S )z/Decode URL-safe base64url payload with decoder.N)Ú_decode_b64Údecode)r   r   Úoriginal_payloadr   r   r   Údecode_payloadV   s   r   c                 C   s   t | ƒ}| ¡ }| dd¡S )zEncode with URL-safe base64url.ú=Ú )r   r   Úreplace)r   Úbytes_payloadÚstr_payloadr   r   r   r   c   s   r   c                 C   s$   | ddt | ƒd   7 } t|  ¡ ƒS )zDecode with URL-safe base64url.r   é   )Úlenr   r   )r   r   r   r   r   j   s   r   )N)Ú__doc__Úbase64r   r   Útypingr   r   r
   Úbytesr   r   r   r   r   r   r   r   Ú<module>   s*    ?þÿþ
ýþÿþ
ý