summaryrefslogtreecommitdiff
path: root/src/ltc/pk/ecc/ecc_shared_secret.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ltc/pk/ecc/ecc_shared_secret.c')
-rw-r--r--src/ltc/pk/ecc/ecc_shared_secret.c25
1 files changed, 4 insertions, 21 deletions
diff --git a/src/ltc/pk/ecc/ecc_shared_secret.c b/src/ltc/pk/ecc/ecc_shared_secret.c
index d21d45cf..92917cc1 100644
--- a/src/ltc/pk/ecc/ecc_shared_secret.c
+++ b/src/ltc/pk/ecc/ecc_shared_secret.c
@@ -7,9 +7,6 @@
* guarantee it works.
*/
-/* Implements ECC over Z/pZ for curve y^2 = x^3 + a*x + b
- *
- */
#include "tomcrypt.h"
/**
@@ -45,29 +42,16 @@ int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key,
return CRYPT_PK_NOT_PRIVATE;
}
- if (ltc_ecc_is_valid_idx(private_key->idx) == 0 || ltc_ecc_is_valid_idx(public_key->idx) == 0) {
- return CRYPT_INVALID_ARG;
- }
-
-/* XXX FIXME names can be different in some situations
- if (XSTRCMP(private_key->dp->name, public_key->dp->name) != 0) {
- return CRYPT_PK_TYPE_MISMATCH;
- }
-*/
/* make new point */
result = ltc_ecc_new_point();
if (result == NULL) {
return CRYPT_MEM;
}
- if ((err = mp_init_multi(&prime, &a, NULL)) != CRYPT_OK) {
- ltc_ecc_del_point(result);
- return err;
- }
+ prime = private_key->dp.prime;
+ a = private_key->dp.A;
- if ((err = mp_read_radix(prime, (char *)private_key->dp->prime, 16)) != CRYPT_OK) { goto done; }
- if ((err = mp_read_radix(a, (char *)private_key->dp->A, 16)) != CRYPT_OK) { goto done; }
- if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, a, prime, 1)) != CRYPT_OK) { goto done; }
+ if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, a, prime, 1)) != CRYPT_OK) { goto done; }
x = (unsigned long)mp_unsigned_bin_size(prime);
if (*outlen < x) {
@@ -76,12 +60,11 @@ int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key,
goto done;
}
zeromem(out, x);
- if ((err = mp_to_unsigned_bin(result->x, out + (x - mp_unsigned_bin_size(result->x)))) != CRYPT_OK) { goto done; }
+ if ((err = mp_to_unsigned_bin(result->x, out + (x - mp_unsigned_bin_size(result->x)))) != CRYPT_OK) { goto done; }
err = CRYPT_OK;
*outlen = x;
done:
- mp_clear_multi(prime, a, NULL);
ltc_ecc_del_point(result);
return err;
}