diff options
author | Niels Möller <nisse@lysator.liu.se> | 2014-07-11 22:14:19 +0200 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2014-07-11 22:14:19 +0200 |
commit | f51f6335de94ee8212cf926b9568e1e5fccb77c4 (patch) | |
tree | 678d9149f764ab1a5ef5a9c4bb06e293c0032708 /ecc.h | |
parent | ff2c93c0ec7ad1d352d9c7240acb6f36398afc54 (diff) | |
download | nettle-f51f6335de94ee8212cf926b9568e1e5fccb77c4.tar.gz |
Implemented point doubling for Edwards curves.
Diffstat (limited to 'ecc.h')
-rw-r--r-- | ecc.h | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -61,14 +61,16 @@ extern "C" { #define ecc_a_to_j nettle_ecc_a_to_j #define ecc_j_to_a_itch nettle_ecc_j_to_a_itch #define ecc_j_to_a nettle_ecc_j_to_a -#define ecc_dup_ja_itch nettle_ecc_dup_ja_itch -#define ecc_dup_ja nettle_ecc_dup_ja +#define ecc_eh_to_a_itch nettle_ecc_eh_to_a_itch +#define ecc_eh_to_a nettle_ecc_eh_to_a #define ecc_dup_jj_itch nettle_ecc_dup_jj_itch #define ecc_dup_jj nettle_ecc_dup_jj #define ecc_add_jja_itch nettle_ecc_add_jja_itch #define ecc_add_jja nettle_ecc_add_jja #define ecc_add_jjj_itch nettle_ecc_add_jjj_itch #define ecc_add_jjj nettle_ecc_add_jjj +#define ecc_dup_eh_itch nettle_ecc_dup_eh_itch +#define ecc_dup_eh nettle_ecc_dup_eh #define ecc_mul_g_itch nettle_ecc_mul_g_itch #define ecc_mul_g nettle_ecc_mul_g #define ecc_mul_a_itch nettle_ecc_mul_a_itch @@ -186,17 +188,18 @@ ecc_j_to_a (const struct ecc_curve *ecc, mp_limb_t *r, const mp_limb_t *p, mp_limb_t *scratch); -/* Group operations */ - +/* Converts a point P on an Edwards curve to affine coordinates on + the corresponding Montgomery curve. */ -/* Point doubling, with jacobian output and affine input. Corner - cases: Correctly sets R = 0 (r_Z = 0) if p = 0 or 2p = 0. */ mp_size_t -ecc_dup_ja_itch (const struct ecc_curve *ecc); +ecc_eh_to_a_itch (const struct ecc_curve *ecc); void -ecc_dup_ja (const struct ecc_curve *ecc, - mp_limb_t *r, const mp_limb_t *p, - mp_limb_t *scratch); +ecc_eh_to_a (const struct ecc_curve *ecc, + int flags, + mp_limb_t *r, const mp_limb_t *p, + mp_limb_t *scratch); + +/* Group operations */ /* Point doubling, with jacobian input and output. Corner cases: Correctly sets R = 0 (r_Z = 0) if p = 0 or 2p = 0. */ @@ -230,6 +233,15 @@ ecc_add_jjj (const struct ecc_curve *ecc, mp_limb_t *r, const mp_limb_t *p, const mp_limb_t *q, mp_limb_t *scratch); +/* FIXME: Use a generic ecc_dup, ecc_add, for any type of curve. */ +/* Point doubling on an Edwards curve, with homogeneous + cooordinates. */ +mp_size_t +ecc_dup_eh_itch (const struct ecc_curve *ecc); +void +ecc_dup_eh (const struct ecc_curve *ecc, + mp_limb_t *r, const mp_limb_t *p, + mp_limb_t *scratch); /* Computes N * the group generator. N is an array of ecc_size() limbs. It must be in the range 0 < N < group order, then R != 0, |