aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2018-04-25 16:25:32 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-04-25 16:25:32 +0200
commit816234350d45ad5743d4cedecc0ed48cc683ed4f (patch)
tree71bb97c2a8686b8da2b96f461355a9b11667ed8a /src
parent4aeb0cfd9ce401dc0e3a8e71594a73e1b3b49da2 (diff)
downloadlibssh-816234350d45ad5743d4cedecc0ed48cc683ed4f.tar.gz
libssh-816234350d45ad5743d4cedecc0ed48cc683ed4f.tar.xz
libssh-816234350d45ad5743d4cedecc0ed48cc683ed4f.zip
pki: Fix duplicating ed25519 public keys
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src')
-rw-r--r--src/pki_ed25519.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/pki_ed25519.c b/src/pki_ed25519.c
index c33cacb6..45362c4f 100644
--- a/src/pki_ed25519.c
+++ b/src/pki_ed25519.c
@@ -203,24 +203,27 @@ int pki_ed25519_key_cmp(const ssh_key k1,
*/
int pki_ed25519_key_dup(ssh_key new, const ssh_key key)
{
- if (key->ed25519_privkey == NULL || key->ed25519_pubkey == NULL) {
+ if (key->ed25519_privkey == NULL && key->ed25519_pubkey == NULL) {
return SSH_ERROR;
}
- new->ed25519_privkey = malloc(ED25519_SK_LEN);
- if (new->ed25519_privkey == NULL) {
- return SSH_ERROR;
+ if (key->ed25519_privkey != NULL) {
+ new->ed25519_privkey = malloc(ED25519_SK_LEN);
+ if (new->ed25519_privkey == NULL) {
+ return SSH_ERROR;
+ }
+ memcpy(new->ed25519_privkey, key->ed25519_privkey, ED25519_SK_LEN);
}
- new->ed25519_pubkey = malloc(ED25519_PK_LEN);
- if (new->ed25519_privkey == NULL || new->ed25519_pubkey == NULL){
- SAFE_FREE(new->ed25519_privkey);
- return SSH_ERROR;
+ if (key->ed25519_pubkey != NULL) {
+ new->ed25519_pubkey = malloc(ED25519_PK_LEN);
+ if (new->ed25519_pubkey == NULL) {
+ SAFE_FREE(new->ed25519_privkey);
+ return SSH_ERROR;
+ }
+ memcpy(new->ed25519_pubkey, key->ed25519_pubkey, ED25519_PK_LEN);
}
- memcpy(new->ed25519_privkey, key->ed25519_privkey, ED25519_SK_LEN);
- memcpy(new->ed25519_pubkey, key->ed25519_pubkey, ED25519_PK_LEN);
-
return SSH_OK;
}