From 39bedb17a2abf4a9a916d1cff9c89c8ab929a3fb Mon Sep 17 00:00:00 2001 From: Ken MacKay Date: Thu, 7 Jan 2016 23:21:33 -0800 Subject: [PATCH] Fast AVR asm mmod is for secp256k1 (#50) --- asm_avr.inc | 18 +++++++++--------- curve-specific.inc | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/asm_avr.inc b/asm_avr.inc index 0d4582f..b6c4a41 100644 --- a/asm_avr.inc +++ b/asm_avr.inc @@ -451,9 +451,9 @@ static void vli_mmod_fast_secp160r1(uECC_word_t *result, uECC_word_t *product) { #define asm_mmod_fast_secp160r1 1 #endif /* uECC_SUPPORTS_secp160r1 */ -#if uECC_SUPPORTS_secp256r1 -static const struct uECC_Curve_t curve_secp256r1; -static void vli_mmod_fast_secp256r1(uECC_word_t *result, uECC_word_t *product) { +#if uECC_SUPPORTS_secp256k1 +static const struct uECC_Curve_t curve_secp256k1; +static void vli_mmod_fast_secp256k1(uECC_word_t *result, uECC_word_t *product) { uint8_t carry = 0; __asm__ volatile ( "in r30, __SP_L__ \n\t" @@ -764,17 +764,17 @@ static void vli_mmod_fast_secp256r1(uECC_word_t *result, uECC_word_t *product) { if (carry > 0) { --carry; - uECC_vli_sub(result, result, curve_secp256r1.p, 32); + uECC_vli_sub(result, result, curve_secp256k1.p, 32); } if (carry > 0) { - uECC_vli_sub(result, result, curve_secp256r1.p, 32); + uECC_vli_sub(result, result, curve_secp256k1.p, 32); } - if (uECC_vli_cmp_unsafe(result, curve_secp256r1.p, 32) > 0) { - uECC_vli_sub(result, result, curve_secp256r1.p, 32); + if (uECC_vli_cmp_unsafe(result, curve_secp256k1.p, 32) > 0) { + uECC_vli_sub(result, result, curve_secp256k1.p, 32); } } -#define asm_mmod_fast_secp256r1 1 -#endif /* uECC_SUPPORTS_secp256r1 */ +#define asm_mmod_fast_secp256k1 1 +#endif /* uECC_SUPPORTS_secp256k1 */ #endif /* (uECC_OPTIMIZATION_LEVEL >= 2) */ diff --git a/curve-specific.inc b/curve-specific.inc index 15586c3..81f725f 100644 --- a/curve-specific.inc +++ b/curve-specific.inc @@ -1152,7 +1152,7 @@ static void x_side_secp256k1(uECC_word_t *result, const uECC_word_t *x, uECC_Cur uECC_vli_modAdd(result, result, curve->b, curve->p, num_words_secp256k1); /* r = x^3 + b */ } -#if (uECC_OPTIMIZATION_LEVEL > 0) +#if (uECC_OPTIMIZATION_LEVEL > 0 && !asm_mmod_fast_secp256k1) static void omega_mult_secp256k1(uECC_word_t *result, const uECC_word_t *right); static void vli_mmod_fast_secp256k1(uECC_word_t *result, uECC_word_t *product) { uECC_word_t tmp[2 * num_words_secp256k1]; @@ -1241,7 +1241,7 @@ static void omega_mult_secp256k1(uint64_t * result, const uint64_t * right) { result[num_words_secp256k1] = r0; } #endif /* uECC_WORD_SIZE */ -#endif /* (uECC_OPTIMIZATION_LEVEL > 0) */ +#endif /* (uECC_OPTIMIZATION_LEVEL > 0 && && !asm_mmod_fast_secp256k1) */ #endif /* uECC_SUPPORTS_secp256k1 */