§
    3xÅjT%  ã                   ól  — 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mZmZm	Z	m
Z
mZmZ ddlmZ d!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 ej        ¦   «         ada ej        ¦   «         ad„ Z efd„Z! G d„ d¦  «        Z" e"¦   «         Z#d„ Z$d„ Z% G d„ d¦  «        Z&d„ Z'd„ Z(d$d„Z)d$d „Z*dS )%zo
The dreaded ``utils.py`` - clearinghouse for commonly used functions or data
that don't belong anywhere else.
é    N)ÚDEBUGÚbyte_chrÚbyte_ordÚmax_byteÚ	xffffffffÚ	zero_byte)Ú	SSHConfigFc           	      ó¶  — d}d}|s.t          | ¦  «        dk    rt          | d         ¦  «        dk    rd}t          | ¦  «        dz  r+t          }|rt          }|dt          | ¦  «        dz  z
  z  | z   } t	          dt          | ¦  «        d¦  «        D ].}|dz  t          j        d| ||dz   …         ¦  «        d         z   }Œ/|r|ddt          | ¦  «        z  z  z  }|S )zTturns a normalized byte string into a long-int
    (adapted from Crypto.Util.number)r   é€   é   é   é    ú>Ié   )Úlenr   r   r   ÚrangeÚstructÚunpack)ÚsÚalways_positiveÚoutÚnegativeÚfillerÚis         ú>C:\Projects\Historical\venv\Lib\site-packages\paramiko/util.pyÚinflate_longr   )   sö   € ð €CØ€HØð ¥ A¡¤¨¢
 
µ¸!¸A¼$±´À4Ò1GÐ1GØˆÝ
ˆ1�v„v��zð *ÝˆØð 	ÝˆFð �a�#˜a™&œ& 1™*‘nÑ%¨Ñ)ˆÝ�1•c˜!‘f”f˜aÑ Ô ð Að AˆØ�b‰y�FœM¨$°°!°a¸!±e°)´Ñ=Ô=¸aÔ@Ñ@ˆˆØð !Øˆq�Q�˜Q™œ‘ZÑ Ñ ˆØ€Jó    Tc                 ó$  — t          ¦   «         }t          | ¦  «        } | dk    r7| dk    r1t          j        d| t          z  ¦  «        |z   }| dz  } | dk    r| dk    °1t          |¦  «        D ]*}| dk    r|d         dk    r n,| dk    r|d         dk    r nŒ+d}| dk    rt          }nt          }||d         d…         }|rR| dk    r#t          |d         ¦  «        d	k    r
t          |z   }| dk    r#t          |d         ¦  «        d	k     r
t          |z   }|S )
zTturns a long-int into a normalized byte string
    (adapted from Crypto.Util.number)r   éÿÿÿÿr   r   r   éÿ   )r   Nr   )	ÚbytesÚintr   Úpackr   Ú	enumerater   r   r   )ÚnÚadd_sign_paddingr   r   s       r   Údeflate_longr'   >   s1  € õ 	‰Œ€AÝˆA‰Œ€AØ�Š6ˆ6˜˜Rš˜ÝŒK˜˜a¥)™mÑ,Ô,¨qÑ0ˆØ	ˆb‰ˆð �Š6ˆ6˜˜Rš˜õ �q‰\Œ\ð ð ˆØ�ŠFˆF˜˜1œ š˜ØˆEØ�ŠGˆG˜!˜Aœ$ $š,˜,ØˆEøð ˆØ�Š6ˆ6ÝˆAˆAåˆAØ	ˆ!ˆAŒ$ˆ&ˆ&Œ	€AØð Ø�ŠFˆF� ! A¤$™œ¨4Ò/Ð/Ý˜A‘ˆAØ�ŠGˆG�( 1 Q¤4™.œ.¨4Ò/Ð/Ý˜1‘ˆAØ€Hr   Ú c                 ó^  ‡— d}g }t          | ¦  «        |dz   k    rH|                     t          | ||dz   …         ¦  «        ¦  «         |dz  }t          | ¦  «        |dz   k    °H|t          | ¦  «        k     r*|                     t          | |d …         ¦  «        ¦  «         ˆfd„|D ¦   «         S )Nr   é   c                 ó   •— g | ]}‰|z   ‘ŒS © r,   )Ú.0ÚlineÚprefixs     €r   ú
