kaleb-himes 0fb514fa41 Remove references to WOLFSSL_SP_CACHE_RESISTANT as it is always on 7 months ago
..
README.md 83dca07421 Updated support for Silicon Labs Simplicity Studio and the ERF32 Gecko SDK. Fix ECC unused functions with HW crypto like SE. ZD 15874. 10 months ago
include.am 83dca07421 Updated support for Silicon Labs Simplicity Studio and the ERF32 Gecko SDK. Fix ECC unused functions with HW crypto like SE. ZD 15874. 10 months ago
test_wolf.c abe1bce914 Fix `silabs_ecc_export_public` to set the signing only flag. Added tests cases for import of private and public only verify in the SiLabs example. 9 months ago
user_settings.h 0fb514fa41 Remove references to WOLFSSL_SP_CACHE_RESISTANT as it is always on 7 months ago

README.md

Silicon Labs Simplicity Studio

Tested with ERF32xG21 Starter Kit and Gecko SDK v3.2.2 and v4.2.3.

Simplicity Studio Example

Based on cli_kernel_freertos.

  • Create a new example project for your board based on the CLI FreeRTOS example.
  • Create a new wolfssl and put wolfSSL into it. Tip: Use ./scripts/makedistsmall.sh to produce a reduced bundle.
  • Exclude (or delete) all .S and asm.c files.
  • Exclude (or delete) directory not used (only the src, wolfcrypt and wolfssl directory are used).
  • Add the IDE/SimplicityStudio/user_settings.h into wolfssl/user_settings.h.
  • Add the IDE/SimplicityStudio/test_wolf.c to the project root.
  • Add C preprocessor WOLFSSL_USER_SETTINGS.
  • Add C include path wolfssl.
  • Disable UART flow control: config/sl_iostream_usart_vcom_config.h -> #define SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE usartHwFlowControlNone
  • Adjust stack and heap to larger size 12KB:
    • Adjust the CLI stack. Edit config/sl_cli_config_inst.h to #define SL_CLI_INST_TASK_STACK_SIZE (12*1024)
    • Adjust the FreeRTOS heap. Edit config/FreeRTOSConfig.h to #define configTOTAL_HEAP_SIZE (12*1024)
  • Add the following code to cli.c:

    extern void wolf_test(sl_cli_command_arg_t *arguments);
    extern void wolf_bench(sl_cli_command_arg_t *arguments);
    
    static const sl_cli_command_info_t cmd_wolf_test =
    SL_CLI_COMMAND(wolf_test, "Run wolfCrypt tests", "",
                 { SL_CLI_ARG_WILDCARD, SL_CLI_ARG_END, });
    
    static const sl_cli_command_info_t cmd_wolf_bench =
    SL_CLI_COMMAND(wolf_bench, "Run wolfCrypt benchmarks", "",
                 { SL_CLI_ARG_WILDCARD, SL_CLI_ARG_END, });
    
    static sl_cli_command_entry_t a_table[] = {
    { "wolf_test", &cmd_wolf_test, false },
    { "wolf_bench", &cmd_wolf_bench, false },
    { NULL, NULL, false },
    };
    
  • If running wolfCrypt benchmark enable printf float

    • C/C++ Build Settings -> Settings -> Tool Settings -> GNU ARM C Linker -> General -> C Library "Printf float".

SE Manager

For SE Manager cryptography hardware acceleration see /wolfcrypt/src/port/silabs/README.md.

Enabled with WOLFSSL_SILABS_SE_ACCEL. Requires the "SE Manager" component to be installed.

Benchmarks with SE Accel

Tested on ERF32xG21 Starter Kit (Cortex M33 at 80 MHz) and Gecko SDK v3.2.2 (-Os).

Benchmark Test
wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each)
RNG                        200 KiB took 1.057 seconds,  189.215 KiB/s
AES-128-CBC-enc              6 MiB took 1.000 seconds,    5.542 MiB/s
AES-128-CBC-dec              6 MiB took 1.000 seconds,    5.518 MiB/s
AES-192-CBC-enc              5 MiB took 1.001 seconds,    5.415 MiB/s
AES-192-CBC-dec              5 MiB took 1.001 seconds,    5.390 MiB/s
AES-256-CBC-enc              5 MiB took 1.004 seconds,    5.301 MiB/s
AES-256-CBC-dec              5 MiB took 1.001 seconds,    5.268 MiB/s
AES-128-GCM-enc              5 MiB took 1.003 seconds,    4.844 MiB/s
AES-128-GCM-dec              5 MiB took 1.003 seconds,    4.625 MiB/s
AES-192-GCM-enc              5 MiB took 1.002 seconds,    4.751 MiB/s
AES-192-GCM-dec              5 MiB took 1.002 seconds,    4.532 MiB/s
AES-256-GCM-enc              5 MiB took 1.002 seconds,    4.654 MiB/s
AES-256-GCM-dec              4 MiB took 1.000 seconds,    4.443 MiB/s
AES-128-GCM-enc-no_AAD       5 MiB took 1.004 seconds,    4.888 MiB/s
AES-128-GCM-dec-no_AAD       5 MiB took 1.001 seconds,    4.658 MiB/s
AES-192-GCM-enc-no_AAD       5 MiB took 1.000 seconds,    4.785 MiB/s
AES-192-GCM-dec-no_AAD       5 MiB took 1.000 seconds,    4.565 MiB/s
AES-256-GCM-enc-no_AAD       5 MiB took 1.004 seconds,    4.693 MiB/s
AES-256-GCM-dec-no_AAD       4 MiB took 1.003 seconds,    4.479 MiB/s
GMAC Small                   5 MiB took 1.000 seconds,    4.653 MiB/s
CHACHA                       2 MiB took 1.012 seconds,    1.809 MiB/s
CHA-POLY                     1 MiB took 1.006 seconds,    1.189 MiB/s
POLY1305                     5 MiB took 1.004 seconds,    5.082 MiB/s
SHA                          8 MiB took 1.000 seconds,    7.812 MiB/s
SHA-256                      8 MiB took 1.000 seconds,    8.032 MiB/s
HMAC-SHA                     7 MiB took 1.000 seconds,    7.056 MiB/s
HMAC-SHA256                  7 MiB took 1.002 seconds,    7.237 MiB/s
RSA     2048   public        30 ops took 1.022 sec, avg 34.067 ms, 29.354 ops/sec
RSA     2048  private         2 ops took 2.398 sec, avg 1199.000 ms, 0.834 ops/sec
ECC   [      SECP256R1]   256  key gen       172 ops took 1.004 sec, avg 5.837 ms, 171.315 ops/sec
ECDHE [      SECP256R1]   256    agree       186 ops took 1.005 sec, avg 5.403 ms, 185.075 ops/sec
ECDSA [      SECP256R1]   256     sign       174 ops took 1.007 sec, avg 5.787 ms, 172.790 ops/sec
ECDSA [      SECP256R1]   256   verify       160 ops took 1.003 sec, avg 6.269 ms, 159.521 ops/sec
Benchmark complete
Benchmark Test: Return code 0