Ë
    (üàgû  ã                   óh   — d dl mZmZmZmZmZmZmZ d dlm	Z	 d dl
mZ ddlmZ  G d„ de«      Zd„ Zy	)
é    )ÚVoidPointerÚSmartPointerÚcreate_string_bufferÚget_raw_bufferÚc_size_tÚc_uint8_ptrÚc_ubyte)Úlong_to_bytes)Úbchré   )Ú_raw_keccak_libc                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zd„ Zy)	Ú
TurboSHAKEzaA TurboSHAKE hash object.
    Do not instantiate directly.
    Use the :func:`new` function.
    c                 óR  — t        «       }t        j                  |j                  «       t	        |«      t        d«      «      }|rt        d|z  «      ‚t        |j                  «       t        j                  «      | _
        d| _        || _        || _        |r| j                  |«       y y )Né   z'Error %d while instantiating TurboSHAKEF)r   r   Úkeccak_initÚ
address_ofr   r	   Ú
ValueErrorr   ÚgetÚkeccak_destroyÚ_stateÚ_is_squeezingÚ	_capacityÚ_domainÚupdate)ÚselfÚcapacityÚdomain_separationÚdataÚstateÚresults         úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/Hash/TurboSHAKE128.pyÚ__init__zTurboSHAKE.__init__   s”   € ä“ˆÜ ×,Ñ,¨U×-=Ñ-=Ó-?Ü-5°hÓ-?Ü-4°R«[ó:ˆñ ÜÐFØ%ñ&ó 'ð 'ä" 5§9¡9£;´×0NÑ0NÓOˆŒà"ˆÔØ!ˆŒØ(ˆŒáØ�K‰K˜Õð ó    c           	      óè   — | j                   rt        d«      ‚t        j                  | j                  j                  «       t        |«      t        t        |«      «      «      }|rt        d|z  «      ‚| S )z¼Continue hashing of a message by consuming the next chunk of data.

        Args:
            data (byte string/byte array/memoryview): The next chunk of the message being hashed.
        z/You cannot call 'update' after the first 'read'z(Error %d while updating TurboSHAKE state)
r   Ú	TypeErrorr   Úkeccak_absorbr   r   r   r   Úlenr   )r   r   r!   s      r"   r   zTurboSHAKE.update%   sm   € ð ×ÒÜÐMÓNÐNä ×.Ñ.¨t¯{©{¯©Ó/@Ü/:¸4Ó/@Ü/7¼¸D»	Ó/BóDˆñ ÜÐGØ%ñ&ó 'ð 'àˆr$   c                 óô   — d| _         t        |«      }t        j                  | j                  j                  «       |t        |«      t        | j                  «      «      }|rt        d|z  «      ‚t        |«      S )ah  
        Compute the next piece of XOF output.

        .. note::
            You cannot use :meth:`update` anymore after the first call to
            :meth:`read`.

        Args:
            length (integer): the amount of bytes this method must return

        :return: the next piece of XOF output (of the given length)
        :rtype: byte string
        Tz)Error %d while extracting from TurboSHAKE)r   r   r   Úkeccak_squeezer   r   r   r	   r   r   r   )r   ÚlengthÚbfrr!   s       r"   ÚreadzTurboSHAKE.read7   su   € ð "ˆÔÜ" 6Ó*ˆÜ ×/Ñ/°·±·±Ó0AØ03Ü08¸Ó0@Ü07¸¿¹Ó0EóGˆñ ÜÐHØ%ñ&ó 'ð 'ô ˜cÓ"Ð"r$   Nc                 óP   —  t        | «      | j                  | j                  |«      S ©N)Útyper   r   )r   r   s     r"   ÚnewzTurboSHAKE.newR   s   € ØŒt�D‹z˜$Ÿ.™.¨$¯,©,¸Ó=Ð=r$   c                 óŒ   — t        j                  | j                  j                  «       «      }|rt	        d|z  «      ‚d| _        y )Nz)Error %d while resetting TurboSHAKE stateF)r   Úkeccak_resetr   r   r   r   )r   r!   s     r"   Ú_resetzTurboSHAKE._resetU   s@   € Ü ×-Ñ-¨d¯k©k¯o©oÓ.?Ó@ˆÙÜÐHØ%ñ&ó 'ð 'à"ˆÕr$   r/   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r   r-   r1   r4   © r$   r"   r   r      s    „ ñò
ò&ò$#ó6>ó#r$   r   c                  óš   — | j                  dd«      }d|cxk  rdk  sn t        d|z  «      ‚| j                  d«      }t        d||¬«      S )	a†  Create a new TurboSHAKE128 object.

    Args:
       domain (integer):
         Optional - A domain separation byte, between 0x01 and 0x7F.
         The default value is 0x1F.
       data (bytes/bytearray/memoryview):
        Optional - The very first chunk of the message to hash.
        It is equivalent to an early call to :meth:`update`.

    :Return: A :class:`TurboSHAKE` object
    Údomainé   r   é   z&Incorrect domain separation value (%d)r   é    )r   )r   r   r   )Úkwargsr   r   s      r"   r1   r1   ]   sY   € ð Ÿ
™
 8¨TÓ2ÐØÐ%Ô-¨Ô-ÜÐAØ*ñ+ó ,ð 	,à�:‰:�fÓ€DÜ�bÐ+°$Ô7Ð7r$   N)ÚCrypto.Util._raw_apir   r   r   r   r   r   r	   ÚCrypto.Util.numberr
   ÚCrypto.Util.py3compatr   Úkeccakr   Úobjectr   r1   r9   r$   r"   ú<module>rE      s3   ð÷8÷ 8ñ 8õ
 -Ý &å #ôN#�ô N#ób8r$   