aboutsummaryrefslogtreecommitdiff
path: root/src/pki.c
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2018-09-11 16:49:34 +0200
committerAndreas Schneider <asn@cryptomilk.org>2018-09-18 09:53:49 +0200
commitd23bda8181b0388c92d5548bc2d438875e4800a8 (patch)
tree7f7a9e9126b2b5576538d9ff87793dce17f21dc4 /src/pki.c
parent86d521cbe7e48e83e8d765182b71c843ef59dd00 (diff)
downloadlibssh-d23bda8181b0388c92d5548bc2d438875e4800a8.tar.gz
libssh-d23bda8181b0388c92d5548bc2d438875e4800a8.tar.xz
libssh-d23bda8181b0388c92d5548bc2d438875e4800a8.zip
pki: Use unpack to simplify public key reading
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/pki.c')
-rw-r--r--src/pki.c59
1 files changed, 13 insertions, 46 deletions
diff --git a/src/pki.c b/src/pki.c
index e03844c6..aa188767 100644
--- a/src/pki.c
+++ b/src/pki.c
@@ -833,35 +833,9 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
ssh_string g = NULL;
ssh_string pubkey = NULL;
- p = ssh_buffer_get_ssh_string(buffer);
- if (p == NULL) {
- goto fail;
- }
- 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);
-
+ rc = ssh_buffer_unpack(buffer, "SSSS", &p, &q, &g, &pubkey);
+ if (rc != SSH_OK) {
+ SSH_LOG(SSH_LOG_WARN, "Unpack error");
goto fail;
}
@@ -880,6 +854,7 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
ssh_string_burn(pubkey);
ssh_string_free(pubkey);
if (rc == SSH_ERROR) {
+ SSH_LOG(SSH_LOG_WARN, "Failed to build DSA public key");
goto fail;
}
}
@@ -889,15 +864,9 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
ssh_string e = NULL;
ssh_string n = NULL;
- e = ssh_buffer_get_ssh_string(buffer);
- if (e == NULL) {
- goto fail;
- }
- n = ssh_buffer_get_ssh_string(buffer);
- if (n == NULL) {
- ssh_string_burn(e);
- ssh_string_free(e);
-
+ rc = ssh_buffer_unpack(buffer, "SS", &e, &n);
+ if (rc != SSH_OK) {
+ SSH_LOG(SSH_LOG_WARN, "Unpack error");
goto fail;
}
@@ -911,6 +880,7 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
ssh_string_burn(n);
ssh_string_free(n);
if (rc == SSH_ERROR) {
+ SSH_LOG(SSH_LOG_WARN, "Failed to build RSA public key");
goto fail;
}
}
@@ -922,26 +892,23 @@ static int pki_import_pubkey_buffer(ssh_buffer buffer,
ssh_string i = NULL;
int nid;
- i = ssh_buffer_get_ssh_string(buffer);
- if (i == NULL) {
+ rc = ssh_buffer_unpack(buffer, "SS", &i, &e);
+ if (rc != SSH_OK) {
+ SSH_LOG(SSH_LOG_WARN, "Unpack error");
goto fail;
}
+
nid = pki_key_ecdsa_nid_from_name(ssh_string_get_char(i));
ssh_string_free(i);
if (nid == -1) {
goto fail;
}
-
- e = ssh_buffer_get_ssh_string(buffer);
- if (e == NULL) {
- goto fail;
- }
-
rc = pki_pubkey_build_ecdsa(key, nid, e);
ssh_string_burn(e);
ssh_string_free(e);
if (rc < 0) {
+ SSH_LOG(SSH_LOG_WARN, "Failed to build ECDSA public key");
goto fail;
}