§
    3xÅj”  ã                   ó  — d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ  ed
d¦  «        \  ZZd„  ed
d¦  «        D ¦   «         \  ZZ G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )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                 ó,   — g | ]}t          |¦  «        ‘ŒS © r   )Ú.0Úcs     úGC:\Projects\Historical\venv\Lib\site-packages\paramiko/kex_ecdh_nist.pyú
<listcomp>r      s   € Ð*NÐ*NÐ*N¸1­8°A©;¬;Ð*NÐ*NÐ*Nó    c                   óX   — e Zd ZdZeZ ej        ¦   «         Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd„ ZdS )	ÚKexNistp256zecdh-sha2-nistp256c                 ó>   — || _         d| _        d | _        d | _        d S )Nr   )Ú	transportÚPÚQ_CÚQ_S)Úselfr   s     r   Ú__init__zKexNistp256.__init__   s"   € Ø"ˆŒàˆŒØˆŒØˆŒˆˆr   c                 óâ  — |                       ¦   «          | j        j        r!| j                             t          ¦  «         d S t          ¦   «         }|                     t          ¦  «         |                     | j	         
                    t          j        j        t          j        j        ¦  «        ¦  «         | j                             |¦  «         | j                             t"          ¦  «         d S ©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_kexzKexNistp256.start_kex    sË   € Ø×ÒÑ!Ô!Ð!ØŒ>Ô%ð 	ØŒN×)Ò)Õ*;Ñ<Ô<Ð<ØˆFÝ‰IŒIˆØ	�
Š
Õ%Ñ&Ô&Ð&à	�ŠØŒH×!Ò!ÝÔ&Ô+ÝÔ*Ô<ñô ñ	
ô 	
ð 	
ð 	Œ×$Ò$ QÑ'Ô'Ð'ØŒ×%Ò%Õ&8Ñ9Ô9Ð9Ð9Ð9r   c                 óö   — | j         j        r |t          k    r|                      |¦  «        S | j         j        s |t          k    r|                      |¦  «        S t          d                     |¦  «        ¦  «        ‚)Nz(KexECDH asked to handle packet type {:d})r   r#   r%   Ú_parse_kexecdh_initr/   Ú_parse_kexecdh_replyr	   Úformat)r   Úptyper0   s      r   Ú
parse_nextzKexNistp256.parse_next1   s}   € ØŒ>Ô%ð 	0¨5Õ4EÒ+EÐ+EØ×+Ò+¨AÑ.Ô.Ð.Ø”Ô+ð 	0°Õ:LÒ1LÐ1LØ×,Ò,¨QÑ/Ô/Ð/ÝØ6×=Ò=¸eÑDÔDñ
ô 
ð 	
r   c                 óð   — t          j        | j        t          ¦   «         ¦  «        | _        | j        j        r | j                             ¦   «         | _        d S | j                             ¦   «         | _	        d S r!   )
r   Úgenerate_private_keyÚcurver
   r   r   r#   Ú
public_keyr   r   )r   s    r   r"   zKexNistp256._generate_key_pair:   s^   € ÝÔ(¨¬µ_Ñ5FÔ5FÑGÔGˆŒØŒ>Ô%ð 	Ø”v×(Ò(Ñ*Ô*ˆDŒHØˆFØ”6×$Ò$Ñ&Ô&ˆŒˆˆr   c                 óø  — |                      ¦   «         }t          j                             | j        |¦  «        | _        | j                             ¦   «                              ¦   «         }| j	         
                    t          j        ¦   «         | j        ¦  «        }t          t          |¦  «        d¦  «        }t          ¦   «         }|                     | j        j        | j        j        | j        j        | j        j        ¦  «         |                     |¦  «         |                     |¦  «         |                     | j                             t.          j        j        t.          j        j        ¦  «        ¦  «         |                     t          |¦  «        ¦  «         |                      |                     ¦   «         ¦  «                             ¦   «         }| j                             ||¦  «         | j                             ¦   «                               || j        j!        ¦  «        }t          ¦   «         }| "                    tF          ¦  «         |                     |¦  «         |                     | j                             t.          j        j        t.          j        j        ¦  «        ¦  «         |                     |¦  «         | j         $                    |¦  «         | j         %                    ¦   «          d S ©Né   )&Ú
get_stringr   ÚEllipticCurvePublicKeyÚfrom_encoded_pointr:   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   r0   Ú	Q_C_bytesÚK_SÚKÚhmÚHÚsigs           r   r3   zKexNistp256._parse_kexecdh_initA   sZ  € Ø—L’L‘N”Nˆ	ÝÔ,×?Ò?ØŒJ˜	ñ
ô 
ˆŒð Œn×+Ò+Ñ-Ô-×5Ò5Ñ7Ô7ˆØŒF�OŠO�BœG™IœI t¤xÑ0Ô0ˆÝ•˜‘
”
˜BÑÔˆå‰YŒYˆØ
�ŠØŒNÔ)ØŒNÔ(ØŒNÔ*ØŒNÔ)ñ		
ô 	
ð 	
ð 	�Š�cÑÔÐØ
�Š�iÑ Ô Ð à
�ŠØŒH×!Ò!ÝÔ&Ô+ÝÔ*Ô<ñô ñ	
ô 	
ð 	
ð 	�Š•S˜‘V”VÑÔÐØ�NŠN˜2Ÿ:š:™<œ<Ñ(Ô(×/Ò/Ñ1Ô1ˆØŒ×Ò  1Ñ%Ô%Ð%ØŒn×+Ò+Ñ-Ô-×;Ò;ØˆtŒ~Ô+ñ
ô 
ˆõ ‰IŒIˆØ	�
Š
Õ&Ñ'Ô'Ð'Ø	�Š�SÑÔÐØ	�ŠØŒH×!Ò!ÝÔ&Ô+ÝÔ*Ô<ñô ñ	
ô 	
ð 	
ð 	
�Š�SÑÔÐØŒ×$Ò$ QÑ'Ô'Ð'ØŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   c                 ó,  — |                      ¦   «         }|                      ¦   «         }t          j                             | j        |¦  «        | _        |                     ¦   «         }| j                             t          j	        ¦   «         | j        ¦  «        }t          t          |¦  «        d¦  «        }t          ¦   «         }|                     | j        j        | j        j        | j        j        | j        j        ¦  «         |                     |¦  «         |                     | j                             t,          j        j        t,          j        j        ¦  «        ¦  «         |                     |¦  «         |                     |¦  «         | j                             ||                      |                     ¦   «         ¦  «                             ¦   «         ¦  «         | j                              ||¦  «         | j         !                    ¦   «          d S r=   )"r?   r   r@   rA   r:   r   Ú
get_binaryr   rD   rE   rF   r   r   rG   r   rI   rH   rK   rJ   r(   r   r)   r   r*   r+   r,   r-   rL   rO   rM   rC   rN   Ú_verify_keyrS   )r   r0   rU   Ú	Q_S_bytesrY   rV   rW   s          r   r4   z KexNistp256._parse_kexecdh_replyn   s›  € Ø�lŠl‰nŒnˆØ—L’L‘N”Nˆ	ÝÔ,×?Ò?ØŒJ˜	ñ
ô 
ˆŒð �lŠl‰nŒnˆØŒF�OŠO�BœG™IœI t¤xÑ0Ô0ˆÝ•˜‘
”
˜BÑÔˆå‰YŒYˆØ
�ŠØŒNÔ(ØŒNÔ)ØŒNÔ)ØŒNÔ*ñ		
ô 	
ð 	
ð 	�Š�cÑÔÐà
�ŠØŒH×!Ò!ÝÔ&Ô+ÝÔ*Ô<ñô ñ	
ô 	
ð 	
ð 	�Š�iÑ Ô Ð Ø
�Š�Q‰ŒˆØŒ×Ò  4§>¢>°"·*²*±,´,Ñ#?Ô#?×#FÒ#FÑ#HÔ#HÑIÔIÐIØŒ×"Ò" 3¨Ñ,Ô,Ð,ØŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   N)Ú__name__Ú
__module__Ú__qualname__Únamer   rM   r   Ú	SECP256R1r:   r   r1   r7   r"   r3   r4   r   r   r   r   r      s†   € € € € € à€DØ€IØˆBŒL‰NŒN€Eðð ð ð:ð :ð :ð"
ð 
ð 
ð'ð 'ð 'ð+,ð +,ð +,ðZ,ð ,ð ,ð ,ð ,r   r   c                   ó4   — e Zd ZdZeZ ej        ¦   «         ZdS )ÚKexNistp384zecdh-sha2-nistp384N)	r^   r_   r`   ra   r   rM   r   Ú	SECP384R1r:   r   r   r   rd   rd   Ž   ó%   € € € € € Ø€DØ€IØˆBŒL‰NŒN€E€E€Er   rd   c                   ó4   — e Zd ZdZeZ ej        ¦   «         ZdS )ÚKexNistp521zecdh-sha2-nistp521N)	r^   r_   r`   ra   r   rM   r   Ú	SECP521R1r:   r   r   r   rh   rh   ”   rf   r   rh   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'   rR   r   rd   rh   r   r   r   ú<module>rt      sv  ððð ð
 +Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ø /Ð /Ð /Ð /Ð /Ð /Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð à(-¨¨b°"©¬Ñ %Ð Ð%Ø*NÐ*NÀÀÀbÈ"ÁÄÐ*NÑ*NÔ*NÑ 'Ð Ð'ðx,ð x,ð x,ð x,ð x,ñ x,ô x,ð x,ðvð ð ð ð �+ñ ô ð ðð ð ð ð �+ñ ô ð ð ð r   