ó
    &ÝNjE  ã            
       óp  • % S SK Jr  S SKJr  S SKJrJr  S SKJ	r	  / SQr
 \R                  " 5       r\\S'   \R                  " 5       r\\S'   \R"                  " 5       r\\S'   \R&                  " 5       r\\S	'   S
\\\4   4S jrS\S
\\\4   4S jrS\S\S\S
\\\4   4S jrS\S\S\S
\\\4   4S jrg)é    )Ú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                  óJ  • [         R                  " S[        5      n [         R                  " S[        5      n[        R
                  " X5      n[        US:H  S[        R                  S9  [         R                  " U [        5      SS [         R                  " U[        5      SS 4$ )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      ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/nacl/bindings/crypto_kx.pyr   r   '   s�   € ô —’Ð*Ô,FÓG€JÜ—’Ð*Ô,FÓG€JÜ
×
Ò
 
Ó
7€CÜ
ˆ3�!‰8Ð-´s·±ÒGô 	�
Š
�:Ô9Ó:¹1Ð=Ü�
Š
�:Ô9Ó:¹1Ð=ðð ó    Úseedc                 óò  • [         R                  " S[        5      n[         R                  " S[        5      n[	        [        U [        5      =(       a    [        U 5      [        :H  SR                  [        5      [        R                  S9  [        R                  " XU 5      n[	        US:H  S[        R                  S9  [         R                  " U[        5      SS [         R                  " U[        5      SS 4$ )aD  
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€JÜ—’Ð*Ô,FÓG€JÜ
Ü�4œÓ×E¤C¨£IÔ1EÑ$EØ4×;Ñ;Ü ó	
ô —‘òô ×
$Ò
$ Z¸TÓ
B€CÜ
ˆ3�!‰8Ð-´s·±ÒGô 	�
Š
�:Ô9Ó:¹1Ð=Ü�
Š
�:Ô9Ó:¹1Ð=ðð r   Úclient_public_keyÚclient_secret_keyÚserver_public_keyc                 ó@  • [        [        U [        5      =(       a    [        U 5      [        :H  SR                  [        5      [        R                  S9  [        [        U[        5      =(       a    [        U5      [        :H  SR                  [        5      [        R                  S9  [        [        U[        5      =(       a    [        U5      [        :H  SR                  [        5      [        R                  S9  [        R                  " S[        5      n[        R                  " S[        5      n[        R                  " X4XU5      n[        US:H  S[        R                  S9  [        R                  " U[        5      SS [        R                  " U[        5      SS 4$ )	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ŠWÐ&Ô(CÓD€FÜ�WŠWÐ&Ô(CÓD€FÜ
×
+Ò
+ØÐ)Ð>Oó€Cô Øˆq‰Ø/Ü—‘òô 	�
Š
�6Ô6Ó7¹Ð:Ü�
Š
�6Ô6Ó7¹Ð:ðð r   Úserver_secret_keyc                 ó@  • [        [        U [        5      =(       a    [        U 5      [        :H  SR                  [        5      [        R                  S9  [        [        U[        5      =(       a    [        U5      [        :H  SR                  [        5      [        R                  S9  [        [        U[        5      =(       a    [        U5      [        :H  SR                  [        5      [        R                  S9  [        R                  " S[        5      n[        R                  " S[        5      n[        R                  " X4XU5      n[        US:H  S[        R                  S9  [        R                  " U[        5      SS [        R                  " U[        5      SS 4$ )	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Ò3Ó5Ð �cÓ 5Ø#&×#@Ò#@Ó#BÐ ˜SÓ Bð˜5 ¨ Ñ.ô ð& ð ¨5°¸°Ñ+>ô ð:7Øð7àð7ð ð7ð ˆ5�%ˆ<Ñô	7ðt7Øð7àð7ð ð7ð ˆ5�%ˆ<Ñõ	7r   