o
    »­§iE  ã                
   @   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 key pair.
    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   úN/home/app/Keep/.python/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 )ah  
    Generate a key pair 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   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>   s<   
ÿþý

ü:ÿþý
ü