<listcomp>z!format_binary.<locals>.<listcomp>e   s   ø€ Ð*Ð*Ð*˜dˆF�T‰MÐ*Ð*Ð*r   )r   ÚappendÚformat_binary_line)Údatar/   Úxr   s    `  r   Úformat_binaryr5   ]   s¸   ø€ Ø	€AØ
€CÝ
ˆd‰)Œ)�a˜"‘fÒ
Ð
Ø�
Š
Õ% d¨1¨q°2©v¨:Ô&6Ñ7Ô7Ñ8Ô8Ð8Ø	ˆR‰ˆõ ˆd‰)Œ)�a˜"‘fÒ
Ð
ð 	�3ˆt‰9Œ9‚}€}Ø�
Š
Õ% d¨1¨2¨2¤hÑ/Ô/Ñ0Ô0Ð0Ø*Ð*Ð*Ð* cÐ*Ñ*Ô*Ð*r   c                 óª   — d                      d„ | D ¦   «         ¦  «        }d                      d„ | D ¦   «         ¦  «        }d                     ||¦  «        S )Nú c                 óR   — g | ]$}d                       t          |¦  «        ¦  «        ‘Œ%S )z{:02X}©Úformatr   ©r-   Úcs     r   r0   z&format_binary_line.<locals>.<listcomp>i   s*   € Ð@Ð@Ð@°a�X—_’_¥X¨a¡[¤[Ñ1Ô1Ð@Ð@Ð@r   r(   c                 ó„   — g | ]=}d                       t          |¦  «        ¦  «        t          |¦  «        dz   dz           ‘Œ>S )z.{:c}..é?   é_   r9   r;   s     r   r0   z&format_binary_line.<locals>.<listcomp>k   sA   € ÐOÐOÐOÀQˆ×	Ò	�( 1™+œ+Ñ	&Ô	&­°©¬°bÑ(8¸RÑ'?Ô	@ÐOÐOÐOr   z	{:50s} {})Újoinr:   )r3   ÚleftÚrights      r   r2   r2   h   s^   € Ø�8Š8Ð@Ð@¸4Ð@Ñ@Ô@ÑAÔA€DØ�GŠGØOÐOÈ$ÐOÑOÔOñô €Eð ×Ò˜d EÑ*Ô*Ð*r   c                 óÂ   — d}| D ]Y}t          |¦  «        }d|cxk    rdk    rn n|t          |¦  «        z  }Œ4|t          d                     |¦  «        ¦  «        z  }ŒZ|S )Nr   r   é   z%{:02X})r   r   Úbr:   )r   r   r<   r   s       r   Úsafe_stringrF   p   ss   € Ø
€CØð *ð *ˆÝ�Q‰KŒKˆØ�ˆ>ˆ>Š>ˆ>�cŠ>ˆ>ˆ>ˆ>ˆ>Ø•8˜A‘;”;ÑˆCˆCà•1�Y×%Ò% aÑ(Ô(Ñ)Ô)Ñ)ˆCˆCØ€Jr   c                 óø   — 	 |                       ¦   «         S # t          $ rY t          | d¦  «        }t          |d         ¦  «        }|dk    rY dS t	          |¦  «        dz  }|dz  s|dz  }|dz  }|dz  ¯|cY S w xY w)NFr   r   r   r   )Ú
bit_lengthÚAttributeErrorr'   r   r   )r%   ÚnormÚhbyteÚbitlens       r   rH   rH   {   s¦   € ðØ�|Š|‰~Œ~ÐøÝð 	ð 	ð 	Ý˜A˜uÑ%Ô%ˆÝ˜˜aœÑ!Ô!ˆØ�AŠ:ˆ:Ø�1�1Ý�T‘”˜Q‘ˆØ˜4‘<ð 	Ø�a‰KˆEØ�a‰KˆFð ˜4‘<ð 	ð ˆˆˆð	øøøs   ‚ –5A9Á(A9Á8A9c                  óŒ   — d                      t          j        t          j        ¦   «         Ž ¦  «                             d¦  «        S )Nr(   ú
)r@   Ú	tracebackÚformat_exceptionÚsysÚexc_infoÚsplitr,   r   r   Ú
tb_stringsrT   Š   s0   € Ø�7Š7•9Ô-­s¬|©~¬~Ð>Ñ?Ô?×EÒEÀdÑKÔKÐKr   c                 óè  — t          ¦   «         }t          ¦   «         }t          |¦  «        dk    r
|dd…         }|dk    r² | ¦   «         }t          |¦  «        dk    r|                     |¦  «         |                     t          |¦  «        ¦  «         |                     |¦  «         |                     ¦   «         }t          |t          |¦  «        ¦  «        }||d|…         z  }||z  }|dk    °²|S )a)  
    Given a password, passphrase, or other human-source key, scramble it
    through a secure hash into some keyworthy bytes.  This specific algorithm
    is used for encrypting/decrypting private key files.

    :param function hash_alg: A function which creates a new hash object, such
        as ``hashlib.sha256``.
    :param salt: data to salt the hash with.
    :type bytes salt: Hash salt bytes.
    :param str key: human-entered password or passphrase.
    :param int nbytes: number of bytes to generate.
    :return: Key data, as `bytes`.
    r   Nr   )r!   r   ÚupdaterE   ÚdigestÚmin)Úhash_algÚsaltÚkeyÚnbytesÚkeydatarW   Úhash_objÚsizes           r   Úgenerate_key_bytesr`   Ž   sâ   € õ ‰gŒg€GÝ‰WŒW€FÝ
