summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/auth.c4
-rw-r--r--src/pki.c24
-rw-r--r--src/server.c4
3 files changed, 23 insertions, 9 deletions
diff --git a/src/auth.c b/src/auth.c
index 3792854..f5ce749 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -1118,8 +1118,8 @@ int ssh_userauth_publickey_auto(ssh_session session,
continue;
}
- pubkey = ssh_pki_publickey_from_privatekey(privkey);
- if (pubkey == NULL) {
+ rc = ssh_pki_export_privkey_to_pubkey(privkey, &pubkey);
+ if (rc == SSH_ERROR) {
ssh_key_free(privkey);
return SSH_AUTH_ERROR;
}
diff --git a/src/pki.c b/src/pki.c
index 7628bb4..a0c2d35 100644
--- a/src/pki.c
+++ b/src/pki.c
@@ -784,19 +784,33 @@ int ssh_pki_import_pubkey_file(const char *filename, ssh_key *pkey)
}
/**
- * @brief Generate and duplicate a public key from a private key.
+ * @brief Create a public key from a private key.
*
- * @param[in] privkey The private key to get the public key from.
+ * @param[in] privkey The private key to get the public key from.
+ *
+ * @param[out] pkey A pointer to store the newly allocated public key. You
+ * NEED to free the key.
*
* @return A public key, NULL on error.
+ *
+ * @see ssh_key_free()
*/
-ssh_key ssh_pki_publickey_from_privatekey(const ssh_key privkey) {
+int ssh_pki_export_privkey_to_pubkey(const ssh_key privkey,
+ ssh_key *pkey)
+{
+ ssh_key pubkey;
if (privkey == NULL || !ssh_key_is_private(privkey)) {
- return NULL;
+ return SSH_ERROR;
}
- return pki_key_dup(privkey, 1);
+ pubkey = pki_key_dup(privkey, 1);
+ if (pubkey == NULL) {
+ return SSH_ERROR;
+ }
+
+ *pkey = pubkey;
+ return SSH_OK;
}
/**
diff --git a/src/server.c b/src/server.c
index 7f3618a..5b2ccee 100644
--- a/src/server.c
+++ b/src/server.c
@@ -189,8 +189,8 @@ static int dh_handshake_server(ssh_session session) {
privkey = NULL;
}
- pubkey = ssh_pki_publickey_from_privatekey(privkey);
- if (pubkey == NULL) {
+ rc = ssh_pki_export_privkey_to_pubkey(privkey, &pubkey);
+ if (rc < 0) {
ssh_set_error(session, SSH_FATAL,
"Could not get the public key from the private key");
ssh_string_free(f);