commit | 7b115fdf934da4e83185a1a0191eeec171c45fc8 | [log] [tgz] |
---|---|---|
author | Evgeni Margolis <emargolis@nestlabs.com> | Sun Sep 20 22:47:39 2015 -0700 |
committer | Ken MacKay <kmackay@gmail.com> | Mon Oct 12 21:29:57 2015 -0700 |
tree | cfe461718b8fd3680fbdb1cc2c15e08888550613 | |
parent | 8b3838ea5f9b0bd6e6e142ab6c4e5c5bc9f6913b [diff] |
Updated and generalized random number generation function (uECC_generate_random_int). This function is also used internally. In the new implementation when the random number is outside of the requested range it is corrected by subtraction instead of requesting new random number.
A small and fast ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors.
The old version of micro-ecc can be found in the “old” branch.
Compressed points are represented in the standard format as defined in http://www.secg.org/collateral/sec1_final.pdf; uncompressed points are represented in standard format, but without the 0x04
prefix. uECC_make_key()
, uECC_shared_secret()
, uECC_sign()
, and uECC_verify()
only handle uncompressed points; you can use uECC_compress()
and uECC_decompress()
to convert between compressed and uncompressed point representations.
Private keys are represented in the standard format.
I recommend just copying (or symlink) uECC.h, uECC.c, and the appropriate asm_<arch>_.inc (if any) into your project. Then just #include "uECC.h"
to use the micro-ecc functions.
For use with Arduino, you can just create a symlink to the uECC
directory in your Arduino libraries
directory. You can then use uECC just like any other Arduino library (uECC should show up in the Sketch=>Import Library submenu).
See uECC.h for documentation for each function.
uECC_CURVE
and uECC_ASM
, you must change them in your Makefile or similar so that uECC.c is compiled with the desired values (ie, compile uECC.c with -DuECC_CURVE=uECC_secp256r1
or whatever).uECC_ASM
is defined to uECC_asm_small
or uECC_asm_fast
), you must use the -fomit-frame-pointer
GCC option (this is enabled by default when compiling with -O1
or higher).uECC_ASM
is defined to uECC_asm_fast
), you must use the -fomit-frame-pointer
GCC option (this is enabled by default when compiling with -O1
or higher).-O1
or higher).advapi32.lib
system library.All tests were built using gcc 4.8.2 with -O3
, and were run on a Raspberry Pi B+. uECC_ASM
was defined to uECC_asm_fast
and ECC_SQUARE_FUNC
was defined to 1
in all cases. All times are in milliseconds.
All tests were built using avr-gcc 4.8.1 with -Os
, and were run on a 16 MHz ATmega256RFR2. Code size refers to the space used by micro-ecc code and data.
In these tests, uECC_ASM
was defined to uECC_asm_fast
and ECC_SQUARE_FUNC
was defined to 1
in all cases.
In these tests, uECC_ASM
was defined to uECC_asm_small
and ECC_SQUARE_FUNC
was defined to 0
in all cases.
In these tests, uECC_ASM
was defined to uECC_asm_fast
and ECC_SQUARE_FUNC
was defined to 1
in all cases.
In these tests, uECC_ASM
was defined to uECC_asm_small
and ECC_SQUARE_FUNC
was defined to 0
in all cases.