o
    g                     @   s   d dl mZ d dlmZmZ d dl mZ dededefddZ	d	ed
e
defddZd	ed
e
defddZdedefddZdededefddZdS )    N)ffilib)ensureinp1inp2returnc                 C   s   t t| ttjd t t|ttjd tt| t|}td|}td|}t	|| t|  t	||t| t| t|k}t
|||dk}|oO|S )zA
    Compare contents of two memory regions in constant time
    raisingzchar []r   )r   
isinstancebytesexc	TypeErrormaxlenr   newmemmover   sodium_memcmp)r   r   lnbuf1buf2eqLeqC r   M/var/www/html/api-tag/env/lib/python3.10/site-packages/nacl/bindings/utils.pyr      s   r   s	blocksizec                 C   s   t t| ttjd t t|ttjd |dkrtjt| }|| }t	d|}t	dd}t
|| | t|||||}t |dkdtjd t||d dd S )z
    Pad the input bytearray ``s`` to a multiple of ``blocksize``
    using the ISO/IEC 7816-4 algorithm

    :param s: input bytes string
    :type s: bytes
    :param blocksize:
    :type blocksize: int
    :return: padded string
    :rtype: bytes
    r   r   unsigned char []	size_t []   zPadding failureN)r   r
   r   r   r   int
ValueErrorr   r   r   r   r   
sodium_padCryptoErrorbuffer)r   r   s_lenm_lenbufp_lenrcr   r   r   r!   )   s   r!   c                 C   sn   t t| ttjd t t|ttjd t| }tdd}t	
|| ||}|dkr/td| d|d  S )z
    Remove ISO/IEC 7816-4 padding from the input byte array ``s``

    :param s: input bytes string
    :type s: bytes
    :param blocksize:
    :type blocksize: int
    :return: unpadded string
    :rtype: bytes
    r   r   r   r   zUnpadding failureN)r   r
   r   r   r   r   r   r   r   r   sodium_unpadr"   )r   r   r$   u_lenr(   r   r   r   r)   C   s   
r)   inpc                 C   sV   t t| ttjd t| }td|}t|| | t	
|| t||dd S )ag  
    Increment the value of a byte-sequence interpreted
    as the little-endian representation of a unsigned big integer.

    :param inp: input bytes buffer
    :type inp: bytes
    :return: a byte-sequence representing, as a little-endian
             unsigned big integer, the value ``to_int(inp)``
             incremented by one.
    :rtype: bytes

    r   r   N)r   r
   r   r   r   r   r   r   r   r   sodium_incrementr#   )r+   r   r&   r   r   r   r,   X   s   r,   abc                 C   s   t t| ttjd t t|ttjd t| }t t||ktjd td|}td|}t|| | t||| t	
||| t||dd S )a  
    Given a couple of *same-sized* byte sequences, interpreted as the
    little-endian representation of two unsigned integers, compute
    the modular addition of the represented values, in constant time for
    a given common length of the byte sequences.

    :param a: input bytes buffer
    :type a: bytes
    :param b: input bytes buffer
    :type b: bytes
    :return: a byte-sequence representing, as a little-endian big integer,
             the integer value of ``(to_int(a) + to_int(b)) mod 2^(8*len(a))``
    :rtype: bytes
    r   r   N)r   r
   r   r   r   r   r   r   r   r   
sodium_addr#   )r-   r.   r   buf_abuf_br   r   r   r/   q   s   r/   )nacl.exceptions
exceptionsr   nacl._sodiumr   r   r   r   boolr   r   r!   r)   r,   r/   r   r   r   r   <module>   s   