§
    3xÅjú^  ã                   óà   — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZ d	„ Z G d
„ de¦  «        Zd„ Z G d„ d¦  «        ZdS )z
Packet handling
é    N)ÚHMAC)Úutil)Úlinefeed_byteÚcr_byte_valueÚ	MSG_NAMESÚDEBUGÚ	xffffffffÚ	zero_byteÚbyte_ord)Úu)ÚSSHExceptionÚProxyCommandFailure)ÚMessagec                 óH   — t          | ||¦  «                             ¦   «         S ©N)r   Údigest)ÚkeyÚmessageÚdigest_classs      ú@C:\Projects\Historical\venv\Lib\site-packages\paramiko/packet.pyÚcompute_hmacr   .   s    € Ý��W˜lÑ+Ô+×2Ò2Ñ4Ô4Ð4ó    c                   ó   — e Zd ZdZdS )ÚNeedRekeyExceptionz1
    Exception indicating a rekey is needed.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   r   r   2   s   € € € € € ðð ð 	€Dr   r   c                 óŠ   — d }t          | j        ¦  «        t          u r%t          | j        ¦  «        dk    r| j        d         }|S ©Nr   )ÚtypeÚargsÚtupleÚlen)ÚeÚargs     r   Ú	first_argr(   :   s:   € Ø
€CÝˆAŒF�|„|•uÐÐ¥ Q¤V¡¤¨q¢ ØŒf�QŒiˆØ€Jr   c                   óP  — e Zd ZdZ edd¦  «        Z edd¦  «        Z edd¦  «        Z edd¦  «        Zd„ Z	e
d„ ¦   «         Zd„ Zd„ Zd„ Z	 	 	 	 d%d„Z	 	 	 d&d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd'd„Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(d
S )(Ú
Packetizerz9
    Implementation of the base SSH packet protocol.
    é   é   c                 óÞ  — || _         d | _        d| _        d| _        d| _        d| _        t          ¦   «         | _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d | _        d | _        d| _        d | _        d | _        t          ¦   «         | _        t          ¦   «         | _        d | _        d | _        d| _        d| _        d| _        d| _        d| _         d| _!        d | _"        d | _#        tI          j%        ¦   «         | _&        d| _'        tQ          j(        ¦   «         | _)        d | _*        d | _+        d| _,        d| _-        d S )NFr   é   ).Ú_Packetizer__socketÚ_Packetizer__loggerÚ_Packetizer__closedÚ_Packetizer__dump_packetsÚ_Packetizer__need_rekeyÚ_Packetizer__init_countÚbytesÚ_Packetizer__remainderÚ_initial_kex_doneÚ_Packetizer__sent_bytesÚ_Packetizer__sent_packetsÚ_Packetizer__received_bytesÚ_Packetizer__received_packetsÚ$_Packetizer__received_bytes_overflowÚ&_Packetizer__received_packets_overflowÚ_Packetizer__block_size_outÚ_Packetizer__block_size_inÚ_Packetizer__mac_size_outÚ_Packetizer__mac_size_inÚ_Packetizer__block_engine_outÚ_Packetizer__block_engine_inÚ_Packetizer__sdctr_outÚ_Packetizer__mac_engine_outÚ_Packetizer__mac_engine_inÚ_Packetizer__mac_key_outÚ_Packetizer__mac_key_inÚ _Packetizer__compress_engine_outÚ_Packetizer__compress_engine_inÚ _Packetizer__sequence_number_outÚ_Packetizer__sequence_number_inÚ_Packetizer__etm_outÚ_Packetizer__etm_inÚ_Packetizer__aead_outÚ_Packetizer__aead_inÚ_Packetizer__iv_outÚ_Packetizer__iv_inÚ	threadingÚRLockÚ_Packetizer__write_lockÚ_Packetizer__keepalive_intervalÚtimeÚ_Packetizer__keepalive_lastÚ_Packetizer__keepalive_callbackÚ_Packetizer__timerÚ_Packetizer__handshake_completeÚ_Packetizer__timer_expired)ÚselfÚsockets     r   Ú__init__zPacketizer.__init__Q   sr  € ØˆŒØˆŒØˆŒØ#ˆÔØ!ˆÔØˆÔÝ ™7œ7ˆÔØ!&ˆÔð ˆÔØˆÔØ !ˆÔØ"#ˆÔØ)*ˆÔ&Ø+,ˆÔ(ð !"ˆÔØ ˆÔØˆÔØˆÔØ"&ˆÔØ!%ˆÔØ ˆÔØ $ˆÔØ#ˆÔÝ"™WœWˆÔÝ!™GœGˆÔØ%)ˆÔ"Ø$(ˆÔ!Ø%&ˆÔ"Ø$%ˆÔ!ØˆŒØˆŒð  ˆŒØˆŒØˆŒØˆŒõ &œOÑ-Ô-ˆÔð %&ˆÔ!Ý $¤	¡¤ˆÔØ$(ˆÔ!àˆŒØ$)ˆÔ!Ø$ˆÔÐÐr   c                 ó   — | j         S r   )r1   ©r]   s    r   ÚclosedzPacketizer.closedˆ   s
   € àŒ}Ðr   c                 ó   — d| _         d S r!   )rK   ra   s    r   Úreset_seqno_outzPacketizer.reset_seqno_outŒ   s   € Ø%&ˆÔ"Ð"Ð"r   c                 ó   — d| _         d S r!   )rL   ra   s    r   Úreset_seqno_inzPacketizer.reset_seqno_in�   s   € Ø$%ˆÔ!Ð!Ð!r   c                 ó   — || _         dS )z?
        Set the Python log object to use for logging.
        N)r0   )r]   Úlogs     r   Úset_logzPacketizer.set_log’   s   € ð ˆŒˆˆr   FNc
                 óö   — || _         || _        || _        || _        || _        || _        d| _        d| _        || _        || _	        |	| _
        | xj        dz  c_        | j        dk    rd| _        d| _        dS dS )zd
        Switch outbound data cipher.
        :param etm: Set encrypt-then-mac from OpenSSH
        r   é   é   FN)rB   rD   r>   rE   r@   rG   r8   r9   rM   rO   rQ   r4   r3   )
