ó Ú_e[c@sâdZddlmZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZdd lmZdd lmZdd lmZmZdd 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„Z d „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. cCs;d|_d|_d|_d|_d|_d|_|dk rV|j||ƒdS|dk rv|j||ƒdS|dkr|dk rt |ƒ}n|dk rÊ|\|_|_|_|_nX|j d|ddddƒ|j ƒ|_|j ƒ|_|j ƒ|_|j ƒ|_t j |jƒ|_dS(Ntmsgtkey_typesssh-dsst cert_typesssh-dss-cert-v01@openssh.com(tNonetptqtgtytxt public_blobt_from_private_keyt_from_private_key_fileR t_check_type_and_load_certt get_mpintRt bit_lengthtsize(tselfRtdatatfilenametpasswordtvalstfile_obj((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyt__init__-s2         ! cCs`tƒ}|jdƒ|j|jƒ|j|jƒ|j|jƒ|j|jƒ|jƒS(Nsssh-dss(R t add_stringt add_mpintRRRRtasbytes(Rtm((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyR(Ks  cCs |jƒS(N(R((R((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyt__str__TscCs+t|jƒ|j|j|j|jfƒS(N(thashtget_nameRRRR(R((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyt__hash__WscCsdS(Nsssh-dss((R((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyR,ZscCs|jS(N(R(R((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pytget_bits]scCs |jdk S(N(RR(R((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pytcan_sign`sc Cs3tjd|jdtjd|jdtjd|jd|jd|jƒƒƒj dt ƒƒ}|j |t j ƒƒ}t|ƒ\}}tƒ}|jd ƒtj|d ƒ}tj|d ƒ}t|ƒd krñtd t|ƒ|}nt|ƒd krtd t|ƒ|}n|j||ƒ|S( NRtpublic_numbersRtparameter_numbersRRRtbackendsssh-dssii(RtDSAPrivateNumbersRtDSAPublicNumbersRtDSAParameterNumbersRRRt private_keyRtsignRtSHA1RR R&Rt deflate_longtlenR( RR tkeytsigtrtsR)trstrtsstr((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyt sign_ssh_datacs*          c Cst|jƒƒdkr'|jƒ}n(|jƒ}|dkrCdS|jƒ}tj|d dƒ}tj|ddƒ}t||ƒ}tjd|j dtj d|j d |j d |j ƒƒjd tƒƒ}y|j||tjƒƒWntk rtSXtSdS( Ni(sssh-dssiiiRR1RRRR2(R:R(tget_textt get_binaryRt inflate_longRRR4RR5RRRt public_keyRtverifyRR8RtFalsetTrue( RR RR<tkindtsigRtsigSt signatureR;((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pytverify_ssh_sig~s*          cCsƒtjd|jdtjd|jdtjd|jd|jd|jƒƒƒj dt ƒƒ}|j ||t j jd |ƒdS( NRR0RR1RRRR2R"(RR3RR4RR5RRRR6Rt_write_private_key_fileRt PrivateFormattTraditionalOpenSSL(RR!R"R;((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pytwrite_private_key_files         cCsƒtjd|jdtjd|jdtjd|jd|jd|jƒƒƒj dt ƒƒ}|j ||t j jd |ƒdS( NRR0RR1RRRR2R"(RR3RR4RR5RRRR6Rt_write_private_keyRRORP(RR$R"R;((s3/tmp/pip-install-KP2Jbq/paramiko/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 progress_func: Unused :return: new `.DSSKey` private key R2R#( Rtgenerate_private_keyRtprivate_numbersRR0R1RRRRR(tbitst progress_functnumbersR;((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pytgenerateÅs     cCs&|jd||ƒ}|j|ƒdS(NtDSA(t_read_private_key_filet _decode_key(RR!R"R ((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyRÝscCs&|jd||ƒ}|j|ƒdS(NRZ(t_read_private_keyR\(RR$R"R ((s3/tmp/pip-install-KP2Jbq/paramiko/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(R tdecodeR R tstrttypetlistR:RRRRRRRR(RR tkeylistte((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyR\ås      N(t__name__t __module__t__doc__RR%R(R*R-R,R.R/RARMRQRSt staticmethodRYRRR\(((s3/tmp/pip-install-KP2Jbq/paramiko/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.berR R t paramiko.pkeyR R(((s3/tmp/pip-install-KP2Jbq/paramiko/paramiko/dsskey.pyts