pkg/micro-ecc: bump version
micro-ecc now has upstream RIOT support, we can drop the patch.
This commit is contained in:
parent
d4f576f677
commit
d7e68d1d01
@ -1,6 +1,6 @@
|
||||
PKG_NAME=micro-ecc
|
||||
PKG_URL=https://github.com/kmackay/micro-ecc.git
|
||||
PKG_VERSION=b6c0cdbe7d20af48b0c2a909a66ff00b093d1542
|
||||
PKG_VERSION=4b1709c17abbe938d6d8811f4c7c5d082a144799
|
||||
PKG_LICENSE=BSD-2-Clause
|
||||
|
||||
include $(RIOTBASE)/pkg/pkg.mk
|
||||
|
||||
@ -1,2 +1,4 @@
|
||||
# micro-ecc is not 16 bit compatible
|
||||
FEATURES_BLACKLIST += arch_16bit
|
||||
|
||||
USEMODULE += random
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
INCLUDES += -I$(PKGDIRBASE)/micro-ecc
|
||||
|
||||
CFLAGS += -Wno-unused-parameter
|
||||
CFLAGS += -Wno-unused-function
|
||||
CFLAGS += -Wno-unused-variable
|
||||
|
||||
ifneq (,$(filter cortex-m0%,$(CPU_CORE)))
|
||||
# LLVM/clang can't handle the inline assembler instructions on M0 in this
|
||||
# package
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
# Micro-ECC for RIOT
|
||||
|
||||
This port of Micro-ECC to RIOT is based on the Micro-ECC
|
||||
[upstream](https://github.com/kmackay/micro-ecc) and adds `hwrng_read`
|
||||
(provided by RIOT) as the default RNG function if it is available on the target
|
||||
platform. This port also fixes a minor issue with unused variables in the
|
||||
upstream code.
|
||||
|
||||
# Usage
|
||||
|
||||
## Build
|
||||
|
||||
Add
|
||||
```Makefile
|
||||
USEPKG += micro-ecc
|
||||
```
|
||||
to your Makefile.
|
||||
|
||||
## Choosing the right API
|
||||
|
||||
Before using the Micro-ECC library, you need to check the `Makefile.features`
|
||||
of your target board to see if `periph_hwrng` is provided.
|
||||
|
||||
If it is provided, you may safely use `uECC_make_key` to generate ECDSA key
|
||||
pairs and call `uECC_sign`/`uECC_verify` to sign/verify the ECDSA signatures.
|
||||
|
||||
If not, you cannot use `uECC_make_key` or `uECC_sign` APIs anymore. The ECDSA
|
||||
keys have to be generated on a platform with HWRNG support (e.g., `native`) and
|
||||
transferred to your target device. You need to use `uECC_sign_deterministic` to
|
||||
perform ECDSA deterministic signing (standardized by RFC 6979). You can still
|
||||
use `uECC_verify` to verify the signatures from both signing APIs.
|
||||
|
||||
**WARNING** Calling `uECC_make_key` and `uECC_sign` APIs on platforms without
|
||||
HWRNG support will lead to compile failure.
|
||||
|
||||
Examples of using these uECC APIs can be found in the `test` folder of the
|
||||
Micro-ECC upstream.
|
||||
@ -1,145 +0,0 @@
|
||||
From ba4cf2343f4a0d821dc4e30aabfb05f17f57543f Mon Sep 17 00:00:00 2001
|
||||
From: Wentao Shang <wentaoshang@gmail.com>
|
||||
Date: Mon, 12 Dec 2016 16:19:34 -0800
|
||||
Subject: [PATCH 1/2] Include RIOT Hardware RNG interface
|
||||
|
||||
---
|
||||
platform-specific.inc | 4 ++++
|
||||
uECC.c | 22 ++++++++++++++++++++++
|
||||
uECC.h | 8 ++++++++
|
||||
3 files changed, 34 insertions(+)
|
||||
|
||||
diff --git a/platform-specific.inc b/platform-specific.inc
|
||||
index 1bb595a..cb0ac42 100644
|
||||
--- a/platform-specific.inc
|
||||
+++ b/platform-specific.inc
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+
|
||||
#if (defined(_WIN32) || defined(_WIN64))
|
||||
/* Windows */
|
||||
|
||||
@@ -64,4 +66,6 @@ static int default_RNG(uint8_t *dest, unsigned size) {
|
||||
|
||||
#endif /* platform */
|
||||
|
||||
+#endif /* MODULE_PERIPH_HWRNG */
|
||||
+
|
||||
#endif /* _UECC_PLATFORM_SPECIFIC_H_ */
|
||||
diff --git a/uECC.c b/uECC.c
|
||||
index 7717533..c559a48 100644
|
||||
--- a/uECC.c
|
||||
+++ b/uECC.c
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
#include "uECC.h"
|
||||
#include "uECC_vli.h"
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+#include "periph/hwrng.h"
|
||||
+#endif
|
||||
|
||||
#ifndef uECC_RNG_MAX_TRIES
|
||||
#define uECC_RNG_MAX_TRIES 64
|
||||
@@ -181,9 +184,20 @@ static cmpresult_t uECC_vli_cmp_unsafe(const uECC_word_t *left,
|
||||
#include "asm_avr.inc"
|
||||
#endif
|
||||
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+int riot_hwrng(uint8_t *dest, unsigned size) {
|
||||
+ hwrng_read(dest, size);
|
||||
+ return 1;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
#if default_RNG_defined
|
||||
static uECC_RNG_Function g_rng_function = &default_RNG;
|
||||
#else
|
||||
+static uECC_RNG_Function g_rng_function = &riot_hwrng;
|
||||
+#endif
|
||||
+#else
|
||||
static uECC_RNG_Function g_rng_function = 0;
|
||||
#endif
|
||||
|
||||
@@ -1001,6 +1015,8 @@ uECC_VLI_API int uECC_generate_random_int(uECC_word_t *random,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+
|
||||
int uECC_make_key(uint8_t *public_key,
|
||||
uint8_t *private_key,
|
||||
uECC_Curve curve) {
|
||||
@@ -1031,6 +1047,8 @@ int uECC_make_key(uint8_t *public_key,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#endif /* MODULE_PERIPH_HWRNG */
|
||||
+
|
||||
int uECC_shared_secret(const uint8_t *public_key,
|
||||
const uint8_t *private_key,
|
||||
uint8_t *secret,
|
||||
@@ -1303,6 +1321,8 @@ static int uECC_sign_with_k(const uint8_t *private_key,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+
|
||||
int uECC_sign(const uint8_t *private_key,
|
||||
const uint8_t *message_hash,
|
||||
unsigned hash_size,
|
||||
@@ -1323,6 +1343,8 @@ int uECC_sign(const uint8_t *private_key,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#endif /* MODULE_PERIPH_HWRNG */
|
||||
+
|
||||
/* Compute an HMAC using K as a key (as in RFC 6979). Note that K is always
|
||||
the same size as the hash result size. */
|
||||
static void HMAC_init(const uECC_HashContext *hash_context, const uint8_t *K) {
|
||||
diff --git a/uECC.h b/uECC.h
|
||||
index 1193ce8..dc40721 100644
|
||||
--- a/uECC.h
|
||||
+++ b/uECC.h
|
||||
@@ -142,6 +142,8 @@ Returns the size of a public key for the curve in bytes.
|
||||
*/
|
||||
int uECC_curve_public_key_size(uECC_Curve curve);
|
||||
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+
|
||||
/* uECC_make_key() function.
|
||||
Create a public/private key pair.
|
||||
|
||||
@@ -160,6 +162,8 @@ Returns 1 if the key pair was generated successfully, 0 if an error occurred.
|
||||
*/
|
||||
int uECC_make_key(uint8_t *public_key, uint8_t *private_key, uECC_Curve curve);
|
||||
|
||||
+#endif /* MODULE_PERIPH_HWRNG */
|
||||
+
|
||||
/* uECC_shared_secret() function.
|
||||
Compute a shared secret given your secret key and someone else's public key.
|
||||
Note: It is recommended that you hash the result of uECC_shared_secret() before using it for
|
||||
@@ -233,6 +237,8 @@ Returns 1 if the key was computed successfully, 0 if an error occurred.
|
||||
*/
|
||||
int uECC_compute_public_key(const uint8_t *private_key, uint8_t *public_key, uECC_Curve curve);
|
||||
|
||||
+#ifdef MODULE_PERIPH_HWRNG
|
||||
+
|
||||
/* uECC_sign() function.
|
||||
Generate an ECDSA signature for a given hash value.
|
||||
|
||||
@@ -256,6 +262,8 @@ int uECC_sign(const uint8_t *private_key,
|
||||
uint8_t *signature,
|
||||
uECC_Curve curve);
|
||||
|
||||
+#endif /* MODULE_PERIPH_HWRNG */
|
||||
+
|
||||
/* uECC_HashContext structure.
|
||||
This is used to pass in an arbitrary hash function to uECC_sign_deterministic().
|
||||
The structure will be used for multiple hash computations; each time a new hash
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
From 4b0160178eda4fb57ec8ab26a93426d3d3ec8601 Mon Sep 17 00:00:00 2001
|
||||
From: Wentao Shang <wentaoshang@gmail.com>
|
||||
Date: Wed, 1 Jun 2016 15:00:43 -0700
|
||||
Subject: [PATCH 2/2] Silence warning of unused variable
|
||||
|
||||
---
|
||||
asm_avr.inc | 2 +-
|
||||
curve-specific.inc | 2 +-
|
||||
uECC.c | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/asm_avr.inc b/asm_avr.inc
|
||||
index c988040..cd194da 100644
|
||||
--- a/asm_avr.inc
|
||||
+++ b/asm_avr.inc
|
||||
@@ -986,7 +986,7 @@ uECC_VLI_API void uECC_vli_mult(uECC_word_t *result,
|
||||
"st z+, %[r0] \n\t" /* Store last result byte. */
|
||||
"eor r1, r1 \n\t" /* fix r1 to be 0 again */
|
||||
|
||||
- : "+z" (result), "+x" (left), "+y" (right),
|
||||
+ : "+z" (r), "+x" (left), "+y" (right),
|
||||
[r0] "+r" (r0), [r1] "+r" (r1), [r2] "+r" (r2),
|
||||
[zero] "+r" (zero), [num] "+r" (num_words),
|
||||
[k] "=&r" (k), [i] "=&r" (i)
|
||||
diff --git a/curve-specific.inc b/curve-specific.inc
|
||||
index 0453b21..e17e75c 100644
|
||||
--- a/curve-specific.inc
|
||||
+++ b/curve-specific.inc
|
||||
@@ -563,7 +563,7 @@ static void mod_sqrt_secp224r1(uECC_word_t *a, uECC_Curve curve) {
|
||||
}
|
||||
}
|
||||
uECC_vli_modInv(f1, e0, curve_secp224r1.p, num_words_secp224r1); /* f1 <-- 1 / e0 */
|
||||
- uECC_vli_modMult_fast(a, d0, f1, &curve_secp224r1); /* a <-- d0 / e0 */
|
||||
+ uECC_vli_modMult_fast(a, d0, f1, curve); /* a <-- d0 / e0 */
|
||||
}
|
||||
#endif /* uECC_SUPPORT_COMPRESSED_POINT */
|
||||
|
||||
diff --git a/uECC.c b/uECC.c
|
||||
index c559a48..ca331a9 100644
|
||||
--- a/uECC.c
|
||||
+++ b/uECC.c
|
||||
@@ -379,7 +379,7 @@ uECC_VLI_API uECC_word_t uECC_vli_sub(uECC_word_t *result,
|
||||
|
||||
#if !asm_mult || (uECC_SQUARE_FUNC && !asm_square) || \
|
||||
(uECC_SUPPORTS_secp256k1 && (uECC_OPTIMIZATION_LEVEL > 0) && \
|
||||
- ((uECC_WORD_SIZE == 1) || (uECC_WORD_SIZE == 8)))
|
||||
+ (uECC_WORD_SIZE == 8))
|
||||
static void muladd(uECC_word_t a,
|
||||
uECC_word_t b,
|
||||
uECC_word_t *r0,
|
||||
--
|
||||
2.25.1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user