ˆ4�y„y�1‚}€}Ø�B�Q�BŒxˆØ
�1Š*ˆ*Ø�8‘:”:ˆÝˆv‰;Œ;˜Š?ˆ?Ø�OŠO˜FÑ#Ô#Ð#Ø�Š�˜#™œÑÔÐØ�Š˜ÑÔÐØ—’Ñ"Ô"ˆÝ�6�3˜v™;œ;Ñ'Ô'ˆØ�6˜%˜4˜%”=Ñ ˆØ�$‰ˆð �1Š*ˆ*ð €Nr   c                 ó$   — ddl m}  || ¦  «        S )aN  
    Read a file of known SSH host keys, in the format used by openssh, and
    return a compound dict of ``hostname -> keytype ->`` `PKey
    <paramiko.pkey.PKey>`. The hostname may be an IP address or DNS name.

    This type of file unfortunately doesn't exist on Windows, but on posix,
    it will usually be stored in ``os.path.expanduser("~/.ssh/known_hosts")``.

    Since 1.5.3, this is just a wrapper around `.HostKeys`.

    :param str filename: name of the file to read host keys from
    :return:
        nested dict of `.PKey` objects, indexed by hostname and then keytype
    r   )ÚHostKeys)Úparamiko.hostkeysrb   )Úfilenamerb   s     r   Úload_host_keysre   ­   s&   € ð +Ð*Ð*Ð*Ð*Ð*àˆ8�HÑÔÐr   c                 óL   — t          ¦   «         }|                     | ¦  «         |S )z‘
    Provided only as a backward-compatible wrapper around `.SSHConfig`.

    .. deprecated:: 2.7
        Use `SSHConfig.from_file` instead.
    )r	   Úparse)Úfile_objÚconfigs     r   Úparse_ssh_configrj   Á   s$   € õ ‰[Œ[€FØ
‡L‚L�ÑÔÐØ€Mr   c                 ó,   — |                      | ¦  «        S )zM
    Provided only as a backward-compatible wrapper around `.SSHConfig`.
    )Úlookup)Úhostnameri   s     r   Úlookup_ssh_host_configrn   Í   s   € ð �=Š=˜Ñ"Ô"Ð"r   c                 ó’   — dd|}}}dd| }}}|dk    r)||z  }||||z  z
  }}||||z  z
  }}||||z  z
  }}|dk    °)|dk     r||z  }|S )Nr   r   r,   )	r4   ÚmÚu1Úu2Úu3Úv1Úv2Úv3Úqs	            r   Úmod_inverserx   Ô   s…   € à�A�qˆBˆ€BØ�A�qˆBˆ€Bà
