File: //proc/self/root/lib/python3/dist-packages/nacl/__pycache__/secret.cpython-38.pyc
U
�֫[6 � @ sb d dl mZmZmZ d dlZd dlmZ d dlmZ d dl m
Z
mZmZ G dd� dej
ee�ZdS )� )�absolute_import�division�print_functionN)�encoding)�
exceptions)�EncryptedMessage�StringFixer�randomc @ sf e Zd ZdZejjZejjZ ejj
ZejjZ
ejfdd�Zdd� Zdejfdd�Zdejfd d
�ZdS )� SecretBoxa5
The SecretBox class encrypts and decrypts messages using the given secret
key.
The ciphertexts generated by :class:`~nacl.secret.Secretbox` include a 16
byte authenticator which is checked as part of the decryption. An invalid
authenticator will cause the decrypt function to raise an exception. The
authenticator is not a signature. Once you've decrypted the message you've
demonstrated the ability to create arbitrary valid message, so messages you
send are repudiable. For non-repudiable messages, sign them after
encryption.
:param key: The secret key used to encrypt and decrypt messages
:param encoder: The encoder class used to decode the given key
:cvar KEY_SIZE: The size that the key is required to be.
:cvar NONCE_SIZE: The size that the nonce is required to be.
:cvar MACBYTES: The size of the authentication MAC tag in bytes.
:cvar MESSAGEBYTES_MAX: The maximum size of a message which can be
safely encrypted with a single key/nonce
pair.
c C sF |� |�}t|t�st�d��t|�| jkr<t�d| j ��|| _d S )Nz'SecretBox must be created from 32 bytesz%The key must be exactly %s bytes long) �decode�
isinstance�bytes�exc� TypeError�len�KEY_SIZE�
ValueError�_key)�self�key�encoder� r �-/usr/lib/python3/dist-packages/nacl/secret.py�__init__4 s
��zSecretBox.__init__c C s | j S )N)r )r r r r � __bytes__A s zSecretBox.__bytes__Nc C sn |dkrt | j�}t|�| jkr0t�d| j ��tj�||| j�}|� |�}|� |�}t
�|||� || ��S )aL
Encrypts the plaintext message using the given `nonce` (or generates
one randomly if omitted) and returns the ciphertext encoded with the
encoder.
.. warning:: It is **VITALLY** important that the nonce is a nonce,
i.e. it is a number used only once for any given key. If you fail
to do this, you compromise the privacy of the messages encrypted.
Give your nonces a different prefix, or have one side use an odd
counter and one an even counter. Just make sure they are different.
:param plaintext: [:class:`bytes`] The plaintext message to encrypt
:param nonce: [:class:`bytes`] The nonce to use in the encryption
:param encoder: The encoder to use to encode the ciphertext
:rtype: [:class:`nacl.utils.EncryptedMessage`]
N�'The nonce must be exactly %s bytes long)r �
NONCE_SIZEr r r �nacl�bindingsZcrypto_secretboxr �encoder Z_from_parts)r � plaintext�noncer �
ciphertextZ
encoded_nonceZencoded_ciphertextr r r �encryptD s"