mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-08-08 19:02:06 +03:00
pki: Use unpack to simplify public key reading
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
86d521cbe7
commit
d23bda8181
59
src/pki.c
59
src/pki.c
@@ -833,35 +833,9 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
|
|||||||
ssh_string g = NULL;
|
ssh_string g = NULL;
|
||||||
ssh_string pubkey = NULL;
|
ssh_string pubkey = NULL;
|
||||||
|
|
||||||
p = ssh_buffer_get_ssh_string(buffer);
|
rc = ssh_buffer_unpack(buffer, "SSSS", &p, &q, &g, &pubkey);
|
||||||
if (p == NULL) {
|
if (rc != SSH_OK) {
|
||||||
goto fail;
|
SSH_LOG(SSH_LOG_WARN, "Unpack error");
|
||||||
}
|
|
||||||
q = ssh_buffer_get_ssh_string(buffer);
|
|
||||||
if (q == NULL) {
|
|
||||||
ssh_string_burn(p);
|
|
||||||
ssh_string_free(p);
|
|
||||||
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
g = ssh_buffer_get_ssh_string(buffer);
|
|
||||||
if (g == NULL) {
|
|
||||||
ssh_string_burn(p);
|
|
||||||
ssh_string_free(p);
|
|
||||||
ssh_string_burn(q);
|
|
||||||
ssh_string_free(q);
|
|
||||||
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
pubkey = ssh_buffer_get_ssh_string(buffer);
|
|
||||||
if (pubkey == NULL) {
|
|
||||||
ssh_string_burn(p);
|
|
||||||
ssh_string_free(p);
|
|
||||||
ssh_string_burn(q);
|
|
||||||
ssh_string_free(q);
|
|
||||||
ssh_string_burn(g);
|
|
||||||
ssh_string_free(g);
|
|
||||||
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -880,6 +854,7 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
|
|||||||
ssh_string_burn(pubkey);
|
ssh_string_burn(pubkey);
|
||||||
ssh_string_free(pubkey);
|
ssh_string_free(pubkey);
|
||||||
if (rc == SSH_ERROR) {
|
if (rc == SSH_ERROR) {
|
||||||
|
SSH_LOG(SSH_LOG_WARN, "Failed to build DSA public key");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -889,15 +864,9 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
|
|||||||
ssh_string e = NULL;
|
ssh_string e = NULL;
|
||||||
ssh_string n = NULL;
|
ssh_string n = NULL;
|
||||||
|
|
||||||
e = ssh_buffer_get_ssh_string(buffer);
|
rc = ssh_buffer_unpack(buffer, "SS", &e, &n);
|
||||||
if (e == NULL) {
|
if (rc != SSH_OK) {
|
||||||
goto fail;
|
SSH_LOG(SSH_LOG_WARN, "Unpack error");
|
||||||
}
|
|
||||||
n = ssh_buffer_get_ssh_string(buffer);
|
|
||||||
if (n == NULL) {
|
|
||||||
ssh_string_burn(e);
|
|
||||||
ssh_string_free(e);
|
|
||||||
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -911,6 +880,7 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
|
|||||||
ssh_string_burn(n);
|
ssh_string_burn(n);
|
||||||
ssh_string_free(n);
|
ssh_string_free(n);
|
||||||
if (rc == SSH_ERROR) {
|
if (rc == SSH_ERROR) {
|
||||||
|
SSH_LOG(SSH_LOG_WARN, "Failed to build RSA public key");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -922,26 +892,23 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
|
|||||||
ssh_string i = NULL;
|
ssh_string i = NULL;
|
||||||
int nid;
|
int nid;
|
||||||
|
|
||||||
i = ssh_buffer_get_ssh_string(buffer);
|
rc = ssh_buffer_unpack(buffer, "SS", &i, &e);
|
||||||
if (i == NULL) {
|
if (rc != SSH_OK) {
|
||||||
|
SSH_LOG(SSH_LOG_WARN, "Unpack error");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
nid = pki_key_ecdsa_nid_from_name(ssh_string_get_char(i));
|
nid = pki_key_ecdsa_nid_from_name(ssh_string_get_char(i));
|
||||||
ssh_string_free(i);
|
ssh_string_free(i);
|
||||||
if (nid == -1) {
|
if (nid == -1) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
e = ssh_buffer_get_ssh_string(buffer);
|
|
||||||
if (e == NULL) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = pki_pubkey_build_ecdsa(key, nid, e);
|
rc = pki_pubkey_build_ecdsa(key, nid, e);
|
||||||
ssh_string_burn(e);
|
ssh_string_burn(e);
|
||||||
ssh_string_free(e);
|
ssh_string_free(e);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
SSH_LOG(SSH_LOG_WARN, "Failed to build ECDSA public key");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user