1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-03 04:22:47 -05:00

Utility function ssh_key_clone().

This makes a second independent copy of an existing ssh_key, for
situations where one piece of code is going to want to keep it after
its current owner frees it.

In order to have it work on an arbitrary ssh_key, whether public-only
or a full public+private key pair, I've had to add an ssh_key query
method to ask whether a private key is known. I'm surprised I haven't
found a need for that before! But I suppose in most situations in an
SSH client you statically know which kind of key you're dealing with.
This commit is contained in:
Simon Tatham
2022-04-20 13:51:28 +01:00
parent 180d1b78de
commit c2f1a563a5
6 changed files with 70 additions and 0 deletions

View File

@ -317,6 +317,12 @@ static void dsa_openssh_blob(ssh_key *key, BinarySink *bs)
put_mp_ssh2(bs, dsa->x);
}
static bool dsa_has_private(ssh_key *key)
{
struct dsa_key *dsa = container_of(key, struct dsa_key, sshk);
return dsa->x != NULL;
}
static int dsa_pubkey_bits(const ssh_keyalg *self, ptrlen pub)
{
ssh_key *sshk;
@ -495,6 +501,7 @@ const ssh_keyalg ssh_dsa = {
.public_blob = dsa_public_blob,
.private_blob = dsa_private_blob,
.openssh_blob = dsa_openssh_blob,
.has_private = dsa_has_private,
.cache_str = dsa_cache_str,
.components = dsa_components,
.pubkey_bits = dsa_pubkey_bits,