U q`@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$|||dS|dk r<|||dS|dkrT|dk rTt|}|dk rd||_n0|j|dddtj||d t |_dS)Nssh-rsazssh-rsa-cert-v01@openssh.com)msgZkey_typeZ cert_typeen) keyZ public_blob_from_private_key_from_private_key_filerZ_check_type_and_load_certrRSAPublicNumbersZ get_mpint public_keyr)selfrdatafilenamepasswordrfile_objr6/tmp/pip-target-nv4zd3e_/lib/python/paramiko/rsakey.py__init__(s.   zRSAKey.__init__cCs|jjSN)rkey_sizerrrrsizeGsz RSAKey.sizecCs(t|jtjr|jjS|jSdSr) isinstancerr RSAPrivateKeyZprivate_numberspublic_numbersr!rrrr%Ks zRSAKey.public_numberscCs4t}|d||jj||jj|SNr )r add_stringZ add_mpintr%rrasbytes)rmrrrr(Rs  zRSAKey.asbytescCs"tr |S|jdddSdS)Nutf8ignore)errors)r r(decoder!rrr__str__YszRSAKey.__str__cCst||jj|jjfSr)hashget_namer%rrr!rrr__hash__eszRSAKey.__hash__cCsdSr&rr!rrrr0jszRSAKey.get_namecCs|jSr)r"r!rrrget_bitsmszRSAKey.get_bitscCst|jtjSr)r#rrr$r!rrrcan_signpszRSAKey.can_signcCs8|jj|ttd}t}|d|||S)N)r algorithmr )rsignrPKCS1v15rSHA1rr')rrsigr)rrr sign_ssh_datass  zRSAKey.sign_ssh_datacCsj|dkrdS|j}t|tjr*|}z |||t t Wnt k r`YdSXdSdS)Nr FT) Zget_textrr#rr$rverifyZ get_binaryrr6rr7r)rrrrrrrverify_ssh_sig}s  zRSAKey.verify_ssh_sigcCs|j||jtjj|ddSN)r)Z_write_private_key_filerr PrivateFormatTraditionalOpenSSL)rrrrrrwrite_private_key_files zRSAKey.write_private_key_filecCs|j||jtjj|ddSr<)Z_write_private_keyrrr=r>)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_exponentr backend)r)rZgenerate_private_keyrr )bitsZ progress_funcrrrrgenerates zRSAKey.generatecCs|d||}||dSNZRSA)Z_read_private_key_file _decode_key)rrrrrrrrszRSAKey._from_private_key_filecCs|d||}||dSrD)Z_read_private_keyrE)rrrrrrrrszRSAKey._from_private_keyc Cs|\}}||jkrZztj|dtd}Wqtk rV}ztt|W5d}~XYqXnl||jkr||d\}}}}}} t j ||d} t j || |||d|| d|| d t}n | |t|t jst||_dS)N)rrAZiiiiiir)pqdZdmp1Zdmq1iqmpr%)Z_PRIVATE_KEY_FORMAT_ORIGINALrZload_der_private_keyr ValueErrorr strZ_PRIVATE_KEY_FORMAT_OPENSSHZ_uint32_cstruct_unpackrrZRSAPrivateNumbersZ private_keyZ_got_bad_key_format_idr#r$AssertionErrorr) rrZpkformatrrrrIrJrGrHr%rrrrEs6       zRSAKey._decode_key)NNNNNN)N)N)N)__name__ __module__ __qualname____doc__rpropertyr"r%r(r.r1r0r2r3r9r;r?r@ staticmethodrCrrrErrrrr "s6        r N)rQZcryptography.exceptionsrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricrrZparamiko.messagerZ paramiko.pkeyr Zparamiko.py3compatr Zparamiko.ssh_exceptionr r rrrrs