
    IiL/                         S SK JrJr  S SKrS SKJr  S SKJr  S SKJ	r	J
r
Jr   " S S\R                  \
5      r " S S	\R                  \
5      rg)
    )ClassVarOptionalN)encoding)
exceptions)EncryptedMessageStringFixerrandomc            	          \ rS rSr% Sr\R                  R                  r\	\
   \S'   \R                  R                  r\	\
   \S'   \R                  R                  r\	\
   \S'   \R                  R                   r\	\
   \S'   \R&                  4S\S\R*                  4S	 jjrS
\4S jrS\R&                  4S\S\\   S\R*                  S
\4S jjrS\R&                  4S\S\\   S\R*                  S
\4S jjrSrg)	SecretBox   u  
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.

Encryption is done using `XSalsa20-Poly1305`_, and there are no practical
limits on the number or size of messages (up to 2⁶⁴ messages, each up to 2⁶⁴
bytes).

.. _XSalsa20-Poly1305: https://doc.libsodium.org/secret-key_cryptography/secretbox#algorithm-details

: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.
KEY_SIZE
NONCE_SIZEMACBYTESMESSAGEBYTES_MAXkeyencoderc                     UR                  U5      n[        U[        5      (       d  [        R                  " S5      e[        U5      U R                  :w  a#  [        R                  " SU R                  -  5      eXl        g )Nz'SecretBox must be created from 32 bytes%The key must be exactly %s bytes long	decode
isinstancebytesexc	TypeErrorlenr   
ValueError_keyselfr   r   s      1/venv/lib/python3.13/site-packages/nacl/secret.py__init__SecretBox.__init__;   sc     nnS!#u%%-- IJJs8t}}$..7$--G  	    returnc                     U R                   $ Nr   r   s    r    	__bytes__SecretBox.__bytes__I       yyr#   N	plaintextnoncec                    Uc  [        U R                  5      n[        U5      U R                  :w  a#  [        R                  " SU R                  -  5      e[
        R                  R                  XU R                  5      nUR                  U5      nUR                  U5      n[        R                  " UUUR                  X$-   5      5      $ )a  
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`]
'The nonce must be exactly %s bytes long)r	   r   r   r   r   naclbindingscrypto_secretboxr   encoder   _from_parts)r   r,   r-   r   
ciphertextencoded_nonceencoded_ciphertexts          r    encryptSecretBox.encryptL   s    , =4??+Eu:(..9DOOK  ]]33dii

  u-$^^J7++NN5-.
 	
r#   r5   c                 4   UR                  U5      nUc  USU R                   nXR                  S n[        U5      U R                  :w  a#  [        R                  " SU R                  -  5      e[
        R                  R                  XU R                  5      nU$ a  
Decrypts the ciphertext using the `nonce` (explicitly, when passed as a
parameter or implicitly, when omitted, as part of the ciphertext) and
returns the plaintext message.

:param ciphertext: [:class:`bytes`] The encrypted message to decrypt
:param nonce: [:class:`bytes`] The nonce used when encrypting the
    ciphertext
:param encoder: The encoder used to decode the ciphertext.
:rtype: [:class:`bytes`]
Nr/   )	r   r   r   r   r   r0   r1   crypto_secretbox_openr   )r   r5   r-   r   r,   s        r    decryptSecretBox.decryptw   s    $ ^^J/
=01E#OO$56Ju:(..9DOOK  MM77tyy
	 r#   r'   )__name__
__module____qualname____firstlineno____doc__r0   r1   crypto_secretbox_KEYBYTESr   r   int__annotations__crypto_secretbox_NONCEBYTESr   crypto_secretbox_MACBYTESr   !crypto_secretbox_MESSAGEBYTES_MAXr   r   
RawEncoderr   Encoderr!   r)   r   r   r8   r=   __static_attributes__ r#   r    r   r      s2   : #mmEEHhsmE $ I IJI"mmEEHhsmE 	77 h 8
 7?6I6I#+#3#35  "&$,$7$7	)
)
 )
 !!	)

 
)
\ "&$,$7$7	"" " !!	"
 
" "r#   r   c                      \ rS rSrSr\R                  R                  r\R                  R                  r
\R                  R                  r\R                  R                  r\R                   4S\S\R$                  4S jjrS\4S jrSS	\R                   4S
\S\S\\   S\R$                  S\4
S jjrSS	\R                   4S\S\S\\   S\R$                  S\4
S jjrSrg	)Aead   u  
The AEAD class encrypts and decrypts messages using the given secret key.

Unlike :class:`~nacl.secret.SecretBox`, AEAD supports authenticating
non-confidential data received alongside the message, such as a length
or type tag.

Like :class:`~nacl.secret.Secretbox`, this class provides authenticated
encryption. An inauthentic message will cause the decrypt function to raise
an exception.

Likewise, the authenticator should not be mistaken for a (public-key)
signature: recipients (with the ability to decrypt messages) are capable of
creating arbitrary valid message; in particular, this means AEAD messages
are repudiable. For non-repudiable messages, sign them after encryption.

The cryptosystem used is `XChacha20-Poly1305`_ as specified for
`standardization`_. There are `no practical limits`_ to how much can safely
be encrypted under a given key (up to 2⁶⁴ messages each containing up
to 2⁶⁴ bytes).

.. _standardization: https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha
.. _XChacha20-Poly1305: https://doc.libsodium.org/secret-key_cryptography/aead#xchacha-20-poly1305
.. _no practical limits: https://doc.libsodium.org/secret-key_cryptography/aead#limitations

: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.
r   r   c                     UR                  U5      n[        U[        5      (       d  [        R                  " S5      e[        U5      U R                  :w  a#  [        R                  " SU R                  -  5      eXl        g )Nz"AEAD must be created from 32 bytesr   r   r   s      r    r!   Aead.__init__   sc    
 nnS!#u%%-- DEEs8t}}$..7$--G  	r#   r$   c                     U R                   $ r&   r'   r(   s    r    r)   Aead.__bytes__   r+   r#   r#   Nr,   aadr-   c                    Uc  [        U R                  5      n[        U5      U R                  :w  a#  [        R                  " SU R                  -  5      e[
        R                  R                  XX0R                  5      nUR                  U5      nUR                  U5      n[        R                  " UUUR                  X5-   5      5      $ )a  
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 for :param nonce: to be unique.
    By default, it is generated randomly; [:class:`Aead`] uses XChacha20
    for extended (192b) nonce size, so the risk of reusing random nonces
    is negligible.  It is *strongly recommended* to keep this behaviour,
    as nonce reuse will compromise the privacy of encrypted messages.
    Should implicit nonces be inadequate for your application, the
    second best option is using split counters; e.g. if sending messages
    encrypted under a shared key between 2 users, each user can use the
    number of messages it sent so far, prefixed or suffixed with a 1bit
    user id.  Note that the counter must **never** be rolled back (due
    to overflow, on-disk state being rolled back to an earlier backup,
    ...)

: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`]
r/   )r	   r   r   r   r   r0   r1   *crypto_aead_xchacha20poly1305_ietf_encryptr   r3   r   r4   )r   r,   rU   r-   r   r5   r6   r7   s           r    r8   Aead.encrypt   s    < =4??+Eu:(..9DOOK  ]]MME99

  u-$^^J7++NN5-.
 	
