=OXc@sdZddlmZddlmZddlmZmZddlm Z m Z ddl m Z ddl mZddlmZd efd YZd S( s RSA keys. i(tInvalidSignature(tdefault_backend(thashest serialization(trsatpadding(tMessage(tPKey(t SSHExceptiontRSAKeycBseZdZdddddddZedZedZdZdZ dZ dZ dZ d Z d Zd Zdd Zdd ZeddZdZdZdZRS(sZ Representation of an RSA key which can be used to sign and verify SSH2 data. cCsd|_|dk r)|j||dS|dk rI|j||dS|dkrp|dk rpt|}n|dk r||_no|dkrtdn|jdkrtdntjd|j d|j j t |_dS(NsKey object may not be emptysssh-rsas Invalid keytetn( tNonetkeyt_from_private_keyt_from_private_key_fileRRtget_textRtRSAPublicNumberst get_mpintt public_keyR(tselftmsgtdatatfilenametpasswordR tfile_obj((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyt__init__'s$       cCs |jjS(N(R tkey_size(R((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytsize<scCs6t|jtjr%|jjjS|jjSdS(N(t isinstanceR Rt RSAPrivateKeytprivate_numberstpublic_numbers(R((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyR @scCsFt}|jd|j|jj|j|jj|jS(Nsssh-rsa(Rt add_stringt add_mpintR R R tasbytes(Rtm((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyR#Gs   cCs |jS(N(R#(R((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyt__str__NscCsPt|j}|dt|jj}|dt|jj}t|S(Ni%(thashtget_nameR R R (Rth((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyt__hash__QscCsdS(Nsssh-rsa((R((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyR'WscCs|jS(N(R(R((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytget_bitsZscCst|jtjS(N(RR RR(R((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytcan_sign]scCsg|jjdtjdtj}|j||j}t}|j d|j ||S(NRt algorithmsssh-rsa( R tsignerRtPKCS1v15RtSHA1tupdatetfinalizeRR!(RRR-tsigR$((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyt sign_ssh_data`s       cCs|jdkrtS|j}t|tjr@|j}n|jd|jdt j dt j }|j |y|jWntk rtSXtSdS(Nsssh-rsat signatureRR,(RtFalseR RRRRtverifiert get_binaryRR.RR/R0tverifyRtTrue(RRRR R6((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytverify_ssh_sigms      cCs&|j||jtjjd|dS(NR(t_write_private_key_fileR Rt PrivateFormattTraditionalOpenSSL(RRR((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytwrite_private_key_files  cCs&|j||jtjjd|dS(NR(t_write_private_keyR RR<R=(RRR((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytwrite_private_keys  cCs.tjddd|dt}td|S(s- Generate a new private RSA 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 `.RSAKey` private key tpublic_exponentiRtbackendR (Rtgenerate_private_keyRR (tbitst progress_funcR ((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pytgenerates cCs&|jd||}|j|dS(NtRSA(t_read_private_key_filet _decode_key(RRRR((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyRscCs&|jd||}|j|dS(NRG(t_read_private_keyRI(RRRR((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyRscCsWy"tj|dddt}Wn%tk rI}tt|nX||_dS(NRRB(Rtload_der_private_keyR Rt ValueErrorRtstrR (RRR R ((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyRIs N(t__name__t __module__t__doc__R RtpropertyRR R#R%R)R'R*R+R3R:R>R@t staticmethodRFRRRI(((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyR !s&           N(RPtcryptography.exceptionsRtcryptography.hazmat.backendsRtcryptography.hazmat.primitivesRRt)cryptography.hazmat.primitives.asymmetricRRtparamiko.messageRt paramiko.pkeyRtparamiko.ssh_exceptionRR (((s3/usr/lib/python2.7/site-packages/paramiko/rsakey.pyts