r]   Úblock_engineÚ
block_sizeÚ
mac_engineÚmac_sizeÚmac_keyÚsdctrÚetmÚaeadÚiv_outs
             r   Úset_outbound_cipherzPacketizer.set_outbound_cipher˜   s›   € ð  #/ˆÔØ ˆÔØ *ˆÔØ *ˆÔØ&ˆÔØ$ˆÔØˆÔØˆÔØˆŒØˆŒØˆŒð 	ÐÔ˜QÑÐÔØÔ Ò!Ð!Ø !ˆDÔØ %ˆDÔÐÐð "Ð!r   c	                 ó  — || _         || _        || _        || _        || _        d| _        d| _        d| _        d| _        || _	        || _
        || _        | xj        dz  c_        | j        dk    rd| _        d| _        dS dS )zc
        Switch inbound data cipher.
        :param etm: Set encrypt-then-mac from OpenSSH
        r   r+   rl   FN)rC   r?   rF   rA   rH   r:   r;   r<   r=   rN   rP   rR   r4   r3   )	r]   rm   rn   ro   rp   rq   rs   rt   Úiv_ins	            r   Úset_inbound_cipherzPacketizer.set_inbound_cipherº   s£   € ð ".ˆÔØ)ˆÔØ)ˆÔØ%ˆÔØ#ˆÔØ !ˆÔØ"#ˆÔØ)*ˆÔ&Ø+,ˆÔ(ØˆŒØˆŒØˆŒð 	ÐÔ˜QÑÐÔØÔ Ò!Ð!Ø !ˆDÔØ %ˆDÔÐÐð "Ð!r   c                 ó   — || _         d S r   )rI   ©r]   Ú
compressors     r   Úset_outbound_compressorz"Packetizer.set_outbound_compressorÜ   s   € Ø%/ˆÔ"Ð"Ð"r   c                 ó   — || _         d S r   )rJ   r{   s     r   Úset_inbound_compressorz!Packetizer.set_inbound_compressorß   s   € Ø$.ˆÔ!Ð!Ð!r   c                 óF   — d| _         | j                             ¦   «          d S ©NT)r1   r/   Úclosera   s    r   r‚   zPacketizer.closeâ   s#   € ØˆŒØŒ×ÒÑÔÐÐÐr   c                 ó   — || _         d S r   ©r2   )r]   Úhexdumps     r   Úset_hexdumpzPacketizer.set_hexdumpæ   s   € Ø%ˆÔÐÐr   c                 ó   — | j         S r   r„   ra   s    r   Úget_hexdumpzPacketizer.get_hexdumpé   ó   € ØÔ"Ð"r   c                 ó   — | j         S r   )rA   ra   s    r   Úget_mac_size_inzPacketizer.get_mac_size_inì   s   € ØÔ!Ð!r   c                 ó   — | j         S r   )r@   ra   s    r   Úget_mac_size_outzPacketizer.get_mac_size_outï   r‰   r   c                 ó   — | j         S )zæ
        Returns ``True`` if a new set of keys needs to be negotiated.  This
        will be triggered during a packet read or write, so it should be
        checked after every read or write, or at least after every few.
        ©r3   ra   s    r   Ú
