Current File : //usr/lib/python2.7/site-packages/paramiko/util.pyc
�
=OXc@s�dZddlmZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZm
Z
ddlmZmZmZmZmZddlmZed�Zer�endZer�e
nd	Zed
�Zdd�Zd
�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%ia&da'ej(�a)d�Z*e
d�Z+de,fd��YZ-e-�Z.d�Z/d�Z0d�Z1de,fd��YZ2d�Z3dS( s0
Useful functions used by the rest of paramiko.
i����(t
generatorsN(tDEBUGt	zero_bytet	xfffffffftmax_byte(tPY2tlongtbyte_chrtbyte_ordtb(t	SSHConfigc
Cstd�}d}|rJt|�dkrJt|d�dkrJd}nt|�dr�t}|rot}n|dt|�d|}nxItdt|�d�D]/}|d>tjd|||d!�d}q�W|r|td�dt|�>8}n|S(sPturns a normalized byte string into a long-int (adapted from Crypto.Util.number)ii�iii s>Ii(RtlenRRRtrangetstructtunpack(tstalways_positivetouttnegativetfillerti((s1/usr/lib/python2.7/site-packages/paramiko/util.pytinflate_long%s/		-!ii�cCsIt�}t|�}x@|dkrW|dkrWtjd|t@�|}|dL}qWxut|�D]F}|dkr�|dtkr�Pn|dkre|dtkrePqeqeWd}|dkr�t}nt	}||d}|rE|dkrt
|d�dkrt|}n|dkrEt
|d�dkrEt	|}qEn|S(sPturns a long-int into a normalized byte string (adapted from Crypto.Util.number)ii����s>Ii ii�(i(tbytesRR
tpackRt	enumeratetdeflate_zerot
deflate_ffRRR(tntadd_sign_paddingRR((s1/usr/lib/python2.7/site-packages/paramiko/util.pytdeflate_long<s*		"
"tcCs�d}g}xBt|�|dkrP|jt|||d!��|d7}qW|t|�kr}|jt||��ng|D]}||^q�S(Nii(Rtappendtformat_binary_line(tdatatprefixtxR((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt
format_binaryZscCsrdjg|D]}dt|�^q
�}djg|D]"}d|t|�dd^q9�}d||fS(Nt s%02XRs.%c..i?i_s%-50s %s(tjoinR(R!tctlefttright((s1/usr/lib/python2.7/site-packages/paramiko/util.pyR es,8cCsptd�}x]|D]U}t|�}d|ko<dknrT|t|�7}q|td|�7}qW|S(NRi is%%%02X(R	RR(RRR'R((s1/usr/lib/python2.7/site-packages/paramiko/util.pytsafe_stringks
cCs�y|j�SWnvtk
r�t|t�}t|d�}|dkrMdSt|�d}x"|d@s�|dK}|d8}q`W|SXdS(Niiii�(t
bit_lengthtAttributeErrorRtFalseRR(Rtnormthbytetbitlen((s1/usr/lib/python2.7/site-packages/paramiko/util.pyR+vs


cCs%djtjtj���jd�S(NRs
(R&t	tracebacktformat_exceptiontsystexc_infotsplit(((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt
tb_strings�scCs�t�}t�}t|�dkr1|d }nx�|dkr�|�}t|�dkrk|j|�n|jt|��|j|�|j�}t|t|��}||| 7}||8}q4W|S(s
    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 salt: byte string
    :param str key: human-entered password or passphrase.
    :param int nbytes: number of bytes to generate.
    :return: Key data `str`
    ii(RRtupdateR	tdigesttmin(thash_algtsalttkeytnbytestkeydataR8thash_objtsize((s1/usr/lib/python2.7/site-packages/paramiko/util.pytgenerate_key_bytes�s		
	
cCsddlm}||�S(s�
    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.  The
    keytype will be either ``"ssh-rsa"`` or ``"ssh-dss"``.

    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
    i����(tHostKeys(tparamiko.hostkeysRB(tfilenameRB((s1/usr/lib/python2.7/site-packages/paramiko/util.pytload_host_keys�scCst�}|j|�|S(sM
    Provided only as a backward-compatible wrapper around `.SSHConfig`.
    (R
tparse(tfile_objtconfig((s1/usr/lib/python2.7/site-packages/paramiko/util.pytparse_ssh_config�s	
cCs
|j|�S(sM
    Provided only as a backward-compatible wrapper around `.SSHConfig`.
    (tlookup(thostnameRH((s1/usr/lib/python2.7/site-packages/paramiko/util.pytlookup_ssh_host_config�sc	Cs�dd|}}}dd|}}}xY|dkr�||}||||}}||||}}||||}}q+W|dkr�||7}n|S(Nii((	R#tmtu1tu2tu3tv1tv2tv3tq((s1/usr/lib/python2.7/site-packages/paramiko/util.pytmod_inverse�s

cCskttj��}yt|SWnFtk
rftj�ztd7at}t|<Wdtj�X|SXdS(Ni(	tidt	threadingt
currentThreadt
_g_thread_idstKeyErrort_g_thread_locktacquiret_g_thread_countertrelease(ttidtret((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt
get_thread_id�s


cCs}tjd�}t|j�dkr(dS|j|�t|d�}tj|�}|jtjdd��|j	|�dS(sGsend paramiko logs to a logfile, if they're not already going somewheretparamikoiNtwsT%(levelname)-.3s [%(asctime)s.%(msecs)03d] thr=%(_threadid)-3d %(name)s: %(message)ss%Y%m%d-%H:%M:%S(
tloggingt	getLoggerRthandlerstsetLeveltopent
StreamHandlertsetFormattert	Formattert
addHandler(RDtleveltltftlh((s1/usr/lib/python2.7/site-packages/paramiko/util.pytlog_to_file�s

tPFiltercBseZd�ZRS(cCst�|_tS(N(Rat	_threadidtTrue(tselftrecord((s1/usr/lib/python2.7/site-packages/paramiko/util.pytfilter�s(t__name__t
__module__Rw(((s1/usr/lib/python2.7/site-packages/paramiko/util.pyRr�scCs tj|�}|jt�|S(N(RdRet	addFiltert_pfilter(tnameRn((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt
get_loggers
cCsJxCtrEy|�SWqtk
rA}|jtjkrB�qBqXqWdS(s6Retries function until it doesn't raise an EINTR errorN(RttEnvironmentErrorterrnotEINTR(tfunctionte((s1/usr/lib/python2.7/site-packages/paramiko/util.pytretry_on_signal	s	cCswt|�t|�krtSd}xHtr1tntt|��D](}|t||�t||�AO}qAW|dkS(Ni(RR-RtxrangeRR(taR	tresR((s1/usr/lib/python2.7/site-packages/paramiko/util.pytconstant_time_bytes_eqs%&tClosingContextManagercBseZd�Zd�ZRS(cCs|S(N((Ru((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt	__enter__scCs|j�dS(N(tclose(RuttypetvalueR1((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt__exit__!s(RxRyR�R�(((s1/usr/lib/python2.7/site-packages/paramiko/util.pyR�s	cCst|t||��S(N(tmaxR9(tminimumtvaltmaximum((s1/usr/lib/python2.7/site-packages/paramiko/util.pytclamp_value%s(4t__doc__t
__future__RRR3R
R1RWRdtparamiko.commonRRRRtparamiko.py3compatRRRRR	tparamiko.configR
R-RRRRtRR$R R*R+R6RARERIRLRURYR]tLockR[RaRqtobjectRrR{R}R�R�R�R�(((s1/usr/lib/python2.7/site-packages/paramiko/util.pyt<module>sH"(