ó
    &ÝNj›'  ã                   óà   • S r SSKrSSKJr  SSKJr  SSKJrJrJ	r	J
r
  SSKJr  SSKJr  \" SS	5      u  rrrrr\" SS	5       V s/ s H  n \" U 5      PM     sn u  rrrrr " S
 S5      rgs  sn f )zÑ
Variant on the (now deprecated/removed) ``KexGroup1`` where the prime "p" and
generator "g" are provided by the server.  A bit more work is required on the
client side, and a **lot** more on the server side.
é    N)Úsha256)Úutil)ÚDEBUGÚbyte_chrÚ	byte_maskÚbyte_ord)ÚMessage)ÚSSHExceptioné   é#   c                   ób   • \ rS rSrSrSrSrSr\r	S r
SS jrS rS rS	 rS
 rS rS rS rSrg)ÚKexGexSHA256é2   z$diffie-hellman-group-exchange-sha256i   é    c                 ór   • Xl         S U l        S U l        S U l        S U l        S U l        S U l        SU l        g )NF)Ú	transportÚpÚqÚgÚxÚeÚfÚ	old_style)Úselfr   s     ÚM/home/mande/repo/quber/.venv/lib/python3.13/site-packages/paramiko/kex_gex.pyÚ__init__ÚKexGexSHA256.__init__9   s8   € Ø"ŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆ�ó    c                 óV  • U R                   R                  (       a%  U R                   R                  [        [        5        g [        5       nU(       a8  UR                  [        5        UR                  U R                  5        SU l
        OfUR                  [        5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  5        U R                   R                  U5        U R                   R                  [        5        g )NT)r   Úserver_modeÚ_expect_packetÚ_MSG_KEXDH_GEX_REQUESTÚ_MSG_KEXDH_GEX_REQUEST_OLDr	   Úadd_byteÚc_MSG_KEXDH_GEX_REQUEST_OLDÚadd_intÚpreferred_bitsr   Úc_MSG_KEXDH_GEX_REQUESTÚmin_bitsÚmax_bitsÚ_send_messageÚ_MSG_KEXDH_GEX_GROUP)r   Ú_test_old_styleÚms      r   Ú	start_kexÚKexGexSHA256.start_kexC   sÂ   € Ø�>‰>×%×%Ø�N‰N×)Ñ)Ü&Ô(Bôð ô ‹IˆÞà�J‰JÔ2Ô3Ø�I‰I�d×)Ñ)Ô*Ø!ˆD�Nà�J‰JÔ.Ô/Ø�I‰I�d—m‘mÔ$Ø�I‰I�d×)Ñ)Ô*Ø�I‰I�d—m‘mÔ$Ø�‰×$Ñ$ QÔ'Ø�‰×%Ñ%Ô&:Õ;r   c                 ó^  • U[         :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ Sn[        UR                  U R                  U5      5      e)Nz*KexGex {} asked to handle packet type {:d})r"   Ú_parse_kexdh_gex_requestr,   Ú_parse_kexdh_gex_groupÚ_MSG_KEXDH_GEX_INITÚ_parse_kexdh_gex_initÚ_MSG_KEXDH_GEX_REPLYÚ_parse_kexdh_gex_replyr#   Ú_parse_kexdh_gex_request_oldr
   ÚformatÚname)r   Úptyper.   Úmsgs       r   Ú
parse_nextÚKexGexSHA256.parse_nextY   s£   € ØÔ*Ó*Ø×0Ñ0°Ó3Ð3ØÔ*Ó*Ø×.Ñ.¨qÓ1Ð1ØÔ)Ó)Ø×-Ñ-¨aÓ0Ð0ØÔ*Ó*Ø×.Ñ.¨qÓ1Ð1ØÔ0Ó0Ø×4Ñ4°QÓ7Ð7Ø:ˆÜ˜3Ÿ:™: d§i¡i°Ó7Ó8Ð8r   c                 óz  • U R                   S-
  S-  n[        R                  " US5      n[        US   5      n[	        U5      nSnUS-  (       d  US-  nUS-  nUS-  (       d  M   [
        R                  " U5      n[        US   U5      USS  -   n[        R                  " US5      nUS:”  a  Xq:  a  OMP  Xpl	        g )Né   é   r   éÿ   é€   )
