mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-10 18:28:10 +09:00
pki: Fix duplicating ed25519 public keys
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
(cherry picked from commit 816234350d)
This commit is contained in:
@@ -199,24 +199,27 @@ int pki_ed25519_key_cmp(const ssh_key k1,
|
|||||||
*/
|
*/
|
||||||
int pki_ed25519_key_dup(ssh_key new, const ssh_key key)
|
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;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
new->ed25519_privkey = malloc(ED25519_SK_LEN);
|
if (key->ed25519_privkey != NULL) {
|
||||||
if (new->ed25519_privkey == NULL) {
|
new->ed25519_privkey = malloc(ED25519_SK_LEN);
|
||||||
return SSH_ERROR;
|
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 (key->ed25519_pubkey != NULL) {
|
||||||
if (new->ed25519_privkey == NULL || new->ed25519_pubkey == NULL){
|
new->ed25519_pubkey = malloc(ED25519_PK_LEN);
|
||||||
SAFE_FREE(new->ed25519_privkey);
|
if (new->ed25519_pubkey == NULL) {
|
||||||
return SSH_ERROR;
|
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;
|
return SSH_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user