diff options
| author | Andreas Schneider <asn@cryptomilk.org> | 2013-11-27 17:35:36 +0100 |
|---|---|---|
| committer | Andreas Schneider <asn@cryptomilk.org> | 2013-11-27 22:53:48 +0100 |
| commit | 3e11cb807131d33ed529e1d9402f331676fa2926 (patch) | |
| tree | 2438167d87a2be2044250b91784773747601cd19 /src | |
| parent | 78e78642e7d5a7b23b28624f0f595de760105f43 (diff) | |
ecdh: Use bignum_bin2bn.
Diffstat (limited to 'src')
| -rw-r--r-- | src/curve25519.c | 2 | ||||
| -rw-r--r-- | src/ecdh.c | 21 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/curve25519.c b/src/curve25519.c index 153fbcd9..3cee2032 100644 --- a/src/curve25519.c +++ b/src/curve25519.c @@ -90,7 +90,7 @@ static int ssh_curve25519_build_k(ssh_session session) { crypto_scalarmult(k, session->next_crypto->curve25519_privkey, session->next_crypto->curve25519_server_pubkey); - BN_bin2bn(k, CURVE25519_PUBKEY_SIZE, session->next_crypto->k); + bignum_bin2bn(k, CURVE25519_PUBKEY_SIZE, session->next_crypto->k); #ifdef DEBUG_CRYPTO ssh_print_hexa("Session server cookie", @@ -100,6 +100,7 @@ static int ecdh_build_k(ssh_session session) { EC_POINT *pubkey; void *buffer; int len = (EC_GROUP_get_degree(group) + 7) / 8; + int rc; bignum_CTX ctx = bignum_ctx_new(); if (ctx == NULL) { return -1; @@ -124,9 +125,23 @@ static int ecdh_build_k(ssh_session session) { EC_POINT_oct2point(group,pubkey,ssh_string_data(session->next_crypto->ecdh_server_pubkey), ssh_string_len(session->next_crypto->ecdh_server_pubkey),ctx); buffer = malloc(len); - ECDH_compute_key(buffer,len,pubkey,session->next_crypto->ecdh_privkey,NULL); - EC_POINT_free(pubkey); - BN_bin2bn(buffer,len,session->next_crypto->k); + if (buffer == NULL) { + EC_POINT_clear_free(pubkey); + return -1; + } + + rc = ECDH_compute_key(buffer, + len, + pubkey, + session->next_crypto->ecdh_privkey, + NULL); + EC_POINT_clear_free(pubkey); + if (rc <= 0) { + free(buffer); + return -1; + } + + bignum_bin2bn(buffer, len, session->next_crypto->k); free(buffer); EC_KEY_free(session->next_crypto->ecdh_privkey); session->next_crypto->ecdh_privkey=NULL; |
