summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2018-02-10 19:25:00 +0800
committerMatt Johnston <matt@ucc.asn.au>2018-02-10 19:25:00 +0800
commit3953018c2d901e8b48b7289988e4735a491a9fe5 (patch)
treede3913183b8cf47d24c93f5fcea9b6af05fa5415
parentcfe99a79bd2ff9b05220ebc3b6750e7c93013f2d (diff)
simplify error handling, check mp_copy return value
-rw-r--r--ecc.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/ecc.c b/ecc.c
index 574b4aa..f949dd1 100644
--- a/ecc.c
+++ b/ecc.c
@@ -221,46 +221,41 @@ mp_int * dropbear_ecc_shared_secret(ecc_key *public_key, const ecc_key *private_
/* type valid? */
if (private_key->type != PK_PRIVATE) {
- goto done;
+ goto out;
}
if (private_key->dp != public_key->dp) {
- goto done;
+ goto out;
}
/* make new point */
result = ltc_ecc_new_point();
if (result == NULL) {
- goto done;
+ goto out;
}
prime = m_malloc(sizeof(*prime));
m_mp_init(prime);
if (mp_read_radix(prime, (char *)private_key->dp->prime, 16) != CRYPT_OK) {
- goto done;
+ goto out;
}
if (ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, prime, 1) != CRYPT_OK) {
- goto done;
+ goto out;
}
- err = DROPBEAR_SUCCESS;
- done:
- if (err == DROPBEAR_SUCCESS) {
- shared_secret = m_malloc(sizeof(*shared_secret));
- m_mp_init(shared_secret);
- mp_copy(result->x, shared_secret);
+ shared_secret = m_malloc(sizeof(*shared_secret));
+ m_mp_init(shared_secret);
+ if (mp_copy(result->x, shared_secret) != CRYPT_OK) {
+ goto out;
}
- if (prime) {
- mp_clear(prime);
- m_free(prime);
- }
- if (result)
- {
- ltc_ecc_del_point(result);
- }
+ mp_clear(prime);
+ m_free(prime);
+ ltc_ecc_del_point(result);
+ err = DROPBEAR_SUCCESS;
+ out:
if (err == DROPBEAR_FAILURE) {
dropbear_exit("ECC error");
}