
    ohP(                         d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ  edd	      \  ZZZZZ edd	      D  cg c]
  }  e	|        c} \  ZZZZZ G d
 d      Z G d de      Zyc c} w )z
Variant on `KexGroup1 <paramiko.kex_group1.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)sha1sha256)util)DEBUGbyte_chrbyte_ord	byte_mask)Message)SSHException   #   c                   X    e Zd ZdZdZdZdZeZd Z	ddZ
d Zd Zd	 Zd
 Zd Zd Zd Zy)KexGexz"diffie-hellman-group-exchange-sha1       i   c                 t    || _         d | _        d | _        d | _        d | _        d | _        d | _        d| _        y )NF)	transportpqgxef	old_style)selfr   s     b/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/paramiko/kex_gex.py__init__zKexGex.__init__;   s:    "    c                 B   | j                   j                  r%| j                   j                  t        t               y t               }|r8|j                  t               |j                  | j                         d| _
        nf|j                  t               |j                  | j                         |j                  | j                         |j                  | j                         | j                   j                  |       | j                   j                  t               y )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_kexzKexGex.start_kexE   s    >>%%NN))&(B  IJJ23IId))*!DNJJ./IIdmm$IId))*IIdmm$$$Q'%%&:;r   c                 T   |t         k(  r| j                  |      S |t        k(  r| j                  |      S |t        k(  r| j                  |      S |t        k(  r| j                  |      S |t        k(  r| j                  |      S d}t        |j                  | j                  |            )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_nextzKexGex.parse_next\   s    **0033**..q11))--a00**..q110044Q77:3::dii788r   c                 \   | j                   dz
  dz  }t        j                  |d      }t        |d         }t	        |      }d}|dz  s|dz  }|dz  }|dz  s	 t        j                  |      }t        |d   |      |dd  z   }t        j                  |d      }|dkD  r||k  r		 || _	        y T)N      r         )
r   r   deflate_longr   lenosurandomr	   inflate_longr   )r   r   qnormqhbyte
byte_countqmaskx_bytesr   s           r   _generate_xzKexGex._generate_xl   s    VVaZA!!!Q'%(#Z
D=qLFaKE D= jj,G
E2WQR[@G!!'1-AAAE r   c                 $   |j                         }|j                         }|j                         }|| j                  kD  r| j                  }|| j                  k  r| j                  }||kD  r|}||k  r|}|| _        || _        || _        | j                  j                         }|t        d      | j                  j                  t        dj                  |||             |j                  |||      \  | _        | _        t               }|j                  t               |j!                  | j                         |j!                  | j                         | j                  j#                  |       | j                  j%                  t&               y )N-Can't do server-side gex with no modulus packzPicking p ({} <= {} <= {} bits))get_intr*   r)   r'   r   _get_modulus_packr   _logr   r8   get_modulusr   r   r
   r$   c_MSG_KEXDH_GEX_GROUP	add_mpintr+   r!   r3   )r   r.   minbitspreferredbitsmaxbitspacks         r   r1   zKexGex._parse_kexdh_gex_request~   sC   ))+		))+4==( MMM4==( MMM ]"#G]"#G+~~//1<NOO-44	
 ))'='JI	

()	DFF	DFF$$Q'%%&9:r   c                 >   |j                         | _        | j                  | j                  kD  r| j                  | _        | j                  | j                  k  r| j                  | _        | j                  j                         }|t        d      | j                  j                  t        dj                  | j                               |j                  | j                  | j                  | j                        \  | _        | _        t               }|j                  t               |j!                  | j                         |j!                  | j                         | j                  j#                  |       | j                  j%                  t&               d| _        y )NrN   zPicking p (~ {} bits)T)rO   r'   r*   r)   r   rP   r   rQ   r   r8   rR   r   r   r
   r$   rS   rT   r+   r!   r3   r   )r   r.   rX   s      r   r7   z#KexGex._parse_kexdh_gex_request_old   s+     iik."&--D."&--D~~//1<NOO*11$2E2EF	
 ))MM4..
 I	

()	DFF	DFF$$Q'%%&9:r   c                    |j                         | _        |j                         | _        t        j                  | j                        }|dk  s|dkD  rt        dj                  |            | j                  j                  t        dj                  |             | j                          t        | j                  | j                  | j                        | _        t               }|j                  t                |j#                  | j                         | j                  j%                  |       | j                  j'                  t(               y )Nr   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   r8   r   rQ   r   rL   powr   r   r
   r$   c_MSG_KEXDH_GEX_INITrT   r+   r!   r5   )r   r.   bitlens      r   r2   zKexGex._parse_kexdh_gex_group   s    (TMv}"F6N  	E#;#B#B6#JKTVVTVVTVV,I	

'(	DFF$$Q'%%&:;r   c                    |j                         | _        | j                  dk  s| j                  | j                  dz
  kD  rt        d      | j	                          t        | j                  | j                  | j                        | _        t        | j                  | j                  | j                        }| j                  j                         j                         }t               }|j                  | j                  j                  | j                  j                  | j                  j                   | j                  j"                  |       | j$                  s|j'                  | j(                         |j'                  | j*                         | j$                  s|j'                  | j,                         |j/                  | j                         |j/                  | j                         |j/                  | j                         |j/                  | j                         |j/                  |       | j1                  |j                               j3                         }| j                  j5                  ||       | j                  j                         j7                  || j                  j8                        }t               }|j;                  t<               |j?                  |       |j/                  | j                         |j?                  |       | j                  jA                  |       | j                  jC                          y )Nr>   zClient kex "e" is out of range)"r[   r   r   r   rL   r]   r   r   r   r   get_server_keyasbytesr
   addremote_versionlocal_versionremote_kex_initlocal_kex_initr   r&   r)   r'   r*   rT   	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   r4   zKexGex._parse_kexdh_gex_init   s,   FFQJDFFTVVaZ/?@@TVVTVVTVV,'nn++-557 Y
NN))NN((NN**NN))	
 ~~JJt}}%


4&&'~~JJt}}%
TVV
TVV
TVV
TVV
QNN2::<(//11%nn++-;;t~~++
 I	

()	S	DFF	S$$Q'))+r   c                    |j                         }|j                         | _        |j                         }| j                  dk  s| j                  | j                  dz
  kD  rt	        d      t        | j                  | j                  | j                        }t               }|j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  |       | j                  s|j                  | j                          |j                  | j"                         | j                  s|j                  | j$                         |j'                  | j                         |j'                  | j(                         |j'                  | j*                         |j'                  | j                         |j'                  |       | j                  j-                  || j/                  |j1                               j3                                | j                  j5                  ||       | j                  j7                          y )Nr>   zServer kex "f" is out of range)
get_stringr[   r   r   r   r]   r   r
   rc   r   re   rd   rg   rf   r   r&   r)   r'   r*   rT   r   r   rj   rh   rb   ri   _verify_keyro   )r   r.   host_keyrt   rp   rr   s         r   r6   zKexGex._parse_kexdh_gex_reply   s   <<>llnFFQJDFFTVVaZ/?@@' Y
NN((NN))NN))NN**	
 ~~JJt}}%


4&&'~~JJt}}%
TVV
TVV
TVV
TVV
Q4>>"**,#?#F#F#HI""8S1))+r   N)F)__name__
__module____qualname__r9   r)   r*   r'   r   rh   r   r/   r<   rL   r1   r7   r2   r4   r6    r   r   r   r   3   sJ    /DHHNI<.9 $$;L6<(),V,r   r   c                       e Zd ZdZeZy)KexGexSHA256z$diffie-hellman-group-exchange-sha256N)ry   rz   r{   r9   r   rh   r|   r   r   r~   r~     s    1DIr   r~   )__doc__rD   hashlibr   r   paramikor   paramiko.commonr   r   r   r	   paramiko.messager
   paramiko.ssh_exceptionr   ranger#   r,   r3   r5   r"   r%   rS   r^   rm   r(   r   r~   )cs   0r   <module>r      s   & 
    @ @ $ / 
"bM  B-(QXa[(h, h,V6 ] )s   A5