need_rekeyzPacketizer.need_rekeyò   s   € ð Ô Ð r   c                 óR   — || _         || _        t          j        ¦   «         | _        dS )zÏ
        Turn on/off the callback keepalive.  If ``interval`` seconds pass with
        no data read from or written to the socket, the callback will be
        executed and the timer will be reset.
        N)rV   rY   rW   rX   )r]   ÚintervalÚcallbacks      r   Úset_keepalivezPacketizer.set_keepaliveú   s(   € ð %-ˆÔ!Ø$,ˆÔ!Ý $¤	¡¤ˆÔÐÐr   c                 ó   — d| _         d S r�   )r\   ra   s    r   Ú
read_timerzPacketizer.read_timer  s   € Ø#ˆÔÐÐr   c                 ó¢   — | j         sGt          j        t          |¦  «        | j        ¦  «        | _         | j                              ¦   «          dS dS )zó
        Tells `Packetizer` that the handshake process started.
        Starts a book keeping timer that can signal a timeout in the
        handshake process.

        :param float timeout: amount of seconds to wait before timing out
        N)rZ   rS   ÚTimerÚfloatr–   Ústart)r]   Útimeouts     r   Ústart_handshakezPacketizer.start_handshake  sM   € ð Œ|ð 	!Ý$œ?­5°©>¬>¸4¼?ÑKÔKˆDŒLØŒL×ÒÑ Ô Ð Ð Ð ð	!ð 	!r   c                 ó4   — | j         sdS | j        rdS | j        S )aR  
        Checks if the handshake has timed out.

        If `start_handshake` wasn't called before the call to this function,
        the return value will always be `False`. If the handshake completed
        before a timeout was reached, the return value will be `False`

        :return: handshake time out status, as a `bool`
        F)rZ   r[   r\   ra   s    r   Úhandshake_timed_outzPacketizer.handshake_timed_out  s,   € ð Œ|ð 	Ø�5ØÔ$ð 	Ø�5ØÔ#Ð#r   c                 óf   — | j         r)| j                              ¦   «          d| _        d| _        dS dS )zF
        Tells `Packetizer` that the handshake has completed.
        FTN)rZ   Úcancelr\   r[   ra   s    r   Úcomplete_handshakezPacketizer.complete_handshake#  sB   € ð Œ<ð 	-ØŒL×ÒÑ!Ô!Ð!Ø#(ˆDÔ Ø(,ˆDÔ%Ð%Ð%ð	-ð 	-r   c                 ó>  — t          ¦   «         }t          | j        ¦  «        dk    r5| j        d|…         }| j        |d…         | _        |t          |¦  «        z  }|dk    �r:d}|                      ¦   «         rt	          ¦   «         ‚	 | j                             |¦  «        }t          |¦  «        dk    rt	          ¦   «         ‚||z  }|t          |¦  «        z  }nf# t          j        $ r d}Y nSt          j	        $ rB}t          |¦  «        }|t          j        k    rd}n| j        rt	          ¦   «         ‚‚ Y d}~nd}~ww xY w|rS| j        rt	          ¦   «         ‚|r(t          |¦  «        dk    r| j        rt          ¦   «         ‚|                      ¦   «          |dk    �°:|S )a&  
        Read as close to N bytes as possible, blocking as long as necessary.

        :param int n: number of bytes to read
        :return: the data read, as a `str`

        :raises:
            ``EOFError`` -- if the socket was closed before all the bytes could
            be read
        r   NFT)r5   r%   r6   rž   ÚEOFErrorr/   Úrecvr^   r›   Úerrorr(   ÚerrnoÚEAGAINr1   r3   r   Ú_check_keepalive)r]   ÚnÚcheck_rekeyÚoutÚgot_timeoutÚxr&   r'   s           r   Úread_allzPacketizer.read_all,  s¾  € õ ‰gŒgˆåˆtÔÑ Ô  1Ò$Ð$ØÔ" 2 A 2Ô&ˆCØ#Ô/°°°Ô3ˆDÔØ•�S‘”‰MˆAØ�!Še‰eØˆKØ×'Ò'Ñ)Ô)ð !Ý‘j”jÐ ðØ”M×&Ò& qÑ)Ô)�Ý�q‘6”6˜Q’;�;Ý"™*œ*Ð$Ø�q‘�Ø•S˜‘V”V‘��øÝ”>ð #ð #ð #Ø"���Ý”<ð 
