
    ihw                     f    d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
  edd      Z G d de      Zd Zy)	    )bord)load_pycryptodome_raw_libVoidPointerSmartPointercreate_string_bufferget_raw_bufferc_size_tc_uint8_ptrc_ubytezCrypto.Hash._keccaka  
                        int keccak_init(void **state,
                                        size_t capacity_bytes,
                                        uint8_t rounds);
                        int keccak_destroy(void *state);
                        int keccak_absorb(void *state,
                                          const uint8_t *in,
                                          size_t len);
                        int keccak_squeeze(const void *state,
                                           uint8_t *out,
                                           size_t len,
                                           uint8_t padding);
                        int keccak_digest(void *state,
                                          uint8_t *digest,
                                          size_t len,
                                          uint8_t padding);
                        int keccak_copy(const void *src, void *dst);
                        int keccak_reset(void *state);
                        c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)Keccak_HashzA Keccak hash object.
    Do not instantiate directly.
    Use the :func:`new` function.

    :ivar digest_size: the size in bytes of the resulting hash
    :vartype digest_size: integer
    c                 z   || _         || _        d| _        d| _        t	               }t
        j                  |j                         t        | j                   dz        t        d            }|rt        d|z        t        |j                         t
        j                        | _        |r| j                  |       y y )NF         z#Error %d while instantiating keccak)digest_size_update_after_digest_digest_done_paddingr   _raw_keccak_libkeccak_init
address_ofr	   r   
ValueErrorr   getkeccak_destroy_stateupdate)selfdatadigest_bytesupdate_after_digeststateresults         P/var/www/html/dev/engine/venv/lib/python3.12/site-packages/Crypto/Hash/keccak.py__init__zKeccak_Hash.__init__E   s    '$7!! ,,U-=-=-?-5d6F6F6J-K-4R[: BVKLL"599;#2#A#ACKK     c           	          | j                   r| j                  st        d      t        j	                  | j
                  j                         t        |      t        t        |                  }|rt        d|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.
        z8You can only call 'digest' or 'hexdigest' on this objectzError %d while updating keccak)r   r   	TypeErrorr   keccak_absorbr   r   r
   r	   lenr   )r   r   r#   s      r$   r   zKeccak_Hash.updateX   sn     T%>%>VWW ..t{{/@/:4/@/7D	/BD =FGGr&   c                    d| _         t        | j                        }t        j	                  | j
                  j                         |t        | j                        t        | j                              }|rt        d|z        t        |      S )zReturn the **binary** (non-printable) digest of the message that has been hashed so far.

        :return: The hash digest, computed over the data processed so far.
                 Binary form.
        :rtype: byte string
        TzError %d while squeezing keccak)r   r   r   r   keccak_digestr   r   r	   r   r   r   r   )r   bfrr#   s      r$   digestzKeccak_Hash.digesti   sx     !"4#3#34 ..t{{/@/2/78H8H/I/6t}}/EG >GHHc""r&   c           	      ~    dj                  | j                         D cg c]  }dt        |      z   c}      S c c}w )zReturn the **printable** digest of the message that has been hashed so far.

        :return: The hash digest, computed over the data processed so far.
                 Hexadecimal encoded.
        :rtype: string
         z%02x)joinr.   r   )r   xs     r$   	hexdigestzKeccak_Hash.hexdigest|   s0     ww$++-@Qa(@AA@s   :c                 F    d|vrd|vr| j                   |d<   t        di |S )z"Create a fresh Keccak hash object.r    digest_bits )r   new)r   kwargss     r$   r7   zKeccak_Hash.new   s/     'M,G%)%5%5F>"}V}r&   N)	__name__
__module____qualname____doc__r%   r   r.   r3   r7   r6   r&   r$   r   r   <   s!    &"#&Br&   r   c                  n   | j                  dd      }| j                  dd      }| j                  dd      }| j                  dd      }d||fvrt        d      d||fk(  rt        d	      ||d
vrt        d      |dvrt        d      |dz  }| rt        dt        |       z         t	        |||      S )ao  Create a new hash object.

    Args:
        data (bytes/bytearray/memoryview):
            The very first chunk of the message to hash.
            It is equivalent to an early call to :meth:`Keccak_Hash.update`.
        digest_bytes (integer):
            The size of the digest, in bytes (28, 32, 48, 64).
        digest_bits (integer):
            The size of the digest, in bits (224, 256, 384, 512).
        update_after_digest (boolean):
            Whether :meth:`Keccak.digest` can be followed by another
            :meth:`Keccak.update` (default: ``False``).

    :Return: A :class:`Keccak_Hash` hash object
    r   Nr!   Fr    r5   z*Only one digest parameter must be provided)NNz&Digest size (bits, bytes) not provided)       0   @   z('digest_bytes' must be: 28, 32, 48 or 64)      i  i   z,'digest_bytes' must be: 224, 256, 384 or 512   zUnknown parameters: )popr(   r   strr   )r8   r   r!   r    r5   s        r$   r7   r7      s    $ ::fd#D **%:EB::nd3L**]D1KL+..DEEk22@AA//GHH22KLL"a'.V<==t\+>??r&   N)Crypto.Util.py3compatr   Crypto.Util._raw_apir   r   r   r   r   r	   r
   r   r   objectr   r7   r6   r&   r$   <module>rJ      sB   > '8 8 8 ,,A*P& Pf&@r&   