Ë
    zñ�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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j6                  «       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*y)!z0
Useful functions used by the rest of paramiko.
é    N)ÚDEBUGÚ	zero_byteÚ	xffffffffÚmax_byteÚbyte_ordÚbyte_chr)Ú	SSHConfigc           	      óf  — d}d}|s!t        | «      dkD  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         úN/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/paramiko/util.pyÚinflate_longr   )   sÉ   € ð €CØ€HÙ¤ A£¨¢
´¸!¸A¹$³À4Ò1GØˆÜ
ˆ1ƒv�‚zÜˆÙÜˆFð �aœ#˜a›& 1™*‘nÑ%¨Ñ)ˆÜ�1”c˜!“f˜aÓ ò AˆØ�b‰yœFŸM™M¨$°°!°a¸!±e°Ó=¸aÑ@Ñ@‰ðAáØˆq�Qœ˜Q›‘ZÑ Ñ ˆØ€Jó    c                 óº  — t        «       }t        | «      } | dk7  r5| dk7  r0t        j                  d| t        z  «      |z   }| dz  } | dk7  r| dk7  rŒ0t        |«      D ]!  }| dk(  r
|d   dk7  r n&| dk(  sŒ|d   dk7  sŒ! n d}| dk(  rt        }nt        }||d   d }|r>| 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'   >   sü   € ô 	‹€AÜˆA‹€AØ�Š6˜˜RšÜ�K‰K˜˜a¤)™mÓ,¨qÑ0ˆØ	ˆb‰ˆð �Š6˜˜R›ô �q‹\ò ˆØ�ŠF˜˜1™ šÙØ�‹G˜!˜A™$ $›,Ùð	ð ˆØ�Š6Ü‰AäˆAØ	ˆ!ˆA‰$ˆ&ˆ	€AÙØ�ŠFœ ! A¡$›¨4Ò/Ü˜A‘ˆAØ�ŠGœ( 1 Q¡4›.¨4Ò/Ü˜1‘ˆAØ€Hr   c                 ó   — d}g }t        | «      |dz   kD  r7|j                  t        | ||dz    «      «       |dz  }t        | «      |dz   kD  rŒ7|t        | «      k  r|j                  t        | |d  «      «       |D �cg c]  }||z   ‘Œ	 c}S c c}w )Nr   é   )r   ÚappendÚformat_binary_line)ÚdataÚprefixÚxr   Úlines        r   Úformat_binaryr0   ]   s‘   € Ø	€AØ
€CÜ
ˆd‹)�a˜"‘fÒ
Ø�
‰
Ô% d¨1¨q°2©vÐ&6Ó7Ô8Ø	ˆR‰ˆô ˆd‹)�a˜"‘fÓ
ð 	Œ3ˆt‹9‚}Ø�
‰
Ô% d¨1¨2 hÓ/Ô0Ø&)Ö*˜dˆF�T‹MÒ*Ð*ùÒ*s   Á<Bc           
      ó:  — dj                  | D �cg c]  }dj                  t        |«      «      ‘Œ c}«      }dj                  | D �cg c].  }dj                  t        |«      «      t        |«      dz   dz     ‘Œ0 c}«      }dj                  ||«      S c c}w c c}w )Nú z{:02X}Ú z.{:c}..é?   é_   z	{:50s} {})ÚjoinÚformatr   )r,   ÚcÚleftÚrights       r   r+   r+   h   s„   € Ø�8‰8¸4Ö@°a�X—_‘_¤X¨a£[Õ1Ò@ÓA€DØ�G‰GØJNÖOÀQˆ×	Ñ	œ( 1›+Ó	&¬°«°bÑ(8¸RÑ'?Ó	@ÒOó€Eð ×Ñ˜d EÓ*Ð*ùò	 AùâOs   �!BÁ3Bc                 ó¢   — d}| D ]G  }t        |«      }d|cxk  rdk  rn n|t        |«      z  }Œ+|t        dj                  |«      «      z  }ŒI |S )Nr   r   é   z%{:02X})r   r   Úbr7   )r   r   r8   r   s       r   Úsafe_stringr>   p   sY   € Ø
€CØò *ˆÜ�Q‹KˆØ�Œ>�c�>Ø”8˜A“;Ñ‰Cà”1�Y×%Ñ% aÓ(Ó)Ñ)‰Cð*ð €Jr   c                 óÎ   — 	 | j                  «       S # t        $ rI t        | d«      }t        |d   «      }|dk(  rY yt	        |«      dz  }|dz  s|dz  }|dz  }|dz  sŒ|cY S w xY w)NFr   r   r   r   )Ú
bit_lengthÚAttributeErrorr'   r   r   )r%   ÚnormÚhbyteÚbitlens       r   r@   r@   {   s|   € ðØ�|‰|‹~ÐøÜò 	Ü˜A˜uÓ%ˆÜ˜˜a™Ó!ˆØ�AŠ:ÙÜ�T“˜Q‘ˆØ˜4’<Ø�a‰KˆEØ�a‰KˆFð ˜4“<ð Šð	ús   ‚ ’(A$¼"A$ÁA$Á#A$c                  ó†   — dj                  t        j                  t        j                  «       Ž «      j                  d«      S )Nr3   ú
)r6   Ú	tracebackÚformat_exceptionÚsysÚexc_infoÚsplit© r   r   Ú
tb_stringsrM   Š   s-   € Ø�7‰7”9×-Ñ-¬s¯|©|«~Ð>Ó?×EÑEÀdÓKÐKr   c                 óp  — t        «       }t        «       }t        |«      dkD  r|dd }|dkD  r‰ | «       }t        |«      dkD  r|j                  |«       |j                  t        |«      «       |j                  |«       |j	                  «       }t        |t        |«      «      }||d| z  }||z  }|dkD  rŒ‰|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   Úupdater=   ÚdigestÚmin)Úhash_algÚsaltÚkeyÚnbytesÚkeydatarP   Úhash_objÚsizes           r   Úgenerate_key_bytesrY   Ž   s®   € ô ‹g€GÜ‹W€FÜ
ˆ4ƒy�1‚}Ø�B�QˆxˆØ
�1Š*Ù“:ˆÜˆ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.hostkeysr[   )Úfilenamer[   s     r   Úload_host_keysr^   ­   s   € õ +á�HÓÐr   c                 ó<   — t        «       }|j                  | «       |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_configrc   Á   s   € ô ‹[€FØ
‡L�L�ÔØ€Mr   c                 ó$   — |j                  | «      S )zM
    Provided only as a backward-compatible wrapper around `.SSHConfig`.
    )Úlookup)Úhostnamerb   s     r   Úlookup_ssh_host_configrg   Í   s   € ð �=‰=˜Ó"Ð"r   c                 óŽ   — dd|}}}dd| }}}|dkD  r)||z  }||||z  z
  }}||||z  z
  }}||||z  z
  }}|dkD  rŒ)|dk  r||z  }|S )Nr   r   rL   )	r.   ÚmÚu1Úu2Úu3Úv1Úv2Úv3Úqs	            r   Úmod_inverserq   Ô   s   € à�A�qˆBˆ€BØ�A�qˆBˆ€Bà
