
    oh%                     `   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         _/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/paramiko/util.pyinflate_longr   )   s     CHA
!A$41G
1vzF a#a&1*n%)1c!fa  AbyFMM$!a!e=a@@AqQ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KKa)m,q0	b 6R q\ F1G!A$$,	 6AA	!A$&	AF!A$4/AAG(1Q4.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


%d1q2v&678	R d)a"f
 	3t9}

%d12h/0&)*dFTM***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    884@aX__Xa[1@ADGGJNOQ		(1+	&b(8R'?	@OE dE**	 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 *QK>c>8A;C1Y%%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|    ||~ 	Au%a!A:TQ4<aKEaKF 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-    779--s||~>?EEd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     gGWF
4y1}BQx
1*:v;?OOF##"63v;'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
LL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    AqBBAqBB
q&"HR"q&[BR"q&[BR"q&[B	 q&
 
Av
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" 1N	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
OOEXsA##A&G
JC##C**30A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    
1vQ
C3q6] /x!~1../!8Or   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 		 99; 	 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	As	xx!!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xx!!	As	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   