
    7gC              
       r   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dS )    )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                  \   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      Q/var/www/html/syslog/venv/lib/python3.11/site-packages/nacl/bindings/crypto_kx.pyr   r   '   s     *,FGGJ*,FGGJ


J
7
7C
3!8-sGGGG 	
:9::111=
:9::111=     seedc                    t          j        dt                    }t          j        dt                    }t	          t          | t                    ot          |           t          k    d	                    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GGJ*,FGGJ
4ECII1E$E4;; 	
 	
     
$ZT
B
BC
3!8-sGGGG 	
:9::111=
:9::111= r   client_public_keyclient_secret_keyserver_public_keyc                    t          t          | t                    ot          |           t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    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        $e,, 	A!""&@@BII&	
 	
     $e,, 	A!""&@@BII&	
 	
     $e,, 	A!""&@@BII&	
 	
     W&(CDDFW&(CDDF

+)+<>O C q/    	
6677:
6677: r   server_secret_keyc                    t          t          | t                    ot          |           t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    t                    t          j                   t          t          |t                    ot          |          t          k    d                    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55 c 5 5 5#@3#@#B#B S B B B5.    & 5+>    :777 7 5%<	7 7 7 7t777 7 5%<	7 7 7 7 7 7r   