ˆqŠ&Ø�"‰HˆØ�R˜"˜q™&‘[ˆBˆØ�R˜"˜q™&‘[ˆBˆØ�R˜"˜q™&‘[ˆBˆð	 ˆq‹&ð
 
ˆA‚vØ
ˆa‰ˆØ€Ir   c                  óÊ   — 	 t         j                  S # t        $ rG t        5  t        dz  at        t         _        d d d «       n# 1 sw Y   nxY wt         j                  cY S w xY w)Nr   )Ú_g_thread_dataÚidrA   Ú_g_thread_lockÚ_g_thread_counterrL   r   r   Úget_thread_idrw   è   s[   € ð!Ü× Ñ Ð øÜò !Üñ 	2Ü Ñ"ÐÜ 1ŒNÔ÷	2÷ 	2ñ 	2úô × Ñ Ò ð	!ús%   ‚ ’A"¡Aº	A"ÁA	ÁA"Á!A"c                 ó>  — t        j                  d«      }t        |j                  «      dkD  ry|j	                  |«       t        | d«      }t        j                  |«      }d}|dz  }|j                  t        j                  |d«      «       |j                  |«       y)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)r]   Ú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ÔCØ
×Ñ�gÕr   c                   ó   — e Zd Zd„ Zy)ÚPFilterc                 ó"   — t        «       |_        y)NT)rw   Ú	_threadid)ÚselfÚrecords     r   ÚfilterzPFilter.filter  s   € Ü(›?ˆÔØr   N)Ú__name__Ú
__module__Ú__qualname__r�   rL   r   r   r‹   r‹     s   „ ór   r‹   c                 óZ   — t        j                  | «      }|j                  t        «       |S ©N)r{   r|   Ú	addFilterÚ_pfilter)Únamer…   s     r   Ú
get_loggerr™     s%   € Ü×Ñ˜tÓ$€FØ
×Ñ”XÔØ€Mr   c                 ó²   — t        | «      t        |«      k7  ryd}t        t        | «      «      D ]"  }|t        | |   «      t        ||   «      z  z  }Œ$ |dk(  S )NFr   )r   r   r   )rz   r=   Úresr   s       r   Úconstant_time_bytes_eqrœ     sY   € Ü
ˆ1ƒv”�Q“ÒØØ
€Cä”3�q“6‹]ò /ˆØŒx˜˜!™‹~¤¨¨1©£Ñ.Ñ.‰ð/à�!‰8€Or   c                   ó   — e Zd Zd„ Zd„ Zy)ÚClosingContextManagerc                 ó   — | S r•   rL   )rŽ   s    r   Ú	__enter__zClosingContextManager.__enter__  s   € Øˆr   c                 ó$   — | j                  «        y r•   )Úclose)rŽ   ÚtypeÚvaluerG   s       r   Ú__exit__zClosingContextManager.__exit__   s   € Ø�
‰
�r   N)r‘   r’   r“   r    r¥   rL   r   r   rž   rž     s   „ òór   rž   c                 ó.   — t        | t        ||«      «      S r•   )ÚmaxrQ   )ÚminimumÚvalÚmaximums      r   Úclamp_valuer«   $  s   € Üˆwœ˜C Ó)Ó*Ð*r   c                 ó€   — 	 t        | «      S # t        $ r' 	 | j                  «       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.
    )r=   Ú	TypeErrorÚasbytesrA   )r   s    r   r®   r®   (  sJ   € ðô �‹tˆøÜò 	ð	ð —9‘9“;ÒøÜò 	ð ŒHð		úð	ús    ‚
 �	=—)¦=©9´=¸9¹=c                 ó–   — t        | t        «      r| S t        | t        «      r| j                  |«      S t	        dt        | «      › �«      ‚)zcast unicode or bytes to bytesúExpected unicode or bytes, got )Ú
