diff options
author | Matt Johnston <matt@ucc.asn.au> | 2018-02-10 19:25:00 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2018-02-10 19:25:00 +0800 |
commit | 3953018c2d901e8b48b7289988e4735a491a9fe5 (patch) | |
tree | de3913183b8cf47d24c93f5fcea9b6af05fa5415 | |
parent | cfe99a79bd2ff9b05220ebc3b6750e7c93013f2d (diff) |
simplify error handling, check mp_copy return value
-rw-r--r-- | ecc.c | 33 |
1 files changed, 14 insertions, 19 deletions
@@ -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"); } |