r   r   Údeflate_longr   ÚlenÚosÚurandomr   Úinflate_longr   )r   r   ÚqnormÚqhbyteÚ
byte_countÚqmaskÚx_bytesr   s           r   Ú_generate_xÚKexGexSHA256._generate_xi   sÀ   € à�V‰V�a‰Z˜AÑˆÜ×!Ò! ! QÓ'ˆÜ˜% ™(Ó#ˆÜ˜“Zˆ
ØˆØ˜D—=Ø�q‰LˆFØ�a‰KˆEð ˜D—=‘=ð Ü—j’j Ó,ˆGÜ ¨¡
¨EÓ2°W¸Q¸R°[Ñ@ˆGÜ×!Ò! '¨1Ó-ˆAØ�A“˜A›EØñ ð �r   c                 ó  • UR                  5       nUR                  5       nUR                  5       nX0R                  :”  a  U R                  nX0R                  :  a  U R                  nX#:”  a  UnXC:  a  UnX l        X0l        X@l        U R                  R                  5       nUc  [        S5      eU R                  R                  [        SR                  X#U5      5        UR                  X#U5      u  U l        U l        [        5       nUR                  [        5        UR!                  U R                  5        UR!                  U R                  5        U R                  R#                  U5        U R                  R%                  [&        5        g )Nú-Can't do server-side gex with no modulus packzPicking p ({} <= {} <= {} bits))Úget_intr*   r)   r'   r   Ú_get_modulus_packr
   Ú_logr   r9   Úget_modulusr   r   r	   r$   Úc_MSG_KEXDH_GEX_GROUPÚ	add_mpintr+   r!   r4   )r   r.   ÚminbitsÚpreferredbitsÚmaxbitsÚpacks         r   r2   Ú%KexGexSHA256._parse_kexdh_gex_request{   s1  € Ø—)‘)“+ˆØŸ	™	›ˆØ—)‘)“+ˆàŸ=™=Ó(Ø ŸM™MˆMØŸ=™=Ó(Ø ŸM™MˆMð Ó"Ø#ˆGØÓ"Ø#ˆGàŒØ+ÔØŒà�~‰~×/Ñ/Ó1ˆØ‰<ÜÐNÓOÐOØ�‰×ÑÜØ-×4Ñ4Ø¨óô	
ð ×)Ñ)¨'À'ÓJ‰ˆŒ�”Ü‹IˆØ	�
‰
Ô(Ô)Ø	�‰�D—F‘FÔØ	�‰�D—F‘FÔØ�‰×$Ñ$ QÔ'Ø�‰×%Ñ%Ô&9Õ:r   c                 óD  • UR                  5       U l        U R                  U R                  :”  a  U R                  U l        U R                  U R                  :  a  U R                  U l        U R                  R                  5       nUc  [        S5      eU R                  R                  [        SR                  U R                  5      5        UR                  U R                  U R                  U R                  5      u  U l        U l        [        5       nUR                  [        5        UR!                  U R                  5        UR!                  U R                  5        U R                  R#                  U5        U R                  R%                  [&        5        SU l        g )NrQ   zPicking p (~ {} bits)T)rR   r'   r*   r)   r   rS   r
   rT   r   r9   rU   r   r   r	   r$   rV   rW   r+   r!   r4   r   )r   r.   r[   s      r   r8   Ú)KexGexSHA256._parse_kexdh_gex_request_old¡   s+  € ð  Ÿi™i›kˆÔà×Ñ §¡Ó.Ø"&§-¡-ˆDÔØ×Ñ §¡Ó.Ø"&§-¡-ˆDÔà�~‰~×/Ñ/Ó1ˆØ‰<ÜÐNÓOÐOØ�‰×ÑÜÐ*×1Ñ1°$×2EÑ2EÓFô	
