
    9i                         S SK JrJr  S SKJrJrJrJrJrJ	r	J
r
  S SKJr  S SKJr  S rS rS rS r " S	 S
\5      rS rSS jrg)    )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                     U SS-  :  a  U S:  d   eU S:X  a  SOU R                  5       S-   S-  n[        U5      [        U 5      -   $ )z2Left encode function as defined in NIST SP 800-185     r         )
bit_lengthr   r   xnums     U/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/Hash/cSHAKE128.py_left_encoder   +   sN     dOQ'& Av!ALLNQ.14C9}Q'''    c                     U SS-  :  a  U S:  d   eU S:X  a  SOU R                  5       S-   S-  n[        U 5      [        U5      -   $ )z3Right encode function as defined in NIST SP 800-185r   r   r   r   r   )r   r   r   r   s     r   _right_encoder   6   sN     dOQ'& Av!ALLNQ.14Cd3i''r   c                 p    [        U 5      S-  nUSS-  :  a  [        S5      e[        [        U5      U 5      $ )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   s;     VaZF!t)?@@,v.22r   c                 d    [        [        U5      U 5      nU[        U5      U-  -
  U-  nUSU-  -   $ )z2Zero pad byte string as defined in NIST SP 800-185    )r   r   r   )r   lengthto_padnpads       r   _bytepadr&   K   s>     L0!4F S[6))V3DGdN""r   c                   *    \ rS rSrSrS rS rS rSrg)
cSHAKE_XOFW   zQA cSHAKE hash object.
Do not instantiate directly.
Use the :func:`new` function.
c                    [        5       nU(       d  U(       a1  [        U5      [        U5      -   n[        USU-
  S-  5      nSU l        O	S nSU l        [        R
                  " UR                  5       [        US-  5      [        S5      5      nU(       a  [        SU-  5      e[        UR                  5       [        R                  5      U l        SU l        U(       a  U R                  U5        U(       a  U R                  U5        g g )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__cSHAKE_XOF.__init__]   s    X&x0;v3FFLlTH_q,@AF DMF DM ,,U-=-=-?-5hk-B-4R[: B%& ' '"599;#2#A#AC"KKKK r   c           	         U R                   (       a  [        S5      e[        R                  " U R                  R                  5       [        U5      [        [        U5      5      5      nU(       a  [        SX R                  4-  5      eU $ )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)r4   	TypeErrorr   keccak_absorbr3   r1   r
   r	   r   r   name)r6   r7   r>   s      r   r5   cSHAKE_XOF.updatex   st     MNN ..t{{/@/:4/@/7D	/BD ? &		23 4 4r   c                    SU l         [        U5      n[        R                  " U R                  R                  5       U[        U5      [        U R                  5      5      nU(       a  [        SX0R                  4-  5      e[        U5      $ )a   
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)r4   r   r   keccak_squeezer3   r1   r	   r   r.   r   rD   r   )r6   r#   bfrr>   s       r   readcSHAKE_XOF.read   s|     ""6* //0A03080@070FH @ &		23 4 4 c""r   )r4   r.   r3   N)	__name__
__module____qualname____firstlineno____doc__r?   r5   rI   __static_attributes__ r   r   r(   r(   W   s    
6$#r   r(   c                     [        XSU5      $ )N   r(   )r7   r8   r:   s      r   _newrU      s    dC22r   Nc                     [        XSS5      $ )aR  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
rS   r   rT   )r7   r8   s     r   newrW      s      dC--r   )NN)Crypto.Util.py3compatr   r   Crypto.Util._raw_apir   r   r   r   r	   r
   r   Crypto.Util.numberr   Crypto.Hash.keccakr   r   r   r    r&   objectr(   rU   rW   rQ   r   r   <module>r]      sN   > 78 8 8
 - .((3	#L# L#^3
.r   