ó
    &ÝNj”  ã                   ó  • S r SSKJrJrJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr  \" S
S5      u  rr\" S
S5       V s/ s H  n \" U 5      PM     sn u  rr " S S5      r " S S\5      r " S S\5      rgs  sn f )zQ
Ephemeral Elliptic Curve Diffie-Hellman (ECDH) key exchange
RFC 5656, Section 4
é    )Úsha256Úsha384Úsha512)Úbyte_chr)ÚMessage)ÚSSHException)Údefault_backend)Úec)Úserialization)Úhexlifyé   é    c                   ób   • \ rS rSrSr\r\R                  " 5       r	S r
S rS rS rS rS rS	rg
)ÚKexNistp256é   zecdh-sha2-nistp256c                 ó:   • Xl         SU l        S U l        S U l        g )Nr   )Ú	transportÚPÚQ_CÚQ_S)Úselfr   s     ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/paramiko/kex_ecdh_nist.pyÚ__init__ÚKexNistp256.__init__   s   € Ø"ŒàˆŒØˆŒØˆ�ó    c                 ó  • U R                  5         U R                  R                  (       a   U R                  R                  [        5        g [        5       nUR                  [        5        UR                  U R                  R                  [        R                  R                  [        R                  R                  5      5        U R                  R!                  U5        U R                  R                  ["        5        g ©N)Ú_generate_key_pairr   Úserver_modeÚ_expect_packetÚ_MSG_KEXECDH_INITr   Úadd_byteÚc_MSG_KEXECDH_INITÚ
add_stringr   Úpublic_bytesr   ÚEncodingÚX962ÚPublicFormatÚUncompressedPointÚ_send_messageÚ_MSG_KEXECDH_REPLY)r   Úms     r   Ú	start_kexÚKexNistp256.start_kex    s¨   € Ø×ÑÔ!Ø�>‰>×%×%Ø�N‰N×)Ñ)Ô*;Ô<ØÜ‹IˆØ	�
‰
Ô%Ô&à	�‰Ø�H‰H×!Ñ!Ü×&Ñ&×+Ñ+Ü×*Ñ*×<Ñ<óô	
ð 	�‰×$Ñ$ QÔ'Ø�‰×%Ñ%Ô&8Õ9r   c                 ó  • U R                   R                  (       a  U[        :X  a  U R                  U5      $ U R                   R                  (       d  U[        :X  a  U R                  U5      $ [        SR                  U5      5      e)Nz(KexECDH asked to handle packet type {:d})r   r   r!   Ú_parse_kexecdh_initr+   Ú_parse_kexecdh_replyr   Úformat)r   Úptyper,   s      r   Ú
parse_nextÚKexNistp256.parse_next1   si   € Ø�>‰>×%×%¨5Ô4EÓ+EØ×+Ñ+¨AÓ.Ð.Ø—‘×+×+°Ô:LÓ1LØ×,Ñ,¨QÓ/Ð/ÜØ6×=Ñ=¸eÓDó
ð 	
r   c                 ó  • [         R                  " U R                  [        5       5      U l        U R
                  R                  (       a   U R                  R                  5       U l        g U R                  R                  5       U l	        g r   )
r
   Úgenerate_private_keyÚcurver	   r   r   r   Ú
public_keyr   r   )r   s    r   r   ÚKexNistp256._generate_key_pair:   sU   € Ü×(Ò(¨¯©´_Ó5FÓGˆŒØ�>‰>×%×%Ø—v‘v×(Ñ(Ó*ˆDŒHØØ—6‘6×$Ñ$Ó&ˆ�r   c                 ó$  • UR                  5       n[        R                  R                  U R                  U5      U l        U R                  R                  5       R                  5       nU R                  R                  [        R                  " 5       U R
                  5      n[        [        U5      S5      n[        5       nUR                  U R                  R                   U R                  R"                  U R                  R$                  U R                  R&                  5        UR)                  U5        UR)                  U5        UR)                  U R*                  R-                  [.        R0                  R2                  [.        R4                  R6                  5      5        UR9                  [        U5      5        U R;                  UR                  5       5      R=                  5       nU R                  R?                  XF5        U R                  R                  5       RA                  X`R                  RB                  5      n[        5       nURE                  [F        5        UR)                  U5        UR)                  U R*                  R-                  [.        R0                  R2                  [.        R4                  R6                  5      5        UR)                  U5        U R                  RI                  U5        U R                  RK                  5         g ©Né   )&Ú
get_stringr
   ÚEllipticCurvePublicKeyÚfrom_encoded_pointr8   r   r   Úget_server_keyÚasbytesr   ÚexchangeÚECDHÚintr   r   ÚaddÚremote_versionÚlocal_versionÚremote_kex_initÚlocal_kex_initr$   r   r%   r   r&   r'   r(   r)   Ú	add_mpintÚ	hash_algoÚdigestÚ_set_K_HÚsign_ssh_dataÚhost_key_typer"   Úc_MSG_KEXECDH_REPLYr*   Ú_activate_outbound)r   r,   Ú	Q_C_bytesÚK_SÚKÚhmÚHÚsigs           r   r0   ÚKexNistp256._parse_kexecdh_initA   s  € Ø—L‘L“Nˆ	Ü×,Ñ,×?Ñ?Ø�J‰J˜	ó
ˆŒð �n‰n×+Ñ+Ó-×5Ñ5Ó7ˆØ�F‰F�O‰OœBŸGšG›I t§x¡xÓ0ˆÜ”˜“
˜BÓˆä‹YˆØ
�‰Ø�N‰N×)Ñ)Ø�N‰N×(Ñ(Ø�N‰N×*Ñ*Ø�N‰N×)Ñ)ô		
ð 	�‰�cÔØ
�‰�iÔ à
�‰Ø�H‰H×!Ñ!Ü×&Ñ&×+Ñ+Ü×*Ñ*×<Ñ<óô	
ð 	�‰”S˜“VÔØ�N‰N˜2Ÿ:™:›<Ó(×/Ñ/Ó1ˆØ�‰×Ñ Ô%Ø�n‰n×+Ñ+Ó-×;Ñ;Ø�~‰~×+Ñ+ó
ˆô ‹IˆØ	�
‰
Ô&Ô'Ø	�‰�SÔØ	�‰Ø�H‰H×!Ñ!Ü×&Ñ&×+Ñ+Ü×*Ñ*×<Ñ<óô	
ð 	
�‰�SÔØ�‰×$Ñ$ QÔ'Ø�‰×)Ñ)Õ+r   c                 óL  • UR                  5       nUR                  5       n[        R                  R                  U R                  U5      U l        UR                  5       nU R                  R                  [        R                  " 5       U R
                  5      n[        [        U5      S5      n[        5       nUR                  U R                  R                  U R                  R                   U R                  R"                  U R                  R$                  5        UR'                  U5        UR'                  U R(                  R+                  [,        R.                  R0                  [,        R2                  R4                  5      5        UR'                  U5        UR7                  U5        U R                  R9                  XPR;                  UR=                  5       5      R?                  5       5        U R                  RA                  X$5        U R                  RC                  5         g r<   )"r>   r
   r?   r@   r8   r   Ú
get_binaryr   rC   rD   rE   r   r   rF   r   rH   rG   rJ   rI   r$   r   r%   r   r&   r'   r(   r)   rK   rN   rL   rB   rM   Ú_verify_keyrR   )r   r,   rT   Ú	Q_S_bytesrX   rU   rV   s          r   r1   Ú KexNistp256._parse_kexecdh_replyn   sj  € Ø�l‰l‹nˆØ—L‘L“Nˆ	Ü×,Ñ,×?Ñ?Ø�J‰J˜	ó
ˆŒð �l‰l‹nˆØ�F‰F�O‰OœBŸGšG›I t§x¡xÓ0ˆÜ”˜“
˜BÓˆä‹YˆØ
�‰Ø�N‰N×(Ñ(Ø�N‰N×)Ñ)Ø�N‰N×)Ñ)Ø�N‰N×*Ñ*ô		
ð 	�‰�cÔà
�‰Ø�H‰H×!Ñ!Ü×&Ñ&×+Ñ+Ü×*Ñ*×<Ñ<óô	
ð 	�‰�iÔ Ø
�‰�QŒØ�‰×Ñ §>¡>°"·*±*³,Ó#?×#FÑ#FÓ#HÔIØ�‰×"Ñ" 3Ô,Ø�‰×)Ñ)Õ+r   )r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Únamer   rL   r
   Ú	SECP256R1r8   r   r-   r4   r   r0   r1   Ú__static_attributes__© r   r   r   r      s6   † à€DØ€IØ�LŠL‹N€Eòò:ò"
ò'ò+,õZ,r   r   c                   ó>   • \ rS rSrSr\r\R                  " 5       r	Sr
g)ÚKexNistp384éŽ   zecdh-sha2-nistp384rf   N)r_   r`   ra   rb   rc   r   rL   r
   Ú	SECP384R1r8   re   rf   r   r   rh   rh   Ž   ó   † Ø€DØ€IØ�LŠL‹NƒEr   rh   c                   ó>   • \ rS rSrSr\r\R                  " 5       r	Sr
g)ÚKexNistp521é”   zecdh-sha2-nistp521rf   N)r_   r`   ra   rb   rc   r   rL   r
   Ú	SECP521R1r8   re   rf   r   r   rm   rm   ”   rk   r   rm   N)Ú__doc__Úhashlibr   r   r   Úparamiko.commonr   Úparamiko.messager   Úparamiko.ssh_exceptionr   Úcryptography.hazmat.backendsr	   Ú)cryptography.hazmat.primitives.asymmetricr
   Úcryptography.hazmat.primitivesr   Úbinasciir   Úranger!   r+   r#   rQ   r   rh   rm   )Úcs   0r   Ú<module>r{      sŠ   ðñ÷
 +Ñ *Ý $Ý $Ý /Ý 8Ý 8Ý 8Ý á(-¨b°"«Ñ %Ð Ð%Ù@EÀbÈ"ÄÓ*NÂ¸1©8°A®;ÁÑ*NÑ 'Ð Ð'÷x,ñ x,ôv�+ô ô�+õ ùòI +Os   ÁB