summaryrefslogtreecommitdiff
path: root/cipher/ecc-ecdh.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2019-10-22 09:05:08 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2019-10-22 09:22:35 +0900
commit5415bc578080018e1cd36aa44cf5c0a9995cbafc (patch)
tree4536b2b6c5a936108b6969c0c4b38fbbc5767c64 /cipher/ecc-ecdh.c
parentc2aa333dd88b4cd337329128a2018dd3b00f5114 (diff)
downloadlibgcrypt-5415bc578080018e1cd36aa44cf5c0a9995cbafc.tar.gz
ecc: Consolidate with _gcry_mpi_ec_internal_new.
* cipher/ecc-ecdh.c (prepare_ec): Use _gcry_mpi_ec_internal_new. (_gcry_ecc_mul_point): Don't need to have E of elliptic_curve_t. * cipher/ecc.c (ecc_encrypt_raw): Use _gcry_mpi_ec_internal_new. (ecc_decrypt_raw): Likewise. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'cipher/ecc-ecdh.c')
-rw-r--r--cipher/ecc-ecdh.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/cipher/ecc-ecdh.c b/cipher/ecc-ecdh.c
index b81a4487..26c7a029 100644
--- a/cipher/ecc-ecdh.c
+++ b/cipher/ecc-ecdh.c
@@ -34,18 +34,12 @@
#define ECC_CURVE25519_BITS 256
#define ECC_CURVE448_BITS 448
-static mpi_ec_t
-prepare_ec (const char *curve_name, elliptic_curve_t *E)
+static gpg_err_code_t
+prepare_ec (mpi_ec_t *r_ec, const char *name)
{
- mpi_ec_t ec;
-
- memset (E, 0, sizeof *E);
- if (_gcry_ecc_fill_in_curve (0, curve_name, E, NULL))
- return NULL;
+ int flags = PUBKEY_FLAG_DJB_TWEAK;
- ec = _gcry_mpi_ec_p_internal_new (E->model, E->dialect,
- PUBKEY_FLAG_DJB_TWEAK, E->p, E->a, E->b);
- return ec;
+ return _gcry_mpi_ec_internal_new (r_ec, &flags, "ecc_mul_point", NULL, name);
}
unsigned int
@@ -69,11 +63,9 @@ _gcry_ecc_mul_point (int algo, unsigned char *result,
unsigned int nbytes;
const char *curve;
gpg_err_code_t err;
- elliptic_curve_t E;
unsigned char buffer[ECC_CURVE448_BITS/8];
gcry_mpi_t mpi_k;
mpi_ec_t ec;
- gcry_mpi_t mpi_u;
mpi_point_t Q;
gcry_mpi_t x;
unsigned int len;
@@ -96,9 +88,11 @@ _gcry_ecc_mul_point (int algo, unsigned char *result,
nbytes = nbits / 8;
+ err = prepare_ec (&ec, curve);
+ if (err)
+ return err;
+
mpi_k = mpi_new (nbits);
- ec = prepare_ec (curve, &E);
- mpi_u = mpi_new (nbits);
Q = mpi_point_new (nbits);
x = mpi_new (nbits);
@@ -106,13 +100,14 @@ _gcry_ecc_mul_point (int algo, unsigned char *result,
reverse_buffer (buffer, nbytes);
_gcry_mpi_set_buffer (mpi_k, buffer, nbytes, 0);
- for (i = 0; (E.h & (1 << i)) == 0; i++)
+ for (i = 0; (ec->h & (1 << i)) == 0; i++)
mpi_clear_bit (mpi_k, i);
- mpi_set_highbit (mpi_k, mpi_get_nbits (E.p) - 1);
+ mpi_set_highbit (mpi_k, mpi_get_nbits (ec->p) - 1);
if (point)
{
mpi_point_t P = mpi_point_new (nbits);
+ gcry_mpi_t mpi_u = mpi_new (nbits);
_gcry_mpi_set_buffer (mpi_u, point, nbytes, 0);
@@ -124,7 +119,7 @@ _gcry_ecc_mul_point (int algo, unsigned char *result,
_gcry_mpi_point_release (P);
}
else
- _gcry_mpi_ec_mul_point (Q, mpi_k, &E.G, ec);
+ _gcry_mpi_ec_mul_point (Q, mpi_k, ec->G, ec);
_gcry_mpi_ec_get_affine (x, NULL, Q, ec);