diff options
-rw-r--r-- | include/libuecc/ecc.h | 98 | ||||
-rw-r--r-- | src/ec25519.c | 30 | ||||
-rw-r--r-- | src/ec25519_gf.c | 18 |
3 files changed, 89 insertions, 57 deletions
diff --git a/include/libuecc/ecc.h b/include/libuecc/ecc.h index f8e3dfe..2f2c0d9 100644 --- a/include/libuecc/ecc.h +++ b/include/libuecc/ecc.h @@ -27,12 +27,17 @@ #ifndef _LIBUECC_ECC_H_ #define _LIBUECC_ECC_H_ -typedef union _ecc_int_256 { +#ifndef DEPRECATED +#define DEPRECATED __attribute__((deprecated)) +#endif + + +typedef union _ecc_int256 { unsigned char p[32]; /* old name */ - unsigned char s[32]; -} ecc_int_256, ecc_secret_key_256, ecc_public_key_256; + unsigned char s[32] DEPRECATED; +} ecc_int256_t; /* a point on the curve unpacked for efficient calculation */ typedef struct _ecc_25519_work { @@ -40,41 +45,68 @@ typedef struct _ecc_25519_work { unsigned int Y[32]; unsigned int Z[32]; unsigned int T[32]; -} ecc_25519_work; +} ecc_25519_work_t; -void ecc_25519_load_xy(ecc_25519_work *out, const ecc_int_256 *x, const ecc_int_256 *y); -void ecc_25519_store_xy(ecc_int_256 *x, ecc_int_256 *y, const ecc_25519_work *in); +void ecc_25519_load_xy(ecc_25519_work_t *out, const ecc_int256_t *x, const ecc_int256_t *y); +void ecc_25519_store_xy(ecc_int256_t *x, ecc_int256_t *y, const ecc_25519_work_t *in); -void ecc_25519_load_packed(ecc_25519_work *out, const ecc_int_256 *in); -void ecc_25519_store_packed(ecc_int_256 *out, const ecc_25519_work *in); +void ecc_25519_load_packed(ecc_25519_work_t *out, const ecc_int256_t *in); +void ecc_25519_store_packed(ecc_int256_t *out, const ecc_25519_work_t *in); -int ecc_25519_is_identity(const ecc_25519_work *in); -void ecc_25519_add(ecc_25519_work *out, const ecc_25519_work *in1, const ecc_25519_work *in2); -void ecc_25519_double(ecc_25519_work *out, const ecc_25519_work *in); -void ecc_25519_scalarmult(ecc_25519_work *out, const ecc_int_256 *n, const ecc_25519_work *base); -void ecc_25519_scalarmult_base(ecc_25519_work *out, const ecc_int_256 *n); +int ecc_25519_is_identity(const ecc_25519_work_t *in); +void ecc_25519_add(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc_25519_work_t *in2); +void ecc_25519_double(ecc_25519_work_t *out, const ecc_25519_work_t *in); +void ecc_25519_scalarmult(ecc_25519_work_t *out, const ecc_int256_t *n, const ecc_25519_work_t *base); +void ecc_25519_scalarmult_base(ecc_25519_work_t *out, const ecc_int256_t *n); /* operations on elements of the prime field F_q for q = 2^252 + 27742317777372353535851937790883648493 */ -extern const ecc_int_256 ecc_25519_gf_order; -int ecc_25519_gf_is_zero(const ecc_int_256 *in); -void ecc_25519_gf_add(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_256 *in2); -void ecc_25519_gf_sub(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_256 *in2); -void ecc_25519_gf_reduce(ecc_int_256 *out, const ecc_int_256 *in); -void ecc_25519_gf_mult(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_256 *in2); -void ecc_25519_gf_recip(ecc_int_256 *out, const ecc_int_256 *in); - -void ecc_25519_gf_sanitize_secret(ecc_int_256 *out, const ecc_int_256 *in); - -/* defines for the old names */ -#define ecc_25519_load ecc_25519_load_packed -#define ecc_25519_store ecc_25519_store_packed - -#define ecc_25519_secret_is_zero ecc_25519_gf_is_zero -#define ecc_25519_secret_add ecc_25519_gf_add -#define ecc_25519_secret_sub ecc_25519_gf_sub -#define ecc_25519_secret_reduce ecc_25519_gf_reduce -#define ecc_25519_secret_mult ecc_25519_gf_mult -#define ecc_25519_secret_sanitize ecc_25519_gf_sanitize_secret +extern const ecc_int256_t ecc_25519_gf_order; + +int ecc_25519_gf_is_zero(const ecc_int256_t *in); +void ecc_25519_gf_add(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2); +void ecc_25519_gf_sub(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2); +void ecc_25519_gf_reduce(ecc_int256_t *out, const ecc_int256_t *in); +void ecc_25519_gf_mult(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2); +void ecc_25519_gf_recip(ecc_int256_t *out, const ecc_int256_t *in); + +void ecc_25519_gf_sanitize_secret(ecc_int256_t *out, const ecc_int256_t *in); + +/* declarations for the old names */ +typedef ecc_int256_t ecc_secret_key_256 DEPRECATED; +typedef ecc_int256_t ecc_public_key_256 DEPRECATED; +typedef ecc_25519_work_t ecc_25519_work DEPRECATED; + +DEPRECATED static inline void ecc_25519_load(ecc_25519_work_t *out, const ecc_int256_t *in) { + ecc_25519_load_packed(out, in); +} + +DEPRECATED static inline void ecc_25519_store(ecc_int256_t *out, const ecc_25519_work_t *in) { + ecc_25519_store_packed(out, in); +} + +DEPRECATED static inline int ecc_25519_secret_is_zero(const ecc_int256_t *in) { + return ecc_25519_gf_is_zero(in); +} + +DEPRECATED static inline void ecc_25519_secret_add(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2) { + ecc_25519_gf_add(out, in1, in2); +} + +DEPRECATED static inline void ecc_25519_secret_sub(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2) { + ecc_25519_gf_sub(out, in1, in2); +} + +DEPRECATED static inline void ecc_25519_secret_reduce(ecc_int256_t *out, const ecc_int256_t *in) { + ecc_25519_gf_reduce(out, in); +} + +DEPRECATED static inline void ecc_25519_secret_mult(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2) { + ecc_25519_gf_mult(out, in1, in2); +} + +DEPRECATED static inline void ecc_25519_secret_sanitize(ecc_int256_t *out, const ecc_int256_t *in) { + ecc_25519_gf_sanitize_secret(out, in); +} #endif /* _LIBUECC_ECC_H_ */ diff --git a/src/ec25519.c b/src/ec25519.c index 64de22e..bc6cc13 100644 --- a/src/ec25519.c +++ b/src/ec25519.c @@ -159,7 +159,7 @@ static int check_zero(const unsigned int x[32]) { return (check_equal(x, zero) | check_equal(x, p)); } -static void selectw(ecc_25519_work *out, const ecc_25519_work *r, const ecc_25519_work *s, unsigned int b) { +static void selectw(ecc_25519_work_t *out, const ecc_25519_work_t *r, const ecc_25519_work_t *s, unsigned int b) { unsigned int j; unsigned int t; unsigned int bminus1; @@ -347,7 +347,7 @@ static void recip(unsigned int out[32], const unsigned int z[32]) { /* 2^255 - 21 */ mult(out, t1, z11); } -void ecc_25519_load_xy(ecc_25519_work *out, const ecc_int_256 *x, const ecc_int_256 *y) { +void ecc_25519_load_xy(ecc_25519_work_t *out, const ecc_int256_t *x, const ecc_int256_t *y) { int i; for (i = 0; i < 32; i++) { @@ -359,7 +359,7 @@ void ecc_25519_load_xy(ecc_25519_work *out, const ecc_int_256 *x, const ecc_int_ mult(out->T, out->X, out->Y); } -void ecc_25519_store_xy(ecc_int_256 *x, ecc_int_256 *y, const ecc_25519_work *in) { +void ecc_25519_store_xy(ecc_int256_t *x, ecc_int256_t *y, const ecc_25519_work_t *in) { unsigned int X[32], Y[32], Z[32]; int i; @@ -380,7 +380,7 @@ void ecc_25519_store_xy(ecc_int_256 *x, ecc_int_256 *y, const ecc_25519_work *in } } -void ecc_25519_load_packed(ecc_25519_work *out, const ecc_int_256 *in) { +void ecc_25519_load_packed(ecc_25519_work_t *out, const ecc_int256_t *in) { static const unsigned int zero[32] = {0}; static const unsigned int one[32] = {1}; @@ -410,16 +410,16 @@ void ecc_25519_load_packed(ecc_25519_work *out, const ecc_int_256 *in) { mult(out->T, out->X, out->Y); } -void ecc_25519_store_packed(ecc_int_256 *out, const ecc_25519_work *in) { - ecc_int_256 y; +void ecc_25519_store_packed(ecc_int256_t *out, const ecc_25519_work_t *in) { + ecc_int256_t y; ecc_25519_store_xy(out, &y, in); out->p[31] |= (y.p[0] << 7); } -static const ecc_25519_work id = {{0}, {1}, {1}, {0}}; +static const ecc_25519_work_t id = {{0}, {1}, {1}, {0}}; -int ecc_25519_is_identity(const ecc_25519_work *in) { +int ecc_25519_is_identity(const ecc_25519_work_t *in) { unsigned int Y_Z[32]; sub(Y_Z, in->Y, in->Z); @@ -428,7 +428,7 @@ int ecc_25519_is_identity(const ecc_25519_work *in) { return (check_zero(in->X)&check_zero(Y_Z)); } -void ecc_25519_double(ecc_25519_work *out, const ecc_25519_work *in) { +void ecc_25519_double(ecc_25519_work_t *out, const ecc_25519_work_t *in) { unsigned int A[32], B[32], C[32], D[32], E[32], F[32], G[32], H[32], t0[32], t1[32], t2[32], t3[32]; square(A, in->X); @@ -449,7 +449,7 @@ void ecc_25519_double(ecc_25519_work *out, const ecc_25519_work *in) { mult(out->Z, F, G); } -void ecc_25519_add(ecc_25519_work *out, const ecc_25519_work *in1, const ecc_25519_work *in2) { +void ecc_25519_add(ecc_25519_work_t *out, const ecc_25519_work_t *in1, const ecc_25519_work_t *in2) { unsigned int A[32], B[32], C[32], D[32], E[32], F[32], G[32], H[32], t0[32], t1[32], t2[32], t3[32], t4[32], t5[32]; mult(A, in1->X, in2->X); @@ -472,9 +472,9 @@ void ecc_25519_add(ecc_25519_work *out, const ecc_25519_work *in1, const ecc_255 mult(out->Z, F, G); } -void ecc_25519_scalarmult(ecc_25519_work *out, const ecc_int_256 *n, const ecc_25519_work *base) { - ecc_25519_work Q2, Q2p; - ecc_25519_work cur = id; +void ecc_25519_scalarmult(ecc_25519_work_t *out, const ecc_int256_t *n, const ecc_25519_work_t *base) { + ecc_25519_work_t Q2, Q2p; + ecc_25519_work_t cur = id; int b, pos; for (pos = 255; pos >= 0; --pos) { @@ -489,7 +489,7 @@ void ecc_25519_scalarmult(ecc_25519_work *out, const ecc_int_256 *n, const ecc_2 *out = cur; } -static const ecc_25519_work default_base = { +static const ecc_25519_work_t default_base = { {0xd4, 0x6b, 0xfe, 0x7f, 0x39, 0xfa, 0x8c, 0x22, 0xe1, 0x96, 0x23, 0xeb, 0x26, 0xb7, 0x8e, 0x6a, 0x34, 0x74, 0x8b, 0x66, 0xd6, 0xa3, 0x26, 0xdd, @@ -505,6 +505,6 @@ static const ecc_25519_work default_base = { 0x47, 0x4b, 0x4c, 0x81, 0xa6, 0x02, 0xfd, 0x29} }; -void ecc_25519_scalarmult_base(ecc_25519_work *out, const ecc_int_256 *n) { +void ecc_25519_scalarmult_base(ecc_25519_work_t *out, const ecc_int256_t *n) { ecc_25519_scalarmult(out, n, &default_base); } diff --git a/src/ec25519_gf.c b/src/ec25519_gf.c index bb5715f..ec3b543 100644 --- a/src/ec25519_gf.c +++ b/src/ec25519_gf.c @@ -37,7 +37,7 @@ #define ASR(n,s) (((n) >> s)|(IS_NEGATIVE(n)*((unsigned)-1) << (8*sizeof(n)-s))) -const ecc_int_256 ecc_25519_gf_order = {{ +const ecc_int256_t ecc_25519_gf_order = {{ 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -58,9 +58,9 @@ static void select(unsigned char out[32], const unsigned char r[32], const unsig } } -int ecc_25519_gf_is_zero(const ecc_int_256 *in) { +int ecc_25519_gf_is_zero(const ecc_int256_t *in) { int i; - ecc_int_256 r; + ecc_int256_t r; unsigned int bits = 0; ecc_25519_gf_reduce(&r, in); @@ -71,7 +71,7 @@ int ecc_25519_gf_is_zero(const ecc_int_256 *in) { return (((bits-1)>>8) & 1); } -void ecc_25519_gf_add(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_256 *in2) { +void ecc_25519_gf_add(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2) { unsigned int j; unsigned int u; int nq = 1 - (in1->p[31]>>4) - (in2->p[31]>>4); @@ -85,7 +85,7 @@ void ecc_25519_gf_add(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_25 } } -void ecc_25519_gf_sub(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_256 *in2) { +void ecc_25519_gf_sub(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2) { unsigned int j; unsigned int u; int nq = 8 - (in1->p[31]>>4) + (in2->p[31]>>4); @@ -121,7 +121,7 @@ static void reduce(unsigned char a[32]) { select(a, out1, out2, IS_NEGATIVE(u1)); } -void ecc_25519_gf_reduce(ecc_int_256 *out, const ecc_int_256 *in) { +void ecc_25519_gf_reduce(ecc_int256_t *out, const ecc_int256_t *in) { int i; for (i = 0; i < 32; i++) @@ -155,7 +155,7 @@ static void montgomery(unsigned char out[32], const unsigned char a[32], const u } -void ecc_25519_gf_mult(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_256 *in2) { +void ecc_25519_gf_mult(ecc_int256_t *out, const ecc_int256_t *in1, const ecc_int256_t *in2) { /* 2^512 mod q */ static const unsigned char C[32] = { 0x01, 0x0f, 0x9c, 0x44, 0xe3, 0x11, 0x06, 0xa4, @@ -177,7 +177,7 @@ void ecc_25519_gf_mult(ecc_int_256 *out, const ecc_int_256 *in1, const ecc_int_2 montgomery(out->p, R, C); } -void ecc_25519_gf_recip(ecc_int_256 *out, const ecc_int_256 *in) { +void ecc_25519_gf_recip(ecc_int256_t *out, const ecc_int256_t *in) { static const unsigned char C[32] = { 0x01 }; @@ -230,7 +230,7 @@ void ecc_25519_gf_recip(ecc_int_256 *out, const ecc_int_256 *in) { montgomery(out->p, R2, C); } -void ecc_25519_gf_sanitize_secret(ecc_int_256 *out, const ecc_int_256 *in) { +void ecc_25519_gf_sanitize_secret(ecc_int256_t *out, const ecc_int256_t *in) { int i; for (i = 0; i < 32; i++) |