diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2019-10-22 09:05:08 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2019-10-22 09:22:35 +0900 |
commit | 5415bc578080018e1cd36aa44cf5c0a9995cbafc (patch) | |
tree | 4536b2b6c5a936108b6969c0c4b38fbbc5767c64 /cipher/ecc-ecdh.c | |
parent | c2aa333dd88b4cd337329128a2018dd3b00f5114 (diff) | |
download | libgcrypt-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.c | 29 |
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); |