Fix build issues with rebase for ECC and RSA. Changed user_settings.h example when LTC is enabled to disable Shamir and ECC-521. Cleanup to add USE_NXP_MMCAU and USE_NXP_LTC for the example user_settings.h, so the project file can automatically configure.

This commit is contained in:
David Garske
2016-10-14 13:42:40 -07:00
parent a6b96b17ff
commit ae75842021
8 changed files with 142 additions and 56 deletions

View File

@ -27,20 +27,23 @@ Also the "Target Processor" in each of the projects ("Project Properties" -> "Ta
## Hardware Crypto Acceleration ## Hardware Crypto Acceleration
To enable Freescale MMCAU: To enable NXP/Freescale MMCAU:
1. [Download the MMCAU library](http://www.freescale.com/products/arm-processors/kinetis-cortex-m/k-series/k7x-glcd-mcus/crypto-acceleration-unit-cau-and-mmcau-software-library:CAUAP). 1. [Download the MMCAU library](http://www.freescale.com/products/arm-processors/kinetis-cortex-m/k-series/k7x-glcd-mcus/crypto-acceleration-unit-cau-and-mmcau-software-library:CAUAP).
2. Copy the `lib_mmcau.a` and `cau_api.h` files into the project. 2. Copy the `lib_mmcau.a` and `cau_api.h` files into the project.
3. Enable the `FREESCALE_MMCAU` define in `user_settings.h` and make sure its value is `1`. 3. Define `USE_NXP_MMCAU` to enable in `user_settings.h`.
4. Add the `lib_mmcau.a` file to `Source Files` in the application project. 4. Add the `lib_mmcau.a` file to `Source Files` in the application project.
5. Open the wolfssl_ltc.hzp CrossWorks project
6. Build and run
To enable the NXP LTC: To enable the NXP/Freescale MMCAU and/or LTC:
1. [Download the NXP KSDK 2.0](https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=7353807) 1. [Download the NXP KSDK 2.0](https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=7353807)
2. Copy the following folders into IDE/ROWLEY-CROSSWORKS-ARM: drivers, mmcau_2.0.0 and CMSIS. 2. Copy the following folders into IDE/ROWLEY-CROSSWORKS-ARM: drivers, mmcau_2.0.0 and CMSIS.
3. Copy the following files into IDE/ROWLEY-CROSSWORKS-ARM: clock_config.c, clock_config.h, fsl_debug_console.c, fsl_debug_console.h, fsl_device_registers.h, system_MK82F25615.c, system_MK82F25615.h, MK82F25615.h and MK82F25615_features.h. 3. Copy the following files into IDE/ROWLEY-CROSSWORKS-ARM: clock_config.c, clock_config.h, fsl_debug_console.c, fsl_debug_console.h, fsl_device_registers.h, system_MK82F25615.c, system_MK82F25615.h, MK82F25615.h and MK82F25615_features.h.
4. Open the wolfssl_ltc.hzp CrossWorks project 4. Define `USE_NXP_LTX` to enable in `user_settings.h`.
5. Build and run 5. Open the wolfssl_ltc.hzp CrossWorks project
6. Build and run
# Project Files # Project Files

View File

@ -54,7 +54,7 @@ void main(void)
/* /*
SAMPLE OUTPUT: Freescale K64 running at 96MHz with no MMCAU: SAMPLE OUTPUT: Freescale K64 running at 96MHz with no MMCAU:
Benchmark Test 1: Benchmark Test 0:
AES 25 kB took 0.073 seconds, 0.334 MB/s AES 25 kB took 0.073 seconds, 0.334 MB/s
ARC4 25 kB took 0.033 seconds, 0.740 MB/s ARC4 25 kB took 0.033 seconds, 0.740 MB/s
RABBIT 25 kB took 0.027 seconds, 0.904 MB/s RABBIT 25 kB took 0.027 seconds, 0.904 MB/s
@ -66,10 +66,10 @@ RSA 1024 encryption took 91.000 milliseconds, avg over 1 iterations
RSA 1024 decryption took 573.000 milliseconds, avg over 1 iterations RSA 1024 decryption took 573.000 milliseconds, avg over 1 iterations
DH 1024 key generation 253.000 milliseconds, avg over 1 iterations DH 1024 key generation 253.000 milliseconds, avg over 1 iterations
DH 1024 key agreement 311.000 milliseconds, avg over 1 iterations DH 1024 key agreement 311.000 milliseconds, avg over 1 iterations
Benchmark Test 1: Return code 0 Benchmark Test 0: Return code 0
SAMPLE OUTPUT: Freescale K64 running at 96MHz with MMCAU enabled: SAMPLE OUTPUT: Freescale K64 running at 96MHz with MMCAU enabled:
Benchmark Test 1: Benchmark Test 0:
AES 25 kB took 0.019 seconds, 1.285 MB/s AES 25 kB took 0.019 seconds, 1.285 MB/s
ARC4 25 kB took 0.033 seconds, 0.740 MB/s ARC4 25 kB took 0.033 seconds, 0.740 MB/s
RABBIT 25 kB took 0.028 seconds, 0.872 MB/s RABBIT 25 kB took 0.028 seconds, 0.872 MB/s
@ -81,5 +81,72 @@ RSA 1024 encryption took 89.000 milliseconds, avg over 1 iterations
RSA 1024 decryption took 573.000 milliseconds, avg over 1 iterations RSA 1024 decryption took 573.000 milliseconds, avg over 1 iterations
DH 1024 key generation 250.000 milliseconds, avg over 1 iterations DH 1024 key generation 250.000 milliseconds, avg over 1 iterations
DH 1024 key agreement 308.000 milliseconds, avg over 1 iterations DH 1024 key agreement 308.000 milliseconds, avg over 1 iterations
Benchmark Test 1: Return code 0 Benchmark Test 0: Return code 0
SAMPLE OUTPUT: NXP K82 running at 150Mhz w/MMCAU and LTC
Benchmark Test 0:
RNG 25 kB took 0.026 seconds, 0.939 MB/s
AES enc 25 kB took 0.002 seconds, 12.207 MB/s
AES dec 25 kB took 0.002 seconds, 12.207 MB/s
AES-GCM 25 kB took 0.002 seconds, 12.207 MB/s
AES-CTR 25 kB took 0.003 seconds, 8.138 MB/s
AES-CCM 25 kB took 0.004 seconds, 6.104 MB/s
CHACHA 25 kB took 0.008 seconds, 3.052 MB/s
CHA-POLY 25 kB took 0.013 seconds, 1.878 MB/s
POLY1305 25 kB took 0.003 seconds, 8.138 MB/s
SHA 25 kB took 0.006 seconds, 4.069 MB/s
SHA-256 25 kB took 0.009 seconds, 2.713 MB/s
SHA-384 25 kB took 0.032 seconds, 0.763 MB/s
SHA-512 25 kB took 0.035 seconds, 0.698 MB/s
RSA 2048 public 12.000 milliseconds, avg over 1 iterations
RSA 2048 private 135.000 milliseconds, avg over 1 iterations
ECC 256 key generation 17.400 milliseconds, avg over 5 iterations
EC-DHE key agreement 15.200 milliseconds, avg over 5 iterations
EC-DSA sign time 20.200 milliseconds, avg over 5 iterations
EC-DSA verify time 33.000 milliseconds, avg over 5 iterations
CURVE25519 256 key generation 14.400 milliseconds, avg over 5 iterations
CURVE25519 key agreement 14.400 milliseconds, avg over 5 iterations
ED25519 key generation 14.800 milliseconds, avg over 5 iterations
ED25519 sign time 16.800 milliseconds, avg over 5 iterations
ED25519 verify time 30.400 milliseconds, avg over 5 iterations
Benchmark Test 0: Return code 0
SAMPLE OUTPUT: NXP K82 running at 150Mhz software only
Benchmark Test 0:
RNG 25 kB took 0.026 seconds, 0.939 MB/s
AES enc 25 kB took 0.002 seconds, 12.207 MB/s
AES dec 25 kB took 0.002 seconds, 12.207 MB/s
AES-GCM 25 kB took 0.002 seconds, 12.207 MB/s
AES-CTR 25 kB took 0.002 seconds, 12.207 MB/s
AES-CCM 25 kB took 0.004 seconds, 6.104 MB/s
CHACHA 25 kB took 0.009 seconds, 2.713 MB/s
CHA-POLY 25 kB took 0.013 seconds, 1.878 MB/s
POLY1305 25 kB took 0.003 seconds, 8.138 MB/s
SHA 25 kB took 0.006 seconds, 4.069 MB/s
SHA-256 25 kB took 0.008 seconds, 3.052 MB/s
SHA-384 25 kB took 0.033 seconds, 0.740 MB/s
SHA-512 25 kB took 0.034 seconds, 0.718 MB/s
RSA 2048 public 11.000 milliseconds, avg over 1 iterations
RSA 2048 private 135.000 milliseconds, avg over 1 iterations
ECC 256 key generation 17.400 milliseconds, avg over 5 iterations
EC-DHE key agreement 15.000 milliseconds, avg over 5 iterations
EC-DSA sign time 20.400 milliseconds, avg over 5 iterations
EC-DSA verify time 33.200 milliseconds, avg over 5 iterations
CURVE25519 256 key generation 14.600 milliseconds, avg over 5 iterations
CURVE25519 key agreement 14.400 milliseconds, avg over 5 iterations
ED25519 key generation 15.000 milliseconds, avg over 5 iterations
ED25519 sign time 16.800 milliseconds, avg over 5 iterations
ED25519 verify time 30.400 milliseconds, avg over 5 iterations
Benchmark Test 0: Return code 0
*/ */

View File

@ -54,24 +54,26 @@ void main(void)
/* SAMPLE OUTPUT: /* SAMPLE OUTPUT:
Crypt Test 1: Crypt Test 0:
MD5 test passed!
MD4 test passed!
SHA test passed! SHA test passed!
SHA-256 test passed! SHA-256 test passed!
HMAC-MD5 test passed! SHA-384 test passed!
SHA-512 test passed!
HMAC-SHA test passed! HMAC-SHA test passed!
HMAC-SHA256 test passed! HMAC-SHA256 test passed!
ARC4 test passed! HMAC-SHA384 test passed!
HC-128 test passed! HMAC-SHA512 test passed!
Rabbit test passed! GMAC test passed!
DES test passed! Chacha test passed!
DES3 test passed! POLY1305 test passed!
ChaCha20-Poly1305 AEAD test passed!
AES test passed! AES test passed!
AES-GCM test passed!
AES-CCM test passed!
RANDOM test passed! RANDOM test passed!
RSA test passed! RSA test passed!
DH test passed! ECC test passed!
DSA test passed! CURVE25519 test passed!
PWDBASED test passed! ED25519 test passed!
Crypt Test 1: Return code 0 Crypt Test 0: Return code 0
*/ */

View File

@ -56,7 +56,9 @@ extern "C" {
#define HAVE_ECC224 #define HAVE_ECC224
#undef NO_ECC256 #undef NO_ECC256
#define HAVE_ECC384 #define HAVE_ECC384
#define HAVE_ECC521 #ifndef USE_NXP_LTC /* NXP LTC HW supports up to 512 */
#define HAVE_ECC521
#endif
/* Fixed point cache (speeds repeated operations against same private key) */ /* Fixed point cache (speeds repeated operations against same private key) */
#undef FP_ECC #undef FP_ECC
@ -72,7 +74,9 @@ extern "C" {
/* Optional ECC calculation method */ /* Optional ECC calculation method */
/* Note: doubles heap usage, but slightly faster */ /* Note: doubles heap usage, but slightly faster */
#undef ECC_SHAMIR #undef ECC_SHAMIR
#define ECC_SHAMIR #ifndef USE_NXP_LTC /* Don't enable Shamir code for HW ECC */
#define ECC_SHAMIR
#endif
/* Reduces heap usage, but slower */ /* Reduces heap usage, but slower */
#undef ECC_TIMING_RESISTANT #undef ECC_TIMING_RESISTANT
@ -83,16 +87,22 @@ extern "C" {
#undef ALT_ECC_SIZE #undef ALT_ECC_SIZE
#define ALT_ECC_SIZE #define ALT_ECC_SIZE
/* optionally override the default max ecc bits */
#undef FP_MAX_BITS_ECC
//#define FP_MAX_BITS_ECC 512
/* Enable TFM optimizations for ECC */ /* Enable TFM optimizations for ECC */
#define TFM_ECC192 #if defined(HAVE_ECC192) || defined(HAVE_ALL_CURVES)
#define TFM_ECC224 #define TFM_ECC192
#define TFM_ECC256 #endif
#define TFM_ECC384 #if defined(HAVE_ECC224) || defined(HAVE_ALL_CURVES)
#define TFM_ECC521 #define TFM_ECC224
#endif
#if !defined(NO_ECC256) || defined(HAVE_ALL_CURVES)
#define TFM_ECC256
#endif
#if defined(HAVE_ECC384) || defined(HAVE_ALL_CURVES)
#define TFM_ECC384
#endif
#if defined(HAVE_ECC521) || defined(HAVE_ALL_CURVES)
#define TFM_ECC521
#endif
#endif #endif
#endif #endif
@ -195,21 +205,21 @@ extern "C" {
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* HW Crypto Acceleration */ /* HW Crypto Acceleration */
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
// See README.md for instructions #if 1
#if 0 /* NXP MMCAU / LTC Support (See README.md for instructions) */
#define FREESCALE_MMCAU 1 #if defined(USE_NXP_MMCAU) || defined(USE_NXP_LTC)
#define FSL_HW_CRYPTO_MANUAL_SELECTION
#ifdef USE_NXP_MMCAU
#define FREESCALE_USE_MMCAU
#endif
#ifdef USE_NXP_LTC
#define FREESCALE_USE_LTC
#define LTC_MAX_ECC_BITS (512)
#define LTC_MAX_INT_BYTES (256)
#endif
#endif
#endif #endif
/* NXP LTC Support (See README.md for instructions) */
#if 0
#define FSL_HW_CRYPTO_MANUAL_SELECTION
#define FREESCALE_USE_MMCAU
#define FREESCALE_USE_LTC
#define LTC_MAX_ECC_BITS (512)
#define LTC_MAX_INT_BYTES (256)
#endif
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* Benchmark / Test */ /* Benchmark / Test */
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */

View File

@ -4,7 +4,7 @@
<configuration <configuration
Name="Common" Name="Common"
build_output_file_name="$(OutDir)/$(ProjectName)$(LibExt)$(LIB)" build_output_file_name="$(OutDir)/$(ProjectName)$(LibExt)$(LIB)"
c_preprocessor_definitions="WOLFSSL_ROWLEY_ARM;WOLFSSL_USER_SETTINGS" c_preprocessor_definitions="WOLFSSL_ROWLEY_ARM;WOLFSSL_USER_SETTINGS;USE_NXP_LTC;USE_NXP_MMCAU"
c_user_include_directories=".;../;../../;./drivers;./mmcau_2.0.0;./CMSIS/Include" c_user_include_directories=".;../;../../;./drivers;./mmcau_2.0.0;./CMSIS/Include"
project_directory="" project_directory=""
project_type="Library" /> project_type="Library" />
@ -322,7 +322,7 @@
arm_simulator_memory_simulation_parameter="MK82FN256xxx15;0x40000;0x0;0x0;0x40000;4" arm_simulator_memory_simulation_parameter="MK82FN256xxx15;0x40000;0x0;0x0;0x40000;4"
arm_target_loader_applicable_loaders="Flash" arm_target_loader_applicable_loaders="Flash"
arm_target_loader_default_loader="Flash" arm_target_loader_default_loader="Flash"
c_preprocessor_definitions="WOLFSSL_ROWLEY_ARM;WOLFSSL_USER_SETTINGS" c_preprocessor_definitions="WOLFSSL_ROWLEY_ARM;WOLFSSL_USER_SETTINGS;USE_NXP_LTC;USE_NXP_MMCAU"
c_user_include_directories=".;./drivers;./mmcau_2.0.0;./CMSIS/Include;../;../../;$(TargetsDir);$(TargetsDir)/Kinetis;$(TargetsDir)/Kinetis/CMSIS;$(TargetsDir)/Kinetis/CMSIS/include;$(TargetsDir)/CMSIS_3/CMSIS/include" c_user_include_directories=".;./drivers;./mmcau_2.0.0;./CMSIS/Include;../;../../;$(TargetsDir);$(TargetsDir)/Kinetis;$(TargetsDir)/Kinetis/CMSIS;$(TargetsDir)/Kinetis/CMSIS/include;$(TargetsDir)/CMSIS_3/CMSIS/include"
debug_register_definition_file="$(TargetsDir)/Kinetis/MK82F25615_Peripherals.xml" debug_register_definition_file="$(TargetsDir)/Kinetis/MK82F25615_Peripherals.xml"
linker_memory_map_file="$(TargetsDir)/Kinetis/MK82FN256xxx15_MemoryMap.xml" linker_memory_map_file="$(TargetsDir)/Kinetis/MK82FN256xxx15_MemoryMap.xml"
@ -377,7 +377,7 @@
arm_simulator_memory_simulation_parameter="MK82FN256xxx15;0x40000;0x0;0x0;0x40000;4" arm_simulator_memory_simulation_parameter="MK82FN256xxx15;0x40000;0x0;0x0;0x40000;4"
arm_target_loader_applicable_loaders="Flash" arm_target_loader_applicable_loaders="Flash"
arm_target_loader_default_loader="Flash" arm_target_loader_default_loader="Flash"
c_preprocessor_definitions="WOLFSSL_ROWLEY_ARM;WOLFSSL_USER_SETTINGS" c_preprocessor_definitions="WOLFSSL_ROWLEY_ARM;WOLFSSL_USER_SETTINGS;USE_NXP_LTC;USE_NXP_MMCAU"
c_user_include_directories=".;./drivers;./mmcau_2.0.0;./CMSIS/Include;../;../../;$(TargetsDir);$(TargetsDir)/Kinetis;$(TargetsDir)/Kinetis/CMSIS;$(TargetsDir)/Kinetis/CMSIS/include;$(TargetsDir)/CMSIS_3/CMSIS/include" c_user_include_directories=".;./drivers;./mmcau_2.0.0;./CMSIS/Include;../;../../;$(TargetsDir);$(TargetsDir)/Kinetis;$(TargetsDir)/Kinetis/CMSIS;$(TargetsDir)/Kinetis/CMSIS/include;$(TargetsDir)/CMSIS_3/CMSIS/include"
debug_register_definition_file="$(TargetsDir)/Kinetis/MK82F25615_Peripherals.xml" debug_register_definition_file="$(TargetsDir)/Kinetis/MK82F25615_Peripherals.xml"
linker_memory_map_file="$(TargetsDir)/Kinetis/MK82FN256xxx15_MemoryMap.xml" linker_memory_map_file="$(TargetsDir)/Kinetis/MK82FN256xxx15_MemoryMap.xml"

View File

@ -3380,11 +3380,11 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
#ifdef FREESCALE_LTC_ECC #ifdef FREESCALE_LTC_ECC
/* use PKHA to compute u1*mG + u2*mQ */ /* use PKHA to compute u1*mG + u2*mQ */
if (err == MP_OKAY) if (err == MP_OKAY)
err = wc_ecc_mulmod_ex(&u1, mG, mG, &m, 0, NULL); err = wc_ecc_mulmod_ex(&u1, mG, mG, &a, &modulus, 0, NULL);
if (err == MP_OKAY) if (err == MP_OKAY)
err = wc_ecc_mulmod_ex(&u2, mQ, mQ, &m, 0, NULL); err = wc_ecc_mulmod_ex(&u2, mQ, mQ, &a, &modulus, 0, NULL);
if (err == MP_OKAY) if (err == MP_OKAY)
err = wc_ecc_point_add(mG, mQ, mG, &m); err = wc_ecc_point_add(mG, mQ, mG, &modulus);
#else /* FREESCALE_LTC_ECC */ #else /* FREESCALE_LTC_ECC */
#ifndef ECC_SHAMIR #ifndef ECC_SHAMIR
{ {

View File

@ -435,12 +435,14 @@ int _fp_exptmod(fp_int *G, fp_int *X, fp_int *P, fp_int *Y)
} }
#ifndef NO_RSA #ifndef NO_RSA
int wc_RsaFunction(const byte *in, word32 inLen, byte *out, word32 *outLen, int type, RsaKey *key) int wc_RsaFunction(const byte *in, word32 inLen, byte *out, word32 *outLen, int type, RsaKey *key, WC_RNG* rng)
{ {
mp_int tmp; mp_int tmp;
int ret = 0; int ret = 0;
word32 keyLen, len; word32 keyLen, len;
(void)rng;
if (mp_init(&tmp) != MP_OKAY) if (mp_init(&tmp) != MP_OKAY)
return MP_INIT_E; return MP_INIT_E;
@ -788,8 +790,8 @@ static int ltc_get_ecc_specs(const uint8_t **modulus, const uint8_t **r2modn,
(1==map, 0 == leave in projective) (1==map, 0 == leave in projective)
return MP_OKAY on success return MP_OKAY on success
*/ */
int wc_ecc_mulmod_ex(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus, int wc_ecc_mulmod_ex(mp_int *k, ecc_point *G, ecc_point *R, mp_int* a,
int map, void* heap) mp_int *modulus, int map, void* heap)
{ {
ltc_pkha_ecc_point_t B; ltc_pkha_ecc_point_t B;
uint8_t size; uint8_t size;
@ -798,6 +800,8 @@ int wc_ecc_mulmod_ex(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus,
bool point_of_infinity; bool point_of_infinity;
status_t status; status_t status;
(void)a;
uint8_t Gxbin[LTC_MAX_ECC_BITS / 8]; uint8_t Gxbin[LTC_MAX_ECC_BITS / 8];
uint8_t Gybin[LTC_MAX_ECC_BITS / 8]; uint8_t Gybin[LTC_MAX_ECC_BITS / 8];
uint8_t kbin[LTC_MAX_INT_BYTES]; uint8_t kbin[LTC_MAX_INT_BYTES];

View File

@ -43,7 +43,7 @@ int ksdk_port_init(void);
int _fp_exptmod(fp_int *G, fp_int *X, fp_int *P, fp_int *Y); int _fp_exptmod(fp_int *G, fp_int *X, fp_int *P, fp_int *Y);
#ifndef NO_RSA #ifndef NO_RSA
#include <wolfssl/wolfcrypt/rsa.h> #include <wolfssl/wolfcrypt/rsa.h>
int wc_RsaFunction(const byte *in, word32 inLen, byte *out, word32 *outLen, int type, RsaKey *key); int wc_RsaFunction(const byte* in, word32 inLen, byte* out, word32* outLen, int type, RsaKey* key, WC_RNG* rng);
#endif #endif
#endif /* FREESCALE_LTC_TFM */ #endif /* FREESCALE_LTC_TFM */