summaryrefslogtreecommitdiffstats
path: root/src/pki.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2011-08-07 14:00:42 +0200
committerAndreas Schneider <asn@cryptomilk.org>2011-08-08 15:28:31 +0200
commit9569d053d8f419ebd7fcdecd2c6e18ff86e34c86 (patch)
tree672c98de97f7f1ba2b17a69982a02266b9787da0 /src/pki.c
parent028888719a54794f998cc3572419361a73674929 (diff)
downloadlibssh-9569d053d8f419ebd7fcdecd2c6e18ff86e34c86.tar.gz
libssh-9569d053d8f419ebd7fcdecd2c6e18ff86e34c86.tar.xz
libssh-9569d053d8f419ebd7fcdecd2c6e18ff86e34c86.zip
pki: Improve ssh_pki_import_privkey_base64().
Diffstat (limited to 'src/pki.c')
-rw-r--r--src/pki.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/pki.c b/src/pki.c
index c3947ae5..1966ca9d 100644
--- a/src/pki.c
+++ b/src/pki.c
@@ -247,32 +247,30 @@ ssh_public_key ssh_pki_convert_key_to_publickey(ssh_key key) {
*
* @return SSH_ERROR in case of error, SSH_OK otherwise
*/
-int ssh_pki_import_privkey_base64(ssh_key key, ssh_session session,
- const char *b64_key, const char *passphrase) {
- ssh_private_key priv;
+int ssh_pki_import_privkey_base64(ssh_session session,
+ const char *b64_key,
+ const char *passphrase,
+ ssh_key *pkey) {
+ ssh_key key;
- if(key == NULL || session == NULL) {
+ if (pkey == NULL || session == NULL) {
return SSH_ERROR;
}
- if(b64_key == NULL || !*b64_key) {
+ if (b64_key == NULL || !*b64_key) {
return SSH_ERROR;
}
- priv = privatekey_from_base64(session, b64_key, 0, passphrase);
- if(priv == NULL) {
+ ssh_log(session, SSH_LOG_RARE, "Trying to decode privkey passphrase=%s",
+ passphrase ? "true" : "false");
+
+ key = pki_private_key_from_base64(session, b64_key, passphrase);
+ if (key == NULL) {
return SSH_ERROR;
}
- ssh_key_clean(key);
-
- key->dsa = priv->dsa_priv;
- key->rsa = priv->rsa_priv;
- key->type = priv->type;
- key->flags = SSH_KEY_FLAG_PRIVATE | SSH_KEY_FLAG_PUBLIC;
- key->type_c = ssh_type_to_char(key->type);
+ *pkey = key;
- SAFE_FREE(priv);
return SSH_OK;
}