
    ¿ig                         d dl mZmZ 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 Zd Zd Zd Z G d	 d
e          Zd ZddZdS )    )bchrconcat_buffers)VoidPointerSmartPointercreate_string_bufferget_raw_bufferc_size_tc_uint8_ptrc_ubyte)long_to_bytes)_raw_keccak_libc                     | ddz  k     r| dk    sJ | dk    rdn|                                  dz   dz  }t          |          t          |           z   S )z2Left encode function as defined in NIST SP 800-185     r         )
bit_lengthr   r   xnums     U/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/Hash/cSHAKE128.py_left_encoder   +   s[     dOOQ Avv!!ALLNNQ.14C99}Q''''    c                     | ddz  k     r| dk    sJ | dk    rdn|                                  dz   dz  }t          |           t          |          z   S )z3Right encode function as defined in NIST SP 800-185r   r   r   r   r   )r   r   r   r   s     r   _right_encoder   6   s[     dOOQ Avv!!ALLNNQ.14Cd3ii''r   c                     t          |           dz  }|ddz  k    rt          d          t          t          |          |           S )z4Encode string function as defined in NIST SP 800-185r   r   r   z$String too large to encode in cSHAKE)len
ValueErrorr   r   )r   bitlens     r   _encode_strr    A   sI     VVaZF!t)?@@@,v..222r   c                 |    t          t          |          |           }|t          |          |z  z
  |z  }|d|z  z   S )z2Zero pad byte string as defined in NIST SP 800-185    )r   r   r   )r   lengthto_padnpads       r   _bytepadr&   K   sF     L00!44F S[[6))V3DGdN""r   c                   $    e Zd ZdZd Zd Zd ZdS )
cSHAKE_XOFz]A cSHAKE hash object.
    Do not instantiate directly.
    Use the :func:`new` function.
    c                 8   t                      }|s|r=t          |          t          |          z   }t          |d|z
  dz            }d| _        n	d }d| _        t	          j        |                                t          |dz            t          d                    }|rt          d|z            t          |                                t          j                  | _        d| _        |r|                     |           |r|                     |           d S d S )Ni@  r            z#Error %d while instantiating cSHAKEF)r   r    r&   _paddingr   keccak_init
address_ofr	   r   r   r   getkeccak_destroy_state_is_squeezingupdate)	selfdatacustomcapacityfunctionstateprefix_unpadprefixresults	            r   __init__zcSHAKE_XOF.__init__]   s/    	!X 	!&x00;v3F3FFLlTH_q,@AAF DMMF DM ,U-=-=-?-?-5hk-B-B-4R[[: :  	'B%& ' ' '"599;;#2#AC C" 	 KK 	KK	 	r   c           	         | j         rt          d          t          j        | j                                        t          |          t          t          |                              }|rt          d|| j
        fz            | S )zContinue 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 %s state)r3   	TypeErrorr   keccak_absorbr2   r0   r
   r	   r   r   name)r5   r6   r=   s      r   r4   zcSHAKE_XOF.updatex   s      	OMNNN .t{/@/@/:4/@/@/7D		/B/BD D  	4? &	23 4 4 4r   c                    d| _         t          |          }t          j        | j                                        |t          |          t          | j                            }|rt          d|| j
        f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 %s)r3   r   r   keccak_squeezer2   r0   r	   r   r-   r   rB   r   )r5   r#   bfrr=   s       r   readzcSHAKE_XOF.read   s     ""6** /0A0A03080@0@070F0FH H  	4@ &	23 4 4 4 c"""r   N)__name__
__module____qualname____doc__r>   r4   rF    r   r   r(   r(   W   sK         
  6  $# # # # #r   r(   c                 &    t          | |d|          S )N   r(   )r6   r7   r9   s      r   _newrO      s    dFC222r   Nc                 &    t          | |dd          S )az  Return a fresh instance of a cSHAKE128 object.

    Args:
       data (bytes/bytearray/memoryview):
        Optional.
        The very first chunk of the message to hash.
        It is equivalent to an early call to :meth:`update`.
       custom (bytes):
        Optional.
        A customization bytestring (``S`` in SP 800-185).

    :Return: A :class:`cSHAKE_XOF` object
    rM   r   rN   )r6   r7   s     r   newrQ      s      dFC---r   )NN)Cryptodome.Util.py3compatr   r   Cryptodome.Util._raw_apir   r   r   r   r	   r
   r   Cryptodome.Util.numberr   Cryptodome.Hash.keccakr   r   r   r    r&   objectr(   rO   rQ   rK   r   r   <module>rW      s;  > ; : : : : : : :8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 1 0 0 0 0 0 2 2 2 2 2 2( ( (( ( (3 3 3	# 	# 	#L# L# L# L# L# L# L# L#^3 3 3
. . . . . .r   