ð 
ð 
õ   ‘l”l�Ø�%œ,Ò&Ð&Ø"&�K�KØ”]ð Ý"™*œ*Ð$àð	  �K�K�K�Køøøøð
øøøð ð (Ø”=ð %Ý"™*œ*Ð$Øð /¥C¨¡H¤H°¢M M°tÔ7H MÝ,Ñ.Ô.Ð.Ø×%Ò%Ñ'Ô'Ð'ð9 �!Še‰eð: ˆ
s   ÂAC ÃD>Ã.D>Ã<8D9Ä9D>c                 ó:  — t          j         ¦   «         | _        d}t          |¦  «        dk    ríd}	 | j                             |¦  «        }ni# t
          j        $ r d}Y nVt
          j        $ r.}t          |¦  «        }|t          j
        k    rd}nd}Y d }~nd }~wt          $ r ‚ t          $ r d}Y nw xY w|rd}| j        rd}n|dk    r|dk    rd}|dz  }|dk     rt          ¦   «         ‚|t          |¦  «        k    rn||d …         }t          |¦  «        dk    °íd S )Nr   FTéÿÿÿÿé
   rk   )rW   rX   r%   r/   Úsendr^   r›   r¥   r(   r¦   r§   r   Ú	Exceptionr1   r£   )r]   r«   Ú#iteration_with_zero_as_return_valueÚretry_writer©   r&   r'   s          r   Ú	write_allzPacketizer.write_all\  sn  € Ý $¤	¡¤ˆÔØ./Ð+Ý�#‰hŒh˜ŠlˆlØˆKðØ”M×&Ò& sÑ+Ô+��øÝ”>ð #ð #ð #Ø"���Ý”<ð ð ð Ý ‘l”l�Ø�%œ,Ò&Ð&Ø"&�K�Kà�AøøøøøøøøøÝ&ð ð ð ØÝð ð ð à���ðøøøð ð 9Ø�Ø”=ð Ø�Aøà˜’6�6ÐAÀBÒFÐFð �AØ3°qÑ8Ð3Ø�1ŠuˆuÝ‘j”jÐ Ø•C˜‘H”HŠ}ˆ}ØØ�a�b�b”'ˆCõE �#‰hŒh˜ŠlˆlðF 	ˆs#   ±A ÁB2ÁB2Á-$BÂB2Â1B2c                 óJ  — | j         }t          |vr!||                      |¦  «        z  }t          |v°!|                     t          ¦  «        }||dz   d…         | _         |d|…         }t	          |¦  «        dk    r|d         t
          k    r
|dd…         }t          |¦  «        S )z‰
        Read a line from the socket.  We assume no data is pending after the
        line, so it's okay to attempt large reads.
        rk   Nr   r°   )r6   r   Ú_read_timeoutÚindexr%   r   r   )r]   r›   Úbufr©   s       r   ÚreadlinezPacketizer.readline„  s£   € ð
 ÔˆÝ 3Ð&Ð&Ø�4×%Ò% gÑ.Ô.Ñ.ˆCõ  3Ð&Ð&à�IŠI•mÑ$Ô$ˆØ˜q 1™u˜w˜wœ<ˆÔØ�"�1�"ŒgˆÝ�‰HŒH�qŠLˆL˜s 2œw­-Ò7Ð7Ø�c�r�c”(ˆCÝ�‰vŒvˆr   c                 ó    — |dd …         }t                                |d¦  «        }|dz   }|                     dd¦  «        }|dd…         |z   }|S )Né   Úbigrk   r.   r   )ÚintÚ
