diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-08-07 14:00:42 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-08-08 15:28:31 +0200 |
commit | 9569d053d8f419ebd7fcdecd2c6e18ff86e34c86 (patch) | |
tree | 672c98de97f7f1ba2b17a69982a02266b9787da0 /src/pki.c | |
parent | 028888719a54794f998cc3572419361a73674929 (diff) | |
download | libssh-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.c | 28 |
1 files changed, 13 insertions, 15 deletions
@@ -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; } |