ˆqŠ&ˆ&Ø�"‰HˆØ�R˜"˜q™&‘[ˆBˆØ�R˜"˜q™&‘[ˆBˆØ�R˜"˜q™&‘[ˆBˆð	 ˆqŠ&ˆ&ð
 
ˆA‚v€vØ
ˆa‰ˆØ€Ir   c                  óÈ   — 	 t           j        S # t          $ rI t          5  t          dz  at          t           _        d d d ¦  «         n# 1 swxY w Y   t           j        cY S w xY w)Nr   )Ú_g_thread_dataÚidrI   Ú_g_thread_lockÚ_g_thread_counterr,   r   r   Úget_thread_idr~   è   sª   € ð!ÝÔ Ð øÝð !ð !ð !Ýð 	2ð 	2Ý Ñ"ÐÝ 1�NÔð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2õ Ô Ð Ð Ð ð	!øøøs1   ‚ ŽA!ŸA»A!ÁA	ÁA!ÁA	ÁA!Á A!c                 ó\  — t          j        d¦  «        }t          |j        ¦  «        dk    rdS |                     |¦  «         t          | d¦  «        }t          j        |¦  «        }d}|dz  }|                     t          j        |d¦  «        ¦  «         | 	                    |¦  «         dS )zKsend paramiko logs to a logfile,
    if they're not already going somewhereÚparamikor   NÚaz>%(levelname)-.3s [%(asctime)s.%(msecs)03d] thr=%(_threadid)-3dz %(name)s: %(message)sz%Y%m%d-%H:%M:%S)
ÚloggingÚ	getLoggerr   ÚhandlersÚsetLevelÚopenÚStreamHandlerÚsetFormatterÚ	FormatterÚ
addHandler)rd   ÚlevelÚloggerÚfÚhandlerÚfrms         r   Úlog_to_filer�   ó   s«   € õ Ô˜zÑ*Ô*€FÝ
ˆ6Œ?ÑÔ˜aÒÐØˆØ
‡O‚O�EÑÔÐÝˆX�sÑÔ€AÝÔ# AÑ&Ô&€GØ
J€CØÐ#Ñ#€CØ×Ò�Ô*¨3Ð0AÑBÔBÑCÔCÐCØ
×Ò�gÑÔÐÐÐr   c                   ó   — e Zd Zd„ ZdS )ÚPFilterc                 ó,   — t          ¦   «         |_        dS )NT)r~   Ú	_threadid)ÚselfÚrecords     r   ÚfilterzPFilter.filter  s   € Ý(™?œ?ˆÔØˆtr   N)Ú__name__Ú
__module__Ú__qualname__r—   r,   r   r   r’   r’     s#   € € € € € ðð ð ð ð r   r’   c                 ób   — t          j        | ¦  «        }|                     t          ¦  «         |S ©N)r‚   rƒ   Ú	addFilterÚ_pfilter)ÚnamerŒ   s     r   Ú
get_loggerr      s+   € ÝÔ˜tÑ$Ô$€FØ
×Ò•XÑÔÐØ€Mr   c                 óð   — t          | ¦  «        t          |¦  «        k    rdS d}t          t          | ¦  «        ¦  «        D ]0}|t          | |         ¦  «        t          ||         ¦  «        z  z  }Œ1|dk    S )NFr   )r   r   r   )r�   rE   Úresr   s       r   Úconstant_time_bytes_eqr£     sl   € Ý
ˆ1�v„v•�Q‘”ÒÐØˆuØ
€Cå•3�q‘6”6‰]Œ]ð /ð /ˆØ�x˜˜!œ‰~Œ~¥¨¨1¬¡¤Ñ.Ñ.ˆˆØ�!Š8€Or   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚClosingContextManagerc                 ó   — | S rœ   r,   )r•   s    r   Ú	__enter__zClosingContextManager.__enter__  s   € Øˆr   c                 ó.   — |                       ¦   «          d S rœ   )Úclose)r•   ÚtypeÚvaluerO   s       r   Ú__exit__zClosingContextManager.__exit__   s   € Ø�
Š
‰Œˆˆˆr   N)r˜   r™   rš   r§   r¬   r,   r   r   r¥   r¥     s2   € € € € € ðð ð ðð ð ð ð r   r¥   c                 ó>   — t          | t          ||¦  «        ¦  «        S rœ   )ÚmaxrX   )ÚminimumÚvalÚmaximums      r   Úclamp_valuer²   $  s   € Ýˆw�˜C Ñ)Ô)Ñ*Ô*Ð*r   c                 ó”   — 	 t          | ¦  «        S # t          $ r, 	 |                      ¦   «         cY S # t          $ r | cY cY S w xY ww xY w)z:
    Coerce to bytes if possible or return unchanged.
    )rE   Ú	TypeErrorÚasbytesrI   )r   s    r   rµ   rµ   (  st   € ðõ �‰tŒtˆøÝð 	ð 	ð 	ð	ð —9’9‘;”;ÐÐÐøÝð 	ð 	ð 	ð ˆHˆHˆHˆHˆHð		øøøð	øøøs(   ‚ ‘
Aœ2¯A²A¾AÁAÁAÚutf8c                 óÂ   — t          | t          ¦  «        r| S t          | t          ¦  «        r|                      |¦  «        S t	          dt          | ¦  «        › �¦  «        ‚)zcast unicode or bytes to bytesúExpected unicode or bytes, got )Ú
isinstancer!   ÚstrÚencoder´   rª   ©r   Úencodings     r   rE   rE   >  s\   € å�!•UÑÔð EØˆÝ	�A•sÑ	Ô	ð EØ�xŠx˜Ñ!Ô!Ð!åÐC½$¸q¹'¼'ÐCÐCÑDÔDÐDr   c                 óÂ   — t          | t          ¦  «        r|                      |¦  «        S t          | t          ¦  «        r| S t	          dt          | ¦  «        › �¦  «        ‚)z cast bytes or unicode to unicoder¸   )r¹   r!   Údecoderº   r´   rª   r¼   s     r   ÚurÀ   I  s\   € å�!•UÑÔð EØ�xŠx˜Ñ!Ô!Ð!Ý	�A•sÑ	Ô	ð EØˆåÐC½$¸q¹'¼'ÐCÐCÑDÔDÐDr   )F)T)r(   )r¶   )+Ú__doc__r‚   r   rQ   Ú	threadingrO   Úparamiko.commonr   r   r   r   r   r   Úparamiko.configr	   r   r'   r5   r2   rF   rH   rT   r`   re   rj   rn   rx   Úlocalrz   r}   ÚLockr|   r~   r�   r’   rž   r    r£   r¥   r²   rµ   rE   rÀ   r,   r   r   ú<module>rÇ      s‘  ðð&ð ð
 €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð %Ð %Ð %Ð %Ð %ðð ð ð ð*ð ð ð ð>+ð +ð +ð +ð+ð +ð +ðð ð ðð ð ðLð Lð Lðð ð ð>ð ð ð(	ð 	ð 	ð#ð #ð #ðð ð ð !�”Ñ"Ô"€ØÐ Ø�”Ñ!Ô!€ð!ð !ð !ð !&ð ð ð ð ð ð ð ð ð ñ ô ð ð ˆ7‰9Œ9€ðð ð ðð ð ðð ð ð ð ñ ô ð ð+ð +ð +ðð ð ð,Eð Eð Eð EðEð Eð Eð Eð Eð Er   