
    nhC              
       h   U d dl mZ d dlmZ d dlmZmZ d dlm	Z	 g dZ
	  ej                         Zeed<    ej                         Zeed<    ej"                         Zeed<    ej&                         Zeed	<   d
eeef   fdZded
eeef   fdZdededed
eeef   fdZdededed
eeef   fdZy)    )Tuple)
exceptions)ffilib)ensure)crypto_kx_keypaircrypto_kx_client_session_keyscrypto_kx_server_session_keyscrypto_kx_PUBLIC_KEY_BYTEScrypto_kx_SECRET_KEY_BYTEScrypto_kx_SEED_BYTEScrypto_kx_SESSION_KEY_BYTESr   r   r   r   returnc                  H   t        j                  dt              } t        j                  dt              }t	        j
                  | |      }t        |dk(  dt        j                         t        j                  | t              dd t        j                  |t              dd fS )z
    Generate a keypair.
    This is a duplicate crypto_box_keypair, but
    is included for api consistency.
    :return: (public_key, secret_key)
    :rtype: (bytes, bytes)
    unsigned char[]r   Key generation failed.raisingN)
r   newr   r   r   r   r   excCryptoErrorbuffer)
public_key
secret_keyress      i/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/nacl/bindings/crypto_kx.pyr   r   '   s     *,FGJ*,FGJ



J
7C
3!8-sG 	

:9:1=

:9:1=     seedc                    t        j                  dt              }t        j                  dt              }t	        t        | t              xr t        |       t        k(  dj                  t              t        j                         t        j                  |||       }t	        |dk(  dt        j                         t        j                  |t              dd t        j                  |t              dd fS )ag  
    Generate a keypair with a given seed.
    This is functionally the same as crypto_box_seed_keypair, however
    it uses the blake2b hash primitive instead of sha512.
    It is included mainly for api consistency when using crypto_kx.
    :param seed: random seed
    :type seed: bytes
    :return: (public_key, secret_key)
    :rtype: (bytes, bytes)
    r   z*Seed must be a {} byte long bytes sequencer   r   r   N)r   r   r   r   r   
isinstancebyteslenr   formatr   	TypeErrorr   crypto_kx_seed_keypairr   r   )r   r   r   r   s       r   r%   r%   :   s     *,FGJ*,FGJ
4ECI1E$E4;; 	
  
$
$ZT
BC
3!8-sG 	

:9:1=

:9:1= r   client_public_keyclient_secret_keyserver_public_keyc                 4   t        t        | t              xr t        |       t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        j                  dt              }t        j                  dt              }t        j                  ||| ||      }t        |dk(  dt        j                         t        j                  |t              dd t        j                  |t              dd fS )	a+  
    Generate session keys for the client.
    :param client_public_key:
    :type client_public_key: bytes
    :param client_secret_key:
    :type client_secret_key: bytes
    :param server_public_key:
    :type server_public_key: bytes
    :return: (rx_key, tx_key)
    :rtype: (bytes, bytes)
    8Client public key must be a {} bytes long bytes sequencer   z8Client secret key must be a {} bytes long bytes sequence8Server public key must be a {} bytes long bytes sequencer   r   z%Client session key generation failed.N)r   r    r!   r"   r   r#   r   r$   r   r   r   r   r   r	   r   r   )r&   r'   r(   rx_keytx_keyr   s         r   r	   r	   W   a     $e, 	A!"&@@BII&	
  $e, 	A!"&@@BII&	
  $e, 	A!"&@@BII&	
  WW&(CDFWW&(CDF

+
+)+<>OC q/ 	

667:

667: r   server_secret_keyc                 4   t        t        | t              xr t        |       t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        t        |t              xr t        |      t        k(  dj                  t              t        j                         t        j                  dt              }t        j                  dt              }t        j                  ||| ||      }t        |dk(  dt        j                         t        j                  |t              dd t        j                  |t              dd fS )	a+  
    Generate session keys for the server.
    :param server_public_key:
    :type server_public_key: bytes
    :param server_secret_key:
    :type server_secret_key: bytes
    :param client_public_key:
    :type client_public_key: bytes
    :return: (rx_key, tx_key)
    :rtype: (bytes, bytes)
    r+   r   z8Server secret key must be a {} bytes long bytes sequencer*   r   r   z%Server session key generation failed.N)r   r    r!   r"   r   r#   r   r$   r   r   r   r   r   r
   r   r   )r(   r/   r&   r,   r-   r   s         r   r
   r
      r.   r   N)typingr   naclr   r   nacl._sodiumr   r   nacl.exceptionsr   __all__crypto_kx_publickeybytesr   int__annotations__crypto_kx_secretkeybytesr   crypto_kx_seedbytesr   crypto_kx_sessionkeybytesr   r!   r   r%   r	   r
    r   r   <module>r=      s    " ! " #?#">">"@ C @">#">">"@ C @3C335 c 5#@3#@#@#B S B5. & 5+> :777 7 5%<	7t777 7 5%<	7r   