from_bytesÚto_bytes)r]   ÚivÚiv_counter_bÚ
iv_counterÚinc_iv_counterÚinc_iv_counter_bÚnew_ivs          r   Ú_inc_iv_counterzPacketizer._inc_iv_counter“  s[   € ð ˜!˜"˜"”vˆÝ—^’^ L°%Ñ8Ô8ˆ
Ø# a™ˆØ)×2Ò2°1°eÑ<Ô<Ðà�A�a�C”Ð+Ñ+ˆØˆr   c                 óÎ  — |                      ¦   «         }t          |d         ¦  «        }|t          v rt          |         }nd                     |¦  «        }t	          |¦  «        }| j                             ¦   «          	 | j        �|                      |¦  «        }|                      |¦  «        }| j	        r]|  
                    t          d                     ||¦  «        ¦  «         |  
                    t          t          j        |d¦  «        ¦  «         | j        �³| j        r.|dd…         | j                             |dd…         ¦  «        z   }n€| j        r\|dd…         | j                             | j        |dd…         |dd…         ¦  «        z   }|                      | j        ¦  «        | _        n| j                             |¦  «        }n|}| j        �Z| j        sSt+          j        d| j        ¦  «        }|| j        r|n|z   }|t1          | j        || j        ¦  «        d| j        …         z  }| j        dz   t8          z  }	|	dk    r| j        st=          d	¦  «        ‚|	| _        |                      |¦  «         | xj         t	          |¦  «        z  c_         | xj!        dz  c_!        | j!        | j"        k    p| j         | j#        k    }
|
rd| j$        s]d
}|  
                    t          |                     | j!        | j         ¦  «        ¦  «         d| _%        d| _&        |  '                    ¦   «          | j         (                    ¦   «          dS # | j         (                    ¦   «          w xY w)zR
        Write a block of data using the current cipher, as an SSH block.
        r   ú${:x}NzWrite packet <{}>, length {}zOUT: r½   ú>Irk   ú/Sequence number rolled over during initial kex!z(Rekeying (hit {} packets, {} bytes sent)))Úasbytesr   r   Úformatr%   rU   ÚacquirerI   Ú_build_packetr2   Ú_logr   r   Úformat_binaryrB   rM   ÚupdaterO   ÚencryptrQ   rÈ   ÚstructÚpackrK   r   rG   rE   r@   r	   r7   r   r¶   r8   r9   ÚREKEY_PACKETSÚREKEY_BYTESr3   r<   r=   Ú_trigger_rekeyÚrelease)r]   ÚdataÚcmdÚcmd_nameÚorig_lenÚpacketr«   ÚpackedÚpayloadÚnext_seqÚsent_too_muchÚmsgs               r   Úsend_messagezPacketizer.send_messagež  s~  € ð
 �|Š|‰~Œ~ˆÝ�t˜A”wÑÔˆØ•)ÐÐÝ  ”~ˆHˆHà—~’~ cÑ*Ô*ˆHÝ�t‘9”9ˆØÔ×!Ò!Ñ#Ô#Ð#ð;	(ØÔ)Ð5Ø×1Ò1°$Ñ7Ô7�Ø×'Ò'¨Ñ-Ô-ˆFØÔ"ð FØ—	’	ÝØ2×9Ò9¸(ÀHÑMÔMñô ð ð —	’	�%¥Ô!3°F¸GÑ!DÔ!DÑEÔEÐEØÔ&Ð2Ø”>ð Aà   1 œ+¨Ô(?×(FÒ(FØ˜q˜r˜rœ
ñ)ô )ñ �C�Cð ”_ð 	Að !  1 œ+¨Ô(?×(GÒ(GØœ v¨a¨b¨b¤z°6¸!¸A¸#´;ñ)ô )ñ �Cð %)×$8Ò$8¸¼Ñ$GÔ$G�D”M�MàÔ1×8Ò8¸Ñ@Ô@�C�Cà�àÔ&Ð2¸4¼?Ð2Ýœ T¨4Ô+EÑFÔF�Ø ¨4¬>Ð$E C C¸vÑF�Ø•|ØÔ&¨°Ô1Fñô à'�DÔ'Ð'ô)ñ )�ð Ô2°QÑ6½)ÑCˆHØ˜1Š}ˆ} TÔ%;ˆ}Ý"ØEñô ð ð *2ˆDÔ&Ø�NŠN˜3ÑÔÐàÐÔ¥ S¡¤Ñ)ÐÔØÐÔ 1Ñ$ÐÔàÔ# tÔ'9Ò9ð 9ØÔ$¨Ô(8Ò8ð ð ð & TÔ%6ð &à@�Ø—	’	Ý˜3Ÿ:š: dÔ&9¸4Ô;LÑMÔMñô ð ð 23�Ô.Ø34�Ô0Ø×#Ò#Ñ%Ô%Ð%àÔ×%Ò%Ñ'Ô'Ð'Ð'Ð'øˆDÔ×%Ò%Ñ'Ô'Ð'Ð'øøøs   Á?J/M	 Í	M$c           	      ó(  — |                       | j        d¬¦  «        }| j        rÚt          j        d|dd…         ¦  «        d         }|| j        z
  dz   }|dd…         |                       |d¬¦  «        z   }|                       | j        d¬¦  «        }t          j        d| j        |¦  «        |z   }t          | j	        || j
        ¦  «        d| j        …         }t          j        ||¦  «        st          d	¦  «        ‚|}| j        r¤t          j        d|dd…         ¦  «        d         }|dd…         }|| j        z
  dz   | j        z   }|dd…         |                       |d¬¦  «        z   }| j                             | j        ||¦  «        }|                      | j        ¦  «        | _        | j        �!| j        s| j                             |¦  «        }| j        r.|                      t,          t          j        |d