r#   r5   c                 4   UR                  U5      nUc  USU R                   nXR                  S n[        U5      U R                  :w  a#  [        R                  " SU R                  -  5      e[
        R                  R                  XX0R                  5      nU$ r;   )	r   r   r   r   r   r0   r1   *crypto_aead_xchacha20poly1305_ietf_decryptr   )r   r5   rU   r-   r   r,   s         r    r=   Aead.decrypt  s    & ^^J/
=01E#OO$56Ju:(..9DOOK  MMLLUII
	 r#   r'   )r?   r@   rA   rB   rC   r0   r1   +crypto_aead_xchacha20poly1305_ietf_KEYBYTESr   ,crypto_aead_xchacha20poly1305_ietf_NPUBBYTESr   )crypto_aead_xchacha20poly1305_ietf_ABYTESr   3crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAXr   r   rJ   r   rK   r!   r)   r   r   r8   r=   rL   rM   r#   r    rO   rO      s#   "H }}HHHKKJ}}FFHII  %-$7$7 !! 5  !%$,$7$71
1
 1
 	1

 !!1
 
1
l !%$,$7$7## # 	#
 !!# 
# #r#   rO   )typingr   r   nacl.bindingsr0   r   r   r   
nacl.utilsr   r   r	   	Encodabler   rO   rM   r#   r    <module>rd      sF    &   " < <C""K CLU8{ Ur#   