diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2018-04-25 16:25:32 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-04-25 16:25:32 +0200 |
commit | 816234350d45ad5743d4cedecc0ed48cc683ed4f (patch) | |
tree | 71bb97c2a8686b8da2b96f461355a9b11667ed8a /src | |
parent | 4aeb0cfd9ce401dc0e3a8e71594a73e1b3b49da2 (diff) | |
download | libssh-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.c | 25 |
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; } |