3 L]`@sdZddlmZddlmZddlmZmZddlm Z m Z ddl m Z ddl mZddlmZdd lmZGd d d eZd S) z RSA keys. )InvalidSignature)default_backend)hashes serialization)rsapadding)Message)PKey)PY2) SSHExceptionc@seZdZdZd%ddZeddZeddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZd&ddZd'ddZed(ddZdd Zd!d"Zd#d$ZdS))RSAKeyzZ Representation of an RSA key which can be used to sign and verify SSH2 data. NcCsd|_d|_|dk r$|j||dS|dk r<|j||dS|dkrT|dk rTt|}|dk rd||_n0|j|dddtj|j|jdj t |_dS)Nzssh-rsazssh-rsa-cert-v01@openssh.com)msgZkey_typeZ cert_type)en) keyZ public_blob_from_private_key_from_private_key_filerZ_check_type_and_load_certrZRSAPublicNumbersZ get_mpint public_keyr)selfr datafilenamepasswordrfile_objr5/tmp/pip-install-wfra5znf/paramiko/paramiko/rsakey.py__init__(s&   zRSAKey.__init__cCs|jjS)N)rkey_size)rrrrsizeGsz RSAKey.sizecCs(t|jtjr|jjjS|jjSdS)N) isinstancerr RSAPrivateKeyZprivate_numberspublic_numbers)rrrrr Ks zRSAKey.public_numberscCs4t}|jd|j|jj|j|jj|jS)Nzssh-rsa)r add_stringZ add_mpintr rrasbytes)rmrrrr"Rs  zRSAKey.asbytescCs"tr |jS|jjdddSdS)Nutf8ignore)errors)r r"decode)rrrr__str__YszRSAKey.__str__cCst|j|jj|jjfS)N)hashget_namer rr)rrrr__hash__eszRSAKey.__hash__cCsdS)Nzssh-rsar)rrrrr*jszRSAKey.get_namecCs|jS)N)r)rrrrget_bitsmszRSAKey.get_bitscCst|jtjS)N)rrrr)rrrrcan_signpszRSAKey.can_signcCs8|jj|tjtjd}t}|jd|j||S)N)r algorithmzssh-rsa)rsignrPKCS1v15rSHA1rr!)rrsigr#rrr sign_ssh_datass   zRSAKey.sign_ssh_datac Csh|jdkrdS|j}t|tjr*|j}y |j|j|tj t j Wnt k r^dSXdSdS)Nzssh-rsaFT) Zget_textrrrrrverifyZ get_binaryrr0rr1r)rrr rrrrverify_ssh_sig}s  zRSAKey.verify_ssh_sigcCs|j||jtjj|ddS)N)r)Z_write_private_key_filerr PrivateFormatTraditionalOpenSSL)rrrrrrwrite_private_key_files zRSAKey.write_private_key_filecCs|j||jtjj|ddS)N)r)Z_write_private_keyrrr6r7)rrrrrrwrite_private_keys zRSAKey.write_private_keycCstjd|td}t|dS)a$ 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 progress_func: Unused :return: new `.RSAKey` private key i)Zpublic_exponentrbackend)r)rZgenerate_private_keyrr )bitsZ progress_funcrrrrgenerates zRSAKey.generatecCs|jd||}|j|dS)NRSA)Z_read_private_key_file _decode_key)rrrrrrrrszRSAKey._from_private_key_filecCs|jd||}|j|dS)Nr=)Z_read_private_keyr>)rrrrrrrrszRSAKey._from_private_keycCs`ytj|dtd}Wn.tk rD}ztt|WYdd}~XnXt|tjsVt ||_ dS)N)rr:) rZload_der_private_keyr ValueErrorr strrrrAssertionErrorr)rrrrrrrr>szRSAKey._decode_key)NNNNNN)N)N)N)__name__ __module__ __qualname____doc__rpropertyrr r"r(r+r*r,r-r3r5r8r9 staticmethodr<rrr>rrrrr "s0        r N)rEZcryptography.exceptionsrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricrrZparamiko.messagerZ paramiko.pkeyr Zparamiko.py3compatr Zparamiko.ssh_exceptionr r rrrrs