mirror of
https://github.com/kmackay/micro-ecc.git
synced 2026-08-02 00:27:47 +00:00
Fast AVR asm mmod is for secp256k1 (#50)
This commit is contained in:
+9
-9
@@ -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) */
|
||||
|
||||
|
||||
+2
-2
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user