§
    8·tc.  ã                   ót   — d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d„ Zd„ Zd„ Z G d„ de¦  «        Zdd„Zd	S )é    )Úbchr)ÚVoidPointerÚSmartPointerÚcreate_string_bufferÚget_raw_bufferÚc_size_tÚc_uint8_ptr)Ú_raw_keccak_libc                 ó  — | ddz  k     r| dk    sJ ‚| dk    rdn|                       ¦   «         dz   dz  }t          |¦  «        t          | dz  ¦  «        z   }| dz  } | dk    r |t          | dz  ¦  «        z   }| dz  } | dk    ° |S )z2Left encode function as defined in NIST SP 800-185é   éø  r   é   é   éÿ   )Ú
bit_lengthr   )ÚxÚnumÚencs      ú;/usr/lib/python3/dist-packages/Cryptodome/Hash/cSHAKE128.pyÚ_left_encoder   )   s�   € ð ��d‘ŠOˆO  Q¢   ð �AŠvˆvˆ!ˆ!˜AŸLšL™NœN¨QÑ.°1Ñ4€Cå
ˆs‰)Œ)•d˜1˜t™8‘n”nÑ
$€CØˆ!�G€Aà
ˆaŠ%ˆ%Ø•D˜˜T™‘N”NÑ"ˆØ	ˆa‰ˆð ˆaŠ%ˆ%ð €Jó    c                 óz   — t          | ¦  «        dz  }|ddz  k    rt          d¦  «        ‚t          |¦  «        | z   S )z4Encode string function as defined in NIST SP 800-185r   r   r   z$String too large to encode in cSHAKE)ÚlenÚ
ValueErrorr   )r   Úbitlens     r   Ú_encode_strr   ;   sD   € õ �‰VŒV�a‰Z€FØ�!�t‘)ÒÐÝÐ?Ñ@Ô@Ð@å˜ÑÔ !Ñ#Ð#r   c                 óf   — t          |¦  «        | z   }|t          |¦  «        |z  z
  |z  }|d|z  z   S )z2Zero pad byte string as defined in NIST SP 800-185ó    )r   r   )r   ÚlengthÚto_padÚnpads       r   Ú_bytepadr"   E   sA   € õ ˜&Ñ!Ô! AÑ%€Fð •S˜‘[”[ 6Ñ)Ñ)¨VÑ3€Dà�G˜d‘NÑ"Ð"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                 ó  — t          ¦   «         }|r8t          d¦  «        t          |¦  «        z   }t          |d|z
  dz  ¦  «        }d}nd }d}t          j        |                     ¦   «         t          |dz  ¦  «        |¦  «        }|rt          d|z  ¦  «        ‚t          | 	                    ¦   «         t          j
        ¦  «        | _        d| _        |r|                      |¦  «         |r|                      |¦  «         d S d S )Nr   i@  r   é   é   z#Error %d while instantiating cSHAKEF)r   r   r"   r
   Úkeccak_initÚ
address_ofr   r   r   ÚgetÚkeccak_destroyÚ_stateÚ_is_squeezingÚupdate)	ÚselfÚdataÚcustomÚcapacityÚstateÚprefix_unpadÚprefixÚpadÚresults	            r   Ú__init__zcSHAKE_XOF.__init__W   s  € Ý‘”ˆàð 	Ý& sÑ+Ô+­k¸&Ñ.AÔ.AÑAˆLÝ˜l¨T°H©_¸qÑ,@ÑAÔAˆFØˆCˆCàˆFØˆCå Ô,¨U×-=Ò-=Ñ-?Ô-?Ý-5°hÀ±kÑ-BÔ-BØ-0ñ2ô 2ˆð ð 	'ÝÐBØ%ñ&ñ 'ô 'ð 'å" 5§9¢9¡;¤;Ý#2Ô#AñCô CˆŒà"ˆÔàð 	 Ø�KŠK˜ÑÔÐàð 	Ø�KŠK˜ÑÔÐÐÐð	ð 	r   c           	      ó  — | j         rt          d¦  «        ‚t          j        | j                             ¦   «         t          |¦  «        t          t          |¦  «        ¦  «        ¦  «        }|rt          d|| j
        f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 %s state)r-   Ú	TypeErrorr
   Úkeccak_absorbr,   r*   r	   r   r   r   Úname)r/   r0   r7   s      r   r.   zcSHAKE_XOF.updater   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          |¦  «        ¦  «        }|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)
r-   r   r
   Úkeccak_squeezer,   r*   r   r   r<   r   )r/   r   Úbfrr7   s       r   ÚreadzcSHAKE_XOF.read„   s‡   € ð "ˆÔÝ" 6Ñ*Ô*ˆÝ Ô/°´·²Ñ0AÔ0AØ03Ý08¸Ñ0@Ô0@ñBô Bˆð ð 	4ÝÐ@Ø &¨¬	Ð2ñ3ñ 4ô 4ð 4õ ˜cÑ"Ô"Ð"r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r8   r.   r@   © r   r   r$   r$   Q   sK   € € € € € ðð ð
ð ð ð6ð ð ð$#ð #ð #ð #ð #r   r$   Nr   c                 ó$   — t          | |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
    é   )r$   )r0   r1   s     r   ÚnewrH   Ÿ   s   € õ  �d˜F CÑ(Ô(Ð(r   )Nr   )ÚCryptodome.Util.py3compatr   ÚCryptodome.Util._raw_apir   r   r   r   r   r	   ÚCryptodome.Hash.keccakr
   r   r   r"   Úobjectr$   rH   rE   r   r   ú<module>rM      sû   ðð> +Ð *Ð *Ð *Ð *Ð *ð/ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð
 3Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð$$ð $ð $ð	#ð 	#ð 	#ðK#ð K#ð K#ð K#ð K#�ñ K#ô K#ð K#ð\)ð )ð )ð )ð )ð )r   