§
    &xÅj  ã            
       ó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 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.©ÚraisingN)
r   Únewr   r   r   r   r   ÚexcÚCryptoErrorÚbuffer)Ú
public_keyÚ
secret_keyÚress      úHC:\Projects\Historical\venv\Lib\site-packages\nacl/bindings/crypto_kx.pyr   r   '   s–   € õ ”Ð*Õ,FÑGÔG€JÝ”Ð*Õ,FÑGÔG€JÝ
Ô
 
¨JÑ
7Ô
7€CÝ
ˆ3�!Š8Ð-µs´ÐGÑGÔGÐGõ 	Œ
�:Õ9Ñ:Ô:¸1¸1¸1Ô=ÝŒ
�:Õ9Ñ:Ô:¸1¸1¸1Ô=ðð ó    Ú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 )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   s       r   r%   r%   :   sì   € õ ”Ð*Õ,FÑGÔG€JÝ”Ð*Õ,FÑGÔG€JÝ
Ý�4�ÑÔÐE¥C¨¡I¤IÕ1EÒ$EØ4×;Ò;Ý ñ	
ô 	
õ ”ðñ ô ð õ Ô
$ Z°¸TÑ
BÔ
B€CÝ
ˆ3�!Š8Ð-µs´ÐGÑGÔGÐGõ 	Œ
�:Õ9Ñ:Ô:¸1¸1¸1Ô=ÝŒ
�:Õ9Ñ:Ô:¸1¸1¸1Ô=ðð 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 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   s         r   r	   r	   W   óÄ  € õ  ÝÐ$¥eÑ,Ô,ð 	AÝÐ!Ñ"Ô"Õ&@Ò@ØB×IÒIÝ&ñ	
ô 	
õ ”ðñ ô ð õ ÝÐ$¥eÑ,Ô,ð 	AÝÐ!Ñ"Ô"Õ&@Ò@ØB×IÒIÝ&ñ	
ô 	
õ ”ðñ ô ð õ ÝÐ$¥eÑ,Ô,ð 	AÝÐ!Ñ"Ô"Õ&@Ò@ØB×IÒIÝ&ñ	
ô 	
õ ”ðñ ô ð õ ŒWÐ&Õ(CÑDÔD€FÝŒWÐ&Õ(CÑDÔD€FÝ
Ô
+Ø�Ð)Ð+<Ð>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Ð @Ð @Ñ @Ø3˜CÔ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   