diff options
author | Jakub Jelen <jjelen@redhat.com> | 2018-09-11 16:49:34 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-09-18 09:53:49 +0200 |
commit | d23bda8181b0388c92d5548bc2d438875e4800a8 (patch) | |
tree | 7f7a9e9126b2b5576538d9ff87793dce17f21dc4 /src/pki.c | |
parent | 86d521cbe7e48e83e8d765182b71c843ef59dd00 (diff) | |
download | libssh-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.c | 59 |
1 files changed, 13 insertions, 46 deletions
@@ -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; } |