U
    Øccb  ã                   @   s¶   U d dl mZ d dlmZmZ d dlmZ e ¡ Z	e
ed< e ¡ Ze
ed< e ¡ Ze
ed< e ¡ Ze
ed< e ¡ Ze
ed< e ¡ Ze
ed	< eeeed
œdd„Zeeeedœdd„ZdS )é    )Ú
exceptions)ÚffiÚlib)ÚensureÚcrypto_secretbox_KEYBYTESÚcrypto_secretbox_NONCEBYTESÚcrypto_secretbox_ZEROBYTESÚcrypto_secretbox_BOXZEROBYTESÚcrypto_secretbox_MACBYTESÚ!crypto_secretbox_MESSAGEBYTES_MAX)ÚmessageÚnonceÚkeyÚreturnc                 C   sŽ   t |ƒtkrt d¡‚t |ƒtkr,t d¡‚dt |  }t dt |ƒ¡}t 	||t |ƒ||¡}t
|dkdtjd t |t |ƒ¡}|td… S )	zÆ
    Encrypts and returns the message ``message`` with the secret ``key`` and
    the nonce ``nonce``.

    :param message: bytes
    :param nonce: bytes
    :param key: bytes
    :rtype: bytes
    úInvalid keyúInvalid nonceó    úunsigned char[]r   zEncryption failed©ZraisingN)Úlenr   ÚexcÚ
ValueErrorr   r   r   Únewr   Úcrypto_secretboxr   ÚCryptoErrorÚbufferr	   )r   r   r   ÚpaddedÚ
ciphertextÚres© r   úB/tmp/pip-unpacked-wheel-e6sdgn5m/nacl/bindings/crypto_secretbox.pyr      s    


r   )r   r   r   r   c                 C   sŽ   t |ƒtkrt d¡‚t |ƒtkr,t d¡‚dt |  }t dt |ƒ¡}t 	||t |ƒ||¡}t
|dkdtjd t |t |ƒ¡}|td… S )	zÕ
    Decrypt and returns the encrypted message ``ciphertext`` with the secret
    ``key`` and the nonce ``nonce``.

    :param ciphertext: bytes
    :param nonce: bytes
    :param key: bytes
    :rtype: bytes
    r   r   r   r   r   z1Decryption failed. Ciphertext failed verificationr   N)r   r   r   r   r   r	   r   r   r   Úcrypto_secretbox_openr   r   r   r   )r   r   r   r   Ú	plaintextr   r   r   r    r!   9   s    

ýr!   N)Znaclr   r   Znacl._sodiumr   r   Znacl.exceptionsr   Zcrypto_secretbox_keybytesr   ÚintÚ__annotations__Zcrypto_secretbox_noncebytesr   Zcrypto_secretbox_zerobytesr   Zcrypto_secretbox_boxzerobytesr	   Zcrypto_secretbox_macbytesr
   Z!crypto_secretbox_messagebytes_maxr   Úbytesr   r!   r   r   r   r    Ú<module>   s     ÿ
  þ