| commit | a6a4bdd5e02f27fbd66fcd577f0e869fdbcbebc9 | [log] [tgz] |
|---|---|---|
| author | Ken MacKay <kmackay@gmail.com> | Sun Aug 23 12:47:30 2015 -0700 |
| committer | Ken MacKay <kmackay@gmail.com> | Mon Oct 12 21:29:56 2015 -0700 |
| tree | 3634986088518cc96e0053369e0365be8ec92d78 | |
| parent | 4fed9753f0ffb66d54b2a4a5b3cc4bf239940de0 [diff] |
Default POSIX/Windows RNG should be treated as user-set RNG. The default RNG functions on POSIX and windows are secure, and should be used as if the user had set an RNG. Also, don't set an RNG at all on other platforms.
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.