isinstancer!   ÚstrÚencoder­   r£   ©r   Úencodings     r   r=   r=   >  sA   € ä�!”UÔØˆÜ	�A”sÔ	Ø�x‰x˜Ó!Ð!äÐ9¼$¸q»'¸ÐCÓDÐDr   c                 ó–   — t        | t        «      r| j                  |«      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  sA   € ä�!”UÔØ�x‰x˜Ó!Ð!Ü	�A”sÔ	ØˆäÐ9¼$¸q»'¸ÐCÓDÐDr   )F)T)r3   )Úutf8)+Ú__doc__rI   r   rG   Ú	threadingr{   Úparamiko.commonr   r   r   r   r   r   Úparamiko.configr	   r   r'   r0   r+   r>   r@   rM   rY   r^   rc   rg   rq   Úlocalrs   rv   ÚLockru   rw   r‰   r‹   r—   r™   rœ   rž   r«   r®   r=   r¸   rL   r   r   ú<module>rÀ      s×   ðñ&ó
 Û Û Û Û ÷÷ õ &óó*ó>+ò+òòòLòò>ò(	ò#òð !�—‘Ó"€ØÐ Ø�—‘Ó!€ò!ð !&ó ÷ ñ ñ ‹9€òò÷ñ ò+òó,EôEr   