1
0
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:
Jakub Jelen
2018-09-11 16:49:34 +02:00
committed by Andreas Schneider
parent 86d521cbe7
commit d23bda8181

View File

@@ -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;
} }