Current File : //lib/python2.7/site-packages/paramiko/dsskey.pyc
�
=OXc@s�dZddlmZddlmZddlmZmZddlm	Z	ddl
mZmZddl
mZddlmZdd	lmZdd
lmZddlmZmZddlmZd
efd��YZdS(s
DSS keys.
i����(tInvalidSignature(tdefault_backend(thashest
serialization(tdsa(tdecode_dss_signaturetencode_dss_signature(tutil(t	zero_byte(tSSHException(tMessage(tBERtBERException(tPKeytDSSKeycBs�eZdZddddddd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zdd
�Z
dd�Zeddd
��Zd�Zd�Zd�ZRS(sX
    Representation of a DSS key which can be used to sign an verify SSH2
    data.
    cCsRd|_d|_d|_d|_d|_|dk	rM|j||�dS|dk	rm|j||�dS|dkr�|dk	r�t|�}n|dk	r�|\|_|_|_|_nx|dkr�t	d��n|j
�dkr�t	d��n|j�|_|j�|_|j�|_|j�|_tj
|j�|_dS(NsKey object may not be emptysssh-dsssInvalid key(tNonetptqtgtytxt_from_private_keyt_from_private_key_fileR
R	tget_textt	get_mpintRt
bit_lengthtsize(tselftmsgtdatatfilenametpasswordtvalstfile_obj((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyt__init__-s0					!cCs`t�}|jd�|j|j�|j|j�|j|j�|j|j�|j�S(Nsssh-dss(R
t
add_stringt	add_mpintRRRRtasbytes(Rtm((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyR%Hs	
cCs
|j�S(N(R%(R((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyt__str__QscCsxt|j��}|dt|j�}|dt|j�}|dt|j�}|dt|j�}t|�S(Ni%(thashtget_nameRRRR(Rth((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyt__hash__TscCsdS(Nsssh-dss((R((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyR)]scCs|jS(N(R(R((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pytget_bits`scCs
|jdk	S(N(RR(R((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pytcan_signcsc	CsCtjd|jdtjd|jdtjd|jd|jd|j���j	dt
��}|jtj
��}|j|�t|j��\}}t�}|jd	�tj|d
�}tj|d
�}t|�dkrtdt|�|}nt|�dkr.tdt|�|}n|j||�|S(NRtpublic_numbersRtparameter_numbersRRRtbackendsssh-dssii(RtDSAPrivateNumbersRtDSAPublicNumbersRtDSAParameterNumbersRRRtprivate_keyRtsignerRtSHA1tupdateRtfinalizeR
R#Rtdeflate_longtlenR(	RRtkeyR5trtsR&trstrtsstr((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyt
sign_ssh_datafs,							
	
c
Cs%t|j��dkr'|j�}n(|j�}|dkrCdS|j�}tj|d d�}tj|dd�}t||�}tjd|j	dtj
d|jd	|jd
|j
��jdt��}|j|tj��}	|	j|�y|	j�Wntk
rtSXtSdS(Ni(sssh-dssiiiRR/RRRR0(R:R%Rt
get_binaryRtinflate_longRRR2RR3RRRt
public_keyRtverifierRR6R7tverifyRtFalsetTrue(
RRRtsigtkindtsigRtsigSt	signatureR;RD((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pytverify_ssh_sig�s.					

cCs�tjd|jdtjd|jdtjd|jd|jd|j���j	dt
��}|j||tj
jd	|�dS(
NRR.RR/RRRR0R(RR1RR2RR3RRRR4Rt_write_private_key_fileRt
PrivateFormattTraditionalOpenSSL(RRRR;((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pytwrite_private_key_file�s							cCs�tjd|jdtjd|jdtjd|jd|jd|j���j	dt
��}|j||tj
jd	|�dS(
NRR.RR/RRRR0R(RR1RR2RR3RRRR4Rt_write_private_keyRRORP(RR!RR;((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pytwrite_private_key�s							icCsjtj|dt��j�}td|jjj|jjj|jjj	|jj
f�}|j|_|S(s-
        Generate a new private DSS key.  This factory function can be used to
        generate a new host key or authentication key.

        :param int bits: number of bits the generated key should be.
        :param function progress_func: Unused
        :return: new `.DSSKey` private key
        R0R (Rtgenerate_private_keyRtprivate_numbersRR.R/RRRRR(tbitst
progress_functnumbersR;((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pytgenerate�s
cCs&|jd||�}|j|�dS(NtDSA(t_read_private_key_filet_decode_key(RRRR((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyR�scCs&|jd||�}|j|�dS(NRZ(t_read_private_keyR\(RR!RR((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyR�scCs�yt|�j�}Wn)tk
rA}tdt|���nXt|�tk	svt|�dksv|ddkr�td��n|d|_|d|_	|d|_
|d|_|d	|_t
j|j�|_dS(
NsUnable to parse key file: iis3not a valid DSA private key file (bad ber encoding)iiiii(RtdecodeRR	tstrttypetlistR:RRRRRRRR(RRtkeylistte((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyR\�s4




N(t__name__t
__module__t__doc__RR"R%R'R+R)R,R-R@RMRQRStstaticmethodRYRRR\(((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyR's"										!		N(Rftcryptography.exceptionsRtcryptography.hazmat.backendsRtcryptography.hazmat.primitivesRRt)cryptography.hazmat.primitives.asymmetricRt/cryptography.hazmat.primitives.asymmetric.utilsRRtparamikoRtparamiko.commonRtparamiko.ssh_exceptionR	tparamiko.messageR
tparamiko.berRRt
paramiko.pkeyR
R(((s3/usr/lib/python2.7/site-packages/paramiko/dsskey.pyt<module>s