¦  «        ¦  «         | j        s| j        r|}nát          j        d|dd…         ¦  «        d         }|dd…         }	|t1          |	¦  «        z
  | j        z  dk    rt          d¦  «        ‚|                       || j        z   t1          |	¦  «        z
  ¦  «        }
|
d|t1          |	¦  «        z
  …         }|
|t1          |	¦  «        z
  d…         }| j        �| j                             |¦  «        }|	|z   }| j        r.|                      t,          t          j        |d
¦  «        ¦  «         | j        dk    r‡| j        s€| j        sy|d| j        …         }t          j        d| j        |¦  «        |z   }t          | j	        || j
        ¦  «        d| j        …         }t          j        ||¦  «        st          d	¦  «        ‚t3          |d         ¦  «        }|d||z
  …         }| j        r/|                      t,          d                     ||¦  «        ¦  «         | j        �|                      |¦  «        }t9          |dd…         ¦  «        }| j        |_        | j        dz   t<          z  }|dk    r| j        st          d¦  «        ‚|| _        || j        z   dz   }| xj         |z  c_         | xj!        dz  c_!        | j"        rP| xj#        |z  c_#        | xj$        dz  c_$        | j$        | j%        k    s| j#        | j&        k    rt          d¦  «        ‚n}| j!        | j'        k    s| j         | j(        k    r]d}|                      t,          |                     | j!        | j         ¦  «        ¦  «         d| _#        d| _$        |  )                    ¦   «          t3          |d         ¦  «        }|tT          v rtT          |         }nd                     |¦  «        }| j        r<|                      t,          d                     |t1          |¦  «        ¦  «        ¦  «         ||fS )zë
        Only one thread should ever be in this function (no other locking is
        done).

        :raises: `.SSHException` -- if the packet is mangled
        :raises: `.NeedRekeyException` -- if the transport should rekey
        T)rª   rË   Nr½   r   Fz>IIzMismatched MACzIN: zInvalid packet blockingrk   z"Got payload ({} bytes, {} padding)rÌ   z+Remote transport is ignoring rekey requestsz,Rekeying (hit {} packets, {} bytes received)rÊ   zRead packet <{}>, length {})+r®   r?   rN   rÕ   ÚunpackrA   rÖ   rL   r   rH   rF   r   Úconstant_time_bytes_eqr   rP   rC   ÚdecryptrR   rÈ   rÓ   r2   rÑ   r   rÒ   r%   r   rÎ   rJ   r   Úseqnor	   r7   r:   r;   r3   r<   r=   ÚREKEY_PACKETS_OVERFLOW_MAXÚREKEY_BYTES_OVERFLOW_MAXr×   rØ   rÙ   r   )r]   ÚheaderÚpacket_sizeÚ	remainingrß   ÚmacÚmac_payloadÚmy_macÚaadÚleftoverrº   Úpost_packetÚpaddingrá   rä   râ   Úraw_packet_sizeÚerrrÜ   rÝ   s                       r   Úread_messagezPacketizer.read_messageè  so  € ð —’˜tÔ3À�ÑFÔFˆØŒ=ð 	Ý œ-¨¨f°R°a°R¬jÑ9Ô9¸!Ô<ˆKØ# dÔ&:Ñ:¸QÑ>ˆIØ˜A˜B˜B”Z $§-¢-°	Àu -Ñ"MÔ"MÑMˆFØ—-’- Ô 2À�-ÑFÔFˆCå”˜E 4Ô#<¸kÑJÔJØñð õ "ØÔ! ;°Ô0Dñô à"�Ô"Ð"ô$ˆFõ Ô.¨v°sÑ;Ô;ð 5Ý"Ð#3Ñ4Ô4Ð4ØˆFàŒ>ð 	>õ !œ-¨¨f°R°a°R¬jÑ9Ô9¸!Ô<ˆKØ˜˜!˜”*ˆCà˜dÔ2Ñ2°QÑ6¸Ô9KÑKð ð ˜A˜B˜B”Z $§-¢-°	Àu -Ñ"MÔ"MÑMˆFØÔ+×3Ò3°D´LÀ&È#ÑNÔNˆFà×/Ò/°´Ñ=Ô=ˆDŒLàÔ!Ð-°d´nÐ-ØÔ+×2Ò2°6Ñ:Ô:ˆFØÔð 	AØ�IŠI•e�TÔ/°¸Ñ?Ô?Ñ@Ô@Ð@ð
 Œ=ð 	'˜DœNð 	'ØˆFˆFõ !œ-¨¨f°R°a°R¬jÑ9Ô9¸!Ô<ˆKð ˜a˜b˜b”zˆHØ�c (™mœmÑ+¨tÔ/CÑCÀqÒHÐHÝ"Ð#<Ñ=Ô=Ð=Ø—-’-Ø˜dÔ0Ñ0µ3°x±=´=Ñ@ñô ˆCð Ð6˜;­¨X©¬Ñ6Ð6Ô7ˆFØ˜k­C°©M¬MÑ9Ð;Ð;Ô<ˆKàÔ%Ð1ØÔ/×6Ò6°vÑ>Ô>�Ø Ñ&ˆFàÔð 	AØ�IŠI•e�TÔ/°¸Ñ?Ô?Ñ@Ô@Ð@àÔ Ò!Ð!¨$¬-Ð!ÀÄÐ!ØÐ2 Ô 2Ð2Ô3ˆCå”˜E 4Ô#<¸kÑJÔJØñð õ "ØÔ! ;°Ô0Dñô à"�Ô"Ð"ô$ˆFõ Ô.¨v°sÑ;Ô;ð 5Ý"Ð#3Ñ4Ô4Ð4Ý˜6 !œ9Ñ%Ô%ˆØ˜˜[¨7Ñ2Ð2Ô3ˆàÔð 	Ø�IŠIÝØ4×;Ò;Ø ñô ñô ð ð Ô$Ð0Ø×/Ò/°Ñ8Ô8ˆGå�g˜a˜b˜b”kÑ"Ô"ˆØÔ-ˆŒ	ØÔ-°Ñ1µYÑ>ˆØ�qŠ=ˆ= Ô!7ˆ=ÝØAñô ð ð %-ˆÔ!ð &¨Ô(:Ñ:¸QÑ>ˆØÐÔ Ñ0ÐÔØÐÔ 1Ñ$ÐÔØÔð 	"ð Ð*Ô*¨oÑ=Ð*Ô*ØÐ,Ô,°Ñ1Ð,Ô,àÔ0ØÔ2ò3ð 3ð Ô.°$Ô2OÒOÐOå"ØAñô ð ð Pð
 Ô%¨Ô);Ò;Ð;ØÔ! TÔ%5Ò5Ð5ð AˆCØ�IŠIÝØ—
