File: //usr/lib/python3/dist-packages/nacl/bindings/__pycache__/utils.cpython-38.pyc
U
�֫[D � @ st d dl mZmZmZ d dlmZ d dlmZ d dl m
Z
mZ d dlmZ dd� Z
dd � Zd
d� Zdd
� Zdd� ZdS )� )�absolute_import�division�print_function)�
integer_typesN)�ffi�lib)�ensurec C s� t t| t�tjd� t t|t�tjd� tt| �t|��}t�d|�}t�d|�}t� || t| �� t� ||t|�� t| �t|�k}t
�|||�dk}|o�|S )zA
Compare contents of two memory regions in constant time
�Zraisingzchar []r )r �
isinstance�bytes�exc� TypeError�max�lenr �new�memmover �
sodium_memcmp)Zinp1Zinp2�lnZbuf1Zbuf2ZeqLZeqC� r �5/usr/lib/python3/dist-packages/nacl/bindings/utils.pyr s
�
�r c C s� t t| t�tjd� t t|t�tjd� |dkr6tj�t| �}|| }t� d|�}t� dd�}t�
|| |� t�|||||�}t |dkdtj
d� t�||d �dd� 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 []� zPadding failureN)r r
r r r
r �
ValueErrorr r r r r �
sodium_pad�CryptoError�buffer)�s� blocksize�s_lenZm_len�bufZp_len�rcr r r r . s
�
�r c C sn t t| t�tjd� t t|t�tjd� t| �}t�dd�}t �
|| ||�}|dkr^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 zUnpadding failureN)r r
r r r
r r r r r �sodium_unpadr )r r r Zu_lenr! r r r r"