
    dh~                         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Z		 dded	eeegef      defd
Z
dedefdZdedef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"

    )urlsafe_b64decodeurlsafe_b64encode)CallableOptionalNpayloadencoderreturnc                     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)r   r   payload_bytess      O/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/utils/payload.pyencode_payloadr   D   s@     gs#g,NN7+M.}%%    decoderc                 h    t        |       }||j                         S  ||      j                         S )z/Decode URL-safe base64url payload with decoder.)_decode_b64decode)r   r   original_payloads      r   decode_payloadr   V   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   c   s-    ,W5M&&(KsB''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   j   s1    sa#g,**++GW^^-..r   )N)__doc__base64r   r   typingr   r   r   bytesr   r   r   r    r   r   <module>r'      s   =~ 8 %
 37&&hw~./& 	&( 37
.
.hw~./
. 	
.( (3 (/ / /r   