’
˜4Ô2°DÔ4IÑJÔJñô ð ð ./ˆDÔ*Ø/0ˆDÔ,Ø×ÒÑ!Ô!Ð!å�w˜q”zÑ"Ô"ˆØ•)ÐÐÝ  ”~ˆHˆHà—~’~ cÑ*Ô*ˆHØÔð 	Ø�IŠIÝØ-×4Ò4°X½sÀ7¹|¼|ÑLÔLñô ð ð �Cˆxˆr   c                 óÖ   — | j         €d S t          t          |¦  «        t          ¦  «        r"|D ]}| j                              ||¦  «         Œd S | j                              ||¦  «         d S r   )r0   Ú
issubclassr"   Úlistrh   )r]   Úlevelrä   Úms       r   rÑ   zPacketizer._log}  s{   € ØŒ=Ð ØˆFÝ•d˜3‘i”i¥Ñ&Ô&ð 	*Øð ,ð ,�Ø”×!Ò! %¨Ñ+Ô+Ð+Ð+ð,ð ,ð ŒM×Ò˜e SÑ)Ô)Ð)Ð)Ð)r   c                 óº   — | j         r| j        r| j        rd S t          j        ¦   «         }|| j        | j         z   k    r|                      ¦   «          || _        d S d S r   )rV   rB   r3   rW   rX   rY   )r]   Únows     r   r¨   zPacketizer._check_keepalive†  sv   € àÔ)ð	àÔ*ð	ð Ô ð	ð ˆFÝŒi‰kŒkˆØ�Ô&¨Ô)BÑBÒBÐBØ×%Ò%Ñ'Ô'Ð'Ø$'ˆDÔ!Ð!Ð!ð CÐBr   c                 ó\  — t          j         ¦   «         }	 	 | j                             d¦  «        }t          |¦  «        dk    rt	          ¦   «         ‚nZ# t
          j        $ r Y nw xY w| j        rt	          ¦   «         ‚t          j         ¦   «         }||z
  |k    rt          j        ¦   «         ‚Œ—|S )NTé€   r   )rW   r/   r¤   r%   r£   r^   r›   r1   )r]   r›   rš   r­   r   s        r   r¸   zPacketizer._read_timeout“  s²   € Ý”	‘”ˆð	'ðØ”M×&Ò& sÑ+Ô+�Ý�q‘6”6˜Q’;�;Ý"™*œ*Ð$ØøÝ”>ð ð ð Ø�ðøøøàŒ}ð !Ý‘j”jÐ Ý”)‘+”+ˆCØ�U‰{˜gÒ%Ð%Ý”nÑ&Ô&Ð&ð	'ð ˆs   –;A ÁA$Á#A$c                 ó0  — | j         }| j        s| j        rdnd}d|z   t          |¦  «        |z   |z  z
  }t	          j        dt          |¦  «        |z   dz   |¦  «        }||z  }| j        s| j        €|t          |z  z  }n|t          j
        |¦  «        z  }|S )Nr½   r.   rl   z>IBrk   )r>   rM   rO   r%   rÕ   rÖ   rD   rB   r
   ÚosÚurandom)r]   rá   ÚbsizeÚaddlenrö   rß   s         r   rÐ   zPacketizer._build_packet¤  s­   € àÔ%ˆð ”nÐ>¨¬Ð>��¸QˆØ�e‘)¥ G¡¤¨vÑ 5¸Ñ>Ñ?ˆÝ”˜U¥C¨¡L¤L°7Ñ$:¸QÑ$>ÀÑHÔHˆØ�'ÑˆØÔð 	*˜tÔ6Ð>ð •i 'Ñ)Ñ)ˆFˆFà•b”j Ñ)Ô)Ñ)ˆFØˆr   c                 ó   — d| _         d S r�   r�   ra   s    r   rÙ   zPacketizer._trigger_rekey¶  s   € à ˆÔÐÐr   )FFFN)FFN)F))r   r   r   r   Úpowr×   rØ   rë   rì   r_   Úpropertyrb   rd   rf   ri   rv   ry   r}   r   r‚   r†   rˆ   r‹   r�   r�   r”   r–   rœ   rž   r¡   r®   r¶   r»   rÈ   rå   rù   rÑ   r¨   r¸   rÐ   rÙ   r   r   r   r*   r*   A   sr  € € € € € ðð ð �C˜˜2‘J”J€MØ�#�a˜‘*”*€Kð "%  Q¨¡¤Ðà"˜s 1 b™zœzÐð5%ð 5%ð 5%ðn ðð ñ „Xðð'ð 'ð 'ð&ð &ð &ðð ð ð ØØØð &ð  &ð  &ð  &ðR ØØð &ð  &ð  &ð  &ðD0ð 0ð 0ð/ð /ð /ðð ð ð&ð &ð &ð#ð #ð #ð"ð "ð "ð#ð #ð #ð!ð !ð !ð,ð ,ð ,ð$ð $ð $ð
!ð 
!ð 
!ð$ð $ð $ð -ð -ð -ð.ð .ð .ð .ð`&ð &ð &ðPð ð ð	ð 	ð 	ðH(ð H(ð H(ðTQð Qð Qðj*ð *ð *ð(ð (ð (ðð ð ð"ð ð ð$!ð !ð !ð !ð !r   r*   )r   r¦   r  r^   rÕ   rS   rW   Úhmacr   Úparamikor   Úparamiko.commonr   r   r   r   r	   r
   r   Úparamiko.utilr   Úparamiko.ssh_exceptionr   r   Úparamiko.messager   r   r³   r   r(   r*   r   r   r   ú<module>r     sŠ  ðð&ð ð €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ $Ð $Ð $Ð $Ð $Ð $ð5ð 5ð 5ð	ð 	ð 	ð 	ð 	˜ñ 	ô 	ð 	ðð ð ðw	!ð w	!ð w	!ð w	!ð w	!ñ w	!ô w	!ð w	!ð w	!ð w	!r   