U
    ÎZjC  ã                   @   sò   U d dl mZ d dlmZ d dlmZmZ d dlm	Z	 ddddd	d
dgZ
e ¡ Zeed< e ¡ Zeed	< e ¡ Zeed
< e ¡ Zeed< eeef dœdd„Zeeeef dœdd„Zeeeeeef dœdd„Zeeeeeef dœ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_BYTES)Ú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.©ZraisingN)
r   Únewr
   r   r   r   r   ÚexcÚCryptoErrorÚbuffer)Ú
public_keyÚ
secret_keyÚres© r   úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/nacl/bindings/crypto_kx.pyr   '   s    þ)Úseedr   c                 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_keyr   c                 C   sÞ   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ƒoft|ƒ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   sR    

ÿú

ÿú

ÿú	    ÿýþ)r$   Úserver_secret_keyr"   r   c                 C   sÞ   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ƒoft|ƒ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 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	   ‘   sR    

ÿú

ÿú

ÿú	    ÿýþN)Útypingr   Znaclr   r   Znacl._sodiumr   r   Znacl.exceptionsr   Ú__all__Zcrypto_kx_publickeybytesr
   ÚintÚ__annotations__Zcrypto_kx_secretkeybytesr   Zcrypto_kx_seedbytesr   Zcrypto_kx_sessionkeybytesr   r   r   r!   r   r	   r   r   r   r   Ú<module>   s8    ù
ü;
ü