pki: Use unpack to simplify public key reading
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Этот коммит содержится в:
родитель
86d521cbe7
Коммит
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 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;
|
||||
}
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user