27 #include <libssh/libssh.h> 28 #include <gnutls/x509.h> 29 #include <glib/gstdio.h> 43 gnutls_x509_privkey_t key;
44 char buffer[16 * 2048];
46 size_t size =
sizeof (buffer);
48 rc = gnutls_x509_privkey_init (&key);
51 data.size = strlen (pkcs8_key);
52 data.data = (
void *) g_strdup (pkcs8_key);
53 rc = gnutls_x509_privkey_import_pkcs8 (key, &data, GNUTLS_X509_FMT_PEM,
57 gnutls_x509_privkey_deinit (key);
61 rc = gnutls_x509_privkey_export (key, GNUTLS_X509_FMT_PEM, buffer, &size);
62 gnutls_x509_privkey_deinit (key);
65 return g_strdup (buffer);
80 #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 0) 82 char *pub_key, *decrypted_priv, *pub_str = NULL;
87 ret = ssh_pki_import_privkey_base64
88 (decrypted_priv ?: private_key, passphrase, NULL, NULL, &priv);
89 g_free (decrypted_priv);
92 ret = ssh_pki_export_pubkey_base64 (priv, &pub_key);
93 type = ssh_key_type_to_char (ssh_key_type (priv));
94 #if LIBSSH_VERSION_INT >= SSH_VERSION_INT (0, 6, 4) 95 if (!strcmp (type,
"ssh-ecdsa"))
96 type = ssh_pki_key_ecdsa_name (priv);
101 pub_str = g_strdup_printf (
"%s %s", type, pub_key);
106 char key_dir[] =
"/tmp/openvas_key_XXXXXX", *base64, *data;
107 char filename[1024], *decrypted_priv;
108 ssh_private_key ssh_privkey;
109 ssh_public_key ssh_pubkey;
114 if (!private_key || !g_mkdtemp_full (key_dir, S_IRUSR|S_IWUSR|S_IXUSR))
116 g_snprintf (filename,
sizeof (filename),
"%s/key.tmp", key_dir);
118 if (!g_file_set_contents (filename, decrypted_priv ?: private_key, -1, NULL))
120 g_free (decrypted_priv);
124 g_free (decrypted_priv);
125 session = ssh_new ();
126 ssh_privkey = privatekey_from_file (session, filename, 0, passphrase);
133 ssh_pubkey = publickey_from_privatekey (ssh_privkey);
134 privatekey_free (ssh_privkey);
137 sstring = publickey_to_string (ssh_pubkey);
138 publickey_free (ssh_pubkey);
141 data = ssh_string_to_char (sstring);
142 datalen = ssh_string_len (sstring);
144 base64 = g_strdup_printf (
"ssh-rsa %s",
145 g_base64_encode ((guchar *) data, datalen));
146 ssh_string_free (sstring);
char * openvas_ssh_pkcs8_decrypt(const char *pkcs8_key, const char *passphrase)
Decrypts a base64 encrypted ssh private key.
char * openvas_ssh_public_from_private(const char *private_key, const char *passphrase)
Exports a base64 encoded public key from a private key and its passphrase.