o
    ØÜgC  ã                
   @   sø   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 ¡ Zeed< e ¡ Zeed< e ¡ Zeed< e ¡ Zeed	< d
eeef fdd„Zded
eeef fdd„Zdededed
eeef fdd„Zdededed
eeef fd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                  C   s`   t  dt¡} t  dt¡}t | |¡}t|dkdtjd t  	| t¡dd… t  	|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Úres© r   úQ/var/www/html/api-tag/env/lib/python3.10/site-packages/nacl/bindings/crypto_kx.pyr   '   s   þr   Úseedc                 C   sŠ   t  dt¡}t  dt¡}tt| tƒot| ƒtkd 	t¡t
jd t ||| ¡}t|dkdt
jd t  |t¡dd… t  |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   r   r   r   r"   :   s   ÿûþr"   Úclient_public_keyÚclient_secret_keyÚserver_public_keyc                 C   óÞ   t t| tƒot| ƒtkd t¡tjd t t|tƒot|ƒtkd t¡tjd t t|tƒo3t|ƒtkd t¡tjd t	 
dt¡}t	 
dt¡}t ||| ||¡}t |dkdtjd t	 |t¡dd… t	 |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 sequenceú8Server 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   r   r   r   r   W   óJ   

ÿú

ÿú

ÿú	
ÿýþr   Úserver_secret_keyc                 C   r&   )	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   r   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   r   r   Ú<module>   s<   
ÿþý

ü:ÿþý
ü