ð ×)Ñ)Ø�M‰M˜4×.Ñ.°·±ó
‰ˆŒ�”ô ‹IˆØ	�
‰
Ô(Ô)Ø	�‰�D—F‘FÔØ	�‰�D—F‘FÔØ�‰×$Ñ$ QÔ'Ø�‰×%Ñ%Ô&9Ô:Øˆ�r   c                 óª  • UR                  5       U l        UR                  5       U l        [        R                  " U R                  5      nUS:  d  US:”  a  [        SR                  U5      5      eU R                  R                  [        SR                  U5      5        U R                  5         [        U R                  U R                  U R                  5      U l        [        5       nUR                  [         5        UR#                  U R                  5        U R                  R%                  U5        U R                  R'                  [(        5        g )Ni   r   z<Server-generated gex p (don't ask) is out of range ({} bits)zGot server p ({} bits))Ú	get_mpintr   r   r   Ú
bit_lengthr
   r9   r   rT   r   rN   Úpowr   r   r	   r$   Úc_MSG_KEXDH_GEX_INITrW   r+   r!   r6   )r   r.   Úbitlens      r   r3   Ú#KexGexSHA256._parse_kexdh_gex_group¼   sé   € Ø—‘“ˆŒØ—‘“ˆŒä—’ §¡Ó(ˆØ�T‹M˜v¨›}Üðß"™F 6›Nóð ð 	�‰×ÑœEÐ#;×#BÑ#BÀ6Ó#JÔKØ×ÑÔä�T—V‘V˜TŸV™V T§V¡VÓ,ˆŒÜ‹IˆØ	�
‰
Ô'Ô(Ø	�‰�D—F‘FÔØ�‰×$Ñ$ QÔ'Ø�‰×%Ñ%Ô&:Õ;r   c                 ó®  • UR                  5       U l        U R                  S:  d  U R                  U R                  S-
  :”  a  [        S5      eU R	                  5         [        U R                  U R                  U R                  5      U l        [        U R                  U R                  U R                  5      nU R                  R                  5       R                  5       n[        5       nUR                  U R                  R                  U R                  R                  U R                  R                   U R                  R"                  U5        U R$                  (       d  UR'                  U R(                  5        UR'                  U R*                  5        U R$                  (       d  UR'                  U R,                  5        UR/                  U R                  5        UR/                  U R                  5        UR/                  U R                  5        UR/                  U R                  5        UR/                  U5        U R1                  UR                  5       5      R3                  5       nU R                  R5                  X%5        U R                  R                  5       R7                  XPR                  R8                  5      n[        5       nUR;                  [<        5        UR?                  U5        UR/                  U R                  5        UR?                  U5        U R                  RA                  U5        U R                  RC                  5         g )Nr@   zClient kex "e" is out of range)"r`   r   r   r
   rN   rb   r   r   r   r   Úget_server_keyÚasbytesr	   ÚaddÚremote_versionÚlocal_versionÚremote_kex_initÚlocal_kex_initr   r&   r)   r'   r*   rW   Ú	hash_algoÚdigestÚ_set_K_HÚsign_ssh_dataÚhost_key_typer$   Úc_MSG_KEXDH_GEX_REPLYÚ
add_stringr+   Ú_activate_outbound)r   r.   ÚKÚkeyÚhmÚHÚsigs          r   r5   Ú"KexGexSHA256._parse_kexdh_gex_initÐ   s(  € Ø—‘“ˆŒØ�F‰F�Q‹J˜DŸF™F T§V¡V¨a¡ZÓ/ÜÐ?Ó@Ð@Ø×ÑÔÜ�T—V‘V˜TŸV™V T§V¡VÓ,ˆŒÜ�—‘˜Ÿ™ §¡Ó'ˆØ�n‰n×+Ñ+Ó-×5Ñ5Ó7ˆô ‹YˆØ
�‰Ø�N‰N×)Ñ)Ø�N‰N×(Ñ(Ø�N‰N×*Ñ*Ø�N‰N×)Ñ)Øô	
ð �~�~Ø�J‰J�t—}‘}Ô%Ø
�
‰
�4×&Ñ&Ô'Ø�~�~Ø�J‰J�t—}‘}Ô%Ø
�‰�T—V‘VÔØ
�‰�T—V‘VÔØ
�‰�T—V‘VÔØ
�‰�T—V‘VÔØ
�‰�QŒØ�N‰N˜2Ÿ:™:›<Ó(×/Ñ/Ó1ˆØ�‰×Ñ Ô%à�n‰n×+Ñ+Ó-×;Ñ;Ø�~‰~×+Ñ+ó
ˆô ‹IˆØ	�
‰
Ô(Ô)Ø	�‰�SÔØ	�‰�D—F‘FÔØ	�‰�SÔØ�‰×$Ñ$ QÔ'Ø�‰×)Ñ)Õ+r   c                 óè  • UR                  5       nUR                  5       U l        UR                  5       nU R                  S:  d  U R                  U R                  S-
  :”  a  [	        S5      e[        U R                  U R                  U R                  5      n[        5       nUR                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  U5        U R                  (       d  UR                  U R                   5        UR                  U R"                  5        U R                  (       d  UR                  U R$                  5        UR'                  U R                  5        UR'                  U R(                  5        UR'                  U R*                  5        UR'                  U R                  5        UR'                  U5        U R                  R-                  X@R/                  UR1                  5       5      R3                  5       5        U R                  R5                  X#5        U R                  R7                  5         g )Nr@   zServer kex "f" is out of range)Ú
get_stringr`   r   r   r
   rb   r   r	   ri   r   rk   rj   rm   rl   r   r&   r)   r'   r*   rW   r   r   rp   rn   rh   ro   Ú_verify_keyru   )r   r.   Úhost_keyrz   rv   rx   s         r   r7   Ú#KexGexSHA256._parse_kexdh_gex_replyû   sŽ  € Ø—<‘<“>ˆØ—‘“ˆŒØ�l‰l‹nˆØ�F‰F�Q‹J˜DŸF™F T§V¡V¨a¡ZÓ/ÜÐ?Ó@Ð@Ü�—‘˜Ÿ™ §¡Ó'ˆô ‹YˆØ
�‰Ø�N‰N×(Ñ(Ø�N‰N×)Ñ)Ø�N‰N×)Ñ)Ø�N‰N×*Ñ*Øô	
ð �~�~Ø�J‰J�t—}‘}Ô%Ø
�
‰
�4×&Ñ&Ô'Ø�~�~Ø�J‰J�t—}‘}Ô%Ø
�‰�T—V‘VÔØ
�‰�T—V‘VÔØ
�‰�T—V‘VÔØ
�‰�T—V‘VÔØ
�‰�QŒØ�‰×Ñ §>¡>°"·*±*³,Ó#?×#FÑ#FÓ#HÔIØ�‰×"Ñ" 8Ô1Ø�‰×)Ñ)Õ+r   )r   r   r   r*   r)   r   r   r'   r   r   r   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r:   r)   r*   r'   r   rn   r   r/   r=   rN   r2   r8   r3   r5   r7   Ú__static_attributes__© r   r   r   r   2   sJ   † Ø1€DØ€HØ€HØ€NØ€Iòô<ò,9ò ò$$;òLò6<ò(),õV,r   r   )Ú__doc__rF   Úhashlibr   Úparamikor   Úparamiko.commonr   r   r   r   Úparamiko.messager	   Úparamiko.ssh_exceptionr
   Úranger#   r,   r4   r6   r"   r%   rV   rc   rs   r(   r   )Úcs   0r   Ú<module>r�      sƒ   ðñ&ó 
Ý å ß @Ó @Ý $Ý /ñ 
ˆ"ˆbƒMñØØØØØñ    Bœ-Ó(š-�Q�Xˆa†[™-Ñ(ñØØØØØ÷f,ò